我玩Minecraft的时候比较喜欢玩模组,因为模组带来的玩法是超越原版的,于是我就有自己制作模组的想法。

Minecraft模组有两种阵营:forge和fabric。
我之前用java写过fabric模组,虽然fabric正在发展,很多人也比较看好fabric模组,因为fabric有个优点,模组更新速度快,刚出现的新版本就有与之相对应的模组。
forge是一个老牌的模组拓展了,相比于正在发展的fabric,已经相当成熟了,甚至还有了自己专属的“事件(event)”写法,可以说玩法更多。
简单来讲,fabric更新快,forge玩法多。我之前用java写过fabric模组,但好长时间没有去动,懒得去写了。

今天介绍一种新的拓展玩法,Minecraft原生数据包,当然这种拓展玩法限制比较大,但数据包允许玩家添加及修改函数、战利品表、世界结构、进度、合成、标签、维度和谓词。
熟悉一下数据包
制作数据包
首先在datapacks文件夹下创建一个文件夹,名字随便就是不要中文,文件夹名即是数据包名。
数据包结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| |--(数据包名字) | |--pack.mcmeta | |--pack.png | |--data | | |--(命名空间) | | | |--advancements | | | | |--(进度名称).json | | | |--functions | | | | |--(函数名称).mcfunction | | | |--loot_tables | | | | |--(战利品表名称).json | | | |--predicates | | | | |--(战利品表谓词名称).json | | | |--structures | | | | |--(结构名称).nbt | | | |--recipes | | | | |--| | | | |--(配方名称).json | | | |--item_modifiers (物品修饰器名称).json | | | |--tags | | | | |--blocks | | | | | |--(标签名称).json | | | |--entity_types | | | | | |--(标签名称).json | | | |--items | | | | | |--(标签名称).json | | | |--fluids | | | | | |--(标签名称).json | | | |--functions | | | | | |--(标签名称).json | | | |--dimension_type | | | | |--(维度类型名称).json | | | |--dimension | | | | |--(维度名称).json | | | |--worldgen | | | | |--biome | | | | | |--(生物群系).json | | | | |--configured_carver | | | | | |--(雕刻器).json | | | | |--configured_feature | | | | | |--(地物).json | | | | |--configured_structure_feature | | | | | |--(结构特征).json | | | | |--configured_surface_builder | | | | | |--(地表生成器).json | | | | |--noise_settings | | | | | |--(噪声设置).json | | | | |--processor_list | | | | | |--(方块处理器).json | | | | |--template_pool | | | | | |--(拼图池).json
|
打开新建的数据包文件夹,新建一个文本文件,重命名成pack.mcmeta。
这个文件是Minecraft识别该数据包,使用的语法格式是json。
可以先写下以下内容:
1 2 3 4 5 6
| { "pack": { "pack_format": 6, "description": "教程数据包" } }
|
pack_format是版本号,如果Minecraft是1.17快照,pack_format应该为7。如果数据包用于1.16.2~1.16.4版本,pack_format应该设为6。如果数据包用于1.15~1.16.1,pack_format应该为5,如果数据包用于1.13~1.14,则 pack_format应该为4。
description是数据包描述,随便写写就可以。可在数据包的描述和名称中使用“§”符号(Minecraft格式化代码)。
命名空间
我们遇到的很多的计算机语言都会有命名空间,这主要是防止命名相同,Minecraft也同样如此,如果你从jei看物品时会有这样命名空间:物品的简述。
所以我们可以在data下,新建一个文件夹,当成一个命名空间,然后接下来的操作全部在这个文件夹下完成。
一个数据包下可以多个命名空间,所以可以创建一个及以上的文件夹,用来当作命名空间。
制作配方
配方主要涉及到玩家的合成和锻炼物体。
首先在命名空间文件夹下创建一个新的文件夹,名字为recipes,在这个文件夹(或它的子文件夹)之下新建配方文件 配方名.json
有序配方
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| { "type": "minecraft:crafting_shaped", "pattern": [ "123", "231", "312" ], "key": { "1": { "item": "(物品命名空间ID)" }, "2": { "item": "(物品命名空间ID)" }, "3": { "item": "(物品命名空间ID)" } }, "result": { "item": "(物品命名空间ID)", "count": 5 } }
|
type所对应的minecraft:crafting_shaped说明此配方为有序配方。
pattern是一个列表,最好写成3*3的形状,每个位置放一个字符,这个字母是用来替代的物品。
key 是一个对象,规定了pattern中的字符所代表的物品。可以用item 后接物品ID,也可以用tag后接数据包标签,点击此链接可以查看物品ID。
result 是一个对象,其中item规定了最终合成的是何种物品。
count是一次合成成品的数量。
示例:
煤炭块合成钻石。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "type": "crafting_shaped", "pattern": [ "111", "111", "111" ], "key": { "1": { "item": "minecraft:coal_block" } }, "result": { "item": "minecraft:diamond", "count": 1 } }
|
(未完待续,长期更新)
参考文章:
https://minecraft-zh.gamepedia.com/%E6%95%99%E7%A8%8B/%E5%88%B6%E4%BD%9C%E6%95%B0%E6%8D%AE%E5%8C%85?variant=zh