在本指南中,你将制作一个红宝石方块:一个微微发光的闪亮红色方块,需要挖一会儿,破坏后会掉落它自己。这是制作方块的“Hello World”,再复杂的方块也是从这里起步的。
有两种做法。快捷方式在手机上几分钟就能搞定;手动方式则能让你弄懂每个文件的作用。
快捷方式:GodCraft
GodCraft 会帮你生成方块、纹理、名称和战利品。你完全不用碰 JSON 文件。
- 打开工坊,在你的附加包中添加一个方块。
- 在像素编辑器中绘制各个面,或者从原版纹理开始重新上色。
- 设置挖掘所需时间、发光亮度以及掉落物。
- 点击导出。GodCraft 会写好清单文件、UUID 和语言文件,并生成一个
.mcaddon。
想知道背后发生了什么?继续往下看。
手动制作
你需要一个已经搭建好的行为包(BP)和资源包(RP)。如果还没有,请先按照项目搭建操作。我们使用命名空间 myname,请在所有地方把它换成你自己的简称。
下面是你会用到的全部文件:
| 文件 | 包 | 作用 |
|---|---|---|
blocks/ruby_block.json | BP | 方块是什么、有什么行为 |
loot_tables/blocks/ruby_block.json | BP | 掉落什么 |
textures/blocks/ruby_block.png | RP | 图片 |
textures/terrain_texture.json | RP | 给图片起简称 |
blocks.json | RP | 方块发出的声音 |
texts/en_US.lang | RP | 玩家看到的名称 |
第 1 步:方块文件
在行为包中创建这个文件:
{
"format_version": "1.26.50",
"minecraft:block": {
"description": {
"identifier": "myname:ruby_block",
"menu_category": {
"category": "construction"
}
},
"components": {
"minecraft:destructible_by_mining": {
"seconds_to_destroy": 3
},
"minecraft:destructible_by_explosion": {
"explosion_resistance": 6
},
"minecraft:friction": 0.4,
"minecraft:light_emission": 4,
"minecraft:map_color": "#9b1c2b",
"minecraft:geometry": "minecraft:geometry.full_block",
"minecraft:material_instances": {
"*": {
"texture": "ruby_block",
"render_method": "opaque"
}
},
"minecraft:loot": "loot_tables/blocks/ruby_block.json"
}
}
}description 部分说明方块是谁:
identifier是方块的 ID,由你的命名空间和名字组成。你会在/give @s myname:ruby_block这样的命令中输入它。menu_category选择创造模式物品栏的标签页。可选值有construction、nature、equipment、items和none(隐藏)。
components 部分说明它如何表现:
minecraft:destructible_by_mining:seconds_to_destroy是空手挖掘所需的时间。类似石头的方块一般在 1.5 到 3 之间。minecraft:destructible_by_explosion:explosion_resistance越大,TNT 和苦力怕就越难炸掉它。minecraft:friction:0 到 0.9 之间的数字。越大越不滑;类似冰的方块用较小的值。minecraft:light_emission:0(不发光)到 15(和火把或荧石一样亮)之间的整数。minecraft:map_color:方块在地图上显示的颜色,用十六进制颜色表示。minecraft:geometry:形状。minecraft:geometry.full_block是普通立方体,所以不需要模型文件。minecraft:material_instances:哪个面用哪张纹理。键*表示“所有面”。texture是你将在第 3 步定义的简称。minecraft:loot:方块被破坏时使用的战利品表。
不同的面
想让顶面和侧面不一样,像草方块那样?在 material_instances 中的 * 旁边再加几个键,比如 up、down、north、south、east 和 west。没有列出的面会使用 *。
第 2 步:纹理
画一张 16x16 像素的 PNG,在资源包中保存为 RP/textures/blocks/ruby_block.png。
第一次接触像素画?像素纹理指南讲解了尺寸、透明度和明暗处理。
第 3 步:给纹理起个简称
方块不会直接指向 PNG 文件,而是使用 terrain_texture.json 中的简称。如果你的包里已经有这个文件,就在 texture_data 中添加 ruby_block 条目;如果没有,就创建它:
{
"resource_pack_name": "myname",
"texture_name": "atlas.terrain",
"texture_data": {
"ruby_block": {
"textures": "textures/blocks/ruby_block"
}
}
}注意路径末尾没有 .png。游戏会自己找到文件。
第 4 步:声音
资源包的 blocks.json 告诉游戏,在方块上行走、放置或破坏方块时播放哪套声音:
{
"format_version": "1.21.40",
"myname:ruby_block": {
"sound": "stone"
}
}原版方块常用的其他声音组还有 wood、glass、metal、grass、sand、cloth、copper 和 deepslate。
第 5 步:名称
没有名称时,游戏会显示类似 tile.myname:ruby_block.name 的文字。在语言文件中加入这一行:
tile.myname:ruby_block.name=Ruby Block第 6 步:战利品
战利品表决定掉落什么。这个表会掉落方块本身,一次一个:
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "myname:ruby_block"
}
]
}
]
}把 name 改成任意物品 ID,比如 minecraft:diamond,方块就会掉落别的东西。
测试你的方块
- 按照导出与安装导出并安装两个包,然后在世界中启用它们。
- 打开创造模式物品栏,在建筑标签页中查找,或者运行
/give @s myname:ruby_block。参见 /give。 - 在夜里放下它:它应该会发出柔和的光。
- 切换到生存模式挖掉它。应该需要几秒钟,并掉落它自己。
常见问题
紫黑格子
游戏找不到纹理。检查 material_instances 中的简称是否和 terrain_texture.json 中的键完全一致,以及 terrain_texture.json 中的路径是否和文件的实际位置一致(不带 .png)。
- 物品栏里没有这个方块。 检查
menu_category不是none,并且行为包已启用。 - 方块名称很奇怪。
.lang中的那一行必须使用包含命名空间的完整 ID。 - 方块什么都不掉。 检查
minecraft:loot的路径是否以loot_tables/开头,并且和文件名一致。
更多解决方法见故障排查。
下一步
- 在参考资料中浏览所有方块组件,从材质实例开始。
- 在原版方块中看看 Mojang 是如何制作自己的方块的。
- 想做点有生命的东西?试试你的第一个自定义生物。