命令/execute

来自Minecraft Wiki
跳转至: 导航搜索

此条目的内容需要改进。

这些翻译的内容可能会出现错误或误导的信息。
你可以帮助我们来改进此条目。

execute
需要的权限等级

2‌‌[仅Java版]
1‌‌[仅基岩版]

限制条件

启用作弊‌‌[仅基岩版]

/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后的命令和存储子命令也无法相互影响。在某些情况下,命令会中止执行。


命令执行后如果没有中途停止,就会返回成功次数(success)和一个结果(result)(详见储存子命令),这两个数值都来自于结尾的条件子命令或run子命令。注意命令的返回值必定为整数,若为小数会被向下取整。成功次数通常会是0或1。但如果此命令分开被执行多次(比如通过at @a)那么其成功次数可以大于1。当命令没有执行成功时,两个返回值均为0。当结尾的条件子命令或run子命令被执行了多次时,只返回最后一次执行的值。这两个值可以被储存子命令储存。

使用命令方块执行命令时将把它们返回到该命令方块上,这可以用条件制约的命令方块检测是否成功,也可以使用红石比较器读取成功次数。

/execute命令有12个子命令,每一个都有其自身的语法。

以下是对所有子命令的详细介绍。

修饰子命令[编辑 | 编辑源代码]

align[编辑 | 编辑源代码]

把执行位置转换为方块坐标(向下取整,只针对指定坐标轴的坐标)。

语法
... align <坐标轴> -> execute ...
参数
<坐标轴>swizzle
xyz中的不重复的任意组合。(例如xxzzyxyz。)
效果
改变执行坐标。
参数不是字母xyz时视为语法错误。
示例
  • 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 <基准> -> execute ...
参数
基准entity_anchoreyesfeet
基准是眼睛的位置(eyes)还是脚的位置(feet)。
效果
^ ^ ^的定位被重新基准为眼睛或脚部。
参数不正确时,视为语法错误。
示例
/tp的效果是通过将脚部移动到指定的位置来移动实体。
execute anchored eyes run tp ^ ^ ^有效地将命令执行者的腿部移动到眼睛的位置(执行位置)。
execute anchored eyes run tp ^5 ^ ^意味着“将命令执行者的腿部移动到眼部位置5格左边的位置。

as[编辑 | 编辑源代码]

改变命令的执行者(executor),但不改变执行位置或执行朝向等。
语法
... as <目标> -> execute ...
参数
<目标>实体
指定后续内容的执行者。可以是玩家名、UUID或目标选择器
效果
将执行者改为目标实体(改变@s的含义)
参数不正确时,视为语法错误。
当目标实体不存在时命令终止执行。
当选择到多个实体时,以各个实体为执行者分别执行一次后续子命令。
示例
  • 获取所有的数据:execute as @e[type=sheep] run data get entity @s

at[编辑 | 编辑源代码]

改变命令的执行位置、执行朝向和执行维度为指定实体的坐标、朝向和维度,不改变命令执行者。
语法
... at <目标> -> execute ...
参数
<实体>entity
指定目标实体,可以是玩家名、UUID或目标选择器。
结果
位置、朝向和维度更新为目标实体的(将影响~ ~ ~^ ^ ^的定位)
参数不正确时,视为语法错误。
当目标实体不存在时命令终止执行。
如果选择多个实体,则以多个实体的执行位置、执行朝向和执行维度,分别执行一次后续子命令。
示例
  • 所有的羊向上移动1格:execute as @e[type=sheep] at @s run tp ~ ~1 ~
    • 注意从Java版1.13开始,/tp合并至/teleport,不再自动以目标实体坐标为基准坐标,因此tp @e[type=sheep] ~ ~1 ~命令会使所有的羊移动至执行者上方的一格,而非所有的羊各自向上移动一格。
  • 注意execute at @e[type=sheep] run kill @s会执行自杀(清除执行者)而对羊没有影响,因为at子命令没有修改执行者。

facing[编辑 | 编辑源代码]

将命令执行的朝向改为面向指定的坐标,还可以面向某个实体的眼睛或脚部,不改变命令执行者和执行位置。
语法
... facing <坐标> -> execute ...
... facing entity <实体> <基准> ...
参数
<坐标>vec3
需要朝向的坐标,格式为<x> <y> <z>,可以使用波浪号插入符。执行朝向将会是朝向该坐标。
<实体>entity
需要朝向的实体,可以是玩家名、UUID或目标选择器。执行朝向将会是朝向该实体。
基准entity_anchoreyesfeet
确定朝向实体眼睛(eyes)还是脚(feet)的位置。
效果
将朝向改为面向指定的坐标或目标实体(将影响^ ^ ^坐标)
参数不正确时,视为语法错误
当目标实体不存在时命令终止执行。
当选择到多个实体时,则以多个执行朝向分别执行一次后续子命令。
示例
所有的实体都朝着(0, 64, 0)的方向移动一格(不改变自身的朝向):execute as @e at @s facing 0 64 0 positioned ^ ^ ^1 rotated as @s run tp ~ ~ ~
所有非玩家实体朝着各自距离最近的玩家的方向移动一格(不改变自身的朝向):execute as @e at @s facing entity @p feet positioned ^ ^ ^1 rotated as @s run tp ~ ~ ~

in[编辑 | 编辑源代码]

将命令执行维度设为特定维度。命令将在指定的维度中执行。
注意不同的维度有不同的坐标尺度:从主世界传送到下界时,执行位置(仅X/Z轴部分)会除以8,从下界传送到主世界则会乘以8。同样适用于自定义维度
语法
... in <维度> -> execute...
参数
<维度>dimension
新的执行维度的命名空间IDminecraft命名空间下的维度默认有overworldthe_endthe_nether
效果
更新执行维度。
参数不正确时,视为语法错误。
示例
寻找末地中的末地城(执行者在主世界或下界时也能够找到末地中的末地城的位置):execute in the_end run locate endcity
主世界(16,64,16)位置的玩家运行execute in minecraft:the_nether positioned as @s run tp ~ ~ ~,会传送到下界的(16,64,16)。
主世界(16,64,16)位置的玩家运行execute in minecraft:the_nether run tp ~ ~ ~,会传送到下界的(2,64,2)。
主世界(80,64,80)位置的玩家运行execute in minecraft:the_nether run tp ~ ~ ~5,会传送到下界的(10,64,15)。

positioned[编辑 | 编辑源代码]

在指定的坐标执行命令。改变执行位置,但不改变执行者、执行朝向。

语法
... positioned <坐标> -> execute ...
... positioned as <目标> -> execute ...
参数
<坐标>vec3
指定命令执行的坐标,格式为<x> <y> <z>,可以使用相对坐标局部坐标
<目标>entity(仅在as模式可用)
指定命令执行的位置为<实体>所处的坐标,可以是玩家名、UUID或目标选择器
效果
改变位置。
参数不正确时,视为语法错误。
当目标实体不存在时命令终止执行。
如果选择多个实体,则以各个执行位置,分别执行一次后续子命令。
示例
  • 假设执行者处于主世界时,寻找(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轴旋转角度> -> execute ...
... rotated as <实体> -> execute ...
参数
<旋转角度>rotation<绕y轴旋转角度> <绕x轴旋转角度>
需要的旋转角度
绕y轴旋转角度(yaw)指定水平旋转角度(正北方为-180.0,正东为-90.0,正南为0.0,正西为90.0,正北以西为179.9,之后回到-180.0)。可使用波浪号指定基于当前旋转角度的相对偏移。
绕x轴旋转角度(pitch)指定垂直旋转角度(竖直上方为-90.0,至竖直下方90.0)。可使用波浪号指定基于当前旋转角度的相对偏移。
Minecraft当前不支持绕z轴旋转角度(roll)。
<目标>entity
采用指定实体的朝向。
效果
参数不正确时,视为语法错误。
<目标>实体不存在时命令终止执行。
如果选择多个实体,则以各个执行朝向,分别执行一次后续子命令。
示例
  • 让所有的羊以各自距离最近的玩家朝着作为方向移动1格:execute as @e[type=sheep] at @spositioned as @s rotated as @p run tp @s ^ ^ ^1

条件子命令[编辑 | 编辑源代码]

条件子命令ifunless用于限制命令只有在指定的条件下执行。unless作用与if相反,相当于“如果不”。这两个命令都有相同的参数结构。

有6种不同类型的条件:

  1. (if|unless) block – 检测单个具体方块
  2. (if|unless) blocks – 检测两个3D长方体区域内的方块
  3. (if|unless) data – 检测方块、实体或存储持有的数据
  4. (if|unless) entity – 检测实体是否存在
  5. (if|unless) predicate – 检测谓词
  6. (if|unless) score - 检测目标的分数

(if|unless) block[编辑 | 编辑源代码]

比较给定的位置的方块和给定的方块ID
语法
... (if|unless) block <坐标> <方块> -> [execute]
参数
<坐标>block_pos
需要检测的方块的坐标。格式为x y z,可以使用相对坐标局部坐标
<方块>block_predicate
指定一个方块ID或方块标签,可以附加方块状态和数据标签。

(if|unless) blocks[编辑 | 编辑源代码]

比较相同大小的两个长方体区域的方块
语法
... (if|unless) blocks <开始坐标> <结束坐标> <对照区域坐标> <模式> -> [execute] ...
参数
<开始坐标><结束坐标>block_pos
源区域(比较时参照的区域)的两个对角方块位置
<对照区域坐标>block_pos
对照区域的西北下角方块的坐标(即长方形区域内x y z坐标最小处)。
格式均为<x> <y> <z>,可以使用相对坐标局部坐标。参见clone
<模式>:可以是allmasked
选择all将探测区域内的全部方块,选择masked将忽略源区域内空气方块所在的位置。

(if|unless) data[编辑 | 编辑源代码]

检查目标方块、实体或存储是否拥有给定的标签数据。
语法
... (if|unless) data block <坐标> <路径> -> [execute] ...——用于检查方块
... (if|unless) data entity <目标> <路径> -> [execute] ...——用于检查实体
... (if|unless) data storage <source> <路径> -> [execute] ...——用于检查存储
参数
<坐标>block_pos
要被检测的方块的坐标
<目标>entity
要被检测的单个实体
<source>resource_location
要被检测的存储的命名空间ID
<路径>nbt_path
要检查的数据标签。

(if|unless) entity[编辑 | 编辑源代码]

检查一个或更多个目标是否存在。
语法
... (if|unless) entity <目标> -> [execute] ...
参数
<目标>
要检查的目标实体

(if|unless) predicate[编辑 | 编辑源代码]

检查谓词(predicate)是否通过(结果是否为正)。见谓词
语法
... (if|unless) predicate <谓词> -> [execute] ...
参数
<predicate>resource_location

(if|unless) score[编辑 | 编辑源代码]

检查指定目标的记分板中的记分项的分数是否与另一个(或同一个)目标的记分项的分数是否符合指定的关系,或者是否在给定的范围之内。

语法
... (if|unless) score <目标> <目标记分项> <运算符> <> <源记分项> -> [execute] ...——检查<目标><目标记分项>的分数与<><源记分项>的分数是否符合运算符的关系。
... (if|unless) score <目标> <目标记分项> matches <范围> -> [execute] ...——检查<目标><目标记分项>的分数是否在指定<范围>内。
参数
<目标>score_holder
单个分数持有者。可以是实体,可以是玩家名、UUID、目标选择器或记分板自定义的目标。
可以执行*但是失败。
<目标记分项>objective
检查的记分项。
选项:(if|unless) score <目标> <目标记分项> <运算符> <> <源记分项>
<>score_holder
被比较的单个分数持有者。可以是实体,可以是玩家名、UUID、目标选择器或记分板自定义的目标。
可以执行*但是失败。
<源记分项>objective
记分项。
选项:matches <范围>
<范围>int_range
检查分数是否在某个范围之内

效果[编辑 | 编辑源代码]

当处于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相当于Java版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 resultstore success两种模式。注意命令的返回值必定为整数,若为小数会被向下取整。

有五种不同的存储模式:

  1. store (result|success) block——存储在方块NBT中
  2. store (result|success) bossbar——存储在boss栏的数据中
  3. store (result|success) entity——存储在一个实体的NBT中
  4. store (result|success) score——存储在目标的记分项的分数中
  5. store (result|success) storage——存储在储存的NBT中

store (result|success) block[编辑 | 编辑源代码]

将命令的返回值存储为方块实体内的标签数据。存储为字节、短整型、整型、长整型、浮点或双精度浮点的格式。如果返回值为小数,会先向下取整然后乘以一定的<倍率>
语法
... store (result|success) block <目标坐标> <路径> <类型> <倍率> -> execute ...
参数
<目标坐标>block_pos
需要将数据存储到的目标方块的坐标。
<路径>nbt_path
需要持有结果的数据标签的位置。
<类型>:只能是byte|short|int|long|float|double
需要存储为的数据的类型。
<倍率>double
存储值前先乘以一定的倍率。
结果
参数不正确时,视为语法错误。
路径不存在时不进行操作。
将返回值或成功次数乘以<倍率>后储存在<目标坐标>处方块实体的NBT标签的<路径>处,并储存为指定的NBT格式

store (result|success) bossbar[编辑 | 编辑源代码]

将命令的返回值存储为boss栏的当前值或者最大值。
语法
... store (result|success) bossbar <id> (value|max) ...
参数
<id>resource_location
需要储存在的boss栏的命名空间ID
(value|max)
存储为boss栏的当前值(value)还是最大值(max)
结果
参数不正确时,视为语法错误。
将id为<id>的boss栏的当前值或最大值修改为命令的返回值或成功次数。

store (result|success) entity[编辑 | 编辑源代码]

将返回值或成功次数乘以<倍率>后储存在<目标>的NBT标签的<路径>中,并储存为指定的NBT格式。若返回值为小数,则先取整再乘以<倍率>。像/data merge/modify/remove entity一样,不能修改玩家NBT。
语法
... store (result|success) entity <目标> <路径> <类型> <倍率> -> execute ...
参数
<目标>entity
存储在此实体的NBT数据中。
<路径>nbt_path
存储在实体NBT数据的此路径中。
<类型>:只能是byte|short|int|long|float|double
需要存储为的数据的类型。
<倍率>double
存储值前先乘以一定的倍率。
结果
参数不正确时,视为语法错误。
路径不存在时不进行操作。
将返回值或成功次数乘以<倍率>后储存在<目标>实体的NBT标签的<路径>处,并储存为指定的NBT格式

store (result|success) score[编辑 | 编辑源代码]

将给定的<记分项><目标>持有的分数修改为命令的返回值或成功次数。
语法
... store (result|success) score <目标> <记分项> -> execute ...
参数
<目标>score_holder
修改此分数持有者(可以是实体、选择器甚至不存在的玩家)的分数
<记分项>objective
记分板项。
结果
参数不正确时,视为语法错误。
返回值或成功次数会被储存为<目标><记分项>分数。

store (result|success) storage[编辑 | 编辑源代码]

使用储存中的<路径>以存储返回值或成功次数。存储为字节、短整型、整型、长整型、浮点数或双精度。如果返回的值是小数,则先取整再乘以一定的<倍率>。如果存储不存在,则会创建。
语法
... store (result|success) storage <目标> <路径> <类型> <倍率> -> execute ...
参数
<目标>resource_location
目标存储容器的命名空间ID
<路径>nbt_path
需要持有结果的数据标签的位置。
<类型>:只能是byte|short|int|long|float|double
需要存储为的数据的类型。
<倍率>double
存储值前先乘以一定的倍率。
结果
参数不正确时,视为语法错误。

run子命令[编辑 | 编辑源代码]

要被执行的命令。

语法
... run <完整的命令>
参数
完整的命令
任何一个完整的命令,不可以以斜线开头。
技术细节
将命令节点重置为command dispatcher的根节点。
注意:
command dispatcher是在玩家开始一个带有斜杠/的消息时开始的。
命令节点是光标正在编辑的特定词(word)或项(entry),是一个命令或参数。
根节点在当前命令的第一个词之前出现。
结果
执行这个命令。指定的命令执行成功时成功,失败时失败。

更多示例[编辑 | 编辑源代码]

  • 将所有快捷栏第一槽位物品带有效率魔咒的玩家传送到0, 64, 0:
    /execute as @a if data entity @s Inventory[{Slot:0b}].tag.Enchantments[{id:"minecraft:efficiency"}] run tp @s 0 64 0
  • 在所有玩家眼睛前方三格召唤烟雾粒子效果:
    /execute as @a at @s anchored eyes run particle smoke ^ ^ ^3
  • 将所有在5米以内有玩家的猪上,否则不上鞍:
    /execute as @e[type=pig] at @s store success entity @s Saddle byte 1 if entity @p[distance=..5]
  • 让所有在中的玩家在聊天框里说:“我的脚湿了!”:
    /execute as @a at @s if block ~ ~ ~ water run say 我的脚湿了!
  • 让所有“test”计分板未设置的玩家在聊天框里说:“分数已重置”:
    /execute as @a unless score @s test = @s test run say 分数已重置

基岩版[编辑 | 编辑源代码]

语法[编辑 | 编辑源代码]

execute <执行源:目标> <坐标:x y z> <命令:命令>
可以限制在指定方块被检测到时才执行命令:
execute <执行源:目标> <坐标:x1 y1 z1> detect <探测坐标:x2 y2 z2> <方块:方块> <数据:整数> <命令:命令>

以上文字的颜色和下标是为了便于阅读。

参数[编辑 | 编辑源代码]

执行源:目标
指定目标命令执行者。必须为一个玩家名或目标选择器。若多个目标被选中,则每个目标各运行一次指定的命令。
坐标:x y z
指定命令运行的位置。xz必须在-30,000,000到30,000,000内(含)。使用波浪号指定的相对坐标的参考点为命令代行者所处位置,而非此命令的执行位置。
命令:命令
指定要运行的命令。必须为一个有效命令。
探测坐标:x y z
指定要检测方块的位置。x2z2必须在-30,000,000到30,000,000内(含)。可使用波浪号来指定与(x,y,z)的相对坐标。
方块:方块(仅在detect模式可用)
指定方块ID,必须与(x2,y2,z2)处的方块相同,命令才会执行。方块必须是有效的方块ID或方块名(例如,minecraft:stone)。
数据:整数(仅在detect模式可用)
必须与测试方块的方块数据相等,命令才会执行。设为-1可匹配任意的方块数据。

效果[编辑 | 编辑源代码]

若参数指定不正确,或实体无法解析为一个或多个有效实体(指定名字的玩家必须在线),或检测到的方块ID、数据或状态不匹配,或指定的命令执行失败则失败。
若成功,指定的命令将在指定的坐标位置,使用管理员等级的权限,以目标的身份执行。

示例[编辑 | 编辑源代码]

  • 在所有僵尸的位置上召唤闪电:
    /execute @e[type=zombie] ~ ~ ~ summon lightning_bolt
  • 在所有站在任意种类沙子的僵尸的位置上召唤闪电:
    /execute @e[type=zombie] ~ ~ ~ detect ~ ~-1 ~ minecraft:sand -1 summon lightning_bolt
  • 在最近一位玩家的位置上召唤10只苦力怕(只会在已载入的世界中存在至少10个实体时生效):
    /execute @e[c=10] ~ ~ ~ execute @p ~ ~ ~ summon creeper ~ ~ ~
  • 在你朋友的位置上召唤末影龙:
    /execute 你朋友的名字 ~ ~ ~ summon ender_dragon

历史[编辑 | 编辑源代码]

Java版
1.814w07a加入了/execute命令。
14w08a在命令方块中运行的run命令现在会把成功值返回值传回命令方块了。
1.1116w32a加入了方块状态支持。
1.1317w45a语法被拆分。
17w45b重制了/execute store命令。
18w02a加入了新的子命令以允许通过命令进行更多的控制。
18w05a加入了/execute store子命令。
1.1418w43a加入了/execute (if|unless) data
1.1519w38a加入了/execute if predicate
加入了/execute store storage
携带版Alpha
0.16.0build 1加入了/execute
此命令的功能相当于其在Java版1.10的功能,但在/execute中实体目标是可选的。

视频[编辑 | 编辑源代码]