【指令小課堂】P2-自定義合成配方(文字版,近期會(huì)出視頻)
??!WARNING?。?br>
該專(zhuān)欄有大量圖片,網(wǎng)絡(luò)不佳的讀者請(qǐng)酌情參考
前言
指令小課堂是一個(gè)總結(jié)指令經(jīng)驗(yàn)或自制算法的系列,為新人提供盡量詳細(xì)的技術(shù)介紹。
第一期:

觀前提示:本教程一般針對(duì)的是Java版最新版,基巖版(或Win10)玩家酌情參考。

在制作數(shù)據(jù)包或者地圖的時(shí)候,經(jīng)常需要運(yùn)用自定義合成配方。如果查找數(shù)據(jù)包功能,確實(shí)可以找到一個(gè)"recipes"的功能。但該功能存在一個(gè)很?chē)?yán)重的缺陷:不能給產(chǎn)物加上nbt數(shù)據(jù)。
在自定的物品上,nbt數(shù)據(jù)是一個(gè)很重要的角色,通常會(huì)涉及到各種檢測(cè)和顯示。
但我們現(xiàn)在還可以嘗試數(shù)據(jù)包中的另一個(gè)重要功能:進(jìn)度。參看Minecraft wiki上對(duì)進(jìn)度結(jié)構(gòu)介紹,我們可以發(fā)現(xiàn)一個(gè)叫做"minecraft:recipe_unlocked"的觸發(fā)器,該觸發(fā)器在玩家解鎖在某一配方時(shí)觸發(fā),該觸發(fā)器就是我們制作自定義合成的基礎(chǔ)。
(wiki上的數(shù)據(jù)參考價(jià)值很大,會(huì)在結(jié)尾處附上完整進(jìn)度JSON結(jié)構(gòu)及該篇地址)

從JSON結(jié)構(gòu)可以看出,我們需要一個(gè)先寫(xiě)一個(gè)自定義的配方文件。由于是解鎖配方,我們需要用循環(huán)移除玩家的解鎖的該配方,同時(shí)移除掉該進(jìn)度(移除進(jìn)度可以在完成后移除),以達(dá)到多次生效的效果。
在這里給出配方的JSON結(jié)構(gòu)(工作臺(tái)):

參照該圖,我們可以寫(xiě)出一個(gè)試驗(yàn)用的配方:

注:無(wú)序合成的type應(yīng)修改為crafting_shapeless,語(yǔ)法請(qǐng)?jiān)趙iki上查看

將該文件命名為sword.json(注意:文件名可以隨意但不能重復(fù),文件格式要是json)放到 數(shù)據(jù)包/data/命名空間/recipes/sword.json即可運(yùn)作
在這里暫時(shí)不介紹進(jìn)度的全部標(biāo)簽,但下面幾個(gè)標(biāo)簽必須了解:

下一步,我們還要編寫(xiě)一份進(jìn)度文件。參照上面給出過(guò)的文件結(jié)構(gòu),寫(xiě)出一份測(cè)試用的進(jìn)度文件:

同配方,命名為sword.json,放到?數(shù)據(jù)包/data/命名空間/achievements/sword.json,注意,這里的main:sword是我自己的命名空間,自己做的時(shí)候要把這個(gè)換成自己的(可以放在minecraft命名空間以省略命名空間的聲明)main:debug/sayhi函數(shù)也是我自己寫(xiě)的函數(shù),,這里給出內(nèi)容:

將函數(shù)放進(jìn)?數(shù)據(jù)包/data/命名空間/functions/debug/sayhi.mcfunction即可使用(這里的命名空間是main,直接放在functions就行,debug為自建文件夾)
進(jìn)入游戲,測(cè)試合成配方:

結(jié)尾提示:實(shí)際使用時(shí)建議將配方產(chǎn)物設(shè)為知識(shí)之書(shū)之類(lèi)無(wú)法獲得的物品,并準(zhǔn)備一個(gè)循環(huán)函數(shù)或命令方塊來(lái)清除該物品(不能在觸發(fā)的函數(shù)里寫(xiě),因?yàn)楂@得產(chǎn)物滯后于函數(shù)運(yùn)行),如果需要對(duì)玩家展示合成配方,需要重新寫(xiě)一份內(nèi)容一樣但名稱(chēng)不同的配方,因?yàn)椴灰瞥|發(fā)用配方的話(huà)就無(wú)法進(jìn)行下次觸發(fā)。

進(jìn)度完整JSON格式:(display可選,這樣會(huì)對(duì)玩家隱藏該進(jìn)度)
