我玩Minecraft的时候比较喜欢玩模组,因为模组带来的玩法是超越原版的,于是我就有自己制作模组的想法。
Minecraft模组有两种阵营:forge和fabric。
我之前用java写过fabric模组,虽然fabric正在发展,很多人也比较看好fabric模组,因为fabric有个优点,模组更新速度快,刚出现的新版本就有与之相对应的模组。
forge是一个老牌的模组拓展了,相比于正在发展的fabric,已经相当成熟了,甚至还有了自己专属的“事件(event)”写法,可以说玩法更多。
简单来讲,fabric更新快,forge玩法多。我之前用java写过fabric模组,但好长时间没有去动,懒得去写了。
今天介绍一种新的拓展玩法,Minecraft原生数据包,当然这种拓展玩法限制比较大,但数据包允许玩家添加及修改函数、战利品表、世界结构、进度、合成、标签、维度和谓词。
熟悉一下数据包
.minecraft路径下是有一个saves文件夹,这个是存档文件夹,用来存储游戏的存档。随便打开一个存档文件夹,会有一个datapacks文件夹,这个是用来存放数据包的,就和加模组一样,数据包放在这个位置就可以了。
数据包应该是个.zip的压缩文件,当然解压出来也是没问题,所以在制作的时候可以不用压缩,直接在这个路径下写,这样相对比较方便。
制作数据包首先在datapacks文件夹下创建一个文件夹,名字随便就是不要中文,文件夹名即是数据包名。
数据包结构:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051|--(数据包名字)| |--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
创建MCMETA文件打开新建的数据包文件夹,新建一个文本文件,重命名成pack.mcmeta。
这个文件是Minecraft识别该数据包,使用的语法格式是json。
可以先写下以下内容:
123456{ "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
有序配方1234567891011121314151617181920212223{ "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是一次合成成品的数量。
示例:
煤炭块合成钻石。
1234567891011121314151617{ "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