Crafttweaker(1.12.2)入門1:尖括號調(diào)用,物品堆的認識,有序配方的添加

目前我們已經(jīng)搭建好了環(huán)境,可是這是否意味著已經(jīng)萬事大吉了呢?并沒有,請耐心地把Just Enough Items(JEI物品管理器)
Just Enough Characters(用于拼音搜索)
Mouse Tweaks(用于簡化鼠標操作)
The One Probe(用于查看方塊信息、實體信息)
AppleSkin(用于查看食物信息)
這幾個模組一起裝了可以大大增加修改效果的直觀性和游戲內(nèi)操作的便捷性。除此之外也可以通過啟動器安裝optifine,以便于在“選項-視頻設置-其他”內(nèi)將“高級信息提示”打開(與原版的F3+H等效)。
眾所周知,附魔金蘋果的配方在1.9及以后就再未在原版出現(xiàn)過了,那么有沒有一種辦法讓它重現(xiàn)呢?根據(jù)官方wiki(https://docs.blamejared.com/1.12/en/Vanilla/Recipes/Crafting/Recipes_Crafting_Table#addshaped),我們可在上期新建的vanilla.zs中寫下以下代碼:
保存后,啟動游戲,用JEI搜索jinpingguo,找到附魔金蘋果并單擊之,即可看到我們?yōu)楦侥Ы鹛O果添加的配方了:

配方名:godapple
也許看到這里你已經(jīng)不禁要問:這也能叫入門?雖然這段腳本與生成的新配方之間似乎也能看出模糊的對應關系,但是別的配方怎么寫呢?別急,我們慢慢來。
首先你要明白尖括號調(diào)用在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>看起來是在表示“我的世界:金塊”,那么它憑什么是一個物品呢?它為什么不是一個方塊,一個礦辭,甚至一個掉落物(物品實體)呢?帶著這點思考,我們繼續(xù)對“物品堆”形成認識。
其次對于物品堆(IItemStack),尖括號調(diào)用大致結(jié)構(gòu)為<item:modid:itemname:meta>,其中:
一、item用于聲明該尖括號引用會返回一個物品堆,“item:”在zs腳本中可省略。
二、modid是物品所屬的模組id。
三、itemname是物品名字。
四、至于meta,也就是元數(shù)據(jù),是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使用一個方法,用于在配方包中添加一個有序配方,也就是需要在合成時按一定順序擺放才能合成的配方,與之對應的為無序配方(如原版的蘑菇煲配方);
三、
顯然一個添加有序配方的方法無參數(shù)輸入是不可思議的,它需要的第一個參數(shù)name為一個字符串,作為該配方的配方名(以本文代碼為例,該配方名為“godapple”),注意其是可以省略的,這樣做的話CrT會使用哈希值自動指定配方名;
四、
第二個參數(shù)output為一個物品堆IItemStack,作為該配方的輸出物品(以本文代碼為例,該配方輸出物品為<minecraft:golden_apple:1>,即附魔金蘋果),如果希望輸出多個物品,寫作<item> * n(n為整型,作為輸出物品數(shù))即可;
五、
第三個參數(shù)inputs為一個二維材料[1]數(shù)組IIngredient[][],在當下階段可直接當作一個二維物品堆數(shù)組IItemStack[][]。作為配方的輸入部分,具體寫法可參考對比本文的代碼和配方截圖(想象一下工作臺的“九宮格”就不難理解了)。如果工作臺輸入部分的“九宮格”不需要全部填上物品,則不需要物品的空位寫作空值null;
*六、
第四、五個參數(shù)為配方函數(shù)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],由于其已經(jīng)超出了入門要求,故本文暫未體現(xiàn),寫的時候無視就好。
好,那么作為入門的第一節(jié)先到此了,希望能幫助你看懂wiki(就是文中給出的網(wǎng)址)。
[1]注:材料,即IIngredient(https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient),本階段暫不作贅述,可暫且理解為“它可以是一個物品堆IItemStack,也可以是一個礦辭IOreDictEntry,也可以是一個流體堆ILiquidStack”,后文將詳細解釋(大概)。
[2]注:配方函數(shù)與配方動作,作為入門篇章暫不作贅述,文中已經(jīng)貼出相關wiki鏈接,可嘗試閱讀wiki并理解。