命令/infobox
/execute
是一个在多种场景中执行其他命令的通用命令。
Java版
在Java版,execute后由多个子命令连接而成。子命令分为修饰子命令、条件子命令、存储子命令和run子命令。
- 修饰子命令改变命令执行的方式,以特定的执行者、执行位置、执行维度和执行朝向执行后续子命令。
- 条件子命令用于测试特定条件是否成立,并输出结果或限制命令执行的条件。
- 存储子命令可以将命令的结果存储至记分板或者实体或方块实体的数据中,也可以更改boss栏的最大值或当前值。
你可以将所有你所需要的子命令串连在一起。除run子命令外的子命令可以随意排列或重复使用多次,run子命令只能使用一次且只能位于命令最后位置。命令必须以条件子命令或run子命令结尾,否则执行后没有任何效果。游戏会按顺序从前向后依次处理,比如,以下命令是不同的:
- 所有的实体向各自所朝的方向移动一格:
execute as @e at @s run tp ^ ^ ^1
- 所有的实体移动到执行者的前方一格:
execute at @s as @e run tp ^ ^ ^1
游戏会在处理run
后的命令和存储子命令之前,先处理其他子命令,故run
后的命令和存储子命令无法影响其他子命令。run
后的命令和存储子命令也无法相互影响。在某些情况下,命令会中途终止执行。
如果有语法错误或指定的命名空间ID不存在,命令就不会执行并提示错误。当结尾的条件子命令或run子命令以及所有的储存子命令都执行成功时,execute命令执行成功。
命令执行后如果没有中途停止,就会返回成功次数和一个特定的数值(详见储存子命令),这两个数值都来自于结尾的条件子命令或run子命令以及储存子命令。注意命令的返回值必定为整数,若为小数会被向下取整。成功次数通常会是0或1, 但如果此命令分开被执行多次(比如通过at @a
)那么其成功次数可以大于1。当命令没有执行成功时,两个返回值均为0。当结尾的条件子命令或run子命令被执行了多次时,仅以最后一次执行为准。它们可以由储存子命令记录。使用命令方块执行命令时将把它们返回到该命令方块上,这可以用条件制约的命令方块检测是否成功,也可以使用红石比较器读取成功次数。
/execute
命令有12个子命令,每一个都有其自身的语法。
- 所有子命令构成的语法树:
/execute . . .
… align <坐标轴> -> execute
… anchored (eyes|feet) -> execute
… as <实体> -> execute
… at <实体> -> execute
… facing (<坐标>|entity <实体> (eyes|feet)) -> execute
… in <维度> -> execute
… positioned (<坐标>|as <实体>) -> execute
… rotated (<旋转角度>|as <实体>) -> execute
… store (result|success) . . .
… block <坐标> <路径> (byte|short|int|long|float|double) <倍率> -> execute
… bossbar <id> (max|value) -> execute
… entity <实体> <路径> (byte|short|int|long|float|double) <倍率> -> execute
… score <实体> <目标记分项> -> execute
… (if|unless) . . .
… block <坐标> <方块> -> [execute]
… blocks <开始坐标> <结束坐标> <对照区域坐标> (all|masked) -> [execute]
… data . . .
… block <坐标> <路径> -> [execute]
… entity <实体> <路径> -> [execute]
… entity <实体> -> [execute]
… score <实体> <目标记分项> . . .
… (<|<=|=|>|>=) <对照实体> <对照实体记分板项> -> [execute]
… matches <范围> -> [execute]
… run <命令>
- …此处
-> execute
代表的是另一个要执行的子命令的开始。
以下是对所有子命令的详细介绍。
修饰子命令
align
把执行位置转换为方块坐标(向下取整,只针对指定坐标轴的坐标)。
- 语法
... align <坐标轴> ...
- 参数
- 坐标轴
x
、y
、z
中的1至3个的任意组合。
- 效果
- 参数不是字母
x
、y
、z
时视为语法错误。
- 示例
- x=-1.8,y=2.3,z=5.9时,使用
x
将变为x=-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时,使用
yxz
将变为x=2,y=-2,z=3- 比如,
execute positioned 2.4 -1.1 3.8 align yxz run tp ~ ~ ~
将把自己传送到(2, -2, 3)
- 比如,
- 将自己的y坐标微调至向下取整:
execute align y run tp ~ ~ ~
anchored
在使用局部坐标时或者使用朝向命令时更改此命令的基准点为实体脚或眼睛的位置。默认为脚的位置。
- 语法
... anchored (feet|eyes) ...
- 效果
- 参数不正确时,视为语法错误。
as
改变命令的执行者,但不改变执行位置或执行朝向。
- 语法
... as <实体> ...
- 参数
- 实体
- 指定后续内容的执行者。可以是玩家名、UUID或目标选择器。
- 效果
- 参数不正确时,视为语法错误。当目标实体不存在时命令终止执行。当选择到多个实体时,以各个实体为执行者分别执行一次后续子命令。
- 示例
- 获取所有羊的数据:
execute as @e[type=sheep] run data get entity @s
at
- 改变命令的执行位置、执行朝向和执行维度为指定
<实体>
的坐标、朝向和维度,不改变命令执行者。它通常与as子命令连用,可以以指定实体的身份执行命令。
- 语法
... at <实体> ...
- 参数
- 实体
- 指定目标实体,可以是玩家名、UUID或目标选择器。
- 效果
- 参数不正确时,视为语法错误。当目标实体不存在时命令终止执行。如果选择多个实体,则以多个实体的执行位置、执行朝向和执行维度,分别执行一次后续子命令。
- 示例
- 所有的羊向上移动1格:
execute as @e[type=sheep] at @s run tp ~ ~1 ~
- 注意该命令会执行自杀(清除执行者)而对羊没有影响,因为at子命令没有修改执行者:
execute at @e[type=sheep] run kill @s
facing
将命令执行的朝向改为面向指定的坐标,还可以面向某个实体的眼睛或脚部,不改变命令执行者和执行位置。
- 语法
... facing <坐标> ...
... facing entity <实体> (eyes|feet) ...
- 实体
- 需要朝向的实体,可以是玩家名、UUID或目标选择器。执行朝向将会是朝向该实体。
- eyes|feet(仅在
entity
模式可用)- 确定朝向实体眼睛还是脚的位置。
- 效果
- 参数不正确时,视为语法错误。当目标实体不存在时命令终止执行。当选择到多个实体时,则以多个执行朝向分别执行一次后续子命令。
- 示例
- 所有的实体都朝着(0, 64, 0)的方向移动一格(不改变自身的朝向):
execute as @e at @s facing 0 64 0 run tp ^ ^ ^1
- 所有非玩家实体朝着各自距离最近的玩家的方向移动一格(不改变自身的朝向):
execute as @e at @s facing entity @p feet run tp ^ ^ ^1
in
将命令执行维度设为特定维度。命令将在指定的维度中执行。
- 语法
... in <维度> ...
- 参数
- 维度
- 效果
- 参数不正确时,视为语法错误。当指定维度不存在时命令不执行并提示错误。
- 示例
- 寻找末地中的末地城(执行者在主世界或下界时也能够找到末地中的末地城的位置):
execute in the_end run locate EndCity
- 将玩家传送至下界(坐标不变):
execute in the_nether run teleport ~ ~ ~
positioned
在指定的坐标执行命令。改变执行位置,但不改变执行者、执行朝向。
- 语法
... positioned <坐标> ...
... positioned as <实体> ...
- 效果
- 参数不正确时,视为语法错误。当目标实体不存在时命令终止执行。如果选择多个实体,则以各个执行位置,分别执行一次后续子命令。
- 示例
- 假设执行者处于主世界时,寻找(0, 64, 0)附近的村庄:
/execute positioned 0 64 0 run locate Village
- 假设执行者处于其他维度时,寻找主世界(0, 64, 0)附近的村庄:
/execute in overworld positioned 0 64 0 run locate Village
- 让所有的羊向着玩家(执行者)的朝向移动一格(比如,玩家看着东边时,羊向东移动一格;玩家看着上方时,羊向上移动一格):
/execute as @e[type=sheep] positioned as @s run tp @s ^ ^ ^1
rotated
将命令的执行朝向设为特定方向,或者设为指定实体的朝向。改变执行朝向,不改变执行者和执行位置。
- 语法
... rotated <y-旋转角度> <x-旋转角度> ...
... rotated as <实体> ...
- 参数
- y-旋转角度
- 指定水平旋转角度(正北方为-180.0,正东为-90.0,正南为0.0,正西为90.0,正北以西为179.9,之后回到-180.0)。可使用波浪号指定基于当前旋转角度的相对偏移。
- x-旋转角度
- 指定垂直旋转角度(竖直上方为-90.0,至竖直下方90.0)。可使用波浪号指定基于当前旋转角度的相对偏移。
- 实体(仅在
as
模式可用)- 采用指定实体的朝向。
- 效果
- 参数不正确时,视为语法错误。当目标实体不存在时命令终止执行。如果选择多个实体,则以各个执行朝向,分别执行一次后续子命令。
- 示例
- 让所有的羊向着各自距离最近的玩家朝着的方向移动1格:
execute as @e[type=sheep] at @s或positioned as @s rotated as @p run tp @s ^ ^ ^1
条件子命令
当位于execute命令中间时,条件子命令让命令在所有条件测试通过后才会继续运行。条件子命令作为/execute
命令的结尾时,检测测试是否通过并会返回结果。
- 语法及参数
... (if|unless) block <坐标> <方块>
- 探测位于x y z的方块是否是指定的方块或属于指定的方块的标签。
... (if|unless) blocks <开始坐标> <结束坐标> <对照区域坐标> (all|masked) ...
- 探测
<开始坐标>
到<结束坐标>
之间的区域与对应<对照区域坐标>的区域内的方块相同
- 探测
... (if|unless) data block <坐标> <NBT>...
- 探测指定的方块是否拥有特定的NBT标签或存在特定的NBT路径。
... (if|unless) data entity <实体> <NBT>...
- 探测指定的实体是否拥有特定的NBT标签或存在特定的NBT路径。
- NBT
- 指定NBT标签或者NBT路径。例如
parent.targetDataTag
或者{id:"Custom"}
。
- 指定NBT标签或者NBT路径。例如
... (if|unless) entity <实体> ...
- 探测
<实体>
是否存在(1个或以上)。可能包括死亡的玩家,
- 探测
... (if|unless) score <实体> <目标记分项> <运算符> <对照实体> <对照实体记分板项> ...
- 探测
<实体>
的<目标记分项>
的分数与<对照实体>
的<对照实体记分板项>
的分数是否符合运算符的关系。
- 运算符
- 只能是下列等式或不等式运算符之一:
<
、<=
、=
、>=
或>
- 只能是下列等式或不等式运算符之一:
- 探测
... (if|unless) score <实体> <目标记分项> matches <范围> ...
- 探测
<实体>
的<目标记分项>
的分数是否在指定<范围>
内
- 范围
- 检查目标实体的目标记分板项是否为指定范围,如
3
、..5
或3..5
,参见命令#通过分数选择目标。
- 检查目标实体的目标记分板项是否为指定范围,如
- 探测
- 效果
- 当处于execute命令结尾时:对于
if
,如果条件成立则命令成功,否则失败。对于unless
,如果条件不成立则命令成功,否则失败。 - 当位于execute命令中间时:对于
if
,如果条件成立继续执行后续子命令,否则终止执行。对于unless
,如果条件不成立则继续执行后续子命令,否则终止执行。
- 示例
- 对于每个玩家,如果他下方1个的方块是羊毛,则击杀该玩家(简而言之,就是击杀所有踩在羊毛上的玩家):
/execute as @a at @s if block ~ ~-1 ~ #wool run kill @s
execute if entity @e[type=sheep] run function my_function
相当于1.13之前的/function my_function if @e[type=sheep]
- 检测自己的a分数与b分数是否相等:
/execute if score @s a = @s b
- 击杀所有在3格范围内没有豹猫的苦力怕:
/execute as @e[type=creeper] at @s unless entity @e[type=ocelot,distance=..3] run kill @s
存储子命令
存储子命令可以让命令在执行之后将命令返回的结果或成功次数储存于记分板、实体数据、方块数据或者boss栏中,有store result
和store success
两种模式:
store result
将会储存命令返回的结果。取代了过去的这些命令统计:AffectedBlocks
— 返回受命令影响的方块的数量。AffectedEntities
— 返回受命令影响的实体的数量。AffectedItems
—返回受命令影响的物品的数量。QueryResult
— 返回命令的查询结果。
store success
将会储存这个命令执行的成功次数。它取代了过去的这些命令统计:SuccessCount
— 返回一个命令成功执行的次数。
注意命令的返回值必定为整数,若为小数会被向下取整。当命令没有执行成功(success
为0
)时,result
也将为0
。
- 语法
..store (result|success) score <实体> <目标记分项> ...
- 返回值或成功次数会被储存在
<实体>
的<目标记分项>
分数里。
- 返回值或成功次数会被储存在
..store (result|success) block <坐标> <路径> (byte|double|float|int|long|short) <倍率> ...
- 将返回值或成功次数乘以
<倍率>
后储存在<坐标>
处方块实体的NBT标签的<路径>
处,并储存为指定的NBT格式(只包括byte、double、float、int、long和short)。若返回值为小数,则先乘以<倍率>
再取整。注意不能通过此命令为列表标签加入新元素,只能取代现有元素。
- 将返回值或成功次数乘以
..store (result|success) entity <实体> <路径> (byte|double|float|int|long|short) <倍率> ...
..store (result|success) bossbar <id> (value|max) ...
:* 将id为<id>
的boss栏的当前值或最大值((value|max)
)修改为命令的返回值或成功次数。
- 参数
- 实体
- 可以是玩家名、UUID或目标选择器。
- 坐标
- 目标记分项
- 记分项。
- 路径
- 索引NBT格式标签的路径。具体语法参见命令/术语列表#命令格式。
- 倍率
- 指定返回值乘以的数字,必须为双精确浮点数。
- id
- boss栏的id。参见
/bossbar
。
- boss栏的id。参见
- 效果
- 参数错误时视为语法错误。
- score模式,当目标记分项不存在时命令失败。
- block模式,指定坐标没有方块实体时命令失败,路径不存在时成功但不储存。
- entity模式,实体不存在时命令失败,路径不存在时成功但不储存。
- bossbar模式,ID不存在时命令失败。
- 示例
- 给所有拿着没有海之眷顾魔咒的钓鱼竿的玩家以海之眷顾魔咒,并且将这些玩家的记分板holding_rod的值设为1(该方法有时可用于筛选拿着钓鱼竿的玩家):
/execute as @a store success score @s holding_rod run enchant luck_of_the_sea
- 将所有站在羊毛上的苦力怕变为闪电苦力怕,否则变为普通苦力怕:
/execute as @e[type=creeper] store result entity @s powered byte 1 at @s if block ~ ~-1 ~ #wool
- 执行命令“
/say hi
”,如果成功,则将所有玩家的foo分数设为1,否则设为0:/execute store success score @a foo run say hi
- 将所有在5米以内有玩家的猪上鞍,否则不上鞍:
/execute as @e[type=pig] at @s store success entity @s Saddle byte 1 if entity @p[distance=..5]
run子命令
用来执行的命令。
- 语法
... run <完整的命令>
- 参数
- 完整的命令
- 一个完整的命令,不可以以斜线开头。
- 效果
- 执行这个命令。指定的命令执行成功时成功,失败时失败。
基岩版
- 语法
execute <执行源:目标> <坐标:x y z> <命令:命令>
- 可以限制在指定方块被检测到时才执行命令:
execute <执行源:目标> <坐标:x y z> detect <探测坐标:x y z> <方块:方块> <数据:整数> <命令:命令>
以上文字的颜色是为了便于阅读。
- 参数
- 执行源:目标
- 指定目标命令执行者。必须为一个玩家名或目标选择器。若多个目标被选中,则每个目标各运行一次指定的命令。
- 坐标:x y z
- 指定命令运行的位置。x和z必须在-30,000,000到30,000,000内(含)。使用波浪号指定的相对坐标的参考点为命令代行者所处位置,而非此命令的执行位置。
- 命令:命令
- 指定要运行的命令。必须为一个有效命令。
- 探测坐标:x y z
- 指定要检测方块的位置。x2和z2必须在-30,000,000到30,000,000内(含)。可使用波浪号来指定与(x,y,z)的相对坐标。
- 方块:方块(仅在
detect
模式可用)- 指定方块ID,必须与(x2,y2,z2)处的方块相同,命令才会执行。方块必须是有效的方块ID或方块名(例如,
minecraft:stone
)。
- 指定方块ID,必须与(x2,y2,z2)处的方块相同,命令才会执行。方块必须是有效的方块ID或方块名(例如,
- 数据:整数(仅在
detect
模式可用)- 必须与测试方块的方块数据相等,命令才会执行。设为
-1
可匹配任意的方块数据。
- 必须与测试方块的方块数据相等,命令才会执行。设为
- 效果
- 若参数指定不正确,或实体无法解析为一个或多个有效实体(指定名字的玩家必须在线),或检测到的方块ID、数据或状态不匹配,或指定的命令执行失败则失败。
- 若成功,指定的命令将在指定的坐标位置,使用管理员等级的权限,以目标的身份执行。
- 示例
- 在每个僵尸的位置生成闪电:
execute @e[type=zombie] ~ ~ ~ summon lightning_bolt
- 在每个站在任意种类沙子上的僵尸的位置生成闪电:
execute @e[type=zombie] ~ ~ ~ detect ~ ~-1 ~ sand -1 summon lightning_bolt
- 在最近的玩家处召唤10只苦力怕(只会在已载入的世界中存在至少10个实体时生效):
execute @e[c=10] ~ ~ ~ execute @p ~ ~ ~ summon creeper
Java版1.13之前
使用此命令执行者的权限,以其他玩家或实体的身份执行一条命令。可以添加一个/testforblock
格式的限制条件。
- 语法
execute <实体> <x> <y> <z> <命令>
- 可以限制在指定方块被检测到时才执行命令:
execute <实体> <x> <y> <z> detect <x2> <y2> <z2> <方块> <数据|状态> <命令…>
以上文字的颜色是为了便于阅读。
- 参数
- 实体
- 指定目标命令执行者。必须为一个玩家名或目标选择器。若多个目标被选中,则每个目标各运行一次指定的命令。
- x y z
- 指定命令运行的位置。x和z必须在-30,000,000到30,000,000内(含)。使用波浪号指定的相对坐标的参考点为命令代行者所处位置,而非此命令的执行位置。
- 命令
- 指定要运行的命令。必须为一个有效命令。
- x2 y2 z2(仅在
detect
模式可用)- 指定要检测方块的位置。x2和z2必须在-30,000,000到30,000,000内(含)。可使用波浪号来指定与(x,y,z)的相对坐标。
- 方块(仅在
detect
模式可用)- 指定方块ID,必须与(x2,y2,z2)处的方块相同,命令才会执行。方块必须是有效的方块ID(例如,
minecraft:stone
)。
- 指定方块ID,必须与(x2,y2,z2)处的方块相同,命令才会执行。方块必须是有效的方块ID(例如,
- 数据(仅在
detect
模式可用)- 必须与测试方块的方块数据相等,命令才会执行。设为
-1
可匹配任意的方块数据。
- 必须与测试方块的方块数据相等,命令才会执行。设为
- 状态
- 必须与测试方块的方块状态相等,命令才会执行。设为
*
可匹配任意的方块状态。
- 必须与测试方块的方块状态相等,命令才会执行。设为
- 效果
- 若参数指定不正确,或实体无法解析为一个或多个有效实体(指定名字的玩家必须在线),或检测到的方块ID、数据或状态不匹配,或指定的命令执行失败则失败。
- 若成功,指定的命令将在指定的坐标位置,使用管理员等级的权限,以目标的身份执行。
- 示例
- 在每个僵尸的位置生成闪电:
execute @e[type=zombie] ~ ~ ~ summon LightningBolt
- 在每个站在任意种类沙子上的僵尸的位置生成闪电:
execute @e[type=zombie] ~ ~ ~ detect ~ ~-1 ~ minecraft:sand -1 summon lightning_bolt
- 在最近的玩家处召唤10只苦力怕(只会在已载入的世界中存在至少10个实体时生效):
execute @e[c=10] ~ ~ ~ execute @p ~ ~ ~ summon creeper
历史
Java版 | |||||
---|---|---|---|---|---|
1.8 | 14w07a | 加入了/execute 命令。 | |||
14w08a | 在命令方块中运行的run命令现在会把成功值返回值传回命令方块了。 | ||||
1.11 | 16w32a | 加入了方块状态支持。 | |||
1.13 | 17w45a | 语法已被拆开。 | |||
17w45b | 重制了/execute store 命令 | ||||
18w02a | 加入了新的子命令以允许通过命令进行更多的控制。 | ||||
18w05a | 加入了/execute store 子命令。 | ||||
携带版Alpha | |||||
0.16.0 | build 1 | 加入了/execute 。 | |||
此命令的功能相当于其在Java版1.10的功能,但在/execute 中实体目标是可选的。 |