本篇教程的视频:

本篇教程源代码

GitHub地址:TutorialMod-Recipe-1.21

介绍

在Minecraft中,配方可以将初级原材料制作成各种物品和方块,亦或是工具、武器装备等等。它属于数据文件,游戏源文件的路径为data/minecraft/recipe(注意1.21版本不带s)

在游戏中,有这多种不同类型的配方,实际上是对应不同的方块实体的配方,比如工作台对应有有序合成和无序合成配方,熔炉、高炉、营火又有各自对应的配方,这个在本篇教程的后面会详细讲解

配方的相关参数也可以在Wiki上查看

编写配方

和战利品列表一样,这里也没有代码,我们只需要写json文件就可以了,游戏原版的文件路径也在上方列出来了,可以自行查阅

有序合成

有序合成是指有顺序的合成配方,也就是说你合成某个物品的时候,需要按照一定的顺序来摆放你的材料才能合成成功。
比如工具中的斧头镐子锄头等等,它们必须按照顺序放木棍和其他材料才能合成。

这里我们可以举个例子,路径是data/tutorialmod/recipe/ice_ether_block.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "ice_ether",
"key": {
"#": {
"item": "tutorialmod:ice_ether"
}
},
"pattern": [
"###",
"###",
"###"
],
"result": {
"count": 1,
"id": "tutorialmod:ice_ether_block"
}
}

这是最普遍的有序合成配方,也就是9个材料合成一个方块,常见的像钻石块、煤炭块等等

type对应的是配方的类型,这里的crafting_shaped指代有序合成类型

category是配方所属的类别,misc指杂项,另外还有building(建筑材料类)、redstone(红石类)、equipment(工具装备类)这几类,不要写错了,不然会报错无法识别。食物类的配方属于misc

group是配方所属的组,可写可不写,默认为空

keypattern放一起讲,它也是有序合成和无序合成区别最大的地方。
pattern是配方的排列方式,这个就是物品的工作台上的摆放方式,#代表一种物品(可以是任意单字符),空格代表空槽位(当然这里没有)。
keypattern中的字符对应的物品,item是物品(包括方块)的id(命名空间 + 注册名)

result是合成后的物品,count是合成的数量,id是合成后的物品的id(命名空间 + 注册名)

无序合成

无序合成是指没有顺序的合成配方,也就是说你合成某个物品的时候,随便堆放你的材料就可以合成成功。
比如木板合成木棍,放在九宫格的任意一个位置都可以合成成功

这里我们也举个例子,路径是data/tutorialmod/recipe/ice_ether.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"type": "minecraft:crafting_shapeless",
"category": "building",
"ingredients": [
{
"item": "tutorialmod:ice_ether_block"
}
],
"result": {
"count": 9,
"id": "tutorialmod:ice_ether"
}
}

也是常见的无序合成配方,1个方块合成9个材料

type对应的是配方的类型,这里的crafting_shapeless指代无序合成类型

剩下唯一不同的就是ingredients,这里是合成所需的材料,item是物品(包括方块)的id(命名空间 + 注册名)
你直接将材料堆到这里就可以了,无需考虑顺序

可以再举一个例子,比如data/tutorialmod/recipe/ice_ether_ore.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"type": "minecraft:crafting_shapeless",
"category": "building",
"ingredients": [
{
"item": "tutorialmod:raw_ice_ether"
},
{
"item": "minecraft:stone"
}
],
"result": {
"count": 1,
"id": "tutorialmod:ice_ether_ore"
}
}

有多个物品的时候就这样写即可,我们也可以拿原版的东西来写配方

另外,配方也支持使用tag,比如合成木棍的配方,这个我们后续讲tag的时候会详细讲解

熔炉配方

熔炉配方是指将物品放入熔炉中熔炼,得到另一种物品,比如将铁矿石放入熔炉中熔炼,得到铁锭

这里我们举个例子,路径是data/tutorialmod/recipe/ie_from_smelting_rie.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"type": "minecraft:smelting",
"category": "misc",
"cookingtime": 200,
"experience": 0.1,
"group": "ice_ether",
"ingredient": {
"item": "tutorialmod:raw_ice_ether"
},
"result": {
"id": "tutorialmod:ice_ether"
}
}

type对应的是配方的类型,这里的smelting指代熔炉配方

category是配方所属的类别,这里可以写food(食物类)

cookingtime是熔炼时间,单位是tick,1秒=20tick,这里是200tick=10秒

experience是熔炼经验,这个是熔炼后玩家可以获得的经验值

group是配方所属的组,可写可不写,默认为空

ingredient是熔炼所需的材料,item是物品(包括方块)的id(命名空间 + 注册名)

result是熔炼后的物品,id是熔炼后的物品的id(命名空间 + 注册名),其实也是可以写数量的

高炉配方

相比较于熔炉,高炉无非是熔炼速度更高,不过燃料也更耗

举个例子,路径是data/tutorialmod/recipe/ie_from_blasting_rie.json

1
2
3
4
5
6
7
8
9
10
11
12
13
{
"type": "minecraft:blasting",
"category": "misc",
"cookingtime": 100,
"experience": 0.1,
"group": "ice_ether",
"ingredient": {
"item": "tutorialmod:raw_ice_ether"
},
"result": {
"id": "tutorialmod:ice_ether"
}
}

我们可以直观的发现这个熔炼的时间从200变成了100

举一反三

其实其他配方也还有,这里就留给大家自行探索了,我们自己来举个例子

比如说,甜菜作为我国的一大糖料作物(学地理的应该知道吧),咋不能合成糖?

所以说,咱们自己写一个sugar_from_beetroot.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"type": "minecraft:crafting_shaped",
"category": "misc",
"group": "sugar",
"key": {
"#": {
"item": "minecraft:beetroot"
}
},
"pattern": [
"###"
],
"result": {
"count": 3,
"id": "minecraft:sugar"
}
}

咱们这里就简单写一下,因为原版游戏中,一个甜菜是合成一个红色染料的,为了避免冲突,我们就写了3兑3

这个pattern是可以自己折腾的,只要不超过九宫格的范围就好