Crafttweaker(1.12.2)入门1:尖括号调用,物品堆的认识,有序配方的添加

目前我们已经搭建好了环境,可是这是否意味着已经万事大吉了呢?并没有,请耐心地把Just Enough Items(JEI物品管理器)
Just Enough Characters(用于拼音搜索)
Mouse Tweaks(用于简化鼠标操作)
The One Probe(用于查看方块信息、实体信息)
AppleSkin(用于查看食物信息)
这几个模组一起装了可以大大增加修改效果的直观性和游戏内操作的便捷性。除此之外也可以通过启动器安装optifine,以便于在“选项-视频设置-其他”内将“高级信息提示”打开(与原版的F3+H等效)。
众所周知,附魔金苹果的配方在1.9及以后就再未在原版出现过了,那么有没有一种办法让它重现呢?根据官方wiki(https://docs.blamejared.com/1.12/en/Vanilla/Recipes/Crafting/Recipes_Crafting_Table#addshaped),我们可在上期新建的vanilla.zs中写下以下代码:
保存后,启动游戏,用JEI搜索jinpingguo,找到附魔金苹果并单击之,即可看到我们为附魔金苹果添加的配方了:

配方名:godapple
也许看到这里你已经不禁要问:这也能叫入门?虽然这段脚本与生成的新配方之间似乎也能看出模糊的对应关系,但是别的配方怎么写呢?别急,我们慢慢来。
首先你要明白尖括号调用在zs脚本中是相当重要的用来表示游戏的某个对象的方式(https://docs.blamejared.com/1.12/en/Brackets/Brackets),视情况可以返回:
一个物品堆(https://docs.blamejared.com/1.12/en/Vanilla/Brackets/Bracket_Item)
一个矿辞接口(https://docs.blamejared.com/1.12/en/Vanilla/Brackets/Bracket_Ore)
等等,不一而足。那么问题来了,<minecraft:gold_block>看起来是在表示“我的世界:金块”,那么它凭什么是一个物品呢?它为什么不是一个方块,一个矿辞,甚至一个掉落物(物品实体)呢?带着这点思考,我们继续对“物品堆”形成认识。
其次对于物品堆(IItemStack),尖括号调用大致结构为<item:modid:itemname:meta>,其中:
一、item用于声明该尖括号引用会返回一个物品堆,“item:”在zs脚本中可省略。
二、modid是物品所属的模组id。
三、itemname是物品名字。
四、至于meta,也就是元数据,是1.12.2及更早版本特有的一个概念,如<minecraft:golden_apple:0>为金苹果(meta默认为0,故“:0”可省略),<minecraft:golden_apple:1>则为附魔金苹果;另外也可以用通配符*,如<minecraft:golden_apple:*>就匹配了两种金苹果,<minecraft:coal:*>就匹配了煤炭与木炭。
那么问题又来了,我们怎么知道游戏中哪种物品在zs中应该写成什么样呢?很简单,以附魔金苹果为例,在游戏中主手持附魔金苹果后,输入指令“/ct hand”即可获得其作为物品堆的名字(会自动复制到粘贴板上),游戏中其他的物品同理。
最后回到我们一开始写的“有序配方的添加”的代码,我们一步一步来看:
一、recipes
这是一个全局关键字“配方包”(https://docs.blamejared.com/1.12/en/Vanilla/Global_Functions#global-fields),你可以理解为这个关键字事关一切工作台配方;
二、
对recipes使用一个方法,用于在配方包中添加一个有序配方,也就是需要在合成时按一定顺序摆放才能合成的配方,与之对应的为无序配方(如原版的蘑菇煲配方);
三、
显然一个添加有序配方的方法无参数输入是不可思议的,它需要的第一个参数name为一个字符串,作为该配方的配方名(以本文代码为例,该配方名为“godapple”),注意其是可以省略的,这样做的话CrT会使用哈希值自动指定配方名;
四、
第二个参数output为一个物品堆IItemStack,作为该配方的输出物品(以本文代码为例,该配方输出物品为<minecraft:golden_apple:1>,即附魔金苹果),如果希望输出多个物品,写作<item> * n(n为整型,作为输出物品数)即可;
五、
第三个参数inputs为一个二维材料[1]数组IIngredient[][],在当下阶段可直接当作一个二维物品堆数组IItemStack[][]。作为配方的输入部分,具体写法可参考对比本文的代码和配方截图(想象一下工作台的“九宫格”就不难理解了)。如果工作台输入部分的“九宫格”不需要全部填上物品,则不需要物品的空位写作空值null;
*六、
第四、五个参数为配方函数IRecipeFunction(https://docs.blamejared.com/1.12/en/Vanilla/Recipes/Crafting/Recipe_Functions#irecipefunction)与配方动作IRecipeAction(https://docs.blamejared.com/1.12/en/Vanilla/Recipes/Crafting/Recipe_Functions#irecipeaction)[2],由于其已经超出了入门要求,故本文暂未体现,写的时候无视就好。
好,那么作为入门的第一节先到此了,希望能帮助你看懂wiki(就是文中给出的网址)。
[1]注:材料,即IIngredient(https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient),本阶段暂不作赘述,可暂且理解为“它可以是一个物品堆IItemStack,也可以是一个矿辞IOreDictEntry,也可以是一个流体堆ILiquidStack”,后文将详细解释(大概)。
[2]注:配方函数与配方动作,作为入门篇章暂不作赘述,文中已经贴出相关wiki链接,可尝试阅读wiki并理解。