# 额外的资源文件
Minecraft经常迭代版本,如果玩家经常更新版本的话,不可避免地要下载很多资源文件,我们知道很多时候这些资源是重复的,不需要每更新一次就下载一次。Minecraft开发团队显然也知道这一点,于是他们把部分占用空间较大的一部分资源文件从版本的jar包中给独立出去了。它们被放在了.minecraft/assets文件夹下,主要包括音效和语言文件等。即便它们丢失,也不会对游戏的正常启动造成影响,顶多没有声音或者没有相应语言的翻译(英文语言文件en_us.lang是放在jar包下的)。
圈内笑话
打开这个文件夹你就会发现它和一个正常的资源包的结构完全不同。绝大部分资源文件名字变成了哈希值,被放在了一个叫做 objects 的文件夹下,根本无从下手。
# 目录文件
为了弄清楚这些文件的真面目,让我们打开 .minecraft/assets/indexes 文件夹,找到你在使用的版本的 json 文件。我的示例是 1.15.2 版本,所以我要打开 1.15.json。
提示
我用IDEA展示这个文件只是为了展示的更清楚。因为原本的文件被压缩成了一行,几乎没什么可读性,我用IDEA的格式化功能(快捷键Ctrl
+Alt
+L
)把它展开了。
撇去json的格式,我们搬出其中的一小段来进行解释:
"icons/icon_16x16.png": {
"hash": "bdf48ef6b5d0d23bbb02e17d04865216179f510a",
"size": 3665
}
这是整个文件的第一个有价值的片段,我们看到了一个文件的路径,我们看到了一个 hash 值,和一个 size 值。它们的含义是什么?
这里的文件路径是相对于版本的 jar 包的 assets 文件夹的路径,同样也就是相对于资源包的 assets 文件夹的路径。如果我们在我们的资源包下新建一个 icons 文件夹,在 icons 文件夹下放上一张名为 icon_16x16.png 的图片,那么理所应当原本的这张图片将会被我们的图片所覆盖。
# 根据信息寻找文件
那我们怎么找到原本的这张图片?通过这里给出的hash值寻找,这里给出的hash值的前两位是bd,那我们进入.minecraft/assets/objects/文件夹,找到名为bd的子文件夹,不出意外的话你会在里面找到一个名字和这个hash值一样的文件。
我们知道它原本应该叫icon_16x16.png,为了防止我们正常的游戏出现问题,让我们复制一份,放到资源包中。
把文件名改为icon_16x16.png,我们可以看到它的真面目了。
注意
由于mc的图标只会在游戏刚启动时设置一遍,那时候资源包还未被加载,所以无法从资源包修改原版图标。但是音乐等文件是可以通过资源包覆盖的。(在2021/1/19之前我一直认为资源包可以修改图标,直到我亲自尝试了一遍,之前受到误导的各位,实在是对不起!)
警告
不要直接修改这些文件,即便你必须要修改,也请使用资源包。Minecraft 会在连接网络的时候根据 index 文件夹里的 json 文件还原你所做的更改。即便有办法绕过文件哈希值和大小检测 (opens new window),也仍然强烈建议不要直接修改这些文件,尤其是要将其分发出去时,发布擅自修改的 Minecraft 资源文件是违反 EULA (opens new window) 的)