第九十一章 紅石比較器
?。ù苏鹿?jié)原為『循環(huán)裝置-牛頓的棺材板快要按不住了啊?。?!』,于2022年7月26日改為『紅石比較器』)
?。ù苏鹿?jié)有用到本章說來插入圖片,因此最好在起點中文網(wǎng)上閱讀本章)
現(xiàn)在我們已經(jīng)了解了很多指令,但是僅僅知道各種指令如何使用,最多也就稱得上是一個『會用指令的玩家』而已。那該怎么辦呢?我們現(xiàn)在要做的是,將各個指令和游戲特性互相聯(lián)系起來,這也就是這一卷的主要內(nèi)容。
紅石比較器(Redstone Comparator),你應(yīng)該知道這是個什么東西吧?作為紅石電路的重要組成部分之一,它有許許多多的的用途。
作者的紅石并不怎么好,所以這邊并不會講什么特別高深的紅石相關(guān)內(nèi)容(我也不會講)。但基礎(chǔ)的一些特性我們還是要了解了解。
讓我們拿出一個紅石比較器,放在地上,你應(yīng)該注意到了這東西上面插著三個看起來像是紅石火把的東西(其實就是紅石火把),并組成了一個三角形(△)。這個三角形的一邊平行于紅石比較器的一側(cè),另一頭指向另一側(cè)(見插圖91-1)。
這個三角形意味著什么呢?讓我們換一個方式來看待紅石比較器:
┏━┓北
┃△┃↑(插圖:91-2)
┗━┛
?。ㄩL方形的紅石比較器?)
?。~,就這樣子將就看吧,能夠看配圖的話那更好)
這是一個朝向正北(Z-)的紅石比較器,這個紅石比較器有三個輸入口和一個輸出口:
┏O┓
B△C(插圖:91-3)
┗A┛
A······后側(cè)輸入口
B······左側(cè)輸入口
C······右側(cè)輸入口
O······輸出口
其中,A后側(cè)輸入口是很重要的一個輸入口,你可以向這個輸入口輸入紅石信號。當(dāng)然,單純的輸入紅石信號并不會發(fā)生什么事情,因為我們沒有在O輸出口放置一些能夠接收紅石信號的東西。讓我們在A側(cè)放置一個紅石塊,O側(cè)放置一個紅石粉看看:
亮起來的紅石粉
┏O┓
B△C(插圖:91-4)
┗A┛
紅石塊
你會發(fā)現(xiàn)O側(cè)的紅石粉亮起來了。這是為什么?
因為紅石比較器在A側(cè)收到了紅石塊產(chǎn)生的紅石信號,于是就從O側(cè)輸出來了。那么問題來了:我們都知道紅石信號有強度等級之分,在普通的紅石線中傳遞的紅石信號每過一格就會衰減一級,直到完全沒有信號。那么紅石信號在穿過紅石比較器的過程中會發(fā)生衰減嗎?
由于紅石塊能夠產(chǎn)生出15級的紅石信號,因此我們只需要測試O側(cè)輸出的紅石信號是否為15級即可。我們當(dāng)然可以通過延長O側(cè)的紅石線路,觀察紅石信號是否傳遞了15格。但別忘了本書是一個指令教程,因此我們干脆直接用指令對O側(cè)的紅石粉進行方塊狀態(tài)測試:
/execute if block ~~~ minecraft:redstone_wire[power=15]——Java1.13及之后版本
/testforblock ~~~ minecraft:redstone_wire [power=15]——Java1.12.2-1.11
/testforblock ~~~ minecraft:redstone_wire [“redstone_signal“:15]——基巖版
雖然方塊狀態(tài)我們并沒有了解過,但也快了,這邊先預(yù)習(xí)一下也無妨。上面的指令的作用是:探測指令執(zhí)行地點(也就是你的位置)的方塊是否是紅石線,且power(redstone_signal)方塊狀態(tài)的值為15。其中,power(redstone_signal)方塊狀態(tài)的作用就是儲存該紅石粉的紅石信號強度等級。
站在O側(cè)的紅石粉上,根據(jù)你的版本選擇性運行上面的指令。如果指令運行成功,那么就代表著這個紅石粉具有15級的紅石信號,也就驗證了我們上述的猜想。那么實際情況怎么樣呢?
指令確實運行成功了。
這意味著什么呢?這意味著,紅石比較器不會導(dǎo)致紅石信號的衰減。但隨之而來就有另一個問題——紅石比較器會像紅石中繼器一樣增強信號嗎?
讓我們再測試一下,將上面的結(jié)構(gòu)改成下面這樣:
┊——究竟是14級還是15級?
┏O┓
B△C(插圖:91-5)
┗A┛
┊——14級紅石信號
┊——15級紅石信號
?
圖例
┊······紅石線
?······紅石塊
然后還是老樣子,對O側(cè)的紅石線進行方塊狀態(tài)測試,只需要把『15』改成『14』就行。那么結(jié)果如何呢?
指令也是成功運行!
如果你不放心,你還可以重新測試一下『15』的值,然后你就會發(fā)現(xiàn)指令執(zhí)行失敗。
所以說,總結(jié)下來,紅石比較器并不會導(dǎo)致紅石信號衰減,也不會增強紅石信號。借此原理,紅石比較器的第一個重要用途就出來了:
保持信號強度(插圖:91-6)
我們上面的討論都僅僅基于A后側(cè)輸入口和O輸出口,但紅石比較器還有兩個輸入口:B左側(cè)輸入口和C右側(cè)輸入口。這兩個輸入口有什么用呢?
說到這兩個輸入口,就不得不提——紅石比較器的模式。
紅石比較器具有兩種模式,可以通過觀察靠近O輸出口的那個紅石火把的開關(guān)狀態(tài)來判斷此時比較器處于哪種模式:
比較模式——O輸出口的紅石火把關(guān)閉
作差模式——O輸出口的紅石火把開啟
先來講講比較模式。當(dāng)紅石比較器處于比較模式時,B或C輸入口輸入的紅石信號強度會和A輸入口的紅石信號強度作比較,如果B或C>A則O不輸出,B或C≤A則O輸出,也就是像下面這樣子:
┊——0級
┏O┓(插圖:91-7)
B△C?
┗A┛
┊——14級
┊——15級
?
∵C=15,A=14
∴C>A
∴O=0(不輸出)
——————————
┊——14級
┏O┓(插圖:91-8)
B△C┈┈┈?(這里有3格的紅石線)
┗A┛
┊——14級
┊——15級
?
∵C=13,A=14
∴C<A
∴O=14(輸出)
懂了吧?需要注意的是,如果B和C都有輸入,那么游戲會先比較B和C,拿強度最大的和A比較:
空空┊——15級
空空┏O┓(插圖:91-9)
?┈┈B△C┈┈┈?
空空┗A┛
空空┊——15級
空空?
∵B=14,C=13
∴B>C
∵A=15
∴B<A
∴O=15(輸出)
紅石比較器的這個比較模式就是這樣,同時這可以引出比較器第二個重要用途:
比較信號強度
當(dāng)紅石比較器靠近O輸出口的紅石火把開啟時,紅石比較器就進入了『作差模式』。作差模式的紅石比較器會將A輸入口的紅石信號強度和B或C的紅石信號強度相減,并將相減后的紅石信號強度從O側(cè)輸出:
空空┊——1級
空空┏O┓(插圖:91-10)
?┈┈B△C┈┈┈?
空空┗A┛
空空┊——15級
空空?
∵B=14,C=13
∴B>C
∵A=15
∴O=A-B=15-14=1(輸出)
不難發(fā)現(xiàn),不管是在哪個模式,紅石比較器都會先比較B和C輸入口的信號強度,將最大的信號強度抽出來之后再操作A輸入口的信號強度。
這個『作差模式』也就是這樣,同時這也引出比較器第三個重要用途:
信號強度作差
那么比較器就這么講完了嗎?
No,因為紅石比較器還有第四個重要用途:
檢測方塊狀態(tài)、方塊實體和物品展示框
我們知道,紅石比較器可以檢測命令方塊上一次的執(zhí)行成功次數(shù),然后將次數(shù)轉(zhuǎn)化為紅石信號強度進行輸出。還可以檢測許多容器,以及各種東西,然后輸出特定的紅石信號。對于隔壁紅石來說,紅石比較器常常用來檢測容器內(nèi)物品數(shù)量,甚至是通過不可堆疊和可堆疊的物品不斷在漏斗內(nèi)運動,然后使用紅石比較器檢測,來達到『隨機數(shù)運算』的目的。只不過我們這邊不需要用到這么復(fù)雜的東西(其實那也沒多復(fù)雜),我們只需要能夠用紅石比較器檢測命令方塊的成功次數(shù)就行了:
┊——13級
┏O┓(插圖:91-11)
B△C
┗A┛
?
圖例
?······命令方塊,上次成功運行次數(shù)為13次
上面是一個簡易的例子——一個上次運行指令成功次數(shù)為13次的命令方塊,通過比較器成功將成功次數(shù)轉(zhuǎn)化為信號強度。
所以這就是本章的全部內(nèi)容了。
附錄:紅石比較器歷史
Java
1.5——加入了紅石比較器
1.6——能檢測末地傳送門框架和煉藥鍋了
1.8——能檢測物品展示框和蛋糕了
1.9——比較器現(xiàn)在能夠輸入紅石塊的紅石信號
1.14——能檢測講臺和堆肥桶
1.15——能檢測蜂巢和蜂箱
1.16——能檢測重生錨
1.17——能檢測幽匿感測體
攜帶/基巖版
Alpha0.14.0——加入了紅石比較器
1.0.0——可檢測末地傳送門框架
1.0.5——可檢測命令方塊
1.1.0——可檢測潛影貝
1.2.0——可檢測唱片機
1.11.0——可檢測煙熏爐、高爐、講臺和堆肥桶
......
......
......
......
我們知道,紅石信號等級上限為15,所以當(dāng)命令方塊的執(zhí)行成功次數(shù)等于甚至大于15時,紅石比較器就沒作用了。
真的嗎?
讓我們來看一個例子:
┊——6級
┏O┓(插圖:91-12)
B△C?
┗A┛
?
圖例
?······命令方塊,上次執(zhí)行成功次數(shù)為21次
?······紅石塊
這是一個處于『作差模式』的紅石比較器,不難發(fā)現(xiàn)它的O=6,C=15。所以它的A為多少呢?
A=O+C=21,也就是命令方塊執(zhí)行成功的次數(shù)
等等,不是說好紅石信號等級上限為15的嗎?怎么跑21去了?
嚴(yán)格來說,并不是說紅石信號等級上限為15,而是『紅石線的承載能力最大為15級』。所以如果我們不使用紅石線,也就不會把命令方塊的輸出壓到15級。
但是不使用紅石線我們該怎樣傳導(dǎo)大于15級的紅石信號呢?
用紅石比較器。
由于篇幅限制,我們這邊就不詳細展開,接下來就請你自行研究去吧!