命令/execute

来自Minecraft Wiki
跳转到导航 跳转到搜索
  关于Java版1.1317w45a)和基岩版1.19.501.19.50.23)前的此命令,请见“命令/execute/旧版”。
execute
需要的权限等级

启用作弊[仅基岩版]

/execute是各不同功能的子命令的集合,用于改变命令执行上下文修饰子命令),执行逻辑判断(条件子命令)和管理并存储命令返回值(存储子命令[仅Java版],并在此基础上执行任意其他命令。

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

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

/execute命令有14[仅JE]/11[仅BE]条子命令。子命令按功能可分为以下几类:

  • 修饰子命令:修改命令上下文以改变命令执行时的状态,从而以特定的执行位置、执行基准点、执行者、执行朝向、执行维度执行后续子命令。
  • 条件子命令:检测特定条件是否成立并输出结果,或限制子命令执行的条件。
  • 存储子命令[仅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子命令和存储子命令[仅Java版])。例如,条件子命令的条件没有达成,或是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版基岩版的分叉方式并不一样。[1][2]

  • Java版中,游戏会广度优先地处理子命令,也就是按顺序逐个处理子命令。所以游戏会在处理run子命令之前处理完其他的子命令,于是,run子命令无法影响到其他的子命令。
  • 基岩版中,游戏会深度优先地处理子命令。也就是说,命令执行分叉以后,后续的所有子命令会作为一个整体,每个分支执行一次。
  • 例如,如果世界上有两个盔甲架(A和B),一个玩家执行了execute as @e[type=armor_stand] as @e[type=armor_stand] run summon armor_standJava版基岩版的行为如图所示:

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版

Java版中,一条分支在完整执行后(没有发生执行中断)会输出success值和result值(另见命令#输出)。这两个输出值:

  • 是各执行分支的输出值,而非/execute命令本身的;
  • 均来自结尾的条件子命令或run子命令中的命令;
  • 均为整数,result遇小数时向下取整,success总为0或1;
  • 如果结尾的子命令在一个分支中执行失败,则此分支的这两个值均为0;
  • 均可由存储子命令[仅Java版]存储。

请注意,这两个值来自结尾的条件子命令或run子命令中的命令,是每个分支的输出值,而非整条/execute命令的。

若使用run子命令执行/function命令,在某些条件下没有这两个输出值。详细信息参见/function

如果在储存子命令之后命令执行被分叉,则储存操作将应用于每个分支。每个分支的输出值都会在此分支执行完后被储存。如果所有分支的存储位置相同,则后执行的分支的输出会直接覆盖先执行分支的输出,而不是累加,所以在执行整个/execute命令后,此存储位置最后的值是最后执行的分支的输出。

成功次数[编辑 | 编辑源代码]

像大多数命令一样,/execute命令(无论是否执行中断)本身也有一个成功次数。成功次数:

  • /execute命令本身的输出值,而非各执行分支的;
  • 来自结尾的条件子命令或run子命令;
  • 各分支的值会被累加;
  • 为大于等于0的整数;
  • 当使用命令方块执行/execute时,成功次数会返回到命令方块中,可用条件制约的命令方块检查,或用红石比较器读取成功次数。

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

下面列出了各子命令及其语法的语法树。其中的所有-> execute[仅Java版]chainedCommand: ExecuteChainedOption_0[仅基岩版]表示此位置可作为下一个子命令的起始点。

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

可用子命令:

  • align:将执行位置转换为方块坐标。
  • anchored:将执行基准点设置为实体的脚部或眼部。
  • as:将执行者设置为特定实体。
  • at:将执行位置、执行朝向和执行维度设置为指定实体的坐标、朝向和维度。
  • facing:将命令的执行朝向设置为面向指定坐标或指定实体。
  • in:将命令执行维度设置为特定维度。
  • on[仅Java版]:将执行者设置为与当前执行者有指定类型的关系的实体。
  • positioned:将执行位置设置为指定坐标或指定实体位置。
  • rotated:将执行朝向设为特定方向或设为指定实体的朝向。
  • summon[仅Java版]:立即创建一个实体,并将此实体设置为执行者。

align[编辑 | 编辑源代码]

将执行位置转换为方块坐标(向下取整)。
语法
JEalign <axes> -> execute
BEalign <axes: string> <chainedCommand: ExecuteChainedOption_0>
参数
JE<axes>swizzle
BEaxes: stringbasic_string
需要转换的坐标轴。
必须为xyz三个字符的组合。字符的顺序没有要求,但是不可以重复出现。
结果
改变执行坐标,指定轴上的坐标向下取整。
参数未正确指定时,视为语法错误。
示例
  • /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[编辑 | 编辑源代码]

将执行基准点设置为实体的脚部或眼部,默认为脚部。
语法
JEanchored <anchor> -> execute
BEanchored <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
参数
JE<anchor>entity_anchor
BEeyes|feet
需要设置的基准点位置。
必须为实体锚点(eyesfeet)。eyes为眼部,feet为脚部。
结果
局部坐标的执行基准点设为眼睛或脚,并改变facing子命令所指向的位置。
参数未正确指定时,视为语法错误。
示例
  • /tp的效果是通过将脚部移动到指定的位置来移动实体。
  • /execute anchored eyes run tp ^ ^ ^:将命令执行者的腿部移动到原眼部位置。
  • /execute anchored eyes run tp ^5 ^ ^:将命令执行者的腿部移动到原眼部位置左边5格的位置上。

as[编辑 | 编辑源代码]

将执行者设置为特定实体,但不改变其他命令变量。
语法
JEas <targets> -> execute
BEas <origin: target> <chainedCommand: ExecuteChainedOption_0>
参数
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
需要设置的执行者,影响后续子命令。
必须为玩家名、目标选择器UUID[仅Java版]
结果
将执行者改为目标实体(改变@s的含义)。
参数未正确指定时,视为语法错误。
<targets>origin: target无法选中一个或多个有效实体(指定玩家必须在线)时,命令终止执行。
当选择到多个实体时,以各个实体为执行者分别执行一次后续子命令。
示例
  • /execute as @e[type=sheep] run data get entity @s[仅Java版]:获取所有绵羊的数据。
  • /execute as @a[gamemode=spectator] run spectate[仅Java版]:使所有旁观模式的玩家从其附身的实体上退出。

at[编辑 | 编辑源代码]

将执行位置、执行朝向和执行维度设置为指定实体的坐标、朝向和维度,不改变命令执行者。
语法
JEat <targets> -> execute
BEat <origin: target> <chainedCommand: ExecuteChainedOption_0>
参数
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
指定目标实体。
必须为玩家名、目标选择器UUID[仅Java版]
结果
将命令的执行位置、朝向和维度更改为目标实体的。(影响相对坐标局部坐标的定位)
参数未正确指定时,视为语法错误。
<targets>origin: target无法选中一个或多个有效实体(指定玩家必须在线)时,命令终止执行。
当选择到多个实体时,以各个实体的位置、朝向和维度,分别执行一次后续子命令。
示例
  • /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[编辑 | 编辑源代码]

将命令的执行朝向设置为面向指定坐标或指定实体,不改变命令执行者和执行位置。
语法
JEfacing <pos> -> execute
BEfacing <position: x y z> <chainedCommand: ExecuteChainedOption_0>
将命令的执行朝向设置为执行基准点到指定坐标的射线方向。
JEfacing entity <targets> <anchor> -> execute
BEfacing entity <origin: target> <eyes|feet> <chainedCommand: ExecuteChainedOption_0>
将命令的执行朝向设置为执行基准点到指定实体的指定基准点的射线方向。
参数
JE<pos>vec3
BEposition: x y zCommandPositionFloat
需要面向的坐标。
必须为三维坐标,元素为双精度[仅Java版]单精度[仅基岩版]浮点数。允许相对坐标~ ~ ~)或局部坐标^ ^ ^)。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
需要面向的实体。
必须为玩家名、目标选择器UUID[仅Java版]
JE<anchor>entity_anchor
BEeyes|feet
需要面向实体的眼部还是脚部。
必须为实体锚点(eyesfeet)。
结果
将执行朝向设置为面向指定的坐标或目标实体。
参数未正确指定时,视为语法错误。
<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[编辑 | 编辑源代码]

将命令执行维度设置为特定维度。命令将在指定的维度中执行。
语法
JEin <dimension> -> execute
BEin <dimension: Dimension> <chainedCommand: ExecuteChainedOption_0>
参数
JE<dimension>dimension
BEdimension: Dimensionenum
需要设置的维度。
必须为命名空间ID,将会在命令执行时尝试获取对应的维度minecraft命名空间下的维度默认有overworldthe_nether[仅Java版]/nether[仅基岩版]the_end
结果
更新执行维度。并依据原维度与现维度间关系,按比例缩放相对坐标和局部坐标(不包括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[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版
将执行者设置为与当前执行者有指定类型的关系的实体。
语法
JEon (attacker|controller|leasher|owner|passengers|target|vehicle) -> execute
参数
JE(attacker|controller|leasher|origin|owner|passengers|target|vehicle)
attacker:最近5秒内对当前执行者造成伤害的最后实体。
controller:控制当前执行者的实体。
leasher:用拴绳牵引当前执行者的实体。
origin:当前执行者的来源。
若当前执行者为弹射物,则为其发射者。
若当前执行者为物品,则为其掷出者。
若当前执行者为区域效果云,则为其来源者。
若当前执行者为被激活的TNT,则为其点燃者。
若当前执行者为唤魔者尖牙恼鬼,则为其召唤者。
owner:当前执行者为可驯服生物时,此实体的主人。
passengers:直接骑乘于当前执行者的实体。若有多个骑乘于当前执行者的实体,则实体选择顺序和骑乘先后顺序相同。
target:获取带目标实体的目标。目前,所有AI生物和交互实体均属于带目标实体。
若当前执行者属于AI生物,则获取该生物记忆中的攻击目标。
若当前执行者为交互实体,则为其NBT复合标签/JSON对象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[编辑 | 编辑源代码]

将执行位置设置为指定坐标或指定实体位置,但不改变执行者、执行朝向和执行维度。
语法
JEpositioned <pos> -> execute
BEpositioned <position: x y z> <chainedCommand: ExecuteChainedOption_0>
将执行位置设置为指定坐标。
JEpositioned as <targets> -> execute
BEpositioned as <origin: target> <chainedCommand: ExecuteChainedOption_0>
将执行位置设置为指定实体位置。
JEpositioned over <heightmap> -> execute
将执行位置设置为符合特定高度图的一纵列方块的最高的位置。
参数
JE<pos>vec3
BEposition: x y zCommandPositionFloat
指定命令执行的坐标。
必须为三维坐标,元素为双精度[仅Java版]单精度[仅基岩版]浮点数。允许相对坐标~ ~ ~)或局部坐标^ ^ ^)。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
指定命令执行的位置为此处指定的实体所处的坐标。
必须为玩家名、目标选择器UUID[仅Java版]
JE<heightmap>heightmap
指定高度图。值须为world_surface、​motion_blocking、​motion_blocking_no_leavesocean_floor中之一。
结果
改变命令的执行位置。positioned <pos>会将执行基准点设置为脚部。
参数未正确指定时,视为语法错误。
<targets>origin: target无法选中一个或多个有效实体(指定玩家必须在线)时,命令终止执行。
当选择到多个实体时,以各个实体的位置分别执行一次后续子命令。
示例
  • /execute positioned 0 64 0 run locate structure #village[仅Java版]:寻找离坐标(0, 64, 0)最近的村庄。
  • /execute positioned 0 64 0 run locate structure village[仅基岩版]:寻找离坐标(0, 64, 0)最近的村庄。

rotated[编辑 | 编辑源代码]

将执行朝向设为特定方向,或设为指定实体的朝向,但不改变执行者和执行位置。
语法
JErotated <rot> -> execute
BErotated <yaw: value> <pitch: value> <chainedCommand: ExecuteChainedOption_0>
将命令的执行朝向设为特定方向。
JErotated as <targets> -> execute
BErotated as <origin: target> <chainedCommand: ExecuteChainedOption_0>
将命令的执行朝向设为指定实体的朝向。
参数
JE<rot>rotation<yaw> <pitch>
BEyaw: valueRelativeFloatpitch: valueRelativeFloat
需要的旋转角度。
必须由两个双精度浮点数[仅Java版]单精度浮点数[仅基岩版]组成,分别表示绕Y轴旋转和绕X轴旋转,以度为单位。分别对应实体数据NBT列表/JSON数组Rotation的两个元素。
  • 绕Y轴旋转时,-180.0表示北,-90.0表示东,0.0表示南,90.0表示西。
  • 绕X轴旋转时,竖直上方为-90.0,至竖直下方90.0。
加上波浪号前缀将相对于执行朝向进行旋转。
JE<targets>entity
BEorigin: targetCommandSelector<Actor>
采用指定实体的朝向。
必须为玩家名、目标选择器UUID[仅Java版]
结果
参数未正确指定时,视为语法错误。
<targets>实体不存在时命令终止执行。
<targets>origin: target无法选中一个或多个有效实体(指定玩家必须在线)时,命令终止执行。
当选择到多个实体时,以各个实体的朝向分别执行一次后续子命令。
示例
  • /execute as @e[type=sheep] at @s rotated as @p run tp @s ^ ^ ^1:让所有的绵羊以各自距离最近玩家的朝向作为方向移动1格。

summon[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版
立即生成一个实体,并将执行者设置为此实体。
语法
JEsummon <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

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

条件子命令包括ifunless两种,用于测试特定类型的条件。两者的语义相反但参数结构一致,if表示“如果……就”,unless表示“除非……否则”。

条件子命令可以单独使用,也可以与其他子命令一起使用,根据其处于整条命令中的位置,其行为也有区别:

  • 位于整条命令的末尾时,条件子命令会直接输出测试结果。
  • 不位于整条命令的末尾时,条件子命令会根据自身语义与测试结果,决定后续子命令是否执行。
    • 若由多个变量(如执行者、执行位置、执行朝向)执行多次时,可作为变量过滤器使用。

可用条件类型:

  • biome[仅Java版]:检测给定位置上的生物群系是否为特定生物群系。
  • block:检测给定位置上的方块是否是特定的方块或方块状态。
  • blocks:检测给定区域内的方块是否匹配另一个同等大小区域内的方块。
  • data[仅Java版]:检测方块、实体或存储容器是否拥有给定的NBT标签。
  • dimension[仅Java版]:检测命令执行时所处的维度是否为特定维度。
  • entity:检测一个或多个特定实体是否存在。
  • function[仅Java版]:检测函数是否有非零返回值。
  • items[仅Java版]:检测方块或实体的给定物品栏槽位或槽位区间内是否拥有指定物品。
  • loaded[仅Java版]:检测给定位置是否已被加载。
  • predicate[仅Java版]:检测谓词计算结果是否为正。
  • score:检测指定目标的记分板中的记分项的分数是否与另一个(或同一个)目标的记分板的记分项的分数是否符合指定的关系,或者是否在给定的范围之内。

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

本段落所述内容仅适用于Java版
检测给定位置上的生物群系是否为特定生物群系。
语法
JE(if|unless) biome <pos> <biome> -> execute
参数
JE<pos>block_pos
需要检测的位置。
必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标
JE<biome>biome_predicate
需要检测的生物群系或生物群系标签的命名空间ID。
参见生物群系/ID标签 § 生物群系以查看所有可用的生物群系ID和生物群系标签。
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <pos>所指定的位置未加载或位于世界外。
若位于末尾且执行成功,successresult均返回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
BEposition: x y zCommandPosition
需要检测的方块的坐标。
Java版中,必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标。在基岩版中,必须为三维的坐标,格式为<X> <Y> <Z>,三个值必须是浮点数、相对坐标局部坐标
JE<block>block_predicate
BEblock: BlockBlock
需要检测的方块或方块标签的命名空间ID。在Java版中,可以附加方块状态和NBT标签。
Java版中,格式必须为方块ID标签[方块状态]{方块实体NBT},可仅在需要时指定方块状态与方块实体NBT,参见参数类型 § minecraft:block_predicate。在基岩版中,必须为方块ID
BEblockStates: block statesBlockStateCommandParam
需要检测的方块的方块状态。
必须为格式为["<键1>"=<值1>,"<键2>"=<值2>,...]的方块状态(例如:["old_leaf_type"="birch","persistent_bit"=true])。
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <pos>position: x y z所指定的位置未加载或位于世界外。
若位于末尾且执行成功,successresult均返回1。
示例
  • /execute as @a at @s if block ~ ~-1 ~ stone run kill @s:击杀所有踩在石头上的玩家。

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

检测给定区域内的方块是否匹配另一个同等大小区域内的方块。
语法
JE(if|unless) blocks <start> <end> <destination> (all|masked) -> execute
BE<subcommand: Option_If_Unless> blocks <begin: x y z> <end: x y z> <destination: x y z> <scan mode: BlockScanMode> [chainedCommand: ExecuteChainedOption_0]
参数
JE<start>block_pos<end>block_pos
BEbegin: x y zCommandPositionend: x y zCommandPosition
需要检测的源区域(比较时参照的区域)的两个对角方块位置。
Java版中,必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标。在基岩版中,必须为三维的坐标,格式为<X> <Y> <Z>,三个值必须是浮点数、相对坐标局部坐标
JE<destination>block_pos
BEdestination: x y zCommandPosition
需要检测的对照区域的西北下角方块的坐标(即长方体区域内坐标最小处)。
Java版中,必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标。在基岩版中,必须为三维的坐标,格式为<X> <Y> <Z>,三个值必须是浮点数、相对坐标局部坐标
JE(all|masked)
BEscan mode: BlockScanModeenum
需要使用的检测模式,可以是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[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版
检测方块、实体或存储容器是否拥有给定的NBT标签。
语法
JE(if|unless) data block <sourcePos> <path> -> execute(方块)
JE(if|unless) data entity <source> <path> -> execute(实体)
JE(if|unless) data storage <source> <path> -> execute(存储容器)
参数
JE<sourcePos>block_pos
需要检测的方块的坐标。
必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标
JE<source>entitydata entity子命令)
需要检测的单个实体。
必须为玩家名、目标选择器UUID。且目标选择器必须为单一数量,否则此命令将无法解析。
JE<source>resource_locationdata storage子命令)
需要检测的存储容器的命名空间ID。
必须为命名空间ID,将会在命令执行时根据此ID尝试获取一个未注册内容,或发送至客户端由客户端处理。
JE<path>nbt_path
需要检测的NBT标签。
必须为NBT路径
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形之一,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <sourcePos>所指定的位置未加载或位于世界外。
  • <sourcePos>所指定的位置上不是方块实体。
  • <source>data entity)无法选中一个或多个有效实体(指定玩家必须在线)。
若位于末尾且执行成功,success返回1。result返回:
  • 匹配上的NBT标签数(if)。
  • 1(unless)。
示例
  • /execute as @a if data entity @s {OnGround:1b} run give @s minecraft:stone 1:给予所有在地面上的玩家一块石头。

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

本段落所述内容仅适用于Java版
检测命令执行时所处的维度是否为特定维度。
语法
JE(if|unless) dimension <dimension> -> execute
参数
JE<dimension>dimension
需要检测的维度。
必须为命名空间ID,将会在命令执行时尝试获取对应的维度
结果
参数未正确指定时,视为语法错误。
若未通过测试,终止执行后续子命令(不位于末尾)或执行失败(位于末尾)。
若位于末尾且执行成功,success返回1。result返回:
  • 匹配上的维度数(if)。
  • 1(unless)。

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

检测一个或多个特定实体是否存在。
语法
JE(if|unless) entity <entities> -> execute
BE<subcommand: Option_If_Unless> entity <target: target> [chainedCommand: ExecuteChainedOption_0]
参数
JE<entities>entity
BEtarget: targetCommandSelector<Actor>
需要检测的目标实体。
必须为玩家名、目标选择器UUID[仅Java版]
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <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[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版
执行并检测函数是否有非零返回值。若给定的函数返回0或没有返回值,测试失败。
若给定函数标签,则其中任意一个函数返回非零值都将通过测试。当遍历到一个这样的函数后,标签的执行终止,不会再执行其他函数。
语法
JE(if|unless) function <name> -> execute
参数
JE<name>function
要检测的函数。必须为一个命名空间ID,指向一个单独的函数或者是以#作为前缀的函数标签。
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • 函数或者函数标签不存在。
  • 测试不通过。
示例
  • /execute unless function generic:test run say 1:执行函数generic:test,若其返回值非0,则不执行say 1

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

本段落所述内容仅适用于Java版
检测方块或实体的给定物品栏槽位或槽位区间内是否拥有指定物品。
语法
JE(if|unless) items block <pos> <slots> <item_predicate> -> execute(方块)
JE(if|unless) items entity <entities> <slots> <item_predicate> -> execute(实体)
参数
JE<pos>block_pos
需要检测的方块的坐标。
必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标
JE<entities>entities
需要检测的多个实体。
必须为玩家名、目标选择器UUID
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[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版
检测给定位置是否已被加载。
语法
JE(if|unless) loaded <pos> -> execute
参数
JE<pos>block_pos
需要检测的位置。
必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <pos>所指定的位置位于世界外。
若位于末尾且执行成功,successresult均返回1。

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

本段落所述内容仅适用于Java版
检测谓词(Predicate)是否通过(结果是否为正值),用法详见谓词
语法
JE(if|unless) predicate <predicate> -> execute
参数
JE<predicate>loot_predicate
用于测试条件的谓词。若符合谓词的描述则执行成功。
命名空间IDSNBT形式指定谓词。必须是一个SNBT格式的谓词数据,或者是一个具有指定ID的谓词(minecarft:predicate注册表中的注册项)。对于NBT标签,若是一个字符串标签,也会被解析成一个命名空间ID并获取具有此ID的谓词;否则将此SNBT解析为一个谓词数据。
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • 指定的谓词不存在。
若位于末尾且执行成功,successresult均返回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
BEtarget: targetWildcardCommandSelector<Actor>
需要检测的单个分数持有者。
必须是目标选择器、玩家名(可以为不在线上的玩家)、UUID[仅Java版]实体的记分板ID[仅基岩版]或用于表示所有正在被追踪实体的*
可以执行*但判定失败。
JE<targetObjective>objective
BEobjective: stringbasic_string
需要检测的记分项。
必须是单个词或者双引号(")括起的[仅基岩版]字符串。在Java版中,允许的字符包括:-+._A-Za-z0-9。在基岩版中,引号内的引号与\前须加上转义字符\。用于指定记分项的名称,将会在命令执行时尝试获取此名称的记分项。
JE(=|<|<=|>|>=)
BEoperation: compare operatorCommandCompareOperator
指定运算符,检查左操作数(目的记分项)与右操作数(源记分项)之间的关系是否符合此处定义的关系。
JE<source>score_holder
BEsource: targetWildcardCommandSelector<Actor>
需要被比较的单个分数持有者。
必须是目标选择器、玩家名(可以为不在线上的玩家)、UUID[仅Java版]实体的记分板ID[仅基岩版]或用于表示所有正在被追踪实体的*
可以执行*但判定失败。
JE<sourceObjective>objective
BEobjective: stringbasic_string
需要被比较的记分项。
必须是单个词或者双引号(")括起的[仅基岩版]字符串。在Java版中,允许的字符包括:-+._A-Za-z0-9。在基岩版中,引号内的引号与\前须加上转义字符\。用于指定记分项的名称,将会在命令执行时尝试获取此名称的记分项。
JE<range>int_range
BErange: integer rangeCommandIntegerRange
被检查分数需要符合的范围。
必须为整数范围。例如0精准匹配0,..0匹配小于等于0的值,0..匹配大于等于0的值,0..1匹配介于0与1之间的值(含)。
结果
参数未正确指定时,视为语法错误。
若未通过测试或出现下列情形,终止执行后续子命令(不位于末尾)或执行失败(位于末尾):
  • <target>target: target<source>source: target*
若位于末尾且执行成功,successresult均返回1。
示例
  • /execute if score @s a = @s b:检测自己的a分数与b分数是否相等。

存储子命令[编辑 | 编辑源代码]

本段落所述内容仅适用于Java版

存储子命令可以将最后一个命令的resultsuccess值存储到指定位置。

它与其他子命令一起处理,先行记录存储位置,不影响其他子命令。当最后一个子命令执行后,将其返回值存入指定位置,可以是记分板、NBT数据或Boss栏

可用存入位置:

  • block:将resultsuccess存入指定方块实体的指定NBT标签内。
  • bossbar:将resultsuccess存为Boss栏的当前值或最大值。
  • entity:将resultsuccess存入指定实体的指定NBT标签内。
  • score:将resultsuccess存入指定分数持有者的指定记分项上。
  • storage:将resultsuccess存入指定存储容器的指定NBT标签内。

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

resultsuccess存入指定方块实体的指定NBT标签内。
语法
JEstore (result|success) block <targetPos> <path> (int|float|short|long|double|byte) <scale> -> execute
参数
JE<targetPos>block_pos
返回值需要存入的目标方块实体的坐标。
必须为方块坐标,格式为<X> <Y> <Z>,三个值必须为整数相对坐标局部坐标
JE<path>nbt_path
返回值需要存入的NBT路径。
必须为NBT路径
JE(int|float|short|long|double|byte)
返回值及目标NBT的数据类型。
只能为int、​float、​short、​long、​doublebyte之一。分别表示整型、单精度浮点型、短整型、长整型、双精度浮点型和字节型。
JE<scale>double
返回值存储时的倍率。
必须为双精度浮点数 双精度浮点数
结果
参数未正确指定时,视为语法错误。
路径不存在时不进行操作。
执行成功时,将返回值向下取整并乘以<scale>后存储在<targetPos>处方块实体的<path>NBT标签处,并存储为指定的NBT格式

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

resultsuccess存为Boss栏的当前值或最大值。
语法
JEstore (result|success) bossbar <id> (value|max) -> execute
参数
JE<id>resource_location
返回值需要存入的目标Boss栏的命名空间ID。
必须为命名空间ID,将会在命令执行时根据此ID尝试获取一个未注册内容,或发送至客户端由客户端处理。
JE(value|max)
返回值需要存入的是Boss栏的当前值(value)或是最大值(max)。
结果
参数未正确指定时,视为语法错误。
执行成功时,将返回值向下取整,存为命名空间ID为<id>的Boss栏的当前值或最大值。

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

resultsuccess存入指定实体的指定NBT标签内。与/data一样,此命令不能修改玩家的NBT。
语法
JEstore (result|success) entity <target> <path> (int|float|short|long|double|byte) <scale> -> execute
参数
JE<target>entity
返回值需要存入的目标实体。
必须为玩家名、目标选择器UUID
JE<path>nbt_path
返回值需要存入的NBT路径。
必须为NBT路径
JE(int|float|short|long|double|byte)
返回值及目标NBT的数据类型。
只能为int、​float、​short、​long、​doublebyte之一。分别表示整型、单精度浮点型、短整型、长整型、双精度浮点型和字节型。
JE<scale>double
返回值存储时的倍率。
必须为双精度浮点数 双精度浮点数
结果
参数未正确指定时,视为语法错误。
路径不存在时不进行操作。
执行成功时,将返回值向下取整并乘以<scale>后存储在<target>实体的<path>NBT标签处,并存储为指定的NBT格式

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

resultsuccess存入指定分数持有者的指定记分项上。
语法
JEstore (result|success) score <targets> <objective> -> execute
参数
JE<targets>score_holder
返回值需要存入的目标分数持有者。
必须是目标选择器、玩家名(可以为不在线上的玩家)、UUID或用于表示所有正在被追踪实体的*
JE<objective>objective
返回值需要存入的目标记分项名称。
必须是单个词字符串。允许的字符包括:-+._A-Za-z0-9。用于指定记分项的名称,将会在命令执行时尝试获取此名称的记分项。
结果
参数未正确指定时,视为语法错误。
执行成功时,将返回值向下取整后存储在<targets>持有的<objective>分数中。

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

resultsuccess存入指定命令存储的指定NBT标签内。
语法
JEstore (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、​doublebyte之一。分别表示整型、单精度浮点型、短整型、长整型、双精度浮点型和字节型。
JE<scale>double
返回值存储时的倍率。
必须为双精度浮点数 双精度浮点数
结果
参数未正确指定时,视为语法错误。
若目标存储容器不存在,则创建。
执行成功时,将返回值向下取整并乘以<scale>后存储在<target>存储容器的<path>NBT标签处,并存储为指定的NBT格式

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

要被执行的目标命令。
语法
JErun ...
BErun <command: command>
参数
JE...
BEcommand: commandunique_ptr<Command>
一条完整的命令。在Java版中,不能以斜杠开头。
技术细节[仅Java版]
将命令节点重置为命令调度器的根节点。
注意:
命令调度器是在玩家开始输入以斜杠/开头的消息时开始的。
命令节点是光标正在编辑的特定词(word)或项(entry),是一个命令或参数。
根节点在当前命令的第一个词之前出现。
结果
执行此命令。指定的命令执行成功时成功,失败时失败。

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

  • 将所有快捷栏第一槽位物品带有效率魔咒的玩家传送到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.814w07a加入了/execute命令。
14w08a在命令方块中运行的run子命令现在会把成功值传回命令方块了。
1.1116w32a加入了方块状态支持。
1.1317w45a语法被拆分。
17w45b重制了/execute store (result|success)
18w02a加入了新的子命令以允许通过命令进行更多的控制。
18w05a加入了/execute store (result|success) bossbar
1.1418w43a加入了/execute (if|unless) data
1.1519w38a加入了/execute (if|unless) predicate
加入了/execute store (result|success) storage
1.19.322w46a加入了/execute (if|unless) biome
1.19.423w03a加入了/execute on/execute (if|unless) dimension/execute (if|unless) loaded
23w04a/execute on加入了origin关系。
23w06a加入了/execute summon
pre1加入了/execute positioned over
1.20.223w31a加入了/execute (if|unless) function
pre1暂时移除了/execute (if|unless) function
1.20.323w41a重新加入了/execute (if|unless) function
1.20.524w10a加入了条件子命令/execute (if|unless) items
携带版Alpha
0.16.0build 1加入了/execute
此命令的功能相当于其在Java版1.10的功能,但在/execute中实体目标是可选的。
基岩版
1.19.101.19.10.20更新了语法以近似匹配Java版,属于实验性玩法
1.19.401.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.501.19.50.231.19.10.20起的所有变更均不再属于实验性玩法
1.19.701.19.70.21移除了data: int参数。

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

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

  1. MC-125067 — 漏洞状态为“不予修复”。
  2. MCPE-165278

导航[编辑 | 编辑源代码]