命令/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版]
- 将所有在5米以内有玩家的猪上鞍:
/execute as @e[type=pig] at @s store success entity @s Saddle byte 1 if entity @p[distance=..5]
[仅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