第3章 命令方塊
- Minecraft指令手冊
- 你好MC
- 4341字
- 2020-01-03 21:25:00
(本章寫作時作者使用的是基巖版1.17.0版本和Java1.17.1版本)
(本章內容有可能有些難,推薦在游玩Minecraft的情況下閱讀本章)
(本章于2022年7月10日進行大規模修改)
在你不知道指令的時候,你是否在玩地圖的時候看到過一個五彩斑斕的方塊?當你因好奇嘗試去擼它的時候,你卻發現:這根本擼不動!
沒錯,這就是我們的命令方塊,英文名Command Block,命名空間ID為command_block,在MC指令圈中常常被簡寫成CB。你可以通過/give指令來獲得它,比如:
/give @s command_block
目前你不需要去了解這個指令到底是啥,怎么用,看下去就完事了。
如果你在輸入了以上指令以后都沒有獲得,那么你最好去檢查一下你的Minecraft游戲版本。你可以嘗試使用命令方塊的數字id:137。(/give 你的玩家名 137)
如果還是不行,請你看一下你的Minecraft版本是否低于JAVA1.4.2或者是攜帶版1.0.5。低于這兩個版本的Minecraft是沒有命令方塊的。
命令方塊有三種顏色,六種方向,具體為:
顏色:橙得一批、青得一批、紫得一批
方向:東西南北上下
命令方塊的硬度和基巖是一樣的,都是-1。
爆炸抗性也一模一樣,都是3600000。
命令方塊的三種顏色,各代表著3種不同的種類:
橙得一批的那個是脈沖,作用是你叫它動一下(接入紅石信號),它就動一下(執行一次命令),并會向其指向的鏈命令方塊發出執行信號。
紫得一批的那個是重復,作用是你叫它動一下(接入紅石信號),它就沒完沒了地動(每一游戲刻執行一次命令,一般1游戲刻=1/20秒),并且每動一下都會向其指向的鏈命令方塊發出執行信號。
青得一批的那個是鏈(又叫做連鎖),作用是你叫它動一下(接入紅石信號),它不會動。它只會在收到執行信號時,將該執行信號立馬傳遞給下一個它指向的鏈命令方塊,然后再根據當前條件判斷是否要執行。聽起來似乎有點復雜?舉個例子:
A→B→C→D→
其中,A是未被激活的脈沖命令塊,BCD三個命令方塊都是已被激活且無條件限制的鏈命令塊。當A激活時,ABCD將會同時執行指令,因為A激活時向B發出了執行信號,B收到后也向C發出了信號,C也向D發出了信號,三個鏈命令方塊也都沒有條件限制。(關于無條件是個什么東西,下面會講到)
關于鏈命令方塊還是比較復雜的,具體內容請到『第九十九章初識模塊-簡單的注冊/登錄系統下』了解。
而方向的話,有什么用呢?
上面我們講連鎖命令方塊時已經遇到過一次了:當你將一個未被激活的脈沖或循環命令方塊(A)指向另一個已被激活的連鎖命令方塊(B),那么當A被激活時,就會向B發出執行信號。(注意,B以及之后的CDE等一般都是連鎖,作為開頭的A一般是脈沖或循環命令方塊)
就像下面這樣(箭頭即該命令方塊的朝向,符號?代表此命令方塊被激活,符號?代表此命令方塊收到執行信號):
①A→B?→
②A?→B?→
③A?→B??→
但B并不一定會執行,還得看這個B是有條件(條件制約)還是無條件(不受制約)的。
另外,只要這一串命令方塊一直延伸下去,且除了第一個之外后面全都是鏈命令方塊,那么不管這些鏈命令方塊有沒有被激活、是否會真的執行指令、指令有無錯誤,信號仍然會一直傳遞下去,直到默認指定的最大值。
我們會在以后討論更加復雜的情況,也就是在第九十九章進行討論。在此之前,你可以自己做做實驗,猜猜規律。
需要注意,雖然通常情況下像這樣一個接著一個的命令方塊鏈是擺成一條直線的樣子,但你也可以像下面這樣擺成蛇形:
B←A
↓
C→D→
這也是沒有問題的。
甚至你對著放,也是沒有問題的:
B→←A
總的來說,命令方塊的方向決定了執行信號傳遞的方向。一串方向正確且能夠正常傳遞執行信號的命令方塊,就是一個命令方塊鏈。命令方塊鏈是命令方塊知識點中最難的一部分,搞懂這個,你基本上也就入門了。還是那句話,我們會在第九十九章詳細討論這東西,也就是命令方塊鏈和連鎖型命令方塊。
現在我們來打開命令方塊。
右鍵(鍵鼠模式)、按下RT(手柄模式)或點擊(觸屏模式)命令方塊以打開。打開命令方塊要滿足一定條件,Java版的條件是:處于創造模式,并且玩家權限等級至少為2(正常單人游戲都能打得開);基巖版是需要操作員權限(或者說玩家權限等級至少為1)。如果條件不滿足,是無法打開的。
至于玩家權限是什么東西。放心,我們會在第六章了解到玩家權限的相關內容。
打開命令方塊后,Java版的界面頂上是輸入框,框下面是一個“O”的按鈕,按了可以打開一個框,并且按鈕變成了“X”,這個框用途就是“顯示上次執行、檢查指令的結果”。
為什么還要多出一個檢查呢?檢查跟執行是不一樣的。當你修改完后退出界面,命令方塊會自己檢查一下,如果有錯會顯示一些信息,如果都正確那就什么也沒有發生。執行的話就不一樣了,執行就算正確也會顯示消息。這個框在Java版默認不顯示,在基巖版默認顯示,據說關掉可以讓游戲更流暢一點。
再下面是三個選項,分別顯示:
脈沖|不受制約|紅石控制
這三個選項具體的用途是:
第一個顯示脈沖的選項——選擇命令方塊種類,可以選擇『脈沖、連鎖和循環』,即上面介紹過的三種類型。
第二個顯示不受制約的選項——這可以選擇『不受制約』和『條件制約』(基巖版中是『無條件』和『有條件的』)。默認是選擇『不受制約』。下面我們會詳細了解這選項。
第三個顯示紅石控制的選項——這可以選擇『紅石控制』和『保持開啟』(基巖版中是『需要紅石』和『始終活動』)。默認是選擇『紅石控制』,即命令方塊必須要收到紅石信號后才能被激活。如果改成『保持開啟』,那么命令方塊將會始終處于激活狀態。
『不受制約』和『條件制約』分別有什么作用呢?
我們知道,命令方塊可以執行指令,而執行指令無非就兩種結果:指令執行成功和失敗。
命令方塊其實會保留其最后一次執行指令的結果,這個保留下來的結果并不是只能被我們也就是玩家所看見,它還有三個作用:
①被其他指令探測,將結果信息輸出到計分板中。
②被紅石比較器探測,將指令執行成功的次數轉化為紅石信號強度等級。
③屁股對著這個命令方塊的其他命令方塊可以檢測該命令方塊的指令是否執行成功,并根據該條件判斷自身是否需要執行指令。
前兩個作用我們會在以后了解到具體用法,第三個作用其實就對應著上面的『不受制約』那個選項。
命令方塊在執行前,如果這個命令方塊是『條件制約』的,那么它就會檢查一下它屁股對著的那個命令方塊最后一次執行指令是否執行成功,如果成功才會執行。比如下面的例子:
←B←A
A:循環,不受制約,始終活動
B:循環,條件制約,始終活動
A不管如何,除非游戲停止運行,它都會一直運行指令,每秒最高可以運行20次。
B不管如何,也會一直嘗試運行指令。只不過由于它是『條件制約』的,所以它在嘗試執行指令之前,會先檢查一遍A命令方塊是否運行成功,如果成功才會運行指令。
那么這有什么用呢?
假設A里面寫著一條指令,可以檢測半徑30m范圍內是否有怪物出現,而B里面寫著一條能夠發送警告消息的指令。如果半徑30m內一直沒有怪物出現,那么A的指令就會一直執行失敗,雖然B也在嘗試執行,但由于A一直失敗,B也就不會真正執行指令,也就是不會發出警報。但如果A突然執行成功了,也就是發現怪物,那么B就會真正執行指令,發出警報。
當然,像這種由兩個循環型命令方塊構成的命令方塊鏈十分少見,因為如果把B換成連鎖型,也可以達成一樣的效果,還可以降低一點CPU消耗,豈不美哉?
總而言之,條件制約的命令方塊在運行前會檢測其屁股后面的命令方塊最后一次運行指令是否成功執行,如果那個命令方塊最后一次成功運行了指令,這個命令方塊也會運行,反之則不會運行。對于不受制約的命令方塊來說,則并不會進行上述檢查,而是直接運行指令。
懂了吧?如果不懂,多多實踐即可。
基巖版的命令方塊界面和Java版大不相同——其界面有兩列,左側主要是對命令方塊本身狀態的一個設置,右側主要是用于填寫命令。
右側不用多說,這里需要講的是左側相比Java版多出來的內容。
左側最上面有一個“懸停說明”,舊版本是“懸浮文本”。這兒是修改命令方塊名字的地方,并且修改后的名字會直接作用在一些指令中,比如/say。而且,正如其言,這個名字還會懸浮在命令方塊上面,只不過用這個是無法做出浮空字的,因為這個浮空字僅僅會在玩家指向該命令方塊時才會出現。你也可以使用鐵砧重新命名命令方塊,并且這個方法Java版同樣適用。
命令方塊的默認名字在基巖版1.8.0及之后的版本是“!”,在Java版和基巖版1.8.0以下版本默認是“@”。
在“需要紅石|始終活動”選項的下面,還有一個“執行第一個已選項”的按鈕和一個“已選項中的延遲”框。這兩個東西的作用如下:
執行第一個已選項——命令方塊類型為循環時可用,默認開啟。開啟將會讓命令塊在激活后立即執行指令,關閉則會先延遲“已選項中的延遲”設定的時間,再執行。即:
開啟——激活命令方塊→執行→等待x游戲刻→執行→等待x游戲刻→執行......
關閉——激活命令方塊→等待x游戲刻→執行→等待x游戲刻→執行→等待x游戲刻→執行......
(x值為“已選項中的延遲”的值,1游戲刻=1/20秒)
已選項中的延遲——所有命令方塊類型均可用,默認為0,單位為游戲刻。對于脈沖和鏈命令塊來說,就是指定激活命令塊到執行指令的延遲。比如設定為5,那么:
激活→等待5游戲刻→執行
對于循環的命令塊來說,就是設定每次執行指令執行的間隔時間。比如設定為6,且關閉執行第一個已選項,那么:
激活命令方塊→執行→等待6游戲刻→執行→等待6游戲刻→執行.....
循環型命令方塊不管延遲是0還是1,結果都是延遲1游戲刻。而脈沖和鏈型命令方塊則不同,延遲是0即按下就立馬執行,1的話還是會延遲1游戲刻。
現在,讓我們嘗試在輸入框中輸入點東西。注意,命令方塊中輸入指令,“/”前綴是可以省略的,因為不必和普通聊天消息作區分。在Java版1.13及以上版本中,命令方塊中輸入指令也會有像聊天欄中輸入指令一樣的提示;1.13以下的版本雖然沒有提示,但也可以通過Tab鍵補全。
接下來你就自行研究吧,還是那句話,第九十九章我們會重新來研究命令方塊鏈。
要不然最后我們留點作業吧?
還是算了,畢竟現在你也不會寫些指令。
(一天,張三把一個命令方塊放到了一個礦車,然后.......)
[附表:命令方塊歷史]
Java
1.4.2——加入命令方塊
1.5——紅石比較器會輸出命令方塊成功運行的信號,命令方塊可用鐵砧重命名
1.6.1——命令方塊現在無法在生存模式中和爆炸中破壞
(冷知識,在Java舊版本,生存模式也可以打開命令方塊,并且可以破壞)
1.7.2——加入了“顯示上一個輸出”框,并將命令方塊字符上限重256增加到了16369,用修改器最大可達32767
1.8——發射器會放置命令方塊,命令方塊內字符上限達到了32767
1.8.6——發射器不再放置命令方塊
1.9——加入了連鎖、循環型命令方塊和方塊朝向、條件制約模式、保持開啟和紅石控制模式。操作權限等級小于2的玩家無法放置命令方塊
1.12——命令方塊鏈中的鏈命令方塊現在在同一游戲刻中執行,并加入了maxCommandChainLength規則以規定命令塊鏈的最大長度
攜帶版/基巖版
1.0.5——加入命令方塊
1.8.0——更改命令方塊默認名稱重@到!
1.12.0——加入了已選項中的延遲和執行第一個已選項