本篇教程由作者设定未经允许禁止转载。

前言

MC中的配方绝对是生存中最重要的游戏机制,它可以帮助玩家们转换自己的物品,从而达到完成游戏的目的。

既然如此重要的配方机制,是怎样制作出来的呢,今天给大家来教一下:如何定制自己的独特配方。

准备工作

MC的配方文件储存在.minecraft/versions/XX/XX.jar/data/minecraft/recipes中(XX代表你的游戏名称)

之后你就可以看到一大堆JSON文件了。

你可以直接修改原版jar或自己创建数据包(推荐,教程传送门:戳我)。

配方编写

配方类型

按照上述操作找到文件后,你可以使用记事本或代码编辑器打开它们,然后你可能会见到几种不同的代码格式,这些有些是工作台配方,有些是熔炉配方,还有些是高炉、烟熏炉以及切石机等的配方,那这么多文件,我们应如何分辨它们呢?注意看,在每个json文件上方,都有个"type"参数,冒号后面的,就是它的配方种类,这里举几个例子:

教你定制属于自己的配方~-第1张图片

教你定制属于自己的配方~-第2张图片

教你定制属于自己的配方~-第3张图片

教你定制属于自己的配方~-第4张图片

教你定制属于自己的配方~-第5张图片

教你定制属于自己的配方~-第6张图片

教你定制属于自己的配方~-第7张图片

不难看出,所有的配方编写都是有一定规律的,上方的type决定着其配方的种类,目前json文件只支持工作台的无序配方、有序配方与固定配方(原版中没有此类配方,但是可以使用这个类型)、熔炉、烟熏炉、高炉、营火配方、切石机配方与锻造台配方(不含酿造台配方,酿造台配方牵涉到Java程序编写,在这里先不教学),其类型的写法列表如下:


类型所对应的type
有序配方crafting_shaped
无序配方crafting_shapeless
熔炉

smelting

高炉blasting
烟熏炉

smoking

切石机stonecutting
锻造台smithing
营火campfire_cooking
特殊配方(如皮革套装的染色等)crafting_special_*


在type类型写完了后,我们就要开始写配方了。

制作配方

工作台

有序合成

工作台中有序配方的配方通常是最容易看懂的,因为你不得不承认它真的很形象(这里以铁镐的配方为例):

教你定制属于自己的配方~-第8张图片

你会惊奇的发现铁镐的配方竟然如此形象生动,你肯定能看出“X”代表铁锭,“#”代表木棍,那这些在哪定义呢?可以发现在“pattern”标签的上方“key”标签已经为我们标注好了“#”与“X”分别代表什么,这里需要强调一下,在写字符代表的物品时尽量把前面的minecraft加上,养成好习惯,因为若配方牵涉到其他模组时前缀必须要加,否则就会不起作用。

当然在写有序配方时也要注意一些问题,若你想空出一格空位,就可用空格来表示,在pattern编写时千万不能超过工作台原有的行列数,否则就会不起作用,有序合成的配方会自动包含配方对称后的形式,这意味着你在编写斧头、楼梯等配方时不用再编写一个对称的配方,这是有序合成的优点。

result标签内存储着合成后的物品,若你想要合成多个物品,可以在result中再写一行"count":X,例如玻璃板的配方:教你定制属于自己的配方~-第9张图片

此时就会有小伙伴问了:那pattern中能否加入count呢?答案是不能,除非你懂得高级配方编写公式,高级配方编写公式较为复杂,这里不多说了。

有些配方可以接受很多同类型的材料,比如工作台可以用任意的木板合成,难不成我们要把所有的木板组合全都排列一遍?不,这样是不是太复杂了?考虑到这一点的需求,minecraft已为我们提供了标签这个有效的东西,其实工作台的配方很简单:
教你定制属于自己的配方~-第10张图片

你会发现key的字符代表物品前面的标签发生了变化,变成了“tag”,这就是木板的一个集合,意思是说我们可以用任何的木板来制作工作台,物品标签检索请到官方Wiki查看~

注:count设置为超过其物品上限量的数量时会失效;在选择标签时请注意不要选择方块类型的标签,这样会导致配方失效!

无序合成

无序合成对玩家游戏操作时会有很大的便利,但在编写时会比有序合成困难些,因为它没有有序合成的pattern标签那么直观,举个蘑菇煲的例子:

教你定制属于自己的配方~-第5张图片

你会发现无序配方没有pattern这个参数,取而代之的是ingredients,在这里面你只能手动写上你的材料注册名,不得不说,这非常麻烦。

但这会给用户带来很好的体验,因为无序配方没有任何的摆放次序,只要收集好材料,就可以做出来了。

与有序合成相同,当配方成分牵涉到物品类型集合时,你可以使用tag来替换item。

特殊配方

特殊配方是系统自动编写好的配方类型,它包括旗帜的染色、皮革套装的染色、迷之炖菜等,这类配方在修改时通常需要一定的Java代码编写功底,因为这牵涉到了较多的运算,比如皮革套装染色叠加等等,在这里就先不做过多的教学了。

加热型配方

加热型配方都有个共同的特点,请看下方的四幅图(从上到下分别是熔炉、烟熏炉、高炉、营火):

教你定制属于自己的配方~-第12张图片教你定制属于自己的配方~-第13张图片教你定制属于自己的配方~-第14张图片

细心的小伙伴可能会发现,加热型配方普遍都由cookingtime,experience,ingredient,result组成,而且其cookingtime与experience参数后跟随的都是2个数值,格式也比较简单,所以加热型配方通常都是最好写的。

我们先来讲一下最常见的ingredient与result,与工作台配方相同,这两个参数分别代表着原料与结果,但是需要注意的是这里的ingredient与result均不能加count,这是十分重要的。

cookingtime与experience顾名思义,就是该物品烧炼的时间与玩家可获得的经验值,注意这里的cookingtime并不是以秒做单位,而是以刻来进行计算的(1秒=20刻)。

在高炉与烟熏炉中通常cookingtime都设置为100(5秒),熔炉通常是200(10秒),营火通常是600(30秒)。

切石机

切石机的配方较为简单,它没有其他复杂的参数,当一个切石机配方被写入游戏后,它会在原材料放入物品栏中列举出该方块的切石结果:

教你定制属于自己的配方~-第15张图片可以看到切石机的配方代码非常简单,只有一个ingredient,与熔炉相同,ingredient中放入材料,result是切石后的结果,但与熔炉不同的是切石机的结果可以设置数量。

锻造台

锻造台可以升级物品,比如钻石剑加上下界合金锭可以得到下界合金剑:

教你定制属于自己的配方~-第16张图片不难看出,这里没有了ingredient,而是addition与base,这里需要注意:addition对应的是锻造台的第二个物品栏,base对应的是锻造台的第一个物品栏,这个顺序必须要牢记,否则配方可能会是相反的。

result中写入的是锻造后的成品,这里的成品并非说必须要根据base来走,意思是你不必把result写成与base相同的物品类型,你可以写入不同的物品,比如下面这个代码:

{
    "type":"minecraft:smithing",
    "addition":{
        "item":"minecraft:dirt"
    },
    "base":{
        "item":"minecraft:cobblestone"
    },
    "result":{
        "item":"minecraft:netherite_ingot"
    }
}

当你把这串代码复制到自己的模组或数据包中时,你打开游戏后会发现,1个圆石在被泥土增强后变成了下界合金锭别把这模组发到百科上了

可以发现,这里面的三个物品并没有任何关联,甚至有点魔幻。

锻造台配方也可以做一些特定的模拟交易,且锻造台中是可以使用count参数设置物品数量的。

小结

配方在MC中是不可或缺的一部分,也是做模组时重要且简单的部分,你也可以根据本教程定制属于自己的配方。