更新时间:2024-09-30 16:16
/execute是《minecraft》游戏在1.8版本加入的新指令,作用就是让一个或多项实体执行命令。在Java版,基岩版1.19.10实验性玩法以及更高版本中,/execute是各不同功能的子命令的集合,用于改变命令执行上下文(修饰子命令),执行逻辑判断(条件子命令)和管理并存储命令返回值(存储子命令)[仅JE]并在此基础上执行任意目标命令。
玩家可以在聊天栏输入/execute来执行指令,但只能是一次性的。
玩家可以在命令方块输入/execute执行指令。
/execute指令以1.19.10实验性玩法为分界点分为新、旧两种语法,1.8-1.19.10为旧/execute,1.19.10(实验性玩法)-至今为新/execute。相比之下,旧/execute比新/execute更简单,而新/execute的功能比旧/execute的功能更强大。
■旧/execute
/execute有两种格式,有不同的作用。(注:“[]”可以省略,“<>”不可以省略)
第一种:
/execute <实体>
第二种:
/execute <实体>
■新/execute
/execute <子命令>
基岩版的/execute子命令分为四类:
修饰子命令:修改命令变量并改变命令执行时的状态,从而以特定的执行位置、执行基准点、执行者、执行朝向、执行维度执行后续子命令。
条件子命令:检测特定条件是否成立并输出结果,或限制子命令执行的条件。
存储子命令[仅JE]:将命令返回值存储至方块实体、实体或存储容器的NBT数据中,记分板的记分项中,或Boss栏的当前值或最大值中。
run子命令:执行目标命令。
子命令按从左到右的顺序执行。
■返回值
若有语法错误或指定的命名空间ID不存在,命令就中途终止并提示错误,此时无返回值。
在Java版中,若命令未中途终止,命令执行后,会返回其success(成功次数)和result(结果)两个返回值
其值均来自结尾的条件子命令或run子命令。若被执行多次,返回值为最后一次执行的;
其值均为整数,result遇小数时向下取整;
success的值总为0或1。
无命令执行成功时两值均为0;
均可由存储子命令存储。
/execute命令本身也有成功次数(无论是否中途终止),通常为0或1,但若被分开执行多次(如/execute as @a -> execute)则可大于1。使用命令方块执行命令时,此值会被返回到该命令方块上,可用条件制约的命令方块检查是否成功,或用红石比较器读取成功次数。
■修饰子命令
1.align <轴> <子命令>
将执行位置转化为方块坐标(向下取整)。
<轴> 取整的坐标轴,可以填x、y、z、xy、yz、xz、xyz。可以颠倒顺序,但不能重复声明。
2.anchored
将局部坐标的执行基准点设为眼睛(eyes)或脚(feet),并改变facing子命令所指向的位置,基准点默认为脚。
3.as <实体> <子命令>
将执行者改为目标实体,并改变后面的子命令中@s的含义。
4.at <实体> <子命令>
将命令的执行位置、朝向和维度更改为目标实体的。(影响相对坐标和局部坐标的定位)
注:at... ⇔ in... + positioned... + facing...
5.facing
将命令的执行朝向设置为执行基准点到指定坐标的射线方向。
facing entity <实体>
将命令的执行朝向设置为执行基准点到指定实体的指定基准点的射线方向。
6.in <纬度> <子命令>
更新执行维度。并依据原维度与现维度间关系,按比例缩放相对坐标和局部坐标(不包括Y轴)。
<纬度>可填写overworld(主世界),nether(下界)或the_end(末地)。
在下界中行走1格,相当于在主世界(或末地)中行走8格。用坐标表示为:主世界坐标(x,y,z),对应的下界坐标(x÷8,y,z÷8)。若不想使用此规则可以将in子命令写在前面,positioned子命令放在后面。
in子命令后声明的执行坐标是位于指定纬度的坐标,如:(位于主世界执行)/execute positioned x y z in nether positioned ~Δx ~Δy ~Δz ... 该指令的执行纬度为下界,执行坐标为(x÷8+Δx,y+Δy,z÷8+Δz)。
7.on <关系> <子命令>[仅JE]
将执行者设置为与当前执行者有指定类型的关系的实体。
attacker:最近5秒内对当前执行者造成伤害的最后实体。
controller:控制当前执行者的实体。
leasher:用拴绳牵引当前执行者的实体。
origin:当前执行者的来源。
若当前执行者为弹射物,则为其发射者。
若当前执行者为物品,则为其掷出者。
若当前执行者为区域效果云,则为其来源者。
若当前执行者为被激活的TNT,则为其点燃者。
若当前执行者为唤魔者尖牙或恼鬼,则为其召唤者。
owner:当前执行者为可驯服生物时,此实体的主人。
passengers:直接骑乘于当前执行者的实体。
target:当前执行者的攻击目标。若当前执行者为交互实体,则为最后与其交互的玩家。
vehicle:正在被当前执行者骑乘的实体。
8.positioned
将执行位置设置为指定坐标。
positioned as <实体> <子命令>
将执行位置设置为指定实体位置。
9.rotated <绕Y轴旋转角度> <绕X轴旋转角度> <子命令>
将命令的执行朝向设为特定方向
旋转角度必须为两个双精度浮点数组成的朝向
绕Y轴旋转时,-180.0表示北,-90.0表示东,0.0表示南,90.0表示西。
绕X轴旋转时,竖直上方为-90.0,竖直下方90.0。
旋转角度前加波浪号“~”将相对于执行者进行旋转。
10.summon <实体> <子命令>[仅JE]
立即生成一个实体,并将执行者设置为此实体。
■条件子命令
if 如果测试通过,那么继续执行子命令(当后面没有其他子命令时,返回“测试通过。”);如果测试不通过,则停止执行子命令并返回“Execute subcommand if ... test failed.”
unless 如果测试不通过,那么继续执行子命令(当后面没有其他子命令时,返回“测试通过。”);如果测试通过,那么停止执行子命令并返回“Execute subcommand unless ... test failed.”
1.if/unless biome <整数坐标x、y、z或写~~~> <生物群系> [子命令][仅JE]
检测给定位置上的生物群系是否为特定生物群系。
若该子命令位于末尾且执行成功,success和result均返回1。
2.if/unless block <整数坐标x、y、z或写~~~> <方块id> [数据值|状态值](或[方块状态],仅1.19.70及更高的版本) [子命令]
检测给定位置上的方块是否是特定的方块或方块状态。
若该子命令位于末尾且执行成功,success和result均返回1。
3.if/unless blocks <起点方块坐标x、y、z或写~~~> <终点方块坐标x、y、z或写~~~> <对照区域方块坐标x、y、z或写~~~> <检测模式> [子命令]
检测给定区域内的方块是否匹配另一个同等大小区域内的方块。
其中的坐标都必须是整数,对照区域方块坐标为对照区域的西北下角方块坐标,即长方体区域坐标最小处。检测模式分为all和masked,all用于检测全部方块,masked用于检测除空气以外的方块。
若位于末尾且执行成功,success返回1。result返回:匹配上的方块数(if)或1(unless)。
4.if/unless data block <整数坐标x、y、z或写~~~>
if/unless data entity <实体>
if/unless data storage <存储容器>
检测方块、实体或存储容器是否拥有给定的NBT标签。
若位于末尾且执行成功,success返回1。result返回:匹配上的NBT标签数(if)或1(unless)。
5.if/unless dimension <纬度> [子命令][仅JE]
检测命令执行时所处的维度是否为特定维度。
若位于末尾且执行成功,success返回1。result返回:匹配上的维度数(if)或1(unless)。
6.if/unless entity <实体> [子命令]
检测一个或多个特定实体是否存在。
若位于末尾且执行成功,success返回1。result返回:匹配上的实体数(if)或1(unless)。
7.if/unless function <函数> <子命令>[仅JE]
用于执行一个函数或函数标签,并检查其返回值是否满足条件。若指定的是函数标签,无论标签内靠前的函数的结果如何,所有函数都会被执行。
8.if/unless loaded <整数坐标x、y、z或写~~~> [子命令][仅JE]
检测给定位置是否已被加载
若该子命令位于末尾且执行成功,success和result均返回1。
9.if/unless predicate <谓词> [子命令][仅JE]
检测谓词计算结果是否为正。
若该子命令位于末尾且执行成功,success和result均返回1。
10.if/unless score <实体> <计分项> <指定运算符> <实体> <计分项> [子命令]
检测指定目标的记分板中的记分项的分数是否与另一个(或同一个)目标的记分板的记分项的分数是否符合指定的关系。
<指定运算符>应填写“=”(等于)/“<”(小于)/“<=”(小于等于)/“>”(大于)/“>=”(大于等于)
if/unless score <实体> <计分板> matches <范围> [子命令]
检测指定目标的记分板中的记分项的分数是否在给定的范围之内。
其中范围必须是整数。可以填写0(精确匹配0)、..0(匹配小于等于0的数)、0..(匹配大于等于0的数)、0..1(匹配0到1之间的数),其中的数字可任意修改。
若该子命令位于末尾且执行成功,success和result均返回1。
■存储子命令[仅JE]
存储子命令可以将最后一个命令的result或success值存储到指定位置。
它与其他子命令一起处理,先行记录存储位置,不影响其他子命令。当最后一个子命令执行后,将其返回值存入指定位置,可以是记分板、NBT数据或Boss栏。
1.store result/success block <整数坐标x、y、z或写~~~>
将result或success存入指定方块实体的指定NBT标签内。
坐标是返回值需要存入的目标方块实体的坐标。
NBT路径为返回值需要存入的NBT路径。
数据类型是返回值及目标NBT的数据类型,只能填int(整型)、float(单精度浮点型)、short(短整型)、long(长整型)、double(双精度浮点型)、byte(字节型)。
存储倍率为返回值存储的倍率,必须是双精度浮点数。
参数不正确时,视为语法错误。
路径不存在时不进行操作。
执行成功时,将返回值向下取整并乘以<存储倍率>后存储在<坐标>处方块实体的
2.store result/success bossbar
将result或success存为Boss栏的当前值或最大值。
返回值需要存入的目标Boss栏的命名空间ID。
返回值需要存入的是Boss栏的当前值(value)或是最大值(max)。
执行成功时,将返回值向下取整,存为命名空间ID为
3.store result/success entity <实体>
将result或success存入指定实体的指定NBT标签内。与/data一样,此命令不能修改玩家的NBT。
实体是返回值需要存入的目标实体。
NBT路径为返回值需要存入的NBT路径。
数据类型是返回值及目标NBT的数据类型,只能填int(整型)、float(单精度浮点型)、short(短整型)、long(长整型)、double(双精度浮点型)、byte(字节型)。
存储倍率为返回值存储的倍率,必须是双精度浮点数。
执行成功时,将返回值向下取整并乘以<存储倍率>后存储在<实体>实体的
4.store result/success score <目标> <计分项> <子命令>
将result或success存入指定分数持有者的指定记分项上。
目标为返回值需要存入的目标分数持有者。
返回值需要存入的目标记分项名称。
执行成功时,将返回值向下取整并乘以<存储倍率>后存储在<目标>持有的<计分项>的分数中。
4.store result/success storage <目标存储容器>
目标存储容器是返回值需要存入的目标存储容器的命名空间ID。
NBT路径为返回值需要存入的NBT路径。
数据类型是返回值及目标NBT的数据类型,只能填int(整型)、float(单精度浮点型)、short(短整型)、long(长整型)、double(双精度浮点型)、byte(字节型)。
存储倍率为返回值存储的倍率,必须是双精度浮点数。
执行成功时,将返回值向下取整并乘以<存储倍率>后存储在<目标存储容器>存储容器的
■run子命令
run <指令>
用于执行指令。(指令执行的结果受run子命令以前的子命令影响)
■旧execute例子
例一
比如你需要克隆某个建筑到指定地方去,但是又懒得打指令,那就可以输入以下指令:
指令(第一个命令块):/execute @e [type =你要执行命令的实体] ~~~ clone <建筑的一个对角坐标x><建筑的一个对角坐标y><建筑的一个对角坐标z><建筑的另一个对角坐标x><建筑的另一个对角坐标y><建筑的另一个对角坐标z> ~~~
要求(第一个命令块):重复 始终活动 无条件的 朝向第二个命令块
指令(第二个命令块):/kill @e [type =第一个命令块执行命令的实体]
要求(第二个命令块):链 始终活动有条件的
例二
比如你开了个服务器,想做个在脚底下垫某个方块即可传送到主城的机制,那就需要以下指令:
指令:/execute @a ~~~ detect ~~-1 ~ [你要的垫脚传送方块id] [数据值] tp @p [目的地x坐标] [目的地y坐标] [目的地z坐标]
要求:重复 始终活动 无条件的 在常加载区块里
■新execute例子
例一
在主世界使用/locate指令寻找距离末地0,0,0最近的末地城。
指令:/execute positioned 0 0 0 in the_end run locate structure end_city
返回结果示例:
最近的 末地城 位于方块 -920,(y?),-872(距离1267个方块)
例二
在主世界使用/locate指令寻找距离下界1600,100,608最近的堡垒遗迹。
指令:/execute in nether positioned 1600 100 608 run locate structure bastion_remnant
返回结果示例:最近的 堡垒遗迹 位于方块 1752,(y?),760(距离 214 个方块)
错误指令示例1:/execute positioned 1600 100 608 in nether run locate structure bastion_remnant
错误返回结果示例:最近的 堡垒遗迹 位于方块 -408,(y?),-136(距离 643 个方块)
错误原因:这个/execute指令先将执行坐标改为1600 100 608,然后再改变纬度为下界。执行坐标按1:8的比例缩放为200 100 76(1600÷8=200,608÷8=76),最终返回了距离下界200 100 76最近堡垒遗迹。
错误指令示例2:(位于主世界1600 100 608执行)/execute in nether at @s run locate bastion_remnant
错误返回结果示例:将'locate' 执行为 Steve 失败(在合理距离内未发现有效结构)
错误原因:at子命令包括了执行者的坐标,朝向与纬度。该指令将执行纬度改为下界后,at子命令将执行纬度改为主世界,所以无法在主世界查找堡垒遗迹。
例三
将自己的坐标改为方块坐标(整数坐标)。
指令:/execute positioned ~~~ align xyz run tp ~~~
例四
让所有的僵尸自杀。
指令:/execute as @e[type=zombie] run kill @s
效果:所有的僵尸自杀。
错误指令示例:/execute at @e[type=zombie] run kill @s
效果:杀死自己。
错误原因:at声明指令的执行位置,不声明指令的执行者。该指令的执行者仍是玩家本身。
■旧/execute转新/execute
例一
将所有名称为a的盔甲架向z轴正方向移动一格
旧:/execute @e[type=armor_stand,name=a] ~~~ tp @s ~~~1
新:/execute as @e[type=armor_stand,name=a] at @s run tp @s ~~~1
例二
当a在b计分板的值不为1时,将所有名称为a的盔甲架隐身60秒,不显示粒子效果。
旧:/scoreboard players test a b 1 1(重复,始终活动)
红石比较器,红石火把连接
/effect @e[type=armor_stand,name=a] invisibility 60 0 true(脉冲,需要红石)
新:/execute as @e[type=armor_stand,name=a] unless score a b matches 1 run effect @s invisibility 60 0 true(重复,始终活动)
(当后续的子命令不涉及到坐标时,at子命令可省略)