Template:BlockTileEntity
指令方塊(Command Block)是一種用以執行指令的方塊。因為生存模式中只能透過作弊獲得,它常用在多人伺服器與自訂地圖中。
取得
指令方塊可以透過選取方塊鍵或各種指令,比如/give @s minecraft:command_block(java 版)/give @s command_block(基岩版)獲得。
就像其他的方塊實體一樣,指令方塊有對應的方塊實體,能夠儲存NBT資料,使用ctrl + 選取方塊會複製指令方塊內的指令和設定。這允許它被放置在別的地方時無須重新輸入裏面的資料。
指令方塊不在創造模式物品欄中,不能在生存模式中或以非管理員身份破壞,不能被點燃,有和基岩一樣的爆炸抗性。指令方塊不能被活塞推動。
用途
例如,連鎖式指令方塊稱為連鎖方塊,等等
指令方塊可以被紅石訊號所開啟。此項沒有權限限制,可以被一些通常情況不能使用指令的玩家執行一個特定的指令(比如,允許所有人透過/give獲得一件特定的物品,而不是讓他們用/give獲得任何他們想要的東西)。
指令方塊會擁有朝向(facing),決定哪個連鎖方塊會受到感應,「條件制約」模式的指令方塊會受哪個指令方塊控制。
設定
指令方塊GUI
要輸入或修改指令,對指令方塊點擊使用鍵以打開指令方塊GUI(圖形使用者介面)。GUI只會在玩家處於創造模式, 擁有相關權限才會打開。在單機遊戲裏,作弊必須開啟才可以編輯指令方塊。在多人遊戲中,只能由創造模式中的管理員所編輯。為了使指令方塊能工作,以下在server.properties的配置必須設定為:
enable-command-block必須為trueop-permission-level必須為2及以上(預設為4)
- 控制台指令
- 指令可被輸入到第一個文字框。指令方塊的指令長度限定在32,500個字元以內,但這個文字框一次只能顯示其中的一小段。按Tab ↹可以補全指令且循環代入可選項。
- 指令方塊內的指令可以加斜槓前綴(
/),就像在聊天框使用時的那樣,但這不是必需的。
- 在指令文字框下是一些如何使用目標選擇器的小提示。
- 上一個輸出
- 下方的文字框顯示上一個指令的輸出。這裏的文字無法編輯。
- 文字框右邊的按鈕設定上一個輸出是否儲存並顯示。它設定輸出將隱藏時為
O(預設),將顯示時為X。當世界中有很多指令方塊,尤其是電路高速運轉時,不顯示輸出可以減少記憶體使用以處理很多請求。
- 脈衝/循環/連鎖
- 點擊「脈衝/連鎖/循環」按鈕可變更指令方塊類型。預設為「脈衝」,但非預設類型的指令方塊也能被放置。指令方塊改變類型時也會改變顏色:
- 「脈衝」方塊是橙色的。這種方塊是「標準」的指令方塊,啟動一次執行一次指令。
- 「連鎖」方塊是綠色的。這種方塊只在指向它的方塊執行指令時才會執行指令。這不同於條件制約模式,連鎖方塊檢測的是指向著它的指令方塊,而不是在它後面。指向它的指令方塊不必是連鎖方塊。
- 「循環」方塊是紫色的。這種方塊被啟動時每一遊戲刻都執行一次指令。
- 條件制約/不受制約
上方:「不受制約」模式的指令方塊 下方:「條件制約」模式的指令方塊
- 點擊「條件制約/不受制約」按鈕來改變指令方塊的條件制約行為:
- 「條件制約」:只有當背後的指令方塊成功執行指令時才會執行指令 ("背後" 的意思是指令方塊的指向的反方向,無視連鎖方向)。
- 「不受制約」(預設):指令方塊將忽略背後的方塊。
- 保持開啟/紅石控制
- 點擊「保持開啟/紅石控制」按鈕改變指令方塊的開啟需求條件:
- 「紅石控制」(脈衝方塊和循環方塊的預設設定):指令方塊必須像紅石機械一樣啟動才能執行指令。
- 「保持開啟」(連鎖方塊的預設設定):指令方塊甚至在沒有紅石訊號時也會保持為開啟狀態 (連鎖式指令方塊將在感應後執行指令, 重複型指令方塊將在每一遊戲刻執行一次指令(每秒20次),脈衝型指令方塊在設定完畢後將立即啟動,且此後將無法再次執行)。
- 完成
- 點擊「完成」按鈕或按↵ Enter以儲存指令並退出指令方塊GUI。
- 取消
- 點擊「取消」按鈕或按Esc在不儲存任何修改的情況下退出指令方塊GUI。
啟動
指令方塊屬於紅石機械 且能由以下物件啟動:
- 毗鄰的電源:例如紅石火把(紅石火把附著於指令方塊上時除外)、紅石方塊、日光感測器、按鈕等等;
- 毗鄰的充能方塊;
- 輸出訊號且指向向指令方塊的紅石比較器或紅石中繼器;
- 啟動的且指向指令方塊(或附著其上)的紅石粉或是毗鄰的點狀紅石粉。
指令方塊有1遊戲刻的延遲,當它受到紅石更新時將在1遊戲刻後做出反應(啟動或撤銷啟動)。
當被啟動時,指令方塊將嘗試執行它的指令。啟動後的動作將取決於指令方塊的類型:
- 指令方塊(「脈衝型」)會在剛啟動時嘗試執行指令一次。
- 連鎖的指令方塊(「連鎖型」)將在指向它的指令方塊執行指令後才會執行指令。
- 循環中的指令方塊(「循環型」)將會在每個遊戲刻都嘗試執行一次指令直到不再被啟動為止。
連鎖執行
如果一個指向連鎖方塊的指令方塊被啟動了,它將向連鎖方塊發出準備執行指令的訊號。連鎖方塊只有在被啟動開啟時,在「條件制約」模式下還要在背後的指令方塊成功執行指令時(背後針對指向而言,不是說某個指令方塊接入連鎖的方向),才會執行指令。不管這個連鎖方塊是否執行指令,只要指向另一個連鎖方塊,它也同樣會發送出準備執行指令的訊號。
連鎖中的方塊將在同一遊戲刻執行指令。連鎖執行的訊號無法傳遞給一個已經在這個遊戲刻執行過指令的方塊。
輸出
當啟動時,指令方塊可以有幾種不同類型的輸出:
- 紅石比較器
- 指令方塊可以向背對它的紅石比較器輸入一個訊號,強度取決於上一個指令的執行情況的訊號(例如,被指令所影響的玩家數)。
- 訊號強度一直根據上一個指令的執行情況保持,即使是在指令方塊關閉之後。
- 訊息
- 輸出訊息描述執行指令的成功與否,會有幾種輸出位置:
- 上一個輸出:輸出訊息都會寫入指令方塊GUI的「上一個輸出」文字框裏。
- 聊天框:輸出資訊將在單人模式下或多人模式下對所有管理員寫入聊天框,除非已經用
/gamerule commandBlockOutput false攔截。一些指令可能會在聊天框寫入其正常工作時的附帶文字,這不會被攔截。(比如,/say指令將在所有玩家的聊天框寫入訊息)。帶有執行者的名字作為前綴的聊天資訊(比如指令/me,/say和/tell)會使用@作為執行者名字。如果指令方塊在放置前已經被命名過,那麼就使用這個名字。
- 日誌:輸出資訊會寫入到多人聯機伺服器日誌,除非使用
/gamerule logAdminCommands false攔截。
- 指令統計
- 指令方塊可以推送多種成功結果到計分板目標,包括:
- SuccessCount:成功的次數(之前也能用紅石比較器輸出,但不會限制到15)
- AffectedBlocks:被修改的方塊的個數
- AffectedEntities:被修改的實體的個數,包括玩家
- AffectedItems:被修改的物品的個數
- QueryResult:指令的回傳值
備註
以下指令不能在指令方塊中使用:/ban、/banlist、/ban-ip、/debug、/deop、/kick、/op、/pardon、/pardon-ip、/publish、/reload、/save-all、/save-off、/save-on、/stop和/whitelist(也就是/debug、/publish和所有除了/list外的多人遊戲指令)。
以下指令可以使用但功能受限(它們的輸出只會在指令方塊的「上一個輸出」文字框顯示而不是聊天框):/help、/seed、/list、/scoreboard objectives、/scoreboard players 和 /team list。
以下指令會在輸出中用到指令方塊的名字(預設為@):/me、/say和/tell。
彩蛋
在指令方塊中不加「/」執行指令「Searge」會把上一個輸出設為「#itzlipofutzli」。另外,如果在指令方塊中執行/help,它會給出一些帶有「Searge says:(Searge說:) 」前綴的資訊。
資料值
指令方塊擁有ID名稱minecraft:command_block並在方塊資料 和 方塊實體中有更深的定位。指令方塊也有 方塊狀態旨在未來的版本中取代方塊資料,
ID
指令方塊的ID決定於其類型:
| 名稱 | ID 名稱 | 數字ID |
|---|---|---|
| 指令方塊 | minecraft:command_block |
137 |
| 重複型指令方塊 | minecraft:repeating_command_block |
210 |
| 連鎖式指令方塊 | minecraft:chain_command_block |
211 |
| 方塊實體 | minecraft:command_block |
- |
方塊資料
指令方塊的方塊資料用於確定方塊是否處於開啟狀態:
| 位元 | 數值 |
|---|---|
| 0x1 0x2 0x4 |
3個位元的空間儲存了指令方塊的朝向
6 和 7 未被使用但會造成指令方塊分別朝下和朝上 |
| 0x8 | 決定該方塊的條件制約狀態 |
方塊實體
指令方塊有包含方塊附加資料的方塊實體。方塊的方塊實體ID為command_block。
- 方塊實體資料
- 方塊實體共通標籤
- auto:表示此指令方塊是否保持開啟。
- Command:指令方塊中的指令。
- conditionMet:表示受條件制約的指令方塊是否滿足條件。如果此指令方塊不受制約,此值為true。
- CustomName:表示目前指令方塊名稱的JSON文字,預設為「@」。
- LastOutput:上一條指令的輸出,是一個JSON文字。遊戲規則
commandBlockOutput為false時依舊會儲存。當 TrackOutput為false時不存在。 - LastExecution:上一條指令執行的時間戳。當 UpdateLastExecution為false時不存在。
- powered:表示指令方塊是否已被啟動。
- SuccessCount:表示用紅石比較器輸出的模擬訊號強度。只在指令方塊啟動後更新。
- TrackOutput:表示是否儲存上一條指令的輸出。可以在GUI中點擊"上一個輸出"文字框旁的按鈕進行開關。按鈕上的標誌指示出目前的狀態:O為true,X為false。
- UpdateLastExecution:表示是否儲存上一條指令執行的時間戳。
基岩版:
- 方塊實體資料
- 方塊實體共通標籤
- Command:指令方塊內的指令。
- Version:資料版本。
- SuccessCount:成功次數,表示紅石比較器輸出的訊號強度。
- CustomName:指令方塊的自訂名稱,顯示在方塊頂部以及GUI內。
- LastOutput:由指令方塊最新的一行輸出的本地化鍵名。在遊戲規則
commandBlockOutput被設定為false時仍會儲存。在指令方塊的GUI中顯示。 - LastOutputParams:輸出的本地化字串的參數列表。
- :具體參數。
- TrackOutput:用於決定是否儲存
LastOutput。可以在指令方塊UI內的「上一個輸出」旁邊的按鈕進行控制。 - LastExecution:儲存指令方塊最後一次執行指令的時間。
- TickDelay:執行每次指令的間隔時間(刻)。
- ExecuteOnFirstTick:在儲存或啟動後在首個刻執行指令時為true。
方塊狀態
| 名稱 | 預設值 | 接受值 | 描述 |
|---|---|---|---|
| conditional | false | truefalse | 當指令方塊為條件制約模式時為「true」 |
| facing | north | northsoutheastwestupdown | 指令方塊的朝向 |
基岩版:
| 名稱 | 對應的附加值位 | 預設值 | 接受值 | 附加值位的值 | 描述 |
|---|---|---|---|---|---|
| conditional_bit | 0x8 | false | falsetrue | 01 | 當指令方塊為條件制約模式時為「true」 |
| facing_direction | 0x10x20x4 | 0 | 012345 | 012345 | 指令方塊的朝向
|
歷史
| Java版 | |||||
|---|---|---|---|---|---|
| 2012年7月27日 | Jeb開始發一些關於擴展生存模式的新方塊的推文。他開始推送一些圖片,想法和方塊將來用法的線索。 | ||||
| 2012年7月31日 | 當Notch在他的AMA中暗示這個方塊會在1.4中出現。 | ||||
| 1.4.2 | 12w32a | ||||
| 1.5 | 13w03a | 指令方塊的成功執行可用紅石比較器輸出訊號。 | |||
| 13w04a | 用鐵砧重新命名的指令方塊在聊天框中會用其名字代替@。 | ||||
| 1.6.1 | 13w19a | 指令方塊在生存模式中不再可破壞,也不會在爆炸中破壞,但藍色的凋零骷髏頭顱除外。 | |||
| 1.7.2 | 13w37a | 加入了一個顯示上一個輸出的框。 | |||
| 增加遊戲內輸入指令的字元限制從256到16,369。使用第三方編輯器可以達到32767個字元。 | |||||
| 1.8 | 14w07a | 發射器會放置指令方塊,而不是發射它。 | |||
| 14w20a | 移除了遊戲內16369的字元限制,允許達到最高的32767個字元。 | ||||
| 14w27a | 加入了CommandStatsNBT標籤。 | ||||
| 1.8.6 | 發射器不再放置指令方塊。[2] | ||||
| 1.9 | 15w34a | ||||
| 加入了方塊朝向。 | |||||
| 15w34b | 加入了條件制約模式。 | ||||
| 15w35a | |||||
加入了保持開啟和紅石控制選項。加入了autoNBT標籤負責控制此項。 | |||||
| 設定為條件制約模式後,指令方塊箭頭尾部會彎曲。 | |||||
| 15w36a | 不能使用像/give這類指令的玩家不再能放置指令方塊。 | ||||
| 15w36d | 不同類型的指令方塊現在在地圖上將顯示不同的顏色。 | ||||
| 16w02a | 現在在指令方塊中執行/help將隨機使用各種不同的幽默短語作為上一個輸出。 | ||||
| 16w04a | 在指令方塊中不帶「/」將「Searge」作為指令執行,輸出會變成「#itzlipofutzli」。 | ||||
| 1.11 | 16w32a | 方塊實體ID由Control變更為command_block。 | |||
| 1.12 | 17w16a | 連鎖式指令方塊不再安排指令鏈中的指令在下一刻執行了,現在這些指令會在被讀取後的同一刻執行。這使之後放置的方塊可以經由之前放置的方塊被修改,由此可以在一個遊戲刻內實現分支、循環等手法。 | |||
加入了遊戲規則maxCommandChainLength以決定連鎖式指令方塊執行的限度。 | |||||
| 17w17a | 加入了NBT標籤UpdateLastExecution和LastExecution,可以控制對儲存連鎖式指令方塊最後執行的那一刻的跟蹤。 | ||||
| pre6 | 指令方塊中使用Tab鍵來自動補全的指令名稱不再加入/前綴。 | ||||
| 1.13 | 17w47a | 在平坦化之前,指令方塊、循環型、連鎖式指令方塊的數字ID分別為137、210、211。 | |||
| pre1 | 玩家現在可以重新用tab鍵補全指令了。 | ||||
| 1.14 | 18w43a | ||||
| 18w47b | |||||
| 攜帶版 | |||||
| 1.0.5 | alpha 1.0.5.0 | ||||
| 基岩版 | |||||
| 1.8.0 | beta 1.8.0.8 | 指令方塊現在的預設名稱為!而不是@。 | |||
| 1.10.0 | beta 1.10.0.3 | ||||
| 1.12.0 | beta 1.12.0.2 | 加入了自動完成功能。 | |||
| 加入了延遲選項。 | |||||
| 原主機版 | |||||
| TU19 | CU7 | 1.12 | Patch 1 | ||
| 指令方塊沒有任何功能。 | |||||


