命令/infobox
/execute
是一个在多种场景中执行其他命令的通用命令。
Java版
在Java版,execute后由多个子命令连接而成。子命令分为修饰子命令、条件子命令、存储子命令和run子命令。修饰子命令改变命令执行的方式,在特定的执行者、执行位置、执行维度和执行朝向执行命令。条件子命令用于测试特定条件是否成立。条件子命令和run子命令同时使用时可以限制命令执行的条件,只有在特定条件成立或不成立时执行命令,否则不执行命令。存储子命令可以将命令的结果存储至记分板或者实体或方块实体的数据中,也可以更改boss栏的最大值或当前值。
你可以将所有你所需要的子命令串连在一起。同一个子命令可以多次出现,游戏会按顺序从前向后依次处理。比如,以下命令是不同的:
- 所有的实体向各自所朝的方向移动一格:
execute as @e at @s run tp ^ ^ ^1
- 所有的实体移动到执行者的前方一格:
execute at @s as @e run tp ^ ^ ^1
游戏会在处理run
后的命令和存储子命令之前,先处理其他子命令,故run
后的命令和存储子命令无法影响其他子命令。当所有子命令都执行成功时,execute
命令才执行成功。只要有一个子命令失败,命令就失败。
以下为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, 5.9)
- 比如,
- 将自己的y坐标微调至向下取整:
execute align y run tp ~ ~ ~
anchored
在条件子命令或run
子命令使用局部坐标时或者使用朝向命令时更改此命令的基准点为实体脚或眼睛的位置。
- 语法
... 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 <维度> ...
- 参数
- 维度
- 执行命令所处的维度的id。只能是
minecraft:overworld
、minecraft:the_end
或minecraft:the_nether
,或Mod中的维度(若有)。命名空间可省。
- 执行命令所处的维度的id。只能是
- 效果
- 当指定维度不存在时命令失败。
- 示例
- 寻找末地中的末地城(执行者在主世界或下界时也能够找到末地中的末地城的位置):
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
条件子命令
条件子命令让命令在所有条件测试通过后才会运行。另外,当没有run子命令时,条件子命令可以作为/execute
命令的结尾,无论测试是否通过此命令都会返回。
if和unless
探测特定条件是否成立。在if模式下,如果条件成立,则继续执行后续命令;在unless模式下,如果条件不成立,则继续执行后续命令。
- 语法
... (if|unless) block <坐标> <方块>...
- 探测位于x y z的方块是否是指定的方块或属于指定的方块的标签
... (if|unless) blocks <开始坐标> <结束坐标> <对照区域位置> (all|masked) ...
- 探测
<开始坐标>
到<结束坐标>
之间的区域与对应<对照区域位置>的区域内的方块相同
- 探测
... (if|unless) data (block <坐标>|entity <目标>) <路径>
- 探测指定的方块或者实体是否拥有特定路径的nbt标签
... (if|unless) entity <实体> ...
- 探测
<实体>
是否存在(1个或以上)。可能包括死亡的玩家,
- 探测
... (if|unless) score <实体> <目标记分项> <运算符> <对照实体> <对照实体记分板项> ...
- 探测
<实体>
的<目标记分项>
的分数与<对照实体>
的<对照实体记分板项>
的分数是否符合运算符的关系。
- 探测
... (if|unless) score <实体> <目标记分项> matches <范围> ...
- 探测
<实体>
的<目标记分项>
的分数是否在指定<范围>
内
- 探测
- 参数
- 坐标
- 方块
- 需要探测该坐标是否为此方块,或者该坐标的方块是否属于此标签。可以是方块id或标签。
- 开始、结束、位置(if blocks模式)
- all|masked(if blocks模式)
- 选择all将探测区域内的全部方块,选择masked将忽略空气方块所在的位置。
- 实体
- 指定实体,可以是玩家名、UUID或目标选择器。
- 运算符
- 只能是下列等式或不等式运算符之一:
<
、<=
、=
、>=
或>
- 只能是下列等式或不等式运算符之一:
- 范围
- 检查目标实体的目标记分板项是否为指定范围,如
3
、..5
或3..5
,参见命令#通过分数选择目标。
- 检查目标实体的目标记分板项是否为指定范围,如
- 效果
- 对于
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
将会记录这个命令执行的成功次数。此数值通常会是0或1, 但如果此命令分开被每个实体执行(像是as @a
)那么其成功数可以大于1。它取代了过去的这些命令统计:SuccessCount
— 返回一个命令成功执行的次数。
注意命令的返回值必定为整数,若为小数会被向下取整。当命令没有执行成功(success
为0
)时,result
也将为0
。
store
- 语法
..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。参见
- 效果
- 参数错误时命令失败。
- 指定的
实体
、目标记分项
、路径
或boss栏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 <完整的命令>
- 参数
- 完整的命令
- 一个完整的命令,不可以以斜线开头。
- 效果
- 执行这个命令。如果之前有条件子命令,则只有当条件符合或不符合时执行子命令【这段话的意思是,如果是if,符合才执行,如果是unless,则不符合才执行】。如果之前有修饰子命令,则命令会在修饰后运行。如果之前有存储子命令,则命令返回的结果或成功次数将会存储至boss栏、记分板、方块nbt或实体nbt中。
基岩版
- 语法
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 中实体目标是可选的。 |