基巖版execute新格式
/execute
可以在改變執(zhí)行者、執(zhí)行位置和角度,添加限制條件的情況下執(zhí)行另一條命令
基巖版
在基巖版1.19.50中,execute由多個(gè)子命令組成,共有14個(gè)子命令。子命令分為三類:修飾子命令、條件子命令和run子命令。
注:14個(gè)子命令包含facing、positioned、rotated的第2種格式,可以做視線追蹤了,現(xiàn)在這個(gè)新格式已經(jīng)正式實(shí)裝正式版,不需要再開實(shí)驗(yàn)玩法就可以了。
—————————————————————————
修飾子命令修改命令變量并改變命令執(zhí)行的方式,從而以特定的執(zhí)行者、執(zhí)行位置執(zhí)行后續(xù)子命令。
條件子命令用于檢測(cè)特定條件是否成立,并輸出結(jié)果或限制命令執(zhí)行的條件。
run子命令用于執(zhí)行另一個(gè)命令。
/execute命令允許將任意子命令串連在一起。除run子命令外的子命令可以隨意排列或重復(fù)使用多次,而run子命令只能使用一次且只能位于命令最后位置。命令必須以條件子命令或run子命令結(jié)尾,否則沒有實(shí)際效果。對(duì)于多個(gè)子命令,游戲會(huì)按順序從前向后依次處理,比如,以下命令是不同的:
所有的實(shí)體向各自所朝的方向移動(dòng)一格:execute as @e at @s run tp ^ ^ ^1
所有的實(shí)體移動(dòng)到執(zhí)行者的前方一格:execute at @s as @e run tp ^ ^ ^1
游戲會(huì)在處理run子命令之前,先處理其他子命令,故run子命令無法影響其他子命令。run子命令無法相互影響。在某些情況下,命令會(huì)中止執(zhí)行。
—————————————————————————
execute命令有11個(gè)子命令,每一個(gè)都有其自身的語法。
所有子命令構(gòu)成的語法樹如下:
/execute…
...align <axes> -> execute
...anchored <anchor> -> execute
…as <targets> -> execute
…at <targets> -> execute
...facing (<pos>|entity <targets> <anchor>) -> execute
...in <dimension> -> execute
…positioned (<pos> as <targets>) -> execute
…rotated?(<rot> as <targets>) -> execute
? ? ...(if|unless)…
? ? ? ? ?…block <pos> <block> -> [execute]
? ? ? ? ?…blocks <start> <end> <destination> (all|masked) -> [execute]
? ? ? ? ?…entity <entities> -> [execute]
? ? ? ? ?…score <target> <target0bjective>
(<I==l=I>[>=) <source> <source0bjective> ->[execute]
? ? ? ? ? ? ? ?…matches <range> -> [execute]
…run <command>
其中的-> execute代表另一個(gè)要執(zhí)行的子命令的開始。
以下是所有子命令的詳情介紹。
修飾子命令
align
把執(zhí)行位置轉(zhuǎn)換為方塊坐標(biāo)(向下取整)。
語法
align <axes> -> execute
參數(shù)
<axes>:swizzle
x、y、z中的不重復(fù)的任意組合。(例如x、xz、yz和zyx。)
效果
改變執(zhí)行坐標(biāo)。
參數(shù)不是字母x、y、z時(shí)視為語法錯(cuò)誤。
示例
※x=-1.8, y=2.3, z=5.9時(shí),<axes>為x將變?yōu)閤=-2, y=2.3, z=5.9
※比如,execute positioned -1.8 2.3 5.9 align x run tp ~ ~ ~將把自己傳送到(-2, 2.3, 5.9)
※x=2.4, y=-1.1, z=3.8時(shí),<axes>為xyz將變?yōu)閤=2, y=-2, z=3
※比如,execute positioned 2.4 -1.1 3.8 align yxz run tp ~ ~ ~將把自己傳送到(2, -2, 3)
※將自己的y坐標(biāo)微調(diào)向下取整:execute align y run tp ~ ~ ~
anchored
使用此命令切換命令的基準(zhǔn)點(diǎn)為實(shí)體腳或眼睛的位置。默認(rèn)為腳。(如在使用局部坐標(biāo)或朝向時(shí))
語法
anchored <anchor> -> execute
參數(shù)
<anchor>:entity_anchor(eyes或feet)
基準(zhǔn)是眼睛的位置(eyes)或是腳的位置(feet)。
效果
^ ^ ^的定位被重新基準(zhǔn)為眼睛或腳部。
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
示例
/tp的效果是通過將腳部移動(dòng)到指定的位置來移動(dòng)實(shí)體。
execute anchored eyes run tp ^ ^ ^有效地將命令執(zhí)行者的腿部移動(dòng)到眼睛的位置(執(zhí)行位置)。
execute anchored eyes run tp ^5 ^ ^意味著“將命令執(zhí)行者的腿部移動(dòng)到眼部位置5格左邊的位置”。
as
改變命令的執(zhí)行者(executor),但不改變執(zhí)行位置或執(zhí)行朝向等。
語法
as <targets> -> execute
參數(shù)
<targets>:實(shí)體
指定后續(xù)內(nèi)容的執(zhí)行者??梢允?span id="s0sssss00s" class="color-lblue-02">玩家ID或目標(biāo)選擇器。
效果
將執(zhí)行者改為目標(biāo)實(shí)體(改變@s的含義)
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
當(dāng)目標(biāo)實(shí)體不存在時(shí)命令終止執(zhí)行。
當(dāng)選擇到多個(gè)實(shí)體時(shí),以各個(gè)實(shí)體為執(zhí)行者分
別執(zhí)行一次后續(xù)子命令。
at
改變命令的執(zhí)行位置、執(zhí)行朝向和執(zhí)行維度為指定實(shí)體的坐標(biāo)、朝向和維度,不改變命令執(zhí)行者。
語法
at <targets> -> execute
參數(shù)
<targets>:entity
指定目標(biāo)實(shí)體,可以是玩家ID或目標(biāo)選擇器。
結(jié)果
位置和朝向更新為目標(biāo)實(shí)體的(影響~ ~ ~和^ ^ ^的定位)
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
當(dāng)目標(biāo)實(shí)體不存在時(shí)命令終止執(zhí)行。
如果選擇多個(gè)實(shí)體,則以多個(gè)實(shí)體的執(zhí)行位置、執(zhí)行朝向和執(zhí)行維度,分別執(zhí)行一次后續(xù)子命令。
示例
※在一名隨機(jī)玩家頭上放置一顆石頭:execute at @r run setblock ~ ~ ~ stone
※所有的綿羊向上移動(dòng)1格:execute as @e[type=sheep]?at?@s?run tp ~ ~1 ~
※注意execute at @e[type=sheep] run kill @s會(huì)清除執(zhí)行者而對(duì)綿羊沒有影響,因?yàn)閍t子命令不修改執(zhí)行者。
—————————————————————————
facing
將命令的執(zhí)行朝向改為面向指定的坐標(biāo)或某個(gè)實(shí)體,不改變命令執(zhí)行者和執(zhí)行位置。
語法
facing <pos> -> execute
facing entity <targets> <anchor> -> execute
參數(shù)
<pos>:vec3
需要朝向的坐標(biāo),格式為<x> <y> <z>,可以使用波浪號(hào)和插入符。執(zhí)行朝向?qū)?huì)是朝向該坐標(biāo)。
<targets>:entity
需要朝向的實(shí)體,可以是玩家名、UUID或目標(biāo)選擇器。執(zhí)行朝向?qū)?huì)是朝向該實(shí)體。
<anchor>:entity_anchor(eyes或feet)
確定朝向?qū)嶓w眼睛(eyes)還是腳(feet)的位置。
效果
將朝向改為面向指定的坐標(biāo)或目標(biāo)實(shí)體
參數(shù)不正確時(shí),視為語法錯(cuò)誤
當(dāng)目標(biāo)實(shí)體不存在時(shí)命令終止執(zhí)行。
當(dāng)選擇到多個(gè)實(shí)體時(shí),則以多個(gè)執(zhí)行朝向分別執(zhí)行一次后續(xù)子命令。
示例
所有的實(shí)體都朝著(0, 64, 0)的方向移動(dòng)一格(不改變自身的朝向):execute as @e at @s facing 0 64 0 run tp ^ ^ ^1
所有非玩家實(shí)體朝著各自距離最近的玩家的方向移動(dòng)一格(不改變自身的朝向):execute as @e[type=!player] at @s facing entity @p feet run tp ^ ^ ^1
in
將命令執(zhí)行維度設(shè)為特定維度。命令將在指定的維度中執(zhí)行。
語法
in <dimension> -> execute
參數(shù)
<dimension>:dimension
新的執(zhí)行維度的命名空間ID。minecraft命名空間下的維度默認(rèn)有overworld、the_end和the_nether。
效果
更新執(zhí)行維度。
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
示例
在下界的世界中心(0,0,0)放置一塊泥土:execute in minecraft:the_nether run setblock 0 0 0 dirt
尋找末地中的末地城:execute in the_end run locate endcity
注意不同的維度有不同的坐標(biāo)尺度:從主世界傳送到下界時(shí),執(zhí)行位置(僅X/Z軸部分)會(huì)除以8,從下界傳送到主世界則會(huì)乘以8。如:
主世界(16,64,16)位置的玩家運(yùn)行execute in minecraft:the_nether positioned as @s run tp ~ ~ ~,會(huì)傳送到下界的(16,64,16)。
主世界(16,64,16)位置的玩家運(yùn)行execute in minecraft:the_nether run tp ~ ~ ~,會(huì)傳送到下界的(2,64,2)。
主世界(80,64,80)位置的玩家運(yùn)行execute in minecraft:the_nether run tp ~ ~ ~5,會(huì)傳送到下界的(10,64,15)。
positioned
在指定的坐標(biāo)執(zhí)行命令。改變執(zhí)行位置,但不改變執(zhí)行者、執(zhí)行朝向。
語法
positioned <pos> -> execute
positioned as <targets> -> execute
參數(shù)
<pos>:vec3
指定命令執(zhí)行的坐標(biāo),格式為<x> <y> <z>,可以使用相對(duì)坐標(biāo)和局部坐標(biāo)。
<targets>:entity(僅在as模式可用)
指定命令執(zhí)行的位置為<targets>所處的坐標(biāo),可以是玩家ID或目標(biāo)選擇器。
效果
改變命令的執(zhí)行位置。
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
當(dāng)目標(biāo)實(shí)體不存在時(shí)命令終止執(zhí)行。
如果選擇多個(gè)實(shí)體,則以各個(gè)執(zhí)行位置,分別執(zhí)行一次后續(xù)子命令。
示例
※給予離坐標(biāo)(7,-90,7)最近的玩家一顆鉆石:execute positioned 7 -90 7 run give @p diamond
※假設(shè)執(zhí)行者處于主世界時(shí),尋找(0, 64, 0)附近的村莊:execute positioned 0 64 0 run locate Village
※假設(shè)執(zhí)行者處于其他維度時(shí),尋找主世界(0, 64, 0)附近的村莊:execute in overworld positioned 0 64 0 run locate Village
※讓所有的綿羊向著玩家(執(zhí)行者)的朝向移動(dòng)一格(比如,玩家看著東邊時(shí),綿羊向東移動(dòng)一格;玩家看著上方時(shí),綿羊向上移動(dòng)一格):execute as @e[type=sheep] positioned as @s rotated as @p run tp @s ^ ^ ^1
rotated
將命令的執(zhí)行朝向設(shè)為特定方向,或者設(shè)為指定實(shí)體的朝向。改變執(zhí)行朝向,不改變執(zhí)行者和執(zhí)行位置。
語法
rotated <rot> -> execute
rotated as <targets> -> execute
參數(shù)
<rot>:rotation(<yaw> <pitch>)
需要的旋轉(zhuǎn)角度
yaw指定水平旋轉(zhuǎn)角度(正北方為-180.0,正東為-90.0,正南為0.0,正西為90.0,正北以西為179.9,之后回到-180.0)??墒褂貌ɡ颂?hào)指定基于當(dāng)前旋轉(zhuǎn)角度的相對(duì)偏移。
pitch指定垂直旋轉(zhuǎn)角度(豎直上方為-90.0,至豎直下方90.0)。可使用波浪號(hào)指定基于當(dāng)前旋轉(zhuǎn)角度的相對(duì)偏移。
<targets>:entity
采用指定實(shí)體的朝向。
效果
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
當(dāng)<targets>實(shí)體不存在時(shí)命令終止執(zhí)行。
如果選擇多個(gè)實(shí)體,則以各個(gè)執(zhí)行朝向,分別執(zhí)行一次后續(xù)子命令。
示例
※讓所有的綿羊以各自距離最近玩家的朝向作為方向移動(dòng)1格:execute as @e[type=sheep] at @s rotated as @p run tp @s ^ ^ ^1
條件子命令
條件子命令if和unless用于限制命令只有在指定的條件下執(zhí)行。if為如果......就,而unless為除非......否則。 除此之外兩者都有相同的參數(shù)結(jié)構(gòu)。
如果在不使用存儲(chǔ)子命令和run子命令的情況下單獨(dú)執(zhí)行條件子命令,execute命令將會(huì)報(bào)告是否匹配成功作為命令的成功次數(shù),成功匹配的數(shù)量作為返回值。
—————————————————————————
有4種不同類型的條件:
(if|unless) block – 檢測(cè)單個(gè)具體方塊
(if|unless) blocks – 檢測(cè)兩個(gè)長(zhǎng)方體區(qū)域內(nèi)的方塊匹配情況
(if|unless) entity – 檢測(cè)指定實(shí)體是否存在
(if|unless) score - 檢測(cè)目標(biāo)的分?jǐn)?shù)
(if|unless) block
比較給定的位置的方塊是否為給定的方塊ID
語法
(if|unless) block <pos> <block> -> [execute]
參數(shù)
<pos>:block_pos
需要檢測(cè)的方塊的坐標(biāo)。格式為x y z,可以使用相對(duì)坐標(biāo)和局部坐標(biāo)。
<block>:block_name
指定一個(gè)方塊ID。
(if|unless) blocks
比較相同大小的兩個(gè)長(zhǎng)方體區(qū)域的方塊
語法
(if|unless) blocks <start> <end> <destination> <scan mode> -> [execute]
參數(shù)
<start>、<end>:block_pos
源區(qū)域(比較時(shí)參照的區(qū)域)的兩個(gè)對(duì)角方塊位置
<destination>:block_pos
對(duì)照區(qū)域的西北下角方塊的坐標(biāo)(即長(zhǎng)方形區(qū)域內(nèi)x y z坐標(biāo)最小處)。
格式均為<x> <y> <z>,可以使用相對(duì)坐標(biāo)和局部坐標(biāo)。參見clone。
<scan mode>:可以是all或masked
選擇all將探測(cè)區(qū)域內(nèi)的全部方塊,選擇masked將忽略源區(qū)域內(nèi)空氣方塊所在的位置。
(if|unless) entity
檢查一個(gè)或多個(gè)特定實(shí)體是否存在。
語法
(if|unless) entity <targets> -> [execute]
參數(shù)
<targets>
要檢查的目標(biāo)實(shí)體??梢詾?span id="s0sssss00s" class="color-blue-02">玩家ID或選擇器。
(if|unless) score
檢查指定目標(biāo)的記分板中的記分項(xiàng)的分?jǐn)?shù)是否與另一個(gè)(或同一個(gè))目標(biāo)的記分項(xiàng)的分?jǐn)?shù)是否符合指定的關(guān)系,或者是否在給定的范圍之內(nèi)。
語法
(if|unless) score <target> <targetObjective> (<|<=|=|>=|>) <source> <sourceObjective> -> [execute]
——檢查<target>的<targetObjective>的分?jǐn)?shù)與<source>的<sourceObjective>的分?jǐn)?shù)是否符合運(yùn)算符的關(guān)系。
(if|unless) score <target> <targetObjective> matches <range> -> [execute]
——檢查<target>的<targetObjective>的分?jǐn)?shù)是否在指定<range>內(nèi)。
參數(shù)
<target>:score_holder
單個(gè)分?jǐn)?shù)持有者??梢詾橥婕襂D、UUID、目標(biāo)選擇器或自定義目標(biāo)。
可以執(zhí)行*但判定失敗。
<targetObjective>:objective
檢查的記分項(xiàng)。
選項(xiàng):(<|<=|=|>=|>) <source> <sourceObjective>
<source>:score_holder
被比較的單個(gè)分?jǐn)?shù)持有者??梢詾橥婕襂D、UUID、目標(biāo)選擇器或自定義目標(biāo)。
可以執(zhí)行*但判定失敗。
<sourceObjective>:objective
記分項(xiàng)。
選項(xiàng):matches <range>
<range>:int_range
檢查分?jǐn)?shù)是否在某個(gè)范圍之內(nèi)??梢允褂脭?shù)字..數(shù)字來指定范圍。缺省一側(cè)可指定大于等于或小于等于。
效果
當(dāng)處于execute命令結(jié)尾時(shí):對(duì)于if,如果條件成立則命令成功,否則失敗。對(duì)于unless,如果條件不成立則命令成功,否則失敗。
當(dāng)位于execute命令中間時(shí):對(duì)于if,如果條件成立繼續(xù)執(zhí)行后續(xù)子命令,否則終止執(zhí)行。對(duì)于unless,如果條件不成立則繼續(xù)執(zhí)行后續(xù)子命令,否則終止執(zhí)行。
示例
擊殺踩在白色羊毛上的玩家:execute as @a at @s if block ~ ~-1 ~ white_wool run kill @s
若世界中有綿羊就執(zhí)行函數(shù)bar:execute if entity @e[type=sheep] run function bar
檢測(cè)自己的a分?jǐn)?shù)與b分?jǐn)?shù)是否相等:execute if score @s a = @s b
擊殺所有在3格范圍內(nèi)沒有豹貓的苦力怕:execute as @e[type=creeper] at @s unless entity @e[type=ocelot,r=3] run kill @s
run子命令
要被執(zhí)行的命令。
語法
run <command>
參數(shù)
<command>
任何一個(gè)完整的命令,不可以以斜線開頭。
MC基巖版未來指令更新計(jì)劃:
儲(chǔ)存子命令
存儲(chǔ)子命令可以讓命令在執(zhí)行之后將命令返回的結(jié)果或成功次數(shù)儲(chǔ)存于記分板中,有store result和store success兩種模式。注意命令的返回值必定為整數(shù),若為小數(shù)會(huì)被向下取整。每種命令的返回值情況在對(duì)應(yīng)的頁面有表格或文字記載。
可能會(huì)加一種儲(chǔ)存模式:
store (result|success) score——存儲(chǔ)在目標(biāo)的記分項(xiàng)的分?jǐn)?shù)中
store (result|success) score
將給定的<objective>中<targets>持有的分?jǐn)?shù)修改為命令的返回值或成功次數(shù)。
語法
store (result|success) score <targets> <objective> -> execute
參數(shù)
<targets>:score_holder
修改此分?jǐn)?shù)持有者(可以是實(shí)體、選擇器甚至不存在的玩家)的分?jǐn)?shù)
<objective>:objective
記分項(xiàng)。
結(jié)果
參數(shù)不正確時(shí),視為語法錯(cuò)誤。
執(zhí)行成功時(shí),返回值或成功次數(shù)會(huì)被儲(chǔ)存為<target>的<objective>分?jǐn)?shù)。