三种资源包材质路径是扁平的,而生物的路径是嵌套的,但这还不是最麻烦的
物品、方块和画作的材质文件都只在各自的根目录下。而生物的材质文件则位于以生物名称命名的文件夹中——并且大多数生物的文件夹中包含多个文件,因此只覆盖一个文件会导致部分材质缺失。
在资源包中覆盖材质,意味着将 PNG 文件放置在游戏查找的精确路径下。 对于四种常见类型中的三种,其路径是完全规则的。但对于第四种,它并不规则,而且这种不规则性比初看起来更糟。
四种路径
assets/minecraft/textures/item/<name>.png
assets/minecraft/textures/block/<name>.png
assets/minecraft/textures/painting/<name>.png
assets/minecraft/textures/entity/<name>/<name>.png ← note the folder
物品、方块和画作的材质文件都位于一个共享目录中。而生物的材质文件则位于一个以生物名称命名的独立目录中,该目录通常也包含一个以生物名称命名的文件。因此,僵尸的材质路径是 entity/zombie/zombie.png,而不是 entity/zombie.png。
另请注意,生物的材质文件位于 entity/ 下,而不是 mob/ 下——该文件夹以代码概念而非游戏概念命名。
真正的问题是生物通常不止一个文件
一旦你见过,这种嵌套结构就很容易记住。真正导致覆盖失败的原因是该文件夹中还包含其他内容。
经确认,用单个 PNG 文件替换生物材质仅适用于以下十种生物:
僵尸 · 骷髅 · 苦力怕 · 绵羊 · 蜘蛛 · 末影人 · 狼 · 女巫 · 烈焰人 · 村民
其他所有生物的材质可能存储在不同的子文件夹中,或者分散在多个文件中——例如幼年变种、驯服变种、颜色变种。一匹马的材质不止一张图片。一只猫的材质也不止一张图片。在这些情况下,替换一个文件只会改变生物的一种状态,而其他状态保持不变,这在游戏中看起来就像“我的资源包只应用了一半”。
这种失败模式值得深入理解:错误的路径根本不会显示材质变化,而不完整的路径集则会显示部分变化——第二种情况更难诊断,因为资源包显然是有效的。
优先级是靠前的最高,这与 zip 文件的工作方式不同
当资源包合并时,列表中排在最前面的资源包会赢得路径冲突。索引 0 具有最高优先级。
这一点值得明确说明,因为它颠覆了人们从文件分层中带来的心智模型,在文件分层中,最后写入的内容会生效。在这里,列表中第一个资源包的 item/diamond_sword.png 版本会保留;其下方的所有内容只会填充上方资源包未声明的路径。
关于资源包身份的两个细节
pack.png 是图标,位于 zip 文件的根目录,而不是 assets/ 下。它被裁剪为 64 × 64——非方形图像会被调整大小而不是添加黑边,因此按 16:9 设计的图标会变形而不是填充。
资源包名称中的颜色代码是字面文本。 § 字符会按原样输入到 pack.mcmeta 中,Minecraft 会在显示时渲染它们:§a 绿色,§c 红色,§b 青色,§e 黄色,§d 粉色,§l 粗体,§r 重置。没有转义步骤,也没有涉及 JSON 文本组件——纯字符串中的原始节号就是整个机制。