森罗万象
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
教程
OptiFine文档
Blockbench文档
论坛版 (opens new window)
下载示例 (opens new window)
  • 准备
  • 基础
  • 动态纹理(前篇)
  • 模型和渲染
  • 额外的资源文件
    • 目录文件
    • 根据信息寻找文件
  • 音效
  • 语言和文字

  • OptiFine与MCPatcher
  • CTM
  • CIT
  • CEM
  • 动态纹理(后篇)
  • 光与色

  • 环境
  • GUI
  • PBR纹理
  • 着色器/光影
  • 附录

# 额外的资源文件

Minecraft经常迭代版本,如果玩家经常更新版本的话,不可避免地要下载很多资源文件,我们知道很多时候这些资源是重复的,不需要每更新一次就下载一次。Minecraft开发团队显然也知道这一点,于是他们把部分占用空间较大的一部分资源文件从版本的jar包中给独立出去了。它们被放在了.minecraft/assets文件夹下,主要包括音效和语言文件等。即便它们丢失,也不会对游戏的正常启动造成影响,顶多没有声音或者没有相应语言的翻译(英文语言文件en_us.lang是放在jar包下的)。

圈内笑话

打开这个文件夹你就会发现它和一个正常的资源包的结构完全不同。绝大部分资源文件名字变成了哈希值,被放在了一个叫做 objects 的文件夹下,根本无从下手。

# 目录文件

为了弄清楚这些文件的真面目,让我们打开 .minecraft/assets/indexes 文件夹,找到你在使用的版本的 json 文件。我的示例是 1.15.2 版本,所以我要打开 1.15.json。

image-20200708102209703

提示

我用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值一样的文件。

image-20200706141343682

我们知道它原本应该叫icon_16x16.png,为了防止我们正常的游戏出现问题,让我们复制一份,放到资源包中。

image-20200706142144723

把文件名改为icon_16x16.png,我们可以看到它的真面目了。

image-20200706142651716

注意

由于mc的图标只会在游戏刚启动时设置一遍,那时候资源包还未被加载,所以无法从资源包修改原版图标。但是音乐等文件是可以通过资源包覆盖的。(在2021/1/19之前我一直认为资源包可以修改图标,直到我亲自尝试了一遍,之前受到误导的各位,实在是对不起!)

警告

不要直接修改这些文件,即便你必须要修改,也请使用资源包。Minecraft 会在连接网络的时候根据 index 文件夹里的 json 文件还原你所做的更改。即便有办法绕过文件哈希值和大小检测 (opens new window),也仍然强烈建议不要直接修改这些文件,尤其是要将其分发出去时,发布擅自修改的 Minecraft 资源文件是违反 EULA (opens new window) 的)

← 蝶舞——盆栽艺术 替换现有的音效 →