观前提醒
本教程适用于 Minecraft 1.20.1,在其他版本不保证完全适用。
本教程仅介绍方块与物品相关的制作。
准备工作
如需要更改或绘制纹理,就一个可以编辑 png 文件的软件。推荐使用 Photoshop、Aseprint 或 paint.net。
*注:Aseprint可通过前往Github自行构建或前往Steam购买,或者可以使用其fork:LibreSprite。
如需要更改模型,更改方块选择时的状态,修改物品位置等,就需要一个可以编辑 json 文件以及编辑 json 来进行建模的软件。推荐使用 Visual Studio Code 和 Blockbench。
如需要将资源包打包成压缩文件或通过解压原版 jar 文件来观察其文件结构或获取纹理,就需要一个可以压缩文件的软件。推荐使用 Bandzip。
文件结构 & 创建资源包
通过解压缩原版 Jar 文件,我们可以发现,assets 文件夹中存在一个名为 minecraft 的文件夹,这便是原版 mc 的命名空间。其中包含绝大部分游戏中的纹理、模型等文件。
如需要更改方块与物品的纹理或模型,我们通常只需要保留以下文件夹:
blockstates 父模型文件夹(方块状态映射文件夹),决定不同状态的方块(如朝向)所使用的模型;
models 模型文件夹,决定物品或方块所使用的模型或纹理;
textures 纹理文件夹,决定物品或方块的纹理。
接下来,我们开始创建一个新的资源包。
首先,打开版本文件夹中的资源包文件夹(resourcepacks),或通过 选项 > 资源包 > 打开资源包文件夹 来打开。
创建一个新的文件夹,命名随意。
资源包文件夹一般由 2 至 3 个文件组成,结构如下:
pack.mcmeta:资源包描述文件,包含资源包在资源包选择界面中的简介,资源包的兼容版本等。
pack.png:可选,为资源包的封面。
assets:即上文所介绍的文件夹,包含绝大部分游戏中的纹理、模型等文件。
接下来,我们打开 assets 文件夹,新建一个名为 minecraft 的文件夹,这是原版 mc 中的命名空间,可以理解为其包含文件的所属项目的名字,具体可前往 Minecraft 中文 Wiki 查看,本文不多赘述。
自行创建或粘贴从原版 Jar 粘贴来的 3 个文件夹(blockstates、models、textures)
检查是否无误,具体结构如下所示:
pack.mcmeta
pack.png(可选)
assets
minecraft
blockstates(可选)
models(可选)
textures(可选)
pack.mcmeta 文件
本文仅介绍如何填写简介与版本号等常用功能,如果想了解其更深层的用法,请前往 Minecraft 中文 Wiki。
模板:
{ "pack": { "pack_format": 1, "description": "test" }} *由于MCMOD中代码格式无 JSON,所以格式填的是 Javasript,但实际格式为JSON。
其中 "pack_format" 为设定的资源包的适用版本(即资源包版本号),1为所填的值,其格式为JSON中的键值对。
下面列出了一些常用的资源包版本号:
1.16.5:6;
1.17:7;
1.18.2:8;
1.19.2:9;
1.19.4:13;
1.20.1:15;
1.20.4:22;
1.21.1:34。
注意:资源包版本号如与实际游玩版本不同会发出警告,这个警告只是提示,一般忽略即可。
"description" 为资源包在资源包列表中的描述,可使用格式化文本,资源包列表中最多显示两行。
pack.png 文件
即资源包列表中显示的资源包图标。
可选,如不添加则显示原版默认图标。
如添加,最好为正方形。
方块与物品的模型、纹理的工作原理
修改物品和方块的模型之前,我们还需要了解它们是如何工作的。
blockstates 文件夹
首先,打开 blockstates 文件夹,它负责决定所有每个方块不同状态所使用的模型(方块状态映射)
注意:本文只对 blockstates 的 variants 做介绍,如想了解另一种方块状态映射(multipart)请前往 Minecraft 中文 Wiki 查看。
就以铁砧举例:(位于 assets/minecraft/blockstates/anvil.json)
注意:json 文件请勿使用中文等特殊字符命名,否则会导致在进行打包后游戏无法识别的问题。建议使用小写英文字母与下划线进行命名。
{ "variants": { "facing=east": { "model": "minecraft:block/anvil", "y": 270 }, "facing=north": { "model": "minecraft:block/anvil", "y": 180 }, "facing=south": { "model": "minecraft:block/anvil" }, "facing=west": { "model": "minecraft:block/anvil", "y": 90 } }}其中 "variants" 为直接指定方块状态的方块状态映射。
并且,"variants" 还包含多个 facing(铁砧朝向),这就是铁砧的状态,可以在 F3 中找到:
可以看到,此时铁砧的 facing 为 south。
重新查看上文铁砧的方块状态代码代码,其中 "facing=south" 时(即候选模型)使用的模型就是 "model": "minecraft:block/anvil",也就此时图片中铁砧的模型。
查看代码中铁砧的其他状态,我们可以看到它们都多出了一个 "y":<数值>,这时模型就会相对 y 轴旋转<数值>度(必须为 90° 的倍数)。
models 文件夹
接下来,打开 models 文件夹,它负责决定物品或方块所使用的模型。
其中包含 2 个文件夹:
item:决定物品所使用的模型(直接受游戏调用);
block:决定方块所使用的模型(在 blockstates 中被调用)。
接下来,我们使用 Blockbench 打开金合欢木船的 model(json)文件(位于 assets/minecraft/models/item/acacia_boat.json)
*注:只是推荐使用 Blockbench 进行编辑,当然如果你想手搓 JSON 文件也不是不行。
我们可以观察到左下角就是调用的纹理。
texture 文件夹
打开 texture 文件夹,它负责存储模型所调用的纹理。
其中包含多个个文件夹,我们只介绍部分:
block:包含所有方块的纹理;
entity:包含大部分实体与方块实体的纹理;
environment:包含太阳、月亮等纹理;
font:包含原版字体纹理;
gui:包含原版 GUI 纹理;
item:包含所有物品纹理;
map:包含地图的界面等纹理;
misc:包含带上南瓜头后的遮罩纹理等;
mob effect:效果图标的纹理;
models:盔甲的纹理;
painting:画的纹理;
particle:粒子效果的纹理。
其中的纹理文件为 png 格式。
注意:png 文件请勿使用中文等特殊字符命名,否则会导致在进行打包后游戏无法识别的问题。建议使用小写英文字母与下划线进行命名。
打包与分发
资源包可以多种方式在资源包文件夹被游戏识别,其中常见的两种方式:
zip压缩文件:可使用压缩软件将文件夹压缩为zip压缩文件。
注意:如文件夹中文件命名包含中文等特殊字符,会导致压缩为zip文件无法被识别。
文件夹:可直接将资源包以文件夹形式存储。
当然,我们也可以在与 assets 同级的文件夹中放入一些想说的话或者协议信息等:
pack.mcmeta
pack.png(可选)
assets
想说的话.md 或 README.txt 等(可选)