指令/execute

出自Minecraft Wiki
跳至導覽 跳至搜尋
  關於Java版1.1317w45a)和基岩版1.19.501.19.50.23)前的此指令,請見「指令/execute/舊版」。
execute
需要的權限等級

啟用作弊[僅基岩版]

/execute是各不同功能的子指令的集合,用於改變指令執行上下文修飾子指令),執行邏輯判斷(條件子指令)和管理並儲存指令回傳值(儲存子指令[僅Java版],並在此基礎上執行任意其他指令。

用法[編輯 | 編輯原始碼]

子指令[編輯 | 編輯原始碼]

/execute指令有14[僅JE]/11[僅BE]條子指令。子指令按功能可分為以下幾類:

  • 修飾子指令:修改指令上下文以改變指令執行時的狀態,從而以特定的執行位置、執行基準點、執行者、執行朝向、執行維度執行後續子指令。
  • 條件子指令:檢測特定條件是否成立並輸出結果,或限制子指令執行的條件。
  • 儲存子指令[僅Java版]:將指令回傳值儲存至方塊實體實體或儲存容器的NBT資料中,計分板的計分板目標中,或Boss狀態條的目前值或最大值中。
  • run子指令:執行其他指令。

子指令可以在/execute後串連在一起使用,可出現在指令的任意位置及重複任意次數。run子指令除外,其只能位於末尾且只能使用一次。

指令結尾必須為條件子指令或run子指令,否則指令不可解析。

各子指令按其在指令中的順序被依次處理,下列指令中子指令雖然一致,但由於順序不同,會產生不同效果:

  • /execute as @e at @s run tp ^ ^ ^1:所有實體向各自所朝方向移動一格。
  • /execute at @s as @e run tp ^ ^ ^1:所有實體移動到執行者前方一格。

執行分支[編輯 | 編輯原始碼]

有些子指令,可以將指令的執行過程分叉(Fork)為多個分支(Branch),也就是使得後續的子指令被多次執行。例如,如果as子指令選中了多個實體,那麼每個實體都會執行一次後續的子指令。

如果一個/execute指令沒有被分叉,我們稱它只有一個分支——主分支

有些情況下,一個分支會執行中斷,並且什麼也不做(不執行run子指令和儲存子指令[僅Java版])。例如,條件子指令的條件沒有達成,或是as子指令沒有選中實體,等等。在基岩版中,一個分支中斷時會顯示一條紅色的訊息。如果所有的分支都中斷了,我們就說這個/execute指令本身執行中斷

注意:... run execute ...在任何情況下都不會起任何作用。例如下面的兩個指令,效果都是一樣的:

  • /execute as @e[type=armor_stand] as @e[type=armor_stand] run summon armor_stand
  • /execute as @e[type=armor_stand] run execute as @e[type=armor_stand] run execute run execute run summon armor_stand

然而,Java版基岩版的分叉方式並不一樣。[1][2]

  • Java版中,遊戲會廣度優先地處理子指令,也就是按順序逐個處理子指令。所以遊戲會在處理run子指令之前處理完其他的子指令,於是,run子指令無法影響到其他的子指令。
  • 基岩版中,遊戲會深度優先地處理子指令。也就是說,指令執行分叉以後,後續的所有子指令會作為一個整體,每個分支執行一次。
  • 例如,如果世界上有兩個盔甲座(A和B),一個玩家執行了execute as @e[type=armor_stand] as @e[type=armor_stand] run summon armor_standJava版基岩版的行為如圖所示:

Java版中,可以利用/function達到深度優先的效果,例如:

  • 世界上有兩個盔甲座,一個玩家執行了/execute as @e[type=armor_stand] run function test,其中函數test的內容是:
    • execute as @e[type=armor_stand] run summon armor_stand
  • 這樣的效果和基岩版中的/execute as @e[type=armor_stand] as @e[type=armor_stand] run summon armor_stand是一樣的。

基岩版中,暫時無法做到廣度優先地執行子指令。

輸出[編輯 | 編輯原始碼]

主條目:指令 § 輸出

儲存值[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版

Java版中,一條分支在完整執行後(沒有發生執行中斷)會輸出success值和result值(另見指令#輸出)。這兩個輸出值:

  • 是各執行分支的輸出值,而非/execute指令本身的;
  • 均來自結尾的條件子指令或run子指令中的指令;
  • 均為整數,result遇小數時向下取整,success總為0或1;
  • 如果結尾的子指令在一個分支中執行失敗,則此分支的這兩個值均為0;
  • 均可由儲存子指令[僅Java版]儲存。

請注意,這兩個值來自結尾的條件子指令或run子指令中的指令,是每個分支的輸出值,而非整條/execute指令的。

若使用run子指令執行/function指令,在某些條件下沒有這兩個輸出值。詳細資訊參見/function

如果在儲存子指令之後指令執行被分叉,則儲存操作將應用於每個分支。每個分支的輸出值都會在此分支執行完後被儲存。如果所有分支的儲存位置相同,則後執行的分支的輸出會直接覆蓋先執行分支的輸出,而不是累加,所以在執行整個/execute指令後,此儲存位置最後的值是最後執行的分支的輸出。

成功次數[編輯 | 編輯原始碼]

像大多數指令一樣,/execute指令(無論是否執行中斷)本身也有一個成功次數。成功次數:

  • /execute指令本身的輸出值,而非各執行分支的;
  • 來自結尾的條件子指令或run子指令;
  • 各分支的值會被累加;
  • 為大於等於0的整數;
  • 當使用指令方塊執行/execute時,成功次數會回傳到指令方塊中,可用條件制約的指令方塊檢查,或用紅石比較器讀取成功次數。

語法樹[編輯 | 編輯原始碼]

下面列出了各子指令及其語法的語法樹。其中的所有-> execute[僅Java版]chainedCommand: ExecuteChainedOption_0[僅基岩版]表示此位置可作為下一個子指令的起始點。

修飾子指令[編輯 | 編輯原始碼]

可用子指令:

  • align:將執行位置轉換為方塊座標。
  • anchored:將執行基準點設定為實體的腳部或眼部。
  • as:將執行者設定為特定實體。
  • at:將執行位置、執行朝向和執行維度設定為指定實體的座標、朝向和維度。
  • facing:將指令的執行朝向設定為面向指定座標或指定實體。
  • in:將指令執行維度設定為特定維度。
  • on[僅Java版]:將執行者設定為與目前執行者有指定類型的關係的實體。
  • positioned:將執行位置設定為指定座標或指定實體位置。
  • rotated:將執行朝向設為特定方向或設為指定實體的朝向。
  • summon[僅Java版]:立即建立一個實體,並將此實體設定為執行者。

align[編輯 | 編輯原始碼]

將執行位置轉換為方塊座標(向下取整)。
語法
JEalign <axes> -> execute
BEalign <axes: string> <chainedCommand: ExecuteChainedOption_0>
參數
JE<axes>swizzle
BEaxes: stringbasic_string
需要轉換的座標軸。
必須為xyz三個字元的組合。字元的順序沒有要求,但是不可以重複出現。
結果
改變執行座標,指定軸上的座標向下取整。
參數未正確指定時,視為語法錯誤。
示例
  • /execute positioned -1.8 2.3 5.9 align xz run tp ~ ~ ~:把自己從(-1.8, 2.3, 5.9)傳送至(-2, 2.3, 5)。
  • /execute positioned 2.4 -1.1 3.8 align yxz run spawnpoint @p ~ ~ ~:目前執行位置為(2.4, -1.1, 3.8),將最近玩家的重生點設定為(2, -2, 3)。
  • /execute align y run tp ~ ~ ~:把自己的Y座標微調,向下取整。

anchored[編輯 | 編輯原始碼]

將執行基準點設定為實體的腳部或眼部,預設為腳部。
語法
JEanchored <anchor> -> execute
BEanchored <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
參數
JE<anchor>entity_anchor
BEeyes|feet
需要設定的基準點位置。
必須為實體錨點(eyesfeet)。eyes為眼部,feet為腳部。
結果
局部座標的執行基準點設為眼睛或腳,並改變facing子指令所指向的位置。
參數未正確指定時,視為語法錯誤。
示例
  • /tp的效果是透過將腳部移動到指定的位置來移動實體。
  • /execute anchored eyes run tp ^ ^ ^:將指令執行者的腿部移動到原眼部位置。
  • /execute anchored eyes run tp ^5 ^ ^:將指令執行者的腿部移動到原眼部位置左邊5格的位置上。

as[編輯 | 編輯原始碼]

將執行者設定為特定實體,但不改變其他指令變數。
語法
JEas <targets> -> execute
BEas <origin: target> <chainedCommand: ExecuteChainedOption_0>
參數
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
需要設定的執行者,影響後續子指令。
必須為玩家名、目標選擇器UUID[僅Java版]
結果
將執行者改為目標實體(改變@s的含義)。
參數未正確指定時,視為語法錯誤。
<targets>origin: target無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
當選擇到多個實體時,以各個實體為執行者分別執行一次後續子指令。
示例
  • /execute as @e[type=sheep] run data get entity @s[僅Java版]:取得所有綿羊的資料。
  • /execute as @a[gamemode=spectator] run spectate[僅Java版]:使所有旁觀者模式的玩家從其附身的實體上退出。

at[編輯 | 編輯原始碼]

將執行位置、執行朝向和執行維度設定為指定實體的座標、朝向和維度,不改變指令執行者。
語法
JEat <targets> -> execute
BEat <origin: target> <chainedCommand: ExecuteChainedOption_0>
參數
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
指定目標實體。
必須為玩家名、目標選擇器UUID[僅Java版]
結果
將指令的執行位置、朝向和維度更改為目標實體的。(影響相對座標局部座標的定位)
參數未正確指定時,視為語法錯誤。
<targets>origin: target無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
當選擇到多個實體時,以各個實體的位置、朝向和維度,分別執行一次後續子指令。
示例
  • /execute at @r run setblock ~ ~-1 ~ stone:在一名隨機玩家腳下放置一塊石頭
  • /execute as @e[type=sheep] at @s run tp ~ ~1 ~:將所有綿羊向上移動1格。
  • /execute at @e[type=sheep] run kill @s:殺死執行者而非所有綿羊(at子指令不修改執行者)。

facing[編輯 | 編輯原始碼]

將指令的執行朝向設定為面向指定座標或指定實體,不改變指令執行者和執行位置。
語法
JEfacing <pos> -> execute
BEfacing <position: x y z> <chainedCommand: ExecuteChainedOption_0>
將指令的執行朝向設定為執行基準點到指定座標的射線方向。
JEfacing entity <targets> <anchor> -> execute
BEfacing entity <origin: target> <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
將指令的執行朝向設定為執行基準點到指定實體的指定基準點的射線方向。
參數
JE<pos>vec3
BEposition: x y zCommandPositionFloat
需要面向的座標。
必須為三維座標,元素為倍精度[僅Java版]單精度[僅基岩版]浮點數。允許相對座標~ ~ ~)或局部座標^ ^ ^)。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
需要面向的實體。
必須為玩家名、目標選擇器UUID[僅Java版]
JE<anchor>entity_anchor
BEeyes|feet
需要面向實體的眼部還是腳部。
必須為實體錨點(eyesfeet)。
結果
將執行朝向設定為面向指定的座標或目標實體。
參數未正確指定時,視為語法錯誤。
<targets>origin: target無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
當選擇到多個實體時,以各個實體的朝向分別執行一次後續子指令。
示例
  • /execute facing ^1 ^ ^ run tp @s ~ ~ ~ ~ ~:將執行者的視角左轉90度。
  • /execute as @e at @s facing 0 64 0 run tp ^ ^ ^1:將所有實體都朝(0, 64, 0)的方向移動一格(不改變自身朝向)。
  • /execute as @e at @s facing 0 64 0 run tp @s ^ ^ ^1 ~ ~:將所有實體都朝(0, 64, 0)的方向移動一格(改變自身朝向)。
  • /execute as @e[type=!player] at @s facing entity @p feet run tp ^ ^ ^1:所有非玩家實體朝著各自距離最近的玩家的方向移動一格(不改變自身的朝向)。

in[編輯 | 編輯原始碼]

將指令執行維度設定為特定維度。指令將在指定的維度中執行。
語法
JEin <dimension> -> execute
BEin <dimension: Dimension> <chainedCommand: ExecuteChainedOption_0>
參數
JE<dimension>dimension
BEdimension: Dimensionenum
需要設定的維度。
必須為命名空間ID,將會在指令執行時嘗試取得對應的維度minecraft命名空間下的維度預設有overworldthe_nether[僅Java版]/nether[僅基岩版]the_end
結果
更新執行維度。並依據原維度與現維度間關係,按比例縮放相對座標和局部座標(不包括Y軸)。
參數未正確指定時,視為語法錯誤。
示例
  • /execute in the_end run locate structure end_city:從任意維度中定位終界中的終界城。
  • /execute in the_nether positioned as @s run tp ~ ~ ~[僅Java版]:將玩家傳送到地獄中的對應位置。
  • /execute in the_nether run tp ~ ~ ~[僅Java版]:將玩家傳送到地獄中的對應位置。若玩家原先位於其他維度的(X, Y, Z)處,則傳送到地獄的(X÷8, Y, Z÷8)處。
  • /execute in nether run tp ~ ~ ~5[僅基岩版]:將玩家傳送到地獄中的對應位置。若玩家原先位於其他維度的(X, Y, Z)處,則傳送到地獄的(X÷8, Y, Z÷8+5)處。

on[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
將執行者設定為與目前執行者有指定類型的關係的實體。
語法
JEon (attacker|controller|leasher|owner|passengers|target|vehicle) -> execute
參數
JE(attacker|controller|leasher|origin|owner|passengers|target|vehicle)
attacker:最近5秒內對目前執行者造成傷害的最後實體。
controller:控制目前執行者的實體。
leasher:用拴繩牽引目前執行者的實體。
origin:目前執行者的來源。
若目前執行者為投射物,則為其發射者。
若目前執行者為物品,則為其擲出者。
若目前執行者為藥水效果雲,則為其來源者。
若目前執行者為點燃的TNT,則為其點燃者。
若目前執行者為喚魔者尖牙惱鬼,則為其召喚者。
owner:目前執行者為可馴服生物時,此實體的主人。
passengers:直接騎乘於目前執行者的實體。若有多個騎乘於目前執行者的實體,則實體選擇順序和騎乘先後順序相同。
target:取得帶目標實體的目標。目前,所有AI生物和互動實體均屬於帶目標實體。
若目前執行者屬於AI生物,則取得該生物記憶中的攻擊目標。
若目前執行者為互動實體,則為其NBT複合標籤/JSON物件interaction整型陣列player所代表的玩家。
若為其他實體,則回傳為空。
vehicle:正在被目前執行者騎乘的實體。
結果
若指定的關係不適用於目前執行實體,或此關係下沒有匹配實體,則回傳0個元素。
參數未正確指定時,視為語法錯誤。
若此參數無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
示例
/execute as @e[type=sheep] on attacker run kill @s:殺死5秒內對附近可檢測到的所有綿羊發起攻擊動作的所有最後一個實體。
/execute as @e[type=cat] on leasher run damage @s 2 generic:給拴著貓的實體施加2(♥點普通傷害。

positioned[編輯 | 編輯原始碼]

將執行位置設定為指定座標或指定實體位置,但不改變執行者、執行朝向和執行維度。
語法
JEpositioned <pos> -> execute
BEpositioned <position: x y z> <chainedCommand: ExecuteChainedOption_0>
將執行位置設定為指定座標。
JEpositioned as <targets> -> execute
BEpositioned as <origin: target> <chainedCommand: ExecuteChainedOption_0>
將執行位置設定為指定實體位置。
JEpositioned over <heightmap> -> execute
將執行位置設定為符合特定高度圖的一縱列方塊的最高的位置。
參數
JE<pos>vec3
BEposition: x y zCommandPositionFloat
指定指令執行的座標。
必須為三維座標,元素為倍精度[僅Java版]單精度[僅基岩版]浮點數。允許相對座標~ ~ ~)或局部座標^ ^ ^)。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
指定指令執行的位置為此處指定的實體所處的座標。
必須為玩家名、目標選擇器UUID[僅Java版]
JE<heightmap>heightmap
指定高度圖。值須為world_surface、​motion_blocking、​motion_blocking_no_leaves和​ocean_floor中之一。
結果
改變指令的執行位置。positioned <pos>會將執行基準點設定為腳部。
參數未正確指定時,視為語法錯誤。
<targets>origin: target無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
當選擇到多個實體時,以各個實體的位置分別執行一次後續子指令。
示例
  • /execute positioned 0 64 0 run locate structure #village[僅Java版]:尋找離座標(0, 64, 0)最近的村莊。
  • /execute positioned 0 64 0 run locate structure village[僅基岩版]:尋找離座標(0, 64, 0)最近的村莊。

rotated[編輯 | 編輯原始碼]

將執行朝向設為特定方向,或設為指定實體的朝向,但不改變執行者和執行位置。
語法
JErotated <rot> -> execute
BErotated <yaw: value> <pitch: value> <chainedCommand: ExecuteChainedOption_0>
將指令的執行朝向設為特定方向。
JErotated as <targets> -> execute
BErotated as <origin: target> <chainedCommand: ExecuteChainedOption_0>
將指令的執行朝向設為指定實體的朝向。
參數
JE<rot>rotation<yaw> <pitch>
BEyaw: valueRelativeFloatpitch: valueRelativeFloat
需要的旋轉角度。
必須由兩個倍精度浮點數[僅Java版]單精度浮點數[僅基岩版]組成,分別表示繞Y軸旋轉和繞X軸旋轉,以度為單位。分別對應實體資料NBT陣列/JSON陣列Rotation的兩個元素。
  • 繞Y軸旋轉時,-180.0表示北,-90.0表示東,0.0表示南,90.0表示西。
  • 繞X軸旋轉時,豎直上方為-90.0,至豎直下方90.0。
加上波浪號前綴將相對於執行朝向進行旋轉。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
採用指定實體的朝向。
必須為玩家名、目標選擇器UUID[僅Java版]
結果
參數未正確指定時,視為語法錯誤。
<targets>實體不存在時指令終止執行。
<targets>origin: target無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。
當選擇到多個實體時,以各個實體的朝向分別執行一次後續子指令。
示例
  • /execute as @e[type=sheep] at @s rotated as @p run tp @s ^ ^ ^1:讓所有的綿羊以各自距離最近玩家的朝向作為方向移動1格。

summon[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
立即生成一個實體,並將執行者設定為此實體。
語法
JEsummon <entity> -> execute
參數
JE<entity>entity_summon
需要生成的實體類型。
必須為可召喚實體類型的命名空間ID
結果
參數未正確指定時,視為語法錯誤。
示例
  • /execute summon pig run tag @s add test:召喚一隻豬,並以豬為執行者對其加入計分板標籤test
  • /execute summon pig run function test:test:召喚一隻豬,並以豬為執行者執行函數test:test

條件子指令[編輯 | 編輯原始碼]

條件子指令包括ifunless兩種,用於測試特定類型的條件。兩者的語義相反但參數結構一致,if表示「如果……就」,unless表示「除非……否則」。

條件子指令可以單獨使用,也可以與其他子指令一起使用,根據其處於整條指令中的位置,其行為也有區別:

  • 位於整條指令的末尾時,條件子指令會直接輸出測試結果。
  • 不位於整條指令的末尾時,條件子指令會根據自身語義與測試結果,決定後續子指令是否執行。
    • 若由多個變數(如執行者、執行位置、執行朝向)執行多次時,可作為變數過濾器使用。

可用條件類型:

  • biome[僅Java版]:檢測給定位置上的生態域是否為特定生態域。
  • block:檢測給定位置上的方塊是否是特定的方塊或方塊狀態。
  • blocks:檢測給定區域內的方塊是否匹配另一個同等大小區域內的方塊。
  • data[僅Java版]:檢測方塊、實體或儲存容器是否擁有給定的NBT標籤。
  • dimension[僅Java版]:檢測指令執行時所處的維度是否為特定維度。
  • entity:檢測一個或多個特定實體是否存在。
  • function[僅Java版]:檢測函數是否有非零回傳值。
  • items[僅Java版]:檢測方塊或實體的給定物品欄欄位或欄位區間內是否擁有指定物品。
  • loaded[僅Java版]:檢測給定位置是否已被載入。
  • predicate[僅Java版]:檢測述詞計算結果是否為正。
  • score:檢測指定目標的計分板中的計分板目標的分數是否與另一個(或同一個)目標的計分板的計分板目標的分數是否符合指定的關係,或者是否在給定的範圍之內。

(if|unless) biome[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測給定位置上的生態域是否為特定生態域。
語法
JE(if|unless) biome <pos> <biome> -> execute
參數
JE<pos>block_pos
需要檢測的位置。
必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標
JE<biome>biome_predicate
需要檢測的生態域或生態域標籤的命名空間ID。
參見生態域/ID標籤 § 生態域以查看所有可用的生態域ID和生態域標籤。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <pos>所指定的位置未載入或位於世界外。
若位於末尾且執行成功,success和​result均回傳1。

(if|unless) block[編輯 | 編輯原始碼]

檢測給定位置上的方塊是否是特定的方塊或方塊狀態。
語法
JE(if|unless) block <pos> <block> -> execute
BE<subcommand: Option_If_Unless> block <position: x y z> <block: Block> [chainedCommand: ExecuteChainedOption_0]
BE<subcommand: Option_If_Unless> block <position: x y z> <block: Block> <blockStates: block states> [chainedCommand: ExecuteChainedOption_0]
參數
JE<pos>block_pos
BEposition: x y zCommandPosition
需要檢測的方塊的座標。
Java版中,必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標。在基岩版中,必須為三維的座標,格式為<X> <Y> <Z>,三個值必須是浮點數、相對座標局部座標
JE<block>block_predicate
BEblock: BlockBlock
需要檢測的方塊或方塊標籤的命名空間ID。在Java版中,可以附加方塊狀態和NBT標籤。
Java版中,格式必須為方塊ID標籤[方塊狀態]{方塊實體NBT},可僅在需要時指定方塊狀態與方塊實體NBT,參見參數類型 § minecraft:block_predicate。在基岩版中,必須為方塊ID
BEblockStates: block statesBlockStateCommandParam
需要檢測的方塊的方塊狀態。
必須為格式為["<鍵1>"=<值1>,"<鍵2>"=<值2>,...]的方塊狀態(例如:["old_leaf_type"="birch","persistent_bit"=true])。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <pos>position: x y z所指定的位置未載入或位於世界外。
若位於末尾且執行成功,success和​result均回傳1。
示例
  • /execute as @a at @s if block ~ ~-1 ~ stone run kill @s:擊殺所有踩在石頭上的玩家。

(if|unless) blocks[編輯 | 編輯原始碼]

檢測給定區域內的方塊是否匹配另一個同等大小區域內的方塊。
語法
JE(if|unless) blocks <start> <end> <destination> (all|masked) -> execute
BE<subcommand: Option_If_Unless> blocks <begin: x y z> <end: x y z> <destination: x y z> <scan mode: BlockScanMode> [chainedCommand: ExecuteChainedOption_0]
參數
JE<start>block_pos<end>block_pos
BEbegin: x y zCommandPositionend: x y zCommandPosition
需要檢測的源區域(比較時參照的區域)的兩個對角方塊位置。
Java版中,必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標。在基岩版中,必須為三維的座標,格式為<X> <Y> <Z>,三個值必須是浮點數、相對座標局部座標
JE<destination>block_pos
BEdestination: x y zCommandPosition
需要檢測的對照區域的西北下角方塊的座標(即長方體區域內座標最小處)。
Java版中,必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標。在基岩版中,必須為三維的座標,格式為<X> <Y> <Z>,三個值必須是浮點數、相對座標局部座標
JE(all|masked)
BEscan mode: BlockScanModeenum
需要使用的檢測模式,可以是all(檢測區域內全部方塊)或masked(檢測區域內除空氣外的全部方塊)。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形之一,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <start>begin: x y z<end>end: x y z<destination>destination: x y z所指定的位置未載入或位於世界外。
  • 要檢測的源區域方塊數大於32768。
若位於末尾且執行成功,success回傳1。result回傳:
  • 匹配上的方塊數(if)。
  • 1(unless)。

(if|unless) data[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測方塊、實體或儲存容器是否擁有給定的NBT標籤。
語法
JE(if|unless) data block <sourcePos> <path> -> execute(方塊)
JE(if|unless) data entity <source> <path> -> execute(實體)
JE(if|unless) data storage <source> <path> -> execute(儲存容器)
參數
JE<sourcePos>block_pos
需要檢測的方塊的座標。
必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標
JE<source>entitydata entity子指令)
需要檢測的單個實體。
必須為玩家名、目標選擇器UUID。且目標選擇器必須為單一數量,否則此指令將無法解析。
JE<source>resource_locationdata storage子指令)
需要檢測的儲存容器的命名空間ID。
必須為命名空間ID,將會在指令執行時根據此ID嘗試取得一個未註冊內容,或傳送至用戶端由用戶端處理。
JE<path>nbt_path
需要檢測的NBT標籤。
必須為NBT路徑
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形之一,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <sourcePos>所指定的位置未載入或位於世界外。
  • <sourcePos>所指定的位置上不是方塊實體。
  • <source>data entity)無法選中一個或多個有效實體(指定玩家必須在線上)。
若位於末尾且執行成功,success回傳1。result回傳:
  • 匹配上的NBT標籤數(if)。
  • 1(unless)。
示例
  • /execute as @a if data entity @s {OnGround:1b} run give @s minecraft:stone 1:給予所有在地面上的玩家一塊石頭。

(if|unless) dimension[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測指令執行時所處的維度是否為特定維度。
語法
JE(if|unless) dimension <dimension> -> execute
參數
JE<dimension>dimension
需要檢測的維度。
必須為命名空間ID,將會在指令執行時嘗試取得對應的維度
結果
參數未正確指定時,視為語法錯誤。
若未透過測試,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾)。
若位於末尾且執行成功,success回傳1。result回傳:
  • 匹配上的維度數(if)。
  • 1(unless)。

(if|unless) entity[編輯 | 編輯原始碼]

檢測一個或多個特定實體是否存在。
語法
JE(if|unless) entity <entities> -> execute
BE<subcommand: Option_If_Unless> entity <target: target> [chainedCommand: ExecuteChainedOption_0]
參數
JE<entities>entity
BEtarget: targetCommandSelector<Actor>
需要檢測的目標實體。
必須為玩家名、目標選擇器UUID[僅Java版]
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <entities>target: target無法選中一個或多個有效實體(指定玩家必須在線上)。
若位於末尾且執行成功,success回傳1。result回傳:
  • 匹配上的實體數(if)。
  • 1(unless)。
示例
  • /execute if entity @e[type=sheep] run function foo:bar:若世界中有綿羊就執行函數foo:bar
  • /execute as @e[type=creeper] at @s unless entity @e[type=ocelot,distance=..3] run kill @s[僅Java版]:擊殺所有在3格範圍內沒有山貓的苦力怕。
  • /execute as @e[type=creeper] at @s unless entity @e[type=ocelot,r=3] run kill @s[僅基岩版]:擊殺所有在3格範圍內沒有山貓的苦力怕。

(if|unless) function[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
執行並檢測函數是否有非零回傳值。若給定的函數回傳0或沒有回傳值,測試失敗。
若給定函數標籤,則其中任意一個函數回傳非零值都將透過測試。當遍歷到一個這樣的函數後,標籤的執行終止,不會再執行其他函數。
語法
JE(if|unless) function <name> -> execute
參數
JE<name>function
要檢測的函數。必須為一個命名空間ID,指向一個單獨的函數或者是以#作為前綴的函數標籤。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • 函數或者函數標籤不存在。
  • 測試不透過。
示例
  • /execute unless function generic:test run say 1:執行函數generic:test,若其回傳值非0,則不執行say 1

(if|unless) items[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測方塊或實體的給定物品欄欄位或欄位區間內是否擁有指定物品。
語法
JE(if|unless) items block <pos> <slots> <item_predicate> -> execute(方塊)
JE(if|unless) items entity <entities> <slots> <item_predicate> -> execute(實體)
參數
JE<pos>block_pos
需要檢測的方塊的座標。
必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標
JE<entities>entities
需要檢測的多個實體。
必須為玩家名、目標選擇器UUID
JE<slots>item_slot
需要檢測的單個欄位或欄位區間。
必須為指定單個欄位的欄位名,由欄位類型和欄位編號組成。對於具體的欄位名和欄位編號,參見欄位。格式為<欄位類型><欄位類型>.<欄位編號>
JE<item_predicate>item_predicate
用於檢測物品特徵的物品述詞。
必須形如<物品類型>[<測試項1>,<測試項2>,...]<物品类型>後的部分是可選的,參見參數類型 § minecraft:item_predicate
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形之一,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <pos>所指定的位置未載入或位於世界外。
  • <pos>所指定的位置上不是方塊實體。
  • <entities>無法選中一個或多個有效實體(指定玩家必須在線上)。
  • <slots>不是指定方塊或實體的有效欄位。
  • <item_predicate>不存在於方塊或實體的指定欄位中。
若位於末尾且執行成功,success回傳1。result回傳:
  • 匹配上的物品總數(if)。
  • 1(unless)。

(if|unless) loaded[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測給定位置是否已被載入。
語法
JE(if|unless) loaded <pos> -> execute
參數
JE<pos>block_pos
需要檢測的位置。
必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <pos>所指定的位置位於世界外。
若位於末尾且執行成功,success和​result均回傳1。

(if|unless) predicate[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版
檢測述詞(Predicate)是否透過(結果是否為正值),用法詳見述詞
語法
JE(if|unless) predicate <predicate> -> execute
參數
JE<predicate>loot_predicate
用於測試條件的述詞。若符合述詞的描述則執行成功。
命名空間IDSNBT形式指定述詞。必須是一個SNBT格式的述詞資料,或者是一個具有指定ID的述詞(minecarft:predicate登錄中的註冊項)。對於NBT標籤,若是一個字串標籤,也會被解析成一個命名空間ID並取得具有此ID的述詞;否則將此SNBT解析為一個述詞資料。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • 指定的述詞不存在。
若位於末尾且執行成功,success和​result均回傳1。

(if|unless) score[編輯 | 編輯原始碼]

檢測指定目標的計分板中的計分板目標的分數是否與另一個(或同一個)目標的計分板的計分板目標的分數是否符合指定的關係,或者是否在給定的範圍之內。
語法
JE(if|unless) score <target> <targetObjective> (=|<|<=|>|>=) <source> <sourceObjective> -> execute
BE<subcommand: Option_If_Unless> score <target: target> <objective: string> <operation: compare operator> <source: target> <objective: string> [chainedCommand: ExecuteChainedOption_0]
檢測兩計分項在指定計分板的分數是否符合特定運算符表示的關係。
JE(if|unless) score <target> <targetObjective> matches <range> -> execute
BE<subcommand: Option_If_Unless> score <target: target> <objective: string> matches <range: integer range> [chainedCommand: ExecuteChainedOption_0]
檢測某計分項在指定計分板的分數是否在指定範圍內。
參數
JE<target>score_holder
BEtarget: targetWildcardCommandSelector<Actor>
需要檢測的單個分數持有者。
必須是目標選擇器、玩家名(可以為不在線上的玩家)、UUID[僅Java版]實體的計分板ID[僅基岩版]或用於表示所有正在被追蹤實體的*
可以執行*但判定失敗。
JE<targetObjective>objective
BEobjective: stringbasic_string
需要檢測的計分板目標。
必須是單個詞或者雙引號(")括起的[僅基岩版]字串。在Java版中,允許的字元包括:-+._A-Za-z0-9。在基岩版中,引號內的引號與\前須加上跳脫字元\。用於指定計分板目標的名稱,將會在指令執行時嘗試取得此名稱的計分板目標。
JE(=|<|<=|>|>=)
BEoperation: compare operatorCommandCompareOperator
指定運算符,檢查左操作數(目的計分板目標)與右操作數(源計分板目標)之間的關係是否符合此處定義的關係。
JE<source>score_holder
BEsource: targetWildcardCommandSelector<Actor>
需要被比較的單個分數持有者。
必須是目標選擇器、玩家名(可以為不在線上的玩家)、UUID[僅Java版]實體的計分板ID[僅基岩版]或用於表示所有正在被追蹤實體的*
可以執行*但判定失敗。
JE<sourceObjective>objective
BEobjective: stringbasic_string
需要被比較的計分板目標。
必須是單個詞或者雙引號(")括起的[僅基岩版]字串。在Java版中,允許的字元包括:-+._A-Za-z0-9。在基岩版中,引號內的引號與\前須加上跳脫字元\。用於指定計分板目標的名稱,將會在指令執行時嘗試取得此名稱的計分板目標。
JE<range>int_range
BErange: integer rangeCommandIntegerRange
被檢查分數需要符合的範圍。
必須為整數範圍。例如0精準匹配0,..0匹配小於等於0的值,0..匹配大於等於0的值,0..1匹配介於0與1之間的值(含)。
結果
參數未正確指定時,視為語法錯誤。
若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
  • <target>target: target<source>source: target*
若位於末尾且執行成功,success和​result均回傳1。
示例
  • /execute if score @s a = @s b:檢測自己的a分數與b分數是否相等。

儲存子指令[編輯 | 編輯原始碼]

本段落所述內容僅適用於Java版

儲存子指令可以將最後一個指令的resultsuccess值儲存到指定位置。

它與其他子指令一起處理,先行記錄儲存位置,不影響其他子指令。當最後一個子指令執行後,將其回傳值存入指定位置,可以是計分板、NBT資料或Boss狀態條

可用存入位置:

  • block:將resultsuccess存入指定方塊實體的指定NBT標籤內。
  • bossbar:將resultsuccess存為Boss狀態條的目前值或最大值。
  • entity:將resultsuccess存入指定實體的指定NBT標籤內。
  • score:將resultsuccess存入指定分數持有者的指定計分板目標上。
  • storage:將resultsuccess存入指定儲存容器的指定NBT標籤內。

store (result|success) block[編輯 | 編輯原始碼]

resultsuccess存入指定方塊實體的指定NBT標籤內。
語法
JEstore (result|success) block <targetPos> <path> (int|float|short|long|double|byte) <scale> -> execute
參數
JE<targetPos>block_pos
回傳值需要存入的目標方塊實體的座標。
必須為方塊座標,格式為<X> <Y> <Z>,三個值必須為整數相對座標局部座標
JE<path>nbt_path
回傳值需要存入的NBT路徑。
必須為NBT路徑
JE(int|float|short|long|double|byte)
回傳值及目標NBT的資料類型。
只能為int、​float、​short、​long、​double和​byte之一。分別表示整型、單精度浮點型、短整型、長整型、倍精度浮點型和位元組型。
JE<scale>double
回傳值儲存時的倍率。
必須為倍精度浮點數 倍精度浮點數
結果
參數未正確指定時,視為語法錯誤。
路徑不存在時不進行操作。
執行成功時,將回傳值向下取整並乘以<scale>後儲存在<targetPos>處方塊實體的<path>NBT標籤處,並儲存為指定的NBT格式

store (result|success) bossbar[編輯 | 編輯原始碼]

resultsuccess存為Boss狀態條的目前值或最大值。
語法
JEstore (result|success) bossbar <id> (value|max) -> execute
參數
JE<id>resource_location
回傳值需要存入的目標Boss狀態條的命名空間ID。
必須為命名空間ID,將會在指令執行時根據此ID嘗試取得一個未註冊內容,或傳送至用戶端由用戶端處理。
JE(value|max)
回傳值需要存入的是Boss狀態條的目前值(value)或是最大值(max)。
結果
參數未正確指定時,視為語法錯誤。
執行成功時,將回傳值向下取整,存為命名空間ID為<id>的Boss狀態條的目前值或最大值。

store (result|success) entity[編輯 | 編輯原始碼]

resultsuccess存入指定實體的指定NBT標籤內。與/data一樣,此指令不能修改玩家的NBT。
語法
JEstore (result|success) entity <target> <path> (int|float|short|long|double|byte) <scale> -> execute
參數
JE<target>entity
回傳值需要存入的目標實體。
必須為玩家名、目標選擇器UUID
JE<path>nbt_path
回傳值需要存入的NBT路徑。
必須為NBT路徑
JE(int|float|short|long|double|byte)
回傳值及目標NBT的資料類型。
只能為int、​float、​short、​long、​double和​byte之一。分別表示整型、單精度浮點型、短整型、長整型、倍精度浮點型和位元組型。
JE<scale>double
回傳值儲存時的倍率。
必須為倍精度浮點數 倍精度浮點數
結果
參數未正確指定時,視為語法錯誤。
路徑不存在時不進行操作。
執行成功時,將回傳值向下取整並乘以<scale>後儲存在<target>實體的<path>NBT標籤處,並儲存為指定的NBT格式

store (result|success) score[編輯 | 編輯原始碼]

resultsuccess存入指定分數持有者的指定計分板目標上。
語法
JEstore (result|success) score <targets> <objective> -> execute
參數
JE<targets>score_holder
回傳值需要存入的目標分數持有者。
必須是目標選擇器、玩家名(可以為不在線上的玩家)、UUID或用於表示所有正在被追蹤實體的*
JE<objective>objective
回傳值需要存入的目標計分板目標名稱。
必須是單個詞字串。允許的字元包括:-+._A-Za-z0-9。用於指定計分板目標的名稱,將會在指令執行時嘗試取得此名稱的計分板目標。
結果
參數未正確指定時,視為語法錯誤。
執行成功時,將回傳值向下取整後儲存在<targets>持有的<objective>分數中。

store (result|success) storage[編輯 | 編輯原始碼]

resultsuccess存入指定指令容器的指定NBT標籤內。
語法
JEstore (result|success) storage <target> <path> (int|float|short|long|double|byte) <scale> -> execute
參數
JE<target>resource_location
回傳值需要存入的目標儲存容器的命名空間ID。
必須為命名空間ID,將會在指令執行時根據此ID嘗試取得一個未註冊內容,或傳送至用戶端由用戶端處理。
JE<path>nbt_path
回傳值需要存入的目標NBT路徑。
必須為NBT路徑
JE(int|float|short|long|double|byte)
回傳值及目標NBT的資料類型。
只能為int、​float、​short、​long、​double和​byte之一。分別表示整型、單精度浮點型、短整型、長整型、倍精度浮點型和位元組型。
JE<scale>double
回傳值儲存時的倍率。
必須為倍精度浮點數 倍精度浮點數
結果
參數未正確指定時,視為語法錯誤。
若目標儲存容器不存在,則建立。
執行成功時,將回傳值向下取整並乘以<scale>後儲存在<target>儲存容器的<path>NBT標籤處,並儲存為指定的NBT格式

run子指令[編輯 | 編輯原始碼]

要被執行的目標指令。
語法
JErun ...
BErun <command: command>
參數
JE...
BEcommand: commandunique_ptr<Command>
一條完整的指令。在Java版中,不能以斜線開頭。
技術細節[僅Java版]
將指令節點重設為指令調度器的根節點。
注意:
指令調度器是在玩家開始輸入以斜線/開頭的訊息時開始的。
指令節點是游標正在編輯的特定詞(word)或項(entry),是一個指令或參數。
根節點在目前指令的第一個詞之前出現。
結果
執行此指令。指定的指令執行成功時成功,失敗時失敗。

更多示例[編輯 | 編輯原始碼]

  • 將所有快捷欄第一欄位物品帶有效率附魔的玩家傳送到0, 64, 0:
    /execute as @a if data entity @s Inventory[{Slot:0b}].components."minecraft:enchantments".levels."minecraft:efficiency" run tp @s 0 64 0[僅Java版]
  • 在所有玩家眼睛前方三格召喚煙霧粒子效果:
    /execute as @a at @s anchored eyes run particle smoke ^ ^ ^3[僅Java版]
  • 讓所有在中的玩家在聊天欄裡說:「我的腳濕了!」:
    /execute as @a at @s if block ~ ~ ~ water run say "我的腳濕了!"
  • 讓所有「test」計分板未設定的玩家在聊天欄裡說:「分數已重設」:
    /execute as @a unless score @s test = @s test run say "分數已重設"
  • 將距離最近的玩家3格內的所有豬扔向天空:
    /execute at @p as @e[type=pig,distance=..3] run data merge entity @s {Motion:[0.0,2.0,0.0]}[僅Java版]
  • 殺死所有沒有頭盔的殭屍:
    /execute as @e[type=zombie] unless data entity @s equipment.head.id run kill @s[僅Java版]

歷史[編輯 | 編輯原始碼]

Java版
1.814w07a加入了/execute指令。
14w08a在指令方塊中執行的run子指令現在會把成功值傳回指令方塊了。
1.1116w32a加入了方塊狀態支援。
1.1317w45a語法被拆分。
17w45b重製了/execute store (result|success)
18w02a加入了新的子指令以允許透過指令進行更多的控制。
18w05a加入了/execute store (result|success) bossbar
1.1418w43a加入了/execute (if|unless) data
1.1519w38a加入了/execute (if|unless) predicate
加入了/execute store (result|success) storage
1.19.322w46a加入了/execute (if|unless) biome
1.19.423w03a加入了/execute on/execute (if|unless) dimension/execute (if|unless) loaded
23w04a/execute on加入了origin關係。
23w06a加入了/execute summon
pre1加入了/execute positioned over
1.20.223w31a加入了/execute (if|unless) function
pre1暫時移除了/execute (if|unless) function
1.20.323w41a重新加入了/execute (if|unless) function
1.20.524w10a加入了條件子指令/execute (if|unless) items
攜帶版Alpha
0.16.0build 1加入了/execute
此指令的功能相當於其在Java版1.10的功能,但在/execute中實體目標是可選的。
基岩版
1.19.101.19.10.20更新了語法以近似匹配Java版,屬於實驗性玩法
1.19.401.19.40.20加入了/execute rotated/execute rotated as子指令,屬於實驗性玩法
1.19.40.21加入了/execute facing/execute facing entity/execute align子指令,屬於實驗性玩法
1.19.40.23加入了/execute in/execute anchored <eyes|feet>子指令,屬於實驗性玩法
1.19.501.19.50.231.19.10.20起的所有變更均不再屬於實驗性玩法
1.19.701.19.70.21移除了data: int參數。

影片[編輯 | 編輯原始碼]

參考[編輯 | 編輯原始碼]

  1. MC-125067 — 錯誤狀態為「不予修復」。
  2. MCPE-165278

導覽[編輯 | 編輯原始碼]