指令/execute
/execute
是各不同功能的子指令的集合,用於改變指令執行上下文(修飾子指令),執行邏輯判斷(條件子指令)和管理並儲存指令回傳值(儲存子指令)
用法[編輯 | 編輯原始碼]
子指令[編輯 | 編輯原始碼]
/execute
指令有14
- 修飾子指令:修改指令上下文以改變指令執行時的狀態,從而以特定的執行位置、執行基準點、執行者、執行朝向、執行維度執行後續子指令。
- 條件子指令:檢測特定條件是否成立並輸出結果,或限制子指令執行的條件。
- 儲存子指令
[僅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
子指令和儲存子指令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版中,遊戲會廣度優先地處理子指令,也就是按順序逐個處理子指令。所以遊戲會在處理
run
子指令之前處理完其他的子指令,於是,run
子指令無法影響到其他的子指令。 - 在基岩版中,遊戲會深度優先地處理子指令。也就是說,指令執行分叉以後,後續的所有子指令會作為一個整體,每個分支執行一次。
- 例如,如果世界上有兩個盔甲座(A和B),一個玩家執行了
execute as @e[type=armor_stand] as @e[type=armor_stand] run summon armor_stand
,Java版和基岩版的行為如圖所示:
-
Java版
-
基岩版
在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版中,一條分支在完整執行後(沒有發生執行中斷)會輸出success
值和result
值(另見指令#輸出)。這兩個輸出值:
- 是各執行分支的輸出值,而非
/execute
指令本身的; - 均來自結尾的條件子指令或
run
子指令中的指令; - 均為整數,
result
遇小數時向下取整,success
總為0或1; - 如果結尾的子指令在一個分支中執行失敗,則此分支的這兩個值均為0;
- 均可由儲存子指令
[僅Java版] 儲存。
請注意,這兩個值來自結尾的條件子指令或run
子指令中的指令,是每個分支的輸出值,而非整條/execute
指令的。
若使用run
子指令執行/function
指令,在某些條件下沒有這兩個輸出值。詳細資訊參見/function
。
如果在儲存子指令之後指令執行被分叉,則儲存操作將應用於每個分支。每個分支的輸出值都會在此分支執行完後被儲存。如果所有分支的儲存位置相同,則後執行的分支的輸出會直接覆蓋先執行分支的輸出,而不是累加,所以在執行整個/execute
指令後,此儲存位置最後的值是最後執行的分支的輸出。
成功次數[編輯 | 編輯原始碼]
像大多數指令一樣,/execute
指令(無論是否執行中斷)本身也有一個成功次數。成功次數:
- 是
/execute
指令本身的輸出值,而非各執行分支的; - 來自結尾的條件子指令或
run
子指令; - 各分支的值會被累加;
- 為大於等於0的整數;
- 當使用指令方塊執行
/execute
時,成功次數會回傳到指令方塊中,可用條件制約的指令方塊檢查,或用紅石比較器讀取成功次數。
語法樹[編輯 | 編輯原始碼]
下面列出了各子指令及其語法的語法樹。其中的所有-> execute
chainedCommand: ExecuteChainedOption_0
execute ...
... align <axes> -> execute
... anchored <anchor> -> execute
... as <targets> -> execute
... at <targets> -> execute
... facing ...
... <pos> -> execute
... entity <targets> <anchor> -> execute
... in <dimension> -> execute
... on (attacker|controller|leasher|origin|owner|passengers|target|vehicle) -> execute
... positioned ...
... <pos> -> execute
... as <targets> -> execute
... over <heightmap> -> execute
... rotated ...
... <rot> -> execute
... as <targets> -> execute
... (if|unless) ...
... biome <pos> <biome> -> execute
... block <pos> <block> -> execute
... blocks <start> <end> <destination> (all|masked) -> execute
... data ...
... block <sourcePos> <path> -> execute
... entity <source> <path> -> execute
... storage <source> <path> -> execute
... dimension <dimension> -> execute
... entity <entities> -> execute
... function <name> -> execute
... items ...
... block <pos> <slots> <item_predicate> -> execute
... entity <entities> <slots> <item_predicate> -> execute
... loaded <pos> -> execute
... predicate <predicate> -> execute
... score <target> <targetObjective>
... (=|<|<=|>|>=) <source> <sourceObjective> -> execute
... matches <range> -> execute
... store (result|success) ...
... block <targetPos> <path> (int|float|short|long|double|byte) <scale> -> execute
... bossbar <id> (value|max) -> execute
... entity <target> <path> (int|float|short|long|double|byte) <scale> -> execute
... score <targets> <objective> -> execute
... storage <target> <path> (int|float|short|long|double|byte) <scale> -> execute
... run ...
execute ...
... align <axes: string> <chainedCommand: ExecuteChainedOption_0>
... anchored <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
... as <origin: target> <chainedCommand: ExecuteChainedOption_0>
... at <origin: target> <chainedCommand: ExecuteChainedOption_0>
... facing ...
... <position: x y z> <chainedCommand: ExecuteChainedOption_0>
... entity <origin: target> <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
... in <dimension: Dimension> <chainedCommand: ExecuteChainedOption_0>
... positioned ...
... <position: x y z> <chainedCommand: ExecuteChainedOption_0>
... as <origin: target> <chainedCommand: ExecuteChainedOption_0>
... rotated ...
... <yaw: value> <pitch: value> <chainedCommand: ExecuteChainedOption_0>
... as <origin: target> <chainedCommand: ExecuteChainedOption_0>
... <subcommand: Option_If_Unless> ...
... block <position: x y z> <block: Block> ...
... <blockStates: block states> [chainedCommand: ExecuteChainedOption_0]
... [chainedCommand: ExecuteChainedOption_0]
... blocks <begin: x y z> <end: x y z> <destination: x y z> <scan mode: BlockScanMode> [chainedCommand: ExecuteChainedOption_0]
... entity <target: target> [chainedCommand: ExecuteChainedOption_0]
... score <target: target> <objective: string> ...
... <operation: compare operator> <source: target> <objective: string> [chainedCommand: ExecuteChainedOption_0]
... matches <range: integer range> [chainedCommand: ExecuteChainedOption_0]
... run <command: command>
修飾子指令[編輯 | 編輯原始碼]
可用子指令:
align
:將執行位置轉換為方塊座標。anchored
:將執行基準點設定為實體的腳部或眼部。as
:將執行者設定為特定實體。at
:將執行位置、執行朝向和執行維度設定為指定實體的座標、朝向和維度。facing
:將指令的執行朝向設定為面向指定座標或指定實體。in
:將指令執行維度設定為特定維度。on
[僅Java版]:將執行者設定為與目前執行者有指定類型的關係的實體。 positioned
:將執行位置設定為指定座標或指定實體位置。rotated
:將執行朝向設為特定方向或設為指定實體的朝向。summon
[僅Java版]:立即建立一個實體,並將此實體設定為執行者。
align[編輯 | 編輯原始碼]
- 將執行位置轉換為方塊座標(向下取整)。
- 參數
- JE:
<axes>
:swizzle - BE:
axes: string
:basic_string- 需要轉換的座標軸。
- 必須為
x
、y
、z
三個字元的組合。字元的順序沒有要求,但是不可以重複出現。
- 結果
- 改變執行座標,指定軸上的座標向下取整。
- 參數未正確指定時,視為語法錯誤。
- 示例
/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[編輯 | 編輯原始碼]
- 將執行基準點設定為實體的腳部或眼部,預設為腳部。
- 參數
- JE:
<anchor>
:entity_anchor - BE:
eyes|feet
- 需要設定的基準點位置。
- 必須為實體錨點(
eyes
或feet
)。eyes
為眼部,feet
為腳部。
- 結果
- 將局部座標的執行基準點設為眼睛或腳,並改變
facing
子指令所指向的位置。 - 參數未正確指定時,視為語法錯誤。
- 示例
/tp
的效果是透過將腳部移動到指定的位置來移動實體。/execute anchored eyes run tp ^ ^ ^
:將指令執行者的腿部移動到原眼部位置。/execute anchored eyes run tp ^5 ^ ^
:將指令執行者的腿部移動到原眼部位置左邊5格的位置上。
as[編輯 | 編輯原始碼]
- 將執行者設定為特定實體,但不改變其他指令變數。
- 結果
- 將執行者改為目標實體(改變
@s
的含義)。 - 參數未正確指定時,視為語法錯誤。
- 若
<targets>
或origin: target
無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。 - 當選擇到多個實體時,以各個實體為執行者分別執行一次後續子指令。
- 示例
at[編輯 | 編輯原始碼]
- 將執行位置、執行朝向和執行維度設定為指定實體的座標、朝向和維度,不改變指令執行者。
- 示例
/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[編輯 | 編輯原始碼]
- 將指令的執行朝向設定為面向指定座標或指定實體,不改變指令執行者和執行位置。
- 結果
- 將執行朝向設定為面向指定的座標或目標實體。
- 參數未正確指定時,視為語法錯誤。
- 若
<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[編輯 | 編輯原始碼]
- 將指令執行維度設定為特定維度。指令將在指定的維度中執行。
- 結果
- 更新執行維度。並依據原維度與現維度間關係,按比例縮放相對座標和局部座標(不包括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[編輯 | 編輯原始碼]
- 將執行者設定為與目前執行者有指定類型的關係的實體。
- 語法
- JE:
on (attacker|controller|leasher|owner|passengers|target|vehicle) -> execute
- 參數
- JE:
(attacker|controller|leasher|origin|owner|passengers|target|vehicle)
attacker
:最近5秒內對目前執行者造成傷害的最後實體。controller
:控制目前執行者的實體。leasher
:用拴繩牽引目前執行者的實體。origin
:目前執行者的來源。owner
:目前執行者為可馴服生物時,此實體的主人。passengers
:直接騎乘於目前執行者的實體。若有多個騎乘於目前執行者的實體,則實體選擇順序和騎乘先後順序相同。target
:取得帶目標實體的目標。目前,所有AI生物和互動實體均屬於帶目標實體。- 若目前執行者屬於AI生物,則取得該生物記憶中的攻擊目標。
- 若目前執行者為互動實體,則為其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[編輯 | 編輯原始碼]
- 將執行位置設定為指定座標或指定實體位置,但不改變執行者、執行朝向和執行維度。
- 語法
- JE:
positioned <pos> -> execute
- BE:
positioned <position: x y z> <chainedCommand: ExecuteChainedOption_0>
- 將執行位置設定為指定座標。
- JE:
positioned as <targets> -> execute
- BE:
positioned as <origin: target> <chainedCommand: ExecuteChainedOption_0>
- 將執行位置設定為指定實體位置。
- JE:
positioned over <heightmap> -> execute
- 將執行位置設定為符合特定高度圖的一縱列方塊的最高的位置。
- 結果
- 改變指令的執行位置。
positioned <pos>
會將執行基準點設定為腳部。 - 參數未正確指定時,視為語法錯誤。
- 若
<targets>
或origin: target
無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。 - 當選擇到多個實體時,以各個實體的位置分別執行一次後續子指令。
- 示例
rotated[編輯 | 編輯原始碼]
- 將執行朝向設為特定方向,或設為指定實體的朝向,但不改變執行者和執行位置。
- 參數
- JE:
<rot>
:rotation(<yaw> <pitch>
) - BE:
yaw: value
:RelativeFloat和pitch: value
:RelativeFloat - JE:
<targets>
:entity - BE:
origin: target
:CommandSelector<Actor>
- 結果
- 參數未正確指定時,視為語法錯誤。
- 當
<targets>
實體不存在時指令終止執行。 - 若
<targets>
或origin: target
無法選中一個或多個有效實體(指定玩家必須在線上)時,指令終止執行。 - 當選擇到多個實體時,以各個實體的朝向分別執行一次後續子指令。
- 示例
/execute as @e[type=sheep] at @s rotated as @p run tp @s ^ ^ ^1
:讓所有的綿羊以各自距離最近玩家的朝向作為方向移動1格。
summon[編輯 | 編輯原始碼]
- 立即生成一個實體,並將執行者設定為此實體。
- 語法
- JE:
summon <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
。
條件子指令[編輯 | 編輯原始碼]
條件子指令包括if
和unless
兩種,用於測試特定類型的條件。兩者的語義相反但參數結構一致,if
表示「如果……就」,unless
表示「除非……否則」。
條件子指令可以單獨使用,也可以與其他子指令一起使用,根據其處於整條指令中的位置,其行為也有區別:
- 位於整條指令的末尾時,條件子指令會直接輸出測試結果。
- 不位於整條指令的末尾時,條件子指令會根據自身語義與測試結果,決定後續子指令是否執行。
- 若由多個變數(如執行者、執行位置、執行朝向)執行多次時,可作為變數過濾器使用。
可用條件類型:
biome
[僅Java版]:檢測給定位置上的生態域是否為特定生態域。 block
:檢測給定位置上的方塊是否是特定的方塊或方塊狀態。blocks
:檢測給定區域內的方塊是否匹配另一個同等大小區域內的方塊。data
[僅Java版]:檢測方塊、實體或儲存容器是否擁有給定的NBT標籤。 dimension
[僅Java版]:檢測指令執行時所處的維度是否為特定維度。 entity
:檢測一個或多個特定實體是否存在。function
[僅Java版]:檢測函數是否有非零回傳值。 items
[僅Java版]:檢測方塊或實體的給定物品欄欄位或欄位區間內是否擁有指定物品。 loaded
[僅Java版]:檢測給定位置是否已被載入。 predicate
[僅Java版]:檢測述詞計算結果是否為正。 score
:檢測指定目標的計分板中的計分板目標的分數是否與另一個(或同一個)目標的計分板的計分板目標的分數是否符合指定的關係,或者是否在給定的範圍之內。
(if|unless) biome[編輯 | 編輯原始碼]
- 檢測給定位置上的生態域是否為特定生態域。
- 語法
- JE:
(if|unless) biome <pos> <biome> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
<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 - BE:
position: x y z
:CommandPosition - JE:
<block>
:block_predicate - BE:
block: Block
:Block - BE:
blockStates: block states
:BlockStateCommandParam- 需要檢測的方塊的方塊狀態。
- 必須為格式為
["<鍵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:
<start>
:block_pos和<end>
:block_pos - BE:
begin: x y z
:CommandPosition和end: x y z
:CommandPosition - JE:
<destination>
:block_pos - BE:
destination: x y z
:CommandPosition - JE:
(all|masked)
- BE:
scan mode: BlockScanMode
:enum- 需要使用的檢測模式,可以是
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[編輯 | 編輯原始碼]
- 檢測方塊、實體或儲存容器是否擁有給定的NBT標籤。
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形之一,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
<sourcePos>
所指定的位置未載入或位於世界外。<sourcePos>
所指定的位置上不是方塊實體。<source>
(data entity
)無法選中一個或多個有效實體(指定玩家必須在線上)。
- 若位於末尾且執行成功,
success
回傳1。result
回傳:- 匹配上的NBT標籤數(
if
)。 - 1(
unless
)。
- 匹配上的NBT標籤數(
- 示例
/execute as @a if data entity @s {OnGround:1b} run give @s minecraft:stone 1
:給予所有在地面上的玩家一塊石頭。
(if|unless) dimension[編輯 | 編輯原始碼]
- 檢測指令執行時所處的維度是否為特定維度。
- 語法
- JE:
(if|unless) dimension <dimension> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾)。
- 若位於末尾且執行成功,
success
回傳1。result
回傳:- 匹配上的維度數(
if
)。 - 1(
unless
)。
- 匹配上的維度數(
(if|unless) entity[編輯 | 編輯原始碼]
- 檢測一個或多個特定實體是否存在。
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
<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[編輯 | 編輯原始碼]
- 執行並檢測函數是否有非零回傳值。若給定的函數回傳0或沒有回傳值,測試失敗。
- 若給定函數標籤,則其中任意一個函數回傳非零值都將透過測試。當遍歷到一個這樣的函數後,標籤的執行終止,不會再執行其他函數。
- 語法
- JE:
(if|unless) function <name> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
- 函數或者函數標籤不存在。
- 測試不透過。
- 示例
/execute unless function generic:test run say 1
:執行函數generic:test
,若其回傳值非0,則不執行say 1
。
(if|unless) items[編輯 | 編輯原始碼]
- 檢測方塊或實體的給定物品欄欄位或欄位區間內是否擁有指定物品。
- 參數
- JE:
<pos>
:block_pos - JE:
<entities>
:entities - 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[編輯 | 編輯原始碼]
- 檢測給定位置是否已被載入。
- 語法
- JE:
(if|unless) loaded <pos> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
<pos>
所指定的位置位於世界外。
- 若位於末尾且執行成功,
success
和result
均回傳1。
(if|unless) predicate[編輯 | 編輯原始碼]
- 檢測述詞(Predicate)是否透過(結果是否為正值),用法詳見述詞。
- 語法
- JE:
(if|unless) predicate <predicate> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 若未透過測試或出現下列情形,終止執行後續子指令(不位於末尾)或執行失敗(位於末尾):
- 指定的述詞不存在。
- 若位於末尾且執行成功,
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 - BE:
target: target
:WildcardCommandSelector<Actor> - JE:
<targetObjective>
:objective - BE:
objective: string
:basic_string - JE:
(=|<|<=|>|>=)
- BE:
operation: compare operator
:CommandCompareOperator- 指定運算符,檢查左操作數(目的計分板目標)與右操作數(源計分板目標)之間的關係是否符合此處定義的關係。
- JE:
<source>
:score_holder - BE:
source: target
:WildcardCommandSelector<Actor> - JE:
<sourceObjective>
:objective - BE:
objective: string
:basic_string - JE:
<range>
:int_range - BE:
range: integer range
:CommandIntegerRange- 被檢查分數需要符合的範圍。
- 必須為整數範圍。例如
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分數是否相等。
儲存子指令[編輯 | 編輯原始碼]
儲存子指令可以將最後一個指令的result
或success
值儲存到指定位置。
它與其他子指令一起處理,先行記錄儲存位置,不影響其他子指令。當最後一個子指令執行後,將其回傳值存入指定位置,可以是計分板、NBT資料或Boss狀態條。
可用存入位置:
block
:將result
或success
存入指定方塊實體的指定NBT標籤內。bossbar
:將result
或success
存為Boss狀態條的目前值或最大值。entity
:將result
或success
存入指定實體的指定NBT標籤內。score
:將result
或success
存入指定分數持有者的指定計分板目標上。storage
:將result
或success
存入指定儲存容器的指定NBT標籤內。
store (result|success) block[編輯 | 編輯原始碼]
- 將
result
或success
存入指定方塊實體的指定NBT標籤內。
- 語法
- JE:
store (result|success) block <targetPos> <path> (int|float|short|long|double|byte) <scale> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 路徑不存在時不進行操作。
- 執行成功時,將回傳值向下取整並乘以
<scale>
後儲存在<targetPos>
處方塊實體的<path>
NBT標籤處,並儲存為指定的NBT格式。
store (result|success) bossbar[編輯 | 編輯原始碼]
- 將
result
或success
存為Boss狀態條的目前值或最大值。
- 語法
- JE:
store (result|success) bossbar <id> (value|max) -> execute
- 參數
- JE:
<id>
:resource_location- 回傳值需要存入的目標Boss狀態條的命名空間ID。
- 必須為命名空間ID,將會在指令執行時根據此ID嘗試取得一個未註冊內容,或傳送至用戶端由用戶端處理。
- JE:
(value|max)
- 回傳值需要存入的是Boss狀態條的目前值(
value
)或是最大值(max
)。
- 回傳值需要存入的是Boss狀態條的目前值(
- 結果
- 參數未正確指定時,視為語法錯誤。
- 執行成功時,將回傳值向下取整,存為命名空間ID為
<id>
的Boss狀態條的目前值或最大值。
store (result|success) entity[編輯 | 編輯原始碼]
- 語法
- JE:
store (result|success) entity <target> <path> (int|float|short|long|double|byte) <scale> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 路徑不存在時不進行操作。
- 執行成功時,將回傳值向下取整並乘以
<scale>
後儲存在<target>
實體的<path>
NBT標籤處,並儲存為指定的NBT格式。
store (result|success) score[編輯 | 編輯原始碼]
- 將
result
或success
存入指定分數持有者的指定計分板目標上。
- 語法
- JE:
store (result|success) score <targets> <objective> -> execute
- 結果
- 參數未正確指定時,視為語法錯誤。
- 執行成功時,將回傳值向下取整後儲存在
<targets>
持有的<objective>
分數中。
store (result|success) storage[編輯 | 編輯原始碼]
- 將
result
或success
存入指定指令容器的指定NBT標籤內。
- 語法
- JE:
store (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子指令[編輯 | 編輯原始碼]
- 要被執行的目標指令。
- 參數
- JE:
...
- BE:
command: command
:unique_ptr<Command>
- 結果
- 執行此指令。指定的指令執行成功時成功,失敗時失敗。
更多示例[編輯 | 編輯原始碼]
- 將所有快捷欄第一欄位物品帶有效率附魔的玩家傳送到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.8 | 14w07a | 加入了/execute 指令。 | |||||
14w08a | 在指令方塊中執行的run 子指令現在會把成功值傳回指令方塊了。 | ||||||
1.11 | 16w32a | 加入了方塊狀態支援。 | |||||
1.13 | 17w45a | 語法被拆分。 | |||||
17w45b | 重製了/execute store (result|success) 。 | ||||||
18w02a | 加入了新的子指令以允許透過指令進行更多的控制。 | ||||||
18w05a | 加入了/execute store (result|success) bossbar 。 | ||||||
1.14 | 18w43a | 加入了/execute (if|unless) data 。 | |||||
1.15 | 19w38a | 加入了/execute (if|unless) predicate 。 | |||||
加入了/execute store (result|success) storage 。 | |||||||
1.19.3 | 22w46a | 加入了/execute (if|unless) biome 。 | |||||
1.19.4 | 23w03a | 加入了/execute on 、/execute (if|unless) dimension 和/execute (if|unless) loaded 。 | |||||
23w04a | 為/execute on 加入了origin 關係。 | ||||||
23w06a | 加入了/execute summon 。 | ||||||
pre1 | 加入了/execute positioned over 。 | ||||||
1.20.2 | 23w31a | 加入了/execute (if|unless) function 。 | |||||
pre1 | 暫時移除了/execute (if|unless) function 。 | ||||||
1.20.3 | 23w41a | 重新加入了/execute (if|unless) function 。 | |||||
1.20.5 | 24w10a | 加入了條件子指令/execute (if|unless) items 。 | |||||
攜帶版Alpha | |||||||
0.16.0 | build 1 | 加入了/execute 。 | |||||
此指令的功能相當於其在Java版1.10的功能,但在/execute 中實體目標是可選的。 | |||||||
基岩版 | |||||||
1.19.10 | 1.19.10.20 | 更新了語法以近似匹配Java版,屬於實驗性玩法。 | |||||
1.19.40 | 1.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.50 | 1.19.50.23 | 1.19.10.20起的所有變更均不再屬於實驗性玩法。 | |||||
1.19.70 | 1.19.70.21 | 移除了data: int 參數。 |
影片[編輯 | 編輯原始碼]
參考[編輯 | 編輯原始碼]
- ↑ MC-125067 — 錯誤狀態為「不予修復」。
- ↑ MCPE-165278