Crafttweaker(1.12.2)基礎(chǔ)1:ZenGetter,ZenSetter,ZenMethod

啊哈,熬過了入門部分,好玩的來啦!
zs腳本有三個特有的術(shù)語:ZenGetter,ZenSetter與ZenMethod。ZenGetter用于獲取特定對象的某種信息,ZenSetter用于設(shè)定特定對象的某種數(shù)據(jù),ZenMethod其實就是方法,既可能獲取信息又可能設(shè)定數(shù)據(jù)。
這么說可能還是過于抽象了,我們跟著wiki慢慢來看:
一、ZenGetter
https://docs.blamejared.com/1.12/en/Vanilla/Variable_Types/IIngredient#command-string
這里介紹的commandString就是典型的ZenGetter,在wiki中看到此類用法一要注意對什么對象使用,二要注意返回了什么類型——以此處的commandString為例,可以看到其位于IIngredient頁面下,因此顯然要對一個材料對象使用,形如:
舉個例子(如wiki所示):
那么返回了什么類型呢?wiki也講得很清楚了,返回的是一個字符串。
二、ZenSetter
https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack#zengetterszensetters
這里則用表格的形式展示了一系列ZenGetter,ZenSetter。我們先關(guān)注ZenSetter,在wiki中看到此類用法一要注意對什么對象使用,二要注意賦值為什么類型——以表內(nèi)的maxStackSize為例,可以看到其位于IItemStack頁面下,因此顯然要對一個物品堆對象使用,形如:
舉個例子:
那么賦值為什么類型呢?wiki也講得很清楚了,賦值為一個整型。
三、ZenMethod
而關(guān)于ZenMethod,我們在之前的章節(jié)其實已經(jīng)多次見過了,入門2列出的一系列方法都是ZenMethod,在wiki中看到此類用法一要注意對什么對象使用;二要注意有無傳入?yún)?shù),若有參數(shù)則要注意需要多少參數(shù)、參數(shù)的類型是什么、參數(shù)是否可省略以及省略后默認是什么值,無參數(shù)則一定要注意不要忘了結(jié)尾的那對括號;三要注意有無返回值,若有返回值則要注意返回了什么類型,無返回值則說明這個ZenMethod可能用于設(shè)置數(shù)據(jù)(類似于ZenSetter),也可能用于引發(fā)一些“變化”或“事件”。
好像……還是少了點什么?想必有人在看wiki時已經(jīng)敏銳的注視到了,maxStackSize既是ZenSetter,又是ZenGetter,那么用起來的時候不會搞混嗎?
答案是不會:
這里的前一個鐵錠.最大堆疊數(shù)是ZenSetter,后一個鐵錠.最大堆疊數(shù)是ZenGetter,在賦值時等號右邊的ZenGetter先返回值64(即鐵錠原本的最大堆疊數(shù)),等號左邊的ZenSetter再賦值為32(即64-32),兩者雖然同名但不會發(fā)生邏輯上的悖論。當然了,實際寫的時候大可不必這么麻煩,直接寫成:
即可,最終進入游戲后就可以發(fā)現(xiàn)鐵錠的最大堆疊數(shù)變了。
好,那么接下來我們簡單地實戰(zhàn)一下:
如何修改某種方塊使之無法被左鍵采掘(已知這樣的方塊硬度為-1)?
首先既然要改方塊,那當然是在wiki > Vanilla > Blocks里尋找(不會還有人以為Vanilla是香草的意思吧),最終不難在IBlockDefinition處找到:
根據(jù)https://docs.blamejared.com/1.12/en/Vanilla/Blocks/IBlockDefinition#zengetterszensetters
不難發(fā)現(xiàn)有hardness這一ZenSetter,于是有:
但是這里的對象需要我們得到一個IBlockDefinition的實例,怎么獲得呢?我們需要找找有沒有相關(guān)的ZenGetter或ZenMethod能夠返回一個IBlockDefinition。
根據(jù)https://docs.blamejared.com/1.12/en/Vanilla/Blocks/IBlock#zengetters
不難發(fā)現(xiàn)有definition這一ZenGetter,于是有:
但是這里的對象需要我們得到一個IBlock的實例,所以我們還得找找有沒有相關(guān)的ZenGetter或ZenMethod能夠返回一個IBlock。
根據(jù)https://docs.blamejared.com/1.12/en/Vanilla/Items/IItemStack#block-casting
不難發(fā)現(xiàn)有asBlock()這一ZenMethod,于是有:
怎么返回一個IItemStack,相信你已經(jīng)熟得不能再熟了吧。假設(shè)我們要修改的方塊是仙人掌(仙人掌好扎手的),那么最終的答案就是:
進入游戲后就發(fā)現(xiàn)仙人掌無法再用左鍵采掘了(其實可以通過挖掉根部的沙子獲得)。
那么基礎(chǔ)1就到此為止了,到此為止你已經(jīng)能夠脫離本系列直接根據(jù)wiki寫腳本了,請根據(jù)自己的需求大膽嘗試吧。