命令/setblock & 方塊狀態(tài) & 方塊NBT - 指令教程7期

????本系列所有教程僅面向最新Java版原版Minecraft,不涉及舊版本與插件、模組的命令、方塊、實(shí)體和特性。
????隨時(shí)歡迎以評(píng)論區(qū)留言、加入粉絲群或B站私信等方式進(jìn)行提問。

????本期開始的指令教程會(huì)同步更新視頻與專欄兩個(gè)版本,內(nèi)容完全相同,請(qǐng)依據(jù)自身喜好擇一觀看即可。


????????這是本期將要講到的內(nèi)容。我將循序漸進(jìn),為大家逐漸拆分講解這條指令。

????????在學(xué)習(xí)新內(nèi)容之前,首先復(fù)習(xí)一下 上一期的內(nèi)容。

局部坐標(biāo):基于玩家的視角朝向,向左右、上下、前后進(jìn)行偏移。不可與絕對(duì)坐標(biāo)或相對(duì)坐標(biāo)混用。在命令中通過^來使用局部坐標(biāo)。
????向前方傳送2格
????????/tp ^ ^ ^2
????在右后方2格生成Creeper
????????/summon creeper ^-2 ^ ^-2

Attributes:此NBT控制生物屬性的基礎(chǔ)值。

AttributeModifiers:為物品添加屬性修飾符,修飾符會(huì)對(duì)屬性基礎(chǔ)值做出計(jì)算,從而改變生物屬性的數(shù)值。

????????除此之外,需要特別注意攻擊速度這個(gè)屬性。我們知道劍的攻速是1.6,那如果生成一把a(bǔ)ttack_speed是1.6的劍,會(huì)怎么樣?

你會(huì)發(fā)現(xiàn)她的攻擊速度非常快,就像空手一樣。為什么呢?

????????仔細(xì)觀察 原版的劍 和 生成的劍 的屬性,你會(huì)發(fā)現(xiàn)原版的描述是“1.6 攻擊速度”,而生成的劍是“+1.6?攻擊速度”。
????????也就是說,原版顯示的是“修飾符”計(jì)算后的結(jié)果。玩家的攻速基礎(chǔ)值是4.0,想做一把1.6攻速的劍,需要的修飾符是攻擊速度-2.4。

????????如果還想還原原版的綠字描述,你還得用HideFlags隱藏掉實(shí)際的修飾符,再用display來模擬。
????????攻擊力也有類似的情況:空手有1點(diǎn)攻擊力,所以鐵劍顯示的6 攻擊傷害,實(shí)際上是+5 攻擊傷害。


????????知道了這些,再看上期的題目就很明顯了,鈉鎵劍的2 攻擊速度,是用display模擬的,她實(shí)際上是一個(gè)-2 攻擊速度的修飾符。
????????另外,有經(jīng)驗(yàn)的話你可能會(huì)記得,鋒利魔咒提供的傷害加成會(huì)顯示到綠字上,例如鉆石劍的7 攻擊傷害,附上鋒利 II后顯示為8.5。

????????所以鈉鎵劍的11.5傷害,減去鋒利 X提供的5.5傷害,可以算出原本的攻擊力是6.0。再減掉空手的1點(diǎn)攻擊力,得到實(shí)際的修飾符是+5 攻擊力。
????????知道了屬性修飾符,剩下的Enchantments和display就好辦了。另外,魔咒列表我也是用display模擬的,因?yàn)樗龑?shí)際顯示的排序比較奇怪,所以我改成了display這個(gè)可控的顯示。
這就是上期的題目了,還有問題可以在評(píng)論區(qū)留言。

????????那么接下來就是本期的內(nèi)容了。原計(jì)劃講完三個(gè)建筑系的指令:放置/setblock、填充/fill和復(fù)制/clone。但發(fā)現(xiàn)篇幅太長,所以分兩期來。這一期只講一個(gè)/setblock,她是在1.7加入的指令,作用是放置1個(gè)方塊,來看一條實(shí)例:
????????這個(gè)^ ^ ^1我們認(rèn)識(shí),是上一期講到的局部坐標(biāo)。她當(dāng)然也可以是絕對(duì)坐標(biāo)或相對(duì)坐標(biāo)。chest是箱子的方塊ID,所以這條指令是在自己的前方1格放置箱子。

????????那么我們就整理出了/setblock的基本格式:
????????方塊ID一般和物品ID相同,有小部分例外,舉兩個(gè)例子:
????????紅石的物品ID是redstone,紅石線的方塊ID是redstone_wire
????????橡木告示牌的物品ID是oak_sign,在墻上的橡木告示牌是oak_wall_sign
????????方塊ID也可以在游戲內(nèi)查到:把準(zhǔn)星指向方塊,在F3界面的右側(cè)就是了。

????????這條指令只展示了/setblock的必填參數(shù),我們來看一條更加完整的例子:
????????這里多了一個(gè)destroy是什么意思呢?她會(huì)先破壞掉原有的方塊,然后才放置指定的方塊空氣。這條指令的實(shí)際效果是破壞掉了腳下的方塊。

????????這個(gè)destroy叫做操作方式,除destroy以外,還有keep和replace。
keep:只替換空氣。如果指定的坐標(biāo)不是空氣,就不會(huì)放置這個(gè)方塊。
replace:默認(rèn)模式,直接替換原有方塊。
????以上就是/setblock的完整格式了。

????????說了這么多,在哪里寫方塊的NBT呢?在講這個(gè)之前,首先要知道2點(diǎn):
????第一,方塊除了NBT以外,還有一個(gè)東西叫做方塊狀態(tài)。
????????方塊狀態(tài)記錄了一些簡單的數(shù)據(jù),例如:
????????????????·?箱子的面朝方向
????????????????·?臺(tái)階的上下半
????????????????·?紅石線的能量
????????方塊的NBT記錄了一些復(fù)雜的數(shù)據(jù),例如:
????????????????·?熔爐已燒煉的配方(用于記錄燒煉經(jīng)驗(yàn)。經(jīng)驗(yàn)熔爐原理)
????????????????·?容器內(nèi)裝著的物品。
????第二,不是所有方塊都有方塊狀態(tài)。例如石頭和泥土沒有任何值得記錄的數(shù)據(jù)。有NBT的方塊更少,例如樓梯只有方塊狀態(tài)而沒有NBT。
????大部分的方塊狀態(tài)和NBT還是某一類方塊特有的,例如:
????????????·?power:只存在于紅石線的方塊狀態(tài),記錄紅石能量強(qiáng)度
????????????·?charges:只存在于重生錨的方塊狀態(tài),記錄剩余能量
????????????·?BurnTime:只存在于熔爐的NBT,記錄剩余燃燒時(shí)間
????????????·?CookTime:只存在于熔爐的NBT,記錄此配方已燒煉時(shí)間
????基于這些原因,在教程內(nèi)只能提及一些相對(duì)常見的內(nèi)容。更多的、方塊獨(dú)有的、零零散散的內(nèi)容,還得依靠大家自己查閱wiki。

????????首先介紹一個(gè)最常見的方塊狀態(tài)
????????????facing:記錄此方塊的朝向。
????????Java版總共有約150個(gè)方塊有方塊狀態(tài),其中有近三分之一的方塊都擁有facing這個(gè)狀態(tài)。先展示一個(gè)實(shí)例。
????????這條指令是放置一個(gè)面朝東方的箱子。facing的可用值包括east、south、west和north。少部分方塊還有up和down,例如按鈕和拉桿。
????????????告示牌沒有facing,她使用rotation記錄16個(gè)面朝方向
????????????在墻上的告示牌仍使用facing
????????注意方塊狀態(tài)和NBT有兩點(diǎn)不同:
????????????一、方塊狀態(tài)使用等號(hào)而不是冒號(hào)
????????????二、方塊狀態(tài)使用方括號(hào)而不是花括號(hào)
? ? ????????? ? [?facing = west ]
????????這里的方括號(hào)不代表她是一個(gè)列表型數(shù)據(jù),只是為了和NBT的花括號(hào)區(qū)分。多個(gè)方塊狀態(tài)仍用逗號(hào)分隔,例如:
????????這條指令是放置一個(gè)放在地上,面朝南方并且已經(jīng)拉下的拉桿。

????????了解完了方塊狀態(tài),接下來是NBT。這一期講3個(gè)相對(duì)常見的方塊NBT,分別是Lock、CustomName和Items。

Lock:存在于容器類方塊。僅當(dāng)玩家的手持物品名稱與Lock完全相同時(shí)才能打開此容器。例:
????????只有手持名稱為na的物品才能打開這個(gè)箱子。所有的容器方塊都有Lock標(biāo)簽,包括熔爐和漏斗等等。通過這條指令我們也知道了如何給方塊指定NBT,那要怎樣同時(shí)指定方塊狀態(tài)呢?還是看實(shí)例,這是面朝西方且上鎖的箱子
????????方塊狀態(tài)和NBT的順序不能調(diào)換,且之間沒有空格。

CustomName:存在于容器類方塊。修改方塊的名稱。
????????她和生物的那個(gè)CustomName完全相同,不過方塊沒有CustomNameVisible。方塊的名稱會(huì)顯示在容器的GUI界面上。
????????在不作弊的情況下,你也可以通過鐵砧修改容器方塊的物品名稱,使其放置后帶有CustomName。

Items:存在于容器類方塊。記錄容器內(nèi)包含的所有物品。
????????很顯然,一個(gè)容器可以裝很多個(gè)物品,所以Items是一個(gè)列表,里面的每一項(xiàng)都是容器內(nèi)的一個(gè)物品。
????????一個(gè)物品包含四組數(shù)據(jù),分別是物品ID、數(shù)量、NBT和所在槽位,所以每一項(xiàng)都應(yīng)該是一個(gè)集合。那么我們就整理出了Items的格式:
????????我們來分析一個(gè)實(shí)例:
????????????id: "stick",代表這個(gè)物品是木棍
????????????Count: 16,代表堆疊了16個(gè)
????????????Slot: 0,是0號(hào)槽位,箱子的左上角
????????????tag,代表這個(gè)物品的NBT
????????這一項(xiàng)代表箱子的左上角有16個(gè)名稱為Ga的木棍。

????????在Items的格式中,Slot和tag是選填項(xiàng)。
????????????Slot的默認(rèn)值是0,若0號(hào)位已經(jīng)有物品,則會(huì)覆蓋掉原有物品
????????????tag,不填就不填吧
????????另外,id、Count和tag這三個(gè)合起來叫做“物品通用標(biāo)簽”,所以Items的格式還能簡寫成這樣:
? ? 最后是槽位的編號(hào)規(guī)則:左上角是0,然后從左到右,從上到下。
????????比較特殊的是熔爐,原料槽是0,燃料槽是1,輸出槽是2。

????????好啦,這期的內(nèi)容就是這些啦。來復(fù)習(xí)一下
命令 /setblock
? ? 操作方式包括destroy、keep和默認(rèn)的replace
方塊狀態(tài)
????facing:記錄方塊的朝向。
NBT
????Lock:存在于容器類方塊。僅當(dāng)玩家的手持物品名稱與Lock完全相同時(shí)才能打開此容器。
????CustomName:存在于容器類方塊。修改方塊的名稱。
????Items:存在于容器類方塊。記錄容器內(nèi)包含的所有物品。
????????雖然本期內(nèi)容不多,但介紹的都是新概念,因此花費(fèi)了較多的篇幅。

本期題目
?放置一個(gè)熔爐,要求放置后的效果如圖。


????視頻+專欄總點(diǎn)贊過500出下一期,介紹一個(gè)利用/clone實(shí)現(xiàn)的黑科技。
好,晚安~