(=°ω°)丿


[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 个部分:



所以整个命令的意思是:以所有的猪的身份,在猪当前的位置召唤盔甲架。


例 2:


execute as @a at @s if block ~ ~-1 ~ stone run effect give @s speed 1 0


此命令可以按顺序拆分成 4 个部分:



所以整个命令的意思是:以所有玩家的身份,如果在玩家当前位置的 ~ ~-1 ~ 处的方块为石头,则给予自己 1 秒的速度 I 效果。


例 3:


execute as @a store result score @s foo run data get entity @s SelectedItem.Count


此命令可以按顺序拆分成 3 个部分:



所以整个命令的意思是:以所有玩家的身份,将自己手持物品的数量存储为自己的 foo 记分板的分数。


例 4:


execute store result bossbar foo:example value if entity @e[type=pig]


此命令可以按顺序拆分成 2 个部分:



所以整个命令的意思是:统计猪的数量并将结果存储到 id 为 foo:example 的 boss 栏的当前值。




什么是子命令


在阅读 execute 命令时,我们通常将其按顺序拆分成几个部分,每个部分被称为 execute 命令的 子命令,一个 execute 命令一般由多个子命令构成。


我们可以通过对不同子命令的排列组合,实现各种各样的效果。


有哪些子命令


我们根据子命令的作用将其分为以下 4 种:



下面我们将阐述 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 : 执行者 <-- 实体


更改命令的执行者为指定实体。



at : 执行位置/朝向/维度 <-- 实体


更改命令的执行位置、执行朝向和执行维度为指定实体的坐标、朝向和维度。



positioned : 执行位置 <-- 坐标/实体


更改命令的执行位置为指定坐标或指定实体的坐标。



align : 执行位置 <-- 坐标向下取整


将执行位置的坐标向下取整。



anchored : 局部坐标基准点 <-- 脚部/眼部


更改命令在使用局部坐标时的基准点为脚部或眼部,默认在脚部。



rotated : 执行朝向 <-- 朝向/实体


更改命令的执行朝向为指定朝向或指定实体的朝向。



facing : 执行朝向 --> 坐标/实体


使命令的执行朝向朝向指定的坐标或实体的眼部或脚部。



in : 执行维度 <-- 维度


更改命令的执行维度为指定维度。





存储子命令


将命令执行之后返回的结果或命令执行成功的次数储存于记分板、实体数据、方块数据、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



命令返回值的数据类型是 int(即范围从 -2 147 483 648 到 2 147 483 647 的整数),若为小数则会被向下取整。


假设距离自己最近的僵尸的血量上限为 12.678d,请看以下命令:



倍率可以是负数。




条件子命令


当位于 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 <断言>


if block : 检测方块


检测指定位置的方块是否为指定方块或属于指定的方块标签。
if block 在方块满足条件时返回 1,否则返回 0。
unless block 在方块不满足条件时返回 1,否则返回 0。



if blocks : 比对两个区域内的方块


检测从开始坐标到结束坐标之间的区域与对照区域内的方块是否相同。
相同是指方块 id、方块状态、方块实体的数据标签均相同。
if blocksunless blocks 均在方块相同时返回其中一个区域内方块的总数量,否则返回 0。



if entity : 检测实体


检测是否存在指定的实体。
if entity 返回满足条件的实体的数量。
unless entity 返回不满足条件的实体的数量。



if data : 检测方块/实体/storage 的数据


检测指定的方块/实体/storage 是否拥有特定的 NBT 标签或存在特定的 NBT 路径。
可用于统计字符串的长度、列表和数组中元素的个数等。
if dataunless data 的返回值相同。



if score : 检测分数


检测目标的记分板分数是否在指定范围内或与另一目标的记分板分数符合运算符的关系。
if score 在分数满足条件时返回 1,否则返回 0。
unless score 在分数不满足条件时返回 1,否则返回 0。



if predicate : 检测断言


检测是否满足断言所描述的条件。
if predicate 在满足断言所描述的条件时返回 1,否则返回 0。
unless predicate 在不满足断言所描述的条件时返回 1,否则返回 0。



关于如何编写断言,可以参考:
【CBL|SPG】[1.15] 断言 —— 数据包的组成文件之一
https://www.mcbbs.net/thread-914817-1-1.html




执行子命令


用于执行命令。





结语


我写完了。





时之虫
原来if还有blocks,execute居然还能统计区域内方块数量……学会了学会了

晴路卡
草 看成1.15命令教程了
我说怎么就单exe呢

(=°ω°)丿
晴路卡 发表于 2020-3-19 15:10
草 看成1.15命令教程了
我说怎么就单exe呢

我觉得除了 execute 和 data 以外没什么难的(
所以没写(

EternityTQ
太感谢了!!非常实用的教程!!
一直想找一个比较明了的execute教程!

(=°ω°)丿
本教程已于 10 月 1 日更新,本文的 Markdown 版本:



另外,下载他人制作的数据包进行拆包学习是一个不错的提升命令水平的方法。

第一页 上一页 下一页 最后一页