[1.15] execute 命令入门教程
前言
本文基于 Minecraft Java 1.15.2 版本,将主要讲述 execute 命令的使用方法。
本文的部分内容引用自 Minecraft Wiki,感谢 Spgoding 的 Datapack Helper Plus 和 土球球 的 MCBBS Markdown To BBCode Converter 在本文撰写过程中提供的帮助。
阅读本文需要一定的命令基础,如在阅读过程中发现本文存在错误,请指出。
主观认识
我们从 4 个例子出发,让读者先对 execute 命令有一个主观的认识。
例 1:
execute as @e[type=pig] at @s run summon armor_stand ~ ~ ~
此命令可以按顺序拆分成 3 个部分:
- as @e[type=pig] — 将命令执行者改为所有的猪。
- at @s — 在命令执行者当前的位置。
- run summon armor_stand ~ ~ ~ — 运行命令:在当前位置召唤盔甲架。
所以整个命令的意思是:以所有的猪的身份,在猪当前的位置召唤盔甲架。
例 2:
execute as @a at @s if block ~ ~-1 ~ stone run effect give @s speed 1 0
此命令可以按顺序拆分成 4 个部分:
- as @a — 将命令执行者改为所有的玩家。
- at @s — 在命令执行者当前的位置。
- if block ~ ~-1 ~ stone — 如果 ~ ~-1 ~ 处的方块为石头。
- run effect give @s speed 1 0 — 运行命令:给予命令执行者 1 秒的速度 I 效果。
所以整个命令的意思是:以所有玩家的身份,如果在玩家当前位置的 ~ ~-1 ~ 处的方块为石头,则给予自己 1 秒的速度 I 效果。
例 3:
execute as @a store result score @s foo run data get entity @s SelectedItem.Count
此命令可以按顺序拆分成 3 个部分:
- as @a — 将命令执行者改为所有的玩家。
- store result score @s foo — 将结果存储为命令执行者 foo 记分板的分数。
- run data get entity @s SelectedItem.Count — 运行命令:获取命令执行者手持物品的数量。
所以整个命令的意思是:以所有玩家的身份,将自己手持物品的数量存储为自己的 foo 记分板的分数。
例 4:
execute store result bossbar foo:example value if entity @e[type=pig]
此命令可以按顺序拆分成 2 个部分:
- store result bossbar foo:example value — 将结果存储到 id 为 foo:example 的 boss 栏的当前值。
- if entity @e[type=pig] — 如果存在猪(这里为统计猪的数量)。
所以整个命令的意思是:统计猪的数量并将结果存储到 id 为 foo:example 的 boss 栏的当前值。
什么是子命令
在阅读 execute 命令时,我们通常将其按顺序拆分成几个部分,每个部分被称为 execute 命令的 子命令,一个 execute 命令一般由多个子命令构成。
我们可以通过对不同子命令的排列组合,实现各种各样的效果。
有哪些子命令
我们根据子命令的作用将其分为以下 4 种:
- 修饰子命令:更改命令执行的方式,以特定的执行者、执行位置、执行维度和执行朝向执行后续子命令,如例子中的 as @a、at @s。
- 存储子命令:将命令的返回的结果存储至记分板、实体、方块实体或 storage 的数据中或 boss 栏的最大值或当前值,如例子中的 store result score @s foo。
- 条件子命令:用于限制命令执行的条件或测试指定条件是否成立并返回结果,如例子中的 if block ~ ~-1 ~ stone、if entity @e[type=pig]。
- 执行子命令:用于执行命令,如例子中的 run effect give @s speed 1 0。
下面我们将阐述 execute 命令中的各个子命令,如无特殊说明,完整命令皆在玩家的聊天栏内运行。
修饰子命令
更改命令执行的方式,以特定的执行者、执行位置、执行维度和执行朝向执行后续子命令。
子命令 |
更改 |
来源/操作 |
语法 |
as |
执行者 |
<-- 实体 |
as <实体> |
at |
执行位置/朝向/维度 |
<-- 实体 |
at <实体> |
positioned |
执行位置 |
<-- 实体 |
positioned as <实体> |
positioned |
执行位置 |
<-- 坐标 |
positioned <坐标> |
align |
执行位置 |
<-- 坐标向下取整 |
align <坐标轴> |
anchored |
局部坐标基准点 |
<-- 脚部/眼部 |
anchored (feet|eyes) |
rotated |
执行朝向 |
<-- 朝向 |
rotated <y-旋转角度> <x-旋转角度> |
rotated |
执行朝向 |
<-- 实体 |
rotated as <单个实体> |
facing |
执行朝向 |
--> 坐标 |
facing <坐标> |
facing |
执行朝向 |
--> 实体 |
facing entity <单个实体> (eyes|feet) |
in |
执行维度 |
<-- 维度 |
in <维度> |
as : 执行者 <-- 实体
更改命令的执行者为指定实体。
- 语法:as <实体>
- 例子:
- 子命令:
- as @a — 以所有玩家的身份
- as @e[type=pig] — 以所有猪的身份
- 整条命令:
- execute as @a run say 大憨批真好用!
- 所有玩家都说大憨批真好用!
- 所有玩家都说大憨批真好用!
- execute as @a run say 大憨批真好用!
- 子命令:
at : 执行位置/朝向/维度 <-- 实体
更改命令的执行位置、执行朝向和执行维度为指定实体的坐标、朝向和维度。
- 语法:at <实体>
- 例子:
- 子命令:
- at @s — 在命令执行者自己的位置
- 玩家在聊天栏运行的命令自带 as 玩家 at @s
- 玩家在聊天栏运行的命令自带 as 玩家 at @s
- at @e[type=pig] — 在所有猪所在的位置
- at @s — 在命令执行者自己的位置
- 整条命令:
- execute at @e[type=pig] run say 233
- 玩家在所有猪所在的位置说 233。(233 的总数与猪的总数相等)
- 玩家在所有猪所在的位置说 233。(233 的总数与猪的总数相等)
- execute as @e[type=pig] at @s run summon armor_stand ~ ~ ~
- 所有猪在自己当前的位置召唤盔甲架。
- 所有猪在自己当前的位置召唤盔甲架。
- execute at @e[type=pig] run summon armor_stand ~ ~ ~
- 玩家在所有猪所在的位置召唤盔甲架。
- 效果等价于 2。
- execute as @e[type=pig] run summon armor_stand ~ ~ ~
- 所有猪(在玩家所在的位置)召唤盔甲架。
- 盔甲架的数量与 2 相同。
- execute as @e[type=pig] at @e[type=pig] run summon armor_stand ~ ~ ~
- 每只猪在所有猪的位置召唤盔甲架。
- 如果世界上只有 2 只猪,则一共会产生 4 个盔甲架,列表如下:
as @e[type=pig] at @e[type=pig] 盔甲架 猪 A 猪 A +1 猪 A 猪 B +1 猪 B 猪 A +1 猪 B 猪 B +1
- execute as @e[type=pig] as @e[type=pig] run summon armor_stand ~ ~ ~
- 盔甲架的位置与 4 相同,数量与 5 相同。
- 盔甲架的位置与 4 相同,数量与 5 相同。
- execute at @e[type=pig] at @e[type=pig] run summon armor_stand ~ ~ ~
- 效果等价于 5。
- 效果等价于 5。
- execute at @e[type=pig] run say 233
- 子命令:
positioned : 执行位置 <-- 坐标/实体
更改命令的执行位置为指定坐标或指定实体的坐标。
- 语法:
- positioned <坐标>
- positioned as <实体>
- 例子:
- 子命令:
- positioned 2 3 3 — 偏移到坐标为(2,3,3)的位置
- positioned ~ ~2 ~ — 向上偏移 2 格
- positioned as @e[type=pig] — 偏移到所有猪所在的位置
- 完整命令:
- execute positioned ~ ~2 ~ run setblock ~ ~ ~ stone
- 在玩家当前位置的 ~ ~2 ~ 处放置石头。
- 效果等价于 setblock ~ ~2 ~ stone
- execute positioned 2 3 3 run locate Village
- 搜索坐标为(2,3,3)的位置附近的村庄。
- 搜索坐标为(2,3,3)的位置附近的村庄。
- execute as @e[type=pig] positioned as @s run tp @s ^ ^ ^1
- 以所有的猪的身份,偏移到自己的位置,(以玩家的朝向)向前移动 1 格。
- 以所有的猪的身份,偏移到自己的位置,(以玩家的朝向)向前移动 1 格。
- execute positioned ~ ~2 ~ run setblock ~ ~ ~ stone
- 子命令:
- 思考:
- 以下两条命令有什么区别?
- execute positioned 0 0 0 run tp @s ~ ~ ~
- execute positioned 0.0 0.0 0.0 run tp @s ~ ~ ~
- 以下两条命令有什么区别?
align : 执行位置 <-- 坐标向下取整
将执行位置的坐标向下取整。
- 语法:align <坐标轴>
- <坐标轴> 为 x、y、z 中的 1 至 3 个的任意组合。
- <坐标轴> 为 x、y、z 中的 1 至 3 个的任意组合。
- 例子:
- 假设执行位置为(1.2,-3.4,5.6)。
- 子命令:
- align x — x 轴坐标向下取整,坐标变为(1.0,-3.4,5.6)
- align yz — y 轴和 z 轴坐标向下取整,坐标变为(1.2,-4.0,5.0)
- 完整命令:
- execute align xyz run tp @s ~0.5 ~ ~0.5
- 将玩家传送到所在方块的正中央,即(1.5,-4.0,5.5)。
- 将玩家传送到所在方块的正中央,即(1.5,-4.0,5.5)。
- execute align xyz run tp @s ~0.5 ~ ~0.5
anchored : 局部坐标基准点 <-- 脚部/眼部
更改命令在使用局部坐标时的基准点为脚部或眼部,默认在脚部。
- 语法:anchored (feet|eyes)
- feet 为脚部,eyes 为眼部。
- feet 为脚部,eyes 为眼部。
- 例子:
- 子命令:
- anchored eyes — 将基准点更改为眼部
- anchored eyes — 将基准点更改为眼部
- 完整命令:
- execute anchored feet run tp @s ^ ^ ^3
- 将玩家的脚部向前传送 3 格,身体各部位的相对位置不变。
- 效果等价于 tp @s ^ ^ ^3
- execute anchored eyes run tp @s ^ ^ ^
- 将玩家的脚部传送到眼部的位置,身体各部位的相对位置不变。
- 将玩家的脚部传送到眼部的位置,身体各部位的相对位置不变。
- execute anchored eyes run tp @s ^ ^ ^3
- 将玩家的脚部传送到眼部所在位置的前方 3 格的位置,身体各部位的相对位置不变。
- 将玩家的脚部传送到眼部所在位置的前方 3 格的位置,身体各部位的相对位置不变。
- execute anchored eyes run tp @s ~ ~ ~
- anchored 子命令并不会影响本地坐标。
- 效果等价于 tp @s ~ ~ ~
- execute anchored eyes positioned ^ ^ ^ run tp @s ~ ~ ~
- 效果等价于 2。
- 效果等价于 2。
- execute anchored feet run tp @s ^ ^ ^3
- 子命令:
rotated : 执行朝向 <-- 朝向/实体
更改命令的执行朝向为指定朝向或指定实体的朝向。
- 语法:
- rotated <y-旋转角度> <x-旋转角度>
- rotated as <单个实体>
- 例子:
- 子命令:
- rotated 30 ~45 — 使执行朝向与水平方向成 30 度角并水平向右旋转 45 度
- rotated as @e[type=pig,limit=1,sort=nearest] — 使执行朝向与距离当前位置最近的猪的朝向相同
- positioned as @s rotated as @s — 效果等价于 at @s
- 完整命令:
- execute rotated 0 0 run tp @s ~ ~ ~ ~ ~
- 使玩家朝向正北水平方向。
- 效果等价于 tp @s ~ ~ ~ 0 0
- execute as @e[type=pig] at @s rotated as @p run tp @s ^ ^ ^1
- 以所有猪的身份,在自己的位置朝着与距离自己最近的玩家的朝向相同的方向向前传送 1 格。
- 以所有猪的身份,在自己的位置朝着与距离自己最近的玩家的朝向相同的方向向前传送 1 格。
- execute rotated 0 0 run tp @s ~ ~ ~ ~ ~
- 子命令:
facing : 执行朝向 --> 坐标/实体
使命令的执行朝向朝向指定的坐标或实体的眼部或脚部。
- 语法:
- facing <坐标>
- facing entity <单个实体> (eyes|feet)
- 例子:
- 子命令:
- facing 2 3 3 — 朝向坐标为(2,3,3)的位置
- facing entity @e[type=pig,limit=1,sort=nearest] feet — 朝向距离当前位置最近的猪的脚部
- 完整命令:
- execute facing 2 3 3 run tp @s ~ ~ ~ ~ ~
- 使玩家朝向坐标为(2,3,3)的位置。
- 效果等价于 tp @s ~ ~ ~ facing 2 3 3
- execute anchored eyes facing entity @e[type=pig,limit=1,sort=nearest] feet run tp @s ^ ^ ^1
- 将玩家传送到自己的眼部和距离自己最近的猪的脚部的连线方向向前 1 格的位置。
- 将玩家传送到自己的眼部和距离自己最近的猪的脚部的连线方向向前 1 格的位置。
- execute facing 2 3 3 run tp @s ~ ~ ~ ~ ~
- 子命令:
in : 执行维度 <-- 维度
更改命令的执行维度为指定维度。
- 语法:in <维度>
- <维度> 在原版 Minecraft 中有:
- minecraft:overworld — 主世界
- minecraft:the_end — 末地
- minecraft:the_nether — 下界
- <维度> 在原版 Minecraft 中有:
- 例子:
- 子命令:
- in minecraft:the_end — 在末地
- in minecraft:the_end — 在末地
- 完整命令:
- execute in the_nether run tp @s ~ ~ ~
- 将玩家传送至下界,坐标、朝向等不变。
- 将玩家传送至下界,坐标、朝向等不变。
- execute in the_nether run tp @s ~ ~ ~
- 子命令:
存储子命令
将命令执行之后返回的结果或命令执行成功的次数储存于记分板、实体数据、方块数据、storage 或 boss 栏中。
关于每条命令运行后返回的结果,可以参考:
【CBL|SPG】[1.14.4] 命令返回值列表
https://www.mcbbs.net/thread-808124-1-1.html
关于如何使用命令对数据进行操作,可以参考:
【教程】[1.15] 常见的数据操作方法:入门教程
https://www.mcbbs.net/thread-993805-1-1.html
- 语法:
- store (result|success) score <实体> <记分板>
- store (result|success) block <坐标> <路径> <数据类型> <倍率>
- store (result|success) entity <实体> <路径> <数据类型> <倍率>
- store (result|success) storage <storage> <路径> <数据类型> <倍率>
- store (result|success) bossbar <boss栏> (value|max)
- result 为命令返回的结果,success 为命令执行成功的次数。
- 存储的结果 = 命令返回值 * <倍率>
- 数据类型有 byte、double、float、int、long 和 short。
- value 为 boss 栏的当前值,max 为 boss 栏的最大值。
- 例子:
- 完整命令:
- execute store result score @s foo run data get entity @s SelectedItem.Count
- 将命令执行者手持物品的数量存储为自己的 foo 记分板的分数。
- 将命令执行者手持物品的数量存储为自己的 foo 记分板的分数。
- execute store result entity @e[type=pig,limit=1,sort=nearest] Health float 0.5 run data get entity @s SelectedItem.Count
- 将命令执行者手持物品的数量转换为 float 数值类型后乘以 0.5,存储为距离自己最近的猪的血量。
- 将命令执行者手持物品的数量转换为 float 数值类型后乘以 0.5,存储为距离自己最近的猪的血量。
- execute store result bossbar foo:example value if entity @e[type=pig]
- 统计猪的数量并将结果存储到 id 为 foo:example 的 boss 栏的当前值。
- 统计猪的数量并将结果存储到 id 为 foo:example 的 boss 栏的当前值。
- execute store result entity @e[type=pig,limit=1,sort=nearest] Attributes[{Name:"generic.maxHealth"}].Base double 2 run scoreboard players get @s foo
- 将命令执行者 foo 记分板的分数转换为 double 数值类型后乘以 2,存储为距离自己最近的猪的血量上限。
- 将命令执行者 foo 记分板的分数转换为 double 数值类型后乘以 2,存储为距离自己最近的猪的血量上限。
- execute store result score #temp foo run give @a[team=red] apple 1
- 给所有红队的玩家 1 个苹果并且统计红队的玩家总数,存为 #temp 的 foo 记分板的分数。
- 给所有红队的玩家 1 个苹果并且统计红队的玩家总数,存为 #temp 的 foo 记分板的分数。
- execute as @a store success score @s foo run enchant @s minecraft:sharpness 1
- 给所有玩家手上的物品附魔锋利 I,如果附魔成功,则将其 foo 记分板的分数设置为 1,否则设置为 0。
- 给所有玩家手上的物品附魔锋利 I,如果附魔成功,则将其 foo 记分板的分数设置为 1,否则设置为 0。
- execute store success score @s foo run data modify storage foo:example UUIDLeast set from entity @s UUIDLeast
- 假设 id 为 foo:example 的 storage 里已经存储了一位玩家的 UUIDLeast,此命令的作用是尝试用命令执行者的 UUIDLeast 覆盖 storage 里存储的 UUIDLeast,若覆盖成功,则说明两个 UUIDLeast 不同,将自己的 foo 记分板的分数设为 1,否则设为 0。
- 此方法可用于判断两个数据是否相同。
- execute store result score @s foo run data get entity @s SelectedItem.Count
- 完整命令:
命令返回值的数据类型是 int(即范围从 -2 147 483 648 到 2 147 483 647 的整数),若为小数则会被向下取整。
假设距离自己最近的僵尸的血量上限为 12.678d,请看以下命令:
- data get entity @e[type=zombie,limit=1,sort=nearest] Attributes[{Name:"generic.maxHealth"}].Base
- 获取该僵尸的血量上限,返回 12.678d。
- 获取该僵尸的血量上限,返回 12.678d。
- execute as @e[type=zombie,limit=1,sort=nearest] store result entity @s Health float 1 run data get entity @s Attributes[{Name:"generic.maxHealth"}].Base
- 将该僵尸的血量上限转换为 float 数值类型后乘以 1,存为自己的血量,血量变为 12.0f。
- 将该僵尸的血量上限转换为 float 数值类型后乘以 1,存为自己的血量,血量变为 12.0f。
- data get entity @e[type=zombie,limit=1,sort=nearest] Attributes[{Name:"generic.maxHealth"}].Base 100
- 获取该僵尸的血量上限并乘以 100,返回 1267。
- 获取该僵尸的血量上限并乘以 100,返回 1267。
- execute as @e[type=zombie,limit=1,sort=nearest] store result entity @s Health float 0.01 run data get entity @s Attributes[{Name:"generic.maxHealth"}].Base 100
- 先将血量上限乘以 100,向下取整后再乘以 0.01,僵尸的血量变为 12.67f。
- 一种常用的保留小数的方法,这里保留了 2 位小数。
倍率可以是负数。
条件子命令
当位于 execute 命令中间时,条件子命令会让命令在所有条件测试通过后才会继续运行。
当条件子命令位于 execute 命令的结尾时,检测是否通过并会返回结果。
子命令 |
检测 |
语法 |
if block |
方块 |
(if|unless) block <坐标> <方块> |
if blocks |
区域内方块 |
(if|unless) blocks <开始坐标> <结束坐标> <对照区域坐标> (all|masked) |
if entity |
实体 |
(if|unless) entity <实体> |
if data |
方块数据 |
(if|unless) data block <坐标> <NBT> |
if data |
实体数据 |
(if|unless) data entity <单个实体> <NBT> |
if data |
storage 数据 |
(if|unless) data storage <storage> <NBT> |
if score |
分数 |
(if|unless) score <单个实体> <记分板> matches <范围> |
if score |
分数 |
(if|unless) score <单个实体> <记分板> <运算符> <单个实体> <记分板> |
if predicate |
断言 |
(if|unless) predicate <断言> |
- unless 在 if 不通过时通过,类似于取反。
if block : 检测方块
检测指定位置的方块是否为指定方块或属于指定的方块标签。
if block 在方块满足条件时返回 1,否则返回 0。
unless block 在方块不满足条件时返回 1,否则返回 0。
- 语法:(if|unless) block <坐标> <方块>
- 例子:
- 子命令:
- if block 2 3 3 stone — 如果坐标为(2,3,3)处的方块为石头
- if block ~ ~ ~ chest[facing=east] — 如果当前坐标处的方块为朝向西方的箱子
- unless block ~ ~ ~ chest{CustomName:'"233"'} — 如果当前坐标处的方块不是箱子或箱子没有自定义名称或自定义名称不是 '"233"'
- if block ~ ~ ~ furnace[facing=north]{CookTime:300s} — 如果当前坐标处的方块是熔炉且面向北方,物品剩余烧炼时间为 300s
- 完整命令:
- execute if block ~ ~-1 ~ #minecraft:logs run effect give @s speed 1 0
- 如果当前坐标处 ~ ~-1 ~ 处的方块拥有 #minecraft:logs 标签,则给予玩家 1 秒的速度 I 效果。
- 如果当前坐标处 ~ ~-1 ~ 处的方块拥有 #minecraft:logs 标签,则给予玩家 1 秒的速度 I 效果。
- execute store result score #temp foo if block ~ ~ ~ oak_button[powered=true]
- 检测当前坐标处的橡木按钮是否被按下并将结果存储为玩家 #temp 的 foo 记分板的分数。
- 检测当前坐标处的橡木按钮是否被按下并将结果存储为玩家 #temp 的 foo 记分板的分数。
- execute if block ~ ~-1 ~ #minecraft:logs run effect give @s speed 1 0
- 子命令:
if blocks : 比对两个区域内的方块
检测从开始坐标到结束坐标之间的区域与对照区域内的方块是否相同。
相同是指方块 id、方块状态、方块实体的数据标签均相同。
if blocks 和 unless blocks 均在方块相同时返回其中一个区域内方块的总数量,否则返回 0。
- 语法:(if|unless) blocks <开始坐标> <结束坐标> <对照区域坐标> (all|masked)
- 三个坐标与 clone 命令中的坐标类似,对照区域的坐标为对照区域西北下角的方块的坐标。
- all 为比对所有方块,masked 为忽略空气方块。
- 例子:
- 子命令:
- if blocks 1 2 3 4 5 6 7 8 9 all — 如果从(1,2,3)到(4,5,6)的所有方块与从(7,8,9)到(10,11,12)的所有方块相同
- unless blocks 1 2 3 4 5 6 7 8 9 masked — 如果从(1,2,3)到(4,5,6)的所有方块与从(7,8,9)到(10,11,12)的所有方块不相同(忽略空气方块)
- 完整命令:
- execute store result score #temp foo unless blocks 1 2 3 4 5 6 7 8 9 masked
- 如果从(1,2,3)到(4,5,6)的所有方块与从(7,8,9)到(10,11,12)的所有方块中不相同(忽略空气方块)则通过且返回 0,否则返回其中一个区域内方块的总数量并将结果存储为玩家 #temp 的 foo 记分板的分数。
- 如果从(1,2,3)到(4,5,6)的所有方块与从(7,8,9)到(10,11,12)的所有方块中不相同(忽略空气方块)则通过且返回 0,否则返回其中一个区域内方块的总数量并将结果存储为玩家 #temp 的 foo 记分板的分数。
- execute store result score #temp foo unless blocks 1 2 3 4 5 6 7 8 9 masked
- 子命令:
- 思考:
- 子命令 if blocks 4 2 6 1 5 3 7 8 9 all 比对的是哪两个区域内的方块?
- 该子命令和例 1 的子命令等价,因为从开始坐标到结束坐标之间的区域 1<= x <= 4,2 <= y <= 5,3 <= z <= 6。
- 该子命令和例 1 的子命令等价,因为从开始坐标到结束坐标之间的区域 1<= x <= 4,2 <= y <= 5,3 <= z <= 6。
- 子命令 if blocks 4 2 6 1 5 3 7 8 9 all 比对的是哪两个区域内的方块?
if entity : 检测实体
检测是否存在指定的实体。
if entity 返回满足条件的实体的数量。
unless entity 返回不满足条件的实体的数量。
- 语法:(if|unless) entity <实体>
- 例子:
- 子命令:
- if entity @e[type=pig,distance=..5] — 如果距离小于等于 5 的范围内有猪
- unless entity @e[type=sheep] — 如果没有羊
- 完整命令:
- execute store result score #temp foo if entity @a[level=5]
- 统计等级为 5 的玩家的数量并将结果存储为玩家 #temp 的 foo 记分板的分数。
- 统计等级为 5 的玩家的数量并将结果存储为玩家 #temp 的 foo 记分板的分数。
- execute unless entity @e[type=cow] run summon cow
- 如果没有牛,则在当前位置召唤牛。
- 如果没有牛,则在当前位置召唤牛。
- execute store result score #temp foo if entity @a[level=5]
- 子命令:
- 思考:
- 以下两条子命令有什么区别?
- if entity @e[type=!pig]
- unless entity @e[type=pig]
- 以下两条子命令有什么区别?
if data : 检测方块/实体/storage 的数据
检测指定的方块/实体/storage 是否拥有特定的 NBT 标签或存在特定的 NBT 路径。
可用于统计字符串的长度、列表和数组中元素的个数等。
if data 和 unless data 的返回值相同。
- 语法:
- (if|unless) data block <坐标> <NBT>
- (if|unless) data entity <单个实体> <NBT>
- (if|unless) data storage <storage> <NBT>
- 例子:
- 子命令:
- if data block ~ ~ ~ CustomName — 如果当前位置的方块实体有自定义名称 / 统计自定义名称的长度
- if data entity @s {SelectedItem:{id:"stone",Count:1b}} — 如果命令执行者手持有石头,且数量为 1
- if data storage foo:example {Happy:1b} — 如果 id 为 foo:example 的 storage 拥有 NBT 标签 {Happy:1b}
- 完整命令
- execute store result score #temp foo if data storage foo:example List[] — 统计 id 为 foo:example 的 storage 里列表 List 中元素的个数并将结果存储为玩家 #temp 的 foo 记分板的分数。
- execute store result score #temp foo if data storage foo:example List[] — 统计 id 为 foo:example 的 storage 里列表 List 中元素的个数并将结果存储为玩家 #temp 的 foo 记分板的分数。
- 子命令:
if score : 检测分数
检测目标的记分板分数是否在指定范围内或与另一目标的记分板分数符合运算符的关系。
if score 在分数满足条件时返回 1,否则返回 0。
unless score 在分数不满足条件时返回 1,否则返回 0。
- 语法:
- (if|unless) score <单个实体> <记分板> matches <范围>
- (if|unless) score <单个实体> <记分板> <运算符> <单个实体> <记分板>
- 运算符有 <、<=、=、>= 和 >。
- 运算符有 <、<=、=、>= 和 >。
- 例子:
- 子命令:
- if score @s foo matches 2..5 — 如果命令执行者的 foo 记分板的分数在 2 与 5 之间(包括 2 和 5)
- if score @s foo > @e[type=pig,limit=1,sort=nearest] haha — 如果命令执行者的 foo 记分板的分数大于距离当前位置最近的一只猪的 haha 记分板的分数
- 子命令:
if predicate : 检测断言
检测是否满足断言所描述的条件。
if predicate 在满足断言所描述的条件时返回 1,否则返回 0。
unless predicate 在不满足断言所描述的条件时返回 1,否则返回 0。
- 语法:
- (if|unless) predicate <断言>
- (if|unless) predicate <断言>
- 例子:
- 子命令:
- if predicate foo:example — 如果满足断言 foo:example 所描述的条件。
- if predicate foo:example — 如果满足断言 foo:example 所描述的条件。
- 子命令:
关于如何编写断言,可以参考:
【CBL|SPG】[1.15] 断言 —— 数据包的组成文件之一
https://www.mcbbs.net/thread-914817-1-1.html
执行子命令
用于执行命令。
- 语法:
- run <命令>
- run <命令>
结语
我写完了。
原来if还有blocks,execute居然还能统计区域内方块数量……学会了学会了
草 看成1.15命令教程了
我说怎么就单exe呢
我说怎么就单exe呢
太感谢了!!非常实用的教程!!
一直想找一个比较明了的execute教程!
一直想找一个比较明了的execute教程!
本教程已于 10 月 1 日更新,本文的 Markdown 版本:
另外,下载他人制作的数据包进行拆包学习是一个不错的提升命令水平的方法。
另外,下载他人制作的数据包进行拆包学习是一个不错的提升命令水平的方法。