UU看書

本書第一次大修新增章 ① 礦詞與標籤

天才一秒記住【UU看書】地址:www.uukanshu.co

這一章原本是第六十四章的番外,但由於內容感覺十分水就去掉了。

所以這裡就變成了多出來一章,寫什麼呢?

這一章我們不妨來填一下一些之前挖的坑。

我們在第二十六章講到family引數時,提到了這麼一句話:

『記分板、NBT和標籤可以很好的解決這個問題。但在瞭解這三個東西之前,我們暫且沒有除多弄命令方塊以外的更好的辦法。』

計分板我們已經瞭解過了,NBT我們會在100章開始進入正式學習階段。

那麼這個『標籤』是什麼東西?計分板標籤嗎?

我們知道,MinecraftJava版可以裝上各種第三方的模組載入器(ModLoader),其中最出名的就是MinecraftForge。在Minecraft113版本更新之前,MinecraftForge內有一個重要的系統:礦物詞典(OreDictionary)。

『礦物詞典』又是什麼鬼?這跟『標籤』有什麼關係?

MinecraftForge官方文件中對『礦物詞典』的定義如下:

『礦物詞典OreDictionary主要是為了Mod間相容而存在。

已註冊到礦物詞典的物品將能夠代替其它擁有相同礦物詞典名的物品。這樣就可以使用以上任一物品合成相同的結果。

雖然名字是“礦物Ore”詞典,但是它也可以使用在非礦物的物品上。只要一個物品與另一個物品(比如染料)相似,就都可以註冊進礦物詞典,並透過礦物詞典呼叫。』

舉個例子,在工業時代2(IndustrialCraft2)模組中新增了銅錠,沉浸工程(ImmersiveEngineering)模組中也新增了銅錠,這兩個銅錠由於是不同模組所新增的,所以是不同的物品,這就導致一個問題:

假如我死活搞不到工業時代2的銅錠,只能搞到沉浸工程的銅錠,既然都是銅錠,為什麼就不能通用啊!!!我還想造IC2的機器呢!!!

於是,礦物詞典就來了。沉浸工程的開發者只需要給自家的銅錠新增上一個銅錠的礦物詞典(ingotCopper),工業時代2的開發者也只需要給自家的銅錠新增上一樣的礦物詞典(ingotCopper),然後你就會驚喜地發現,兩邊的銅錠可以通用了!

當然,實際情況肯定比這更加複雜,只不過我們又不開發模組,幹嘛要去管這些更深層次的東西。我們只需要知道:

不同模組類似的物品可以註冊到同一個礦物詞典中,來使得不同模組的類似物品能夠通用。

那麼標籤又是什麼呢?

MC百科(mcmodcn)中對標籤的解釋如下:

『資料包中的標籤Tag允許玩家使用JSON檔案將物品、方塊、流體、實體型別和函式分組,標籤在原版113及以上版本中替代了礦物詞典的功能。』

需要注意,這裡的原版指的是MinecraftJava版,基岩版並沒有什麼礦物詞典和這種型別的標籤。

看起來很高階的樣子啊?但其實這標籤僅僅是一個官方逼死第三方的更高階的『礦物詞典』。

和礦物詞典一樣,不同的物品也可以註冊到同一個標籤中,來使得不同模組的類似物品能夠通用。

但在之前,礦物詞典最多也僅僅能讓物品在工作臺中、熔爐中等特定功能性方塊中才能通用,官方的標籤卻更上一層樓,使得類似物品幾乎能在任何地方通用!

比如你可以給你自己開發的箭新增上arrows標籤,你這個物品就可以被原版的弓和弩射出去;你可以給你自己的食物新增上foxfood標籤,這個食物就可以被餵食給狐狸

但官方的格局可不止僅僅限制在物品中,讓我們把格局開啟一點,你就會發現官方讓Minecraft中的其他東西也能夠用上標籤來使得其他東西也能夠通用。這些『其他東西』一共有十四類,加上物品就十五類了,包括:方塊、實體、流體、遊戲事件、物品、貓、生物群系、超平坦模式生成器配置、結構、世界預設、畫種類、旗幟圖案、樂器、興趣點和函式。

標籤在這些其他東西上的運作方式也一樣:具有同一個標籤的東西,就可以具有同樣的功能或性質。

比如擁有frogfood標籤的實體,就會被青蛙當成食物來吃;擁有lava標籤的流體,就會具有岩漿的功能;擁有tick標籤的函式,會在每遊戲刻開始時執行;擁有village標籤的結構,會像村莊一樣生成

講了那麼多,那這跟指令有什麼關係呢?

回到最開始的那句話:『記分板、NBT和標籤可以很好的解決這個問題。但在瞭解這三個東西之前,我們暫且沒有除多弄命令方塊以外的更好的辦法。』

這個問題是什麼?就是你怎樣才能在目標選擇器中一次性選取多個型別的實體。

在基岩版我們可以透過family引數來選擇,但在Java版呢?

Mojang在MinecraftJava114中開始為實體新增標籤,這就代表著我們在MinecraftJava114及以上版本可以透過標籤來對實體進行選擇。

怎麼選擇呢?在目標選擇器的type引數中,使用『名稱空間標籤名稱』即可。

比如要選中所有骷髏型別的實體,你只需要:

etypeminecraftskeletons

這樣子就可以選擇包括骷髏、凋零骷髏等骷髏類的實體。

而且由於一個實體可以具有多個標籤,所以你可以使用多個type引數指定多個標籤來篩選。

比如etypeminecraftskeletons,typeminecraftfreezeimmuneentitytypes,這就可以選擇同時具有freezeimmuneentitytypes和skeletons標籤的實體,即流浪者。

你還可以在前面加上來實現『不選擇具有指定標籤實體』的功能。比如etypeminecraftskeletons,typeminecraftfreezeimmuneentitytypes,這就將會排除流浪者,只會選擇普通骷髏和凋零骷髏。

只不過和family引數一樣,目前Mojang給原版實體新增的標籤還太少了。但別擔心,因為你不僅僅可以使用實體的標籤,你還可以使用函式、方塊和物品的標籤。

比如在指令clear中,你就可以這樣子:

clearaminecraftbuttons

這將會清除所有玩家揹包中的按鈕,不管是什麼按鈕都行。

也比如在指令execute中,你就可以這樣子:

executeataifblock1minecraftsnowrunkills

這將會使得所有腳下踩著雪的玩家死亡,不管這個雪是頂層雪還是雪塊還是什麼其他型別的雪。

(這個execute指令的語法是第八卷,也就是下一卷的內容,我們很快就會學習其具體的用法了)

只不過Mojang太懶了,導致在原版中,即使是方塊和物品,標籤也是太少,發揮不了很大的作用。

那怎麼辦?裝Forge啊!

Forge為原版提供了許多有用的標籤,雖然這些主要用途是像礦物詞典那樣幫助模組互通,但我們指令也是可以用的。

比如使用Forge提供的礦物錠標籤,就可以實現檢測一個玩家揹包內所有型別錠的數量:

executeasastoreresultscoresingotcountrunclearsforgeingots0

這條指令將會將所有玩家揹包內任何型別錠的總數量以分數的形式儲存在玩家自己的ingotcount計分板中。

所以這就是本章的全部內容了,Haveyoulearnedit

如遇章節錯誤,請點選報錯(無需登陸)

新書推薦

網遊:劍神歸來,我有無上混沌之力 光遇一枕槐安 成神後,我成了玩家口中的狗策劃 練習一年,轉校成為籃球體育生 穿到未來:我的馬甲紅透全星際 夢幻西遊:重生後挖寶致富 英雄無敵之召喚萬歲