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

3e4ecdbc429b46dab3324eb5dde85ac7

Minecraft模组有两种阵营:forge和fabric。

我之前用java写过fabric模组,虽然fabric正在发展,很多人也比较看好fabric模组,因为fabric有个优点,模组更新速度快,刚出现的新版本就有与之相对应的模组。

forge是一个老牌的模组拓展了,相比于正在发展的fabric,已经相当成熟了,甚至还有了自己专属的“事件(event)”写法,可以说玩法更多。

简单来讲,fabric更新快,forge玩法多。我之前用java写过fabric模组,但好长时间没有去动,懒得去写了。

2021-1-12-15-20

今天介绍一种新的拓展玩法,Minecraft原生数据包,当然这种拓展玩法限制比较大,但数据包允许玩家添加及修改函数战利品表、世界结构进度合成标签维度谓词

熟悉一下数据包

  • .minecraft路径下是有一个saves文件夹,这个是存档文件夹,用来存储游戏的存档。随便打开一个存档文件夹,会有一个datapacks文件夹,这个是用来存放数据包的,就和加模组一样,数据包放在这个位置就可以了。

  • 数据包应该是个.zip的压缩文件,当然解压出来也是没问题,所以在制作的时候可以不用压缩,直接在这个路径下写,这样相对比较方便。

制作数据包

首先在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

创建MCMETA文件

打开新建的数据包文件夹,新建一个文本文件,重命名成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