Minecraft(我的世界)中文论坛

标题: 【教程】[1.15] execute 命令入门教程 [打印本页]

作者: (=°ω°)丿    时间: 2020-3-19 13:05
标题: 【教程】[1.15] execute 命令入门教程
本帖最后由 (=°ω°)丿 于 2020-10-1 17:27 编辑



[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 : 执行朝向 <-- 朝向/实体

更改命令的执行朝向为指定朝向或指定实体的朝向。
朝向分为眼部(头)的朝向和脚部(身体)的朝向,使用哪个朝向由 anchored 子命令决定。



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 datastorage 数据(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




执行子命令

用于执行命令。




结语

我写完了。




作者: 时之虫    时间: 2020-3-19 13:26
原来if还有blocks,execute居然还能统计区域内方块数量……学会了学会了
作者: 晴路卡    时间: 2020-3-19 15:10
草 看成1.15命令教程了
我说怎么就单exe呢
作者: (=°ω°)丿    时间: 2020-3-19 15:14
晴路卡 发表于 2020-3-19 15:10
草 看成1.15命令教程了
我说怎么就单exe呢

我觉得除了 execute 和 data 以外没什么难的(
所以没写(
作者: EternityTQ    时间: 2020-3-19 16:40
太感谢了!!非常实用的教程!!
一直想找一个比较明了的execute教程!
作者: buzh3    时间: 2020-3-20 16:53
楼主辛苦了
作者: 1586732167qq    时间: 2020-3-21 22:35
看得我一脸懵逼,我果然还是得好好学习
作者: 沉默是金…    时间: 2020-5-15 11:36
非常有用,最近正好发愁怎么检测脚底下的方块。
作者: xiaoben530    时间: 2020-6-6 17:15
怎么用这个命令造个园柱啊大神,1.15的
作者: 小白小孟    时间: 2020-6-10 16:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: qq1244696403    时间: 2020-6-10 20:37
谢谢楼主的分享.
作者: xiaoshuguang    时间: 2020-6-11 09:39
谢谢楼主,支持一下
作者: 泪丶无痕    时间: 2020-8-8 00:37
感谢楼主分享
作者: (=°ω°)丿    时间: 2020-8-9 15:28
本帖最后由 (=°ω°)丿 于 2020-10-1 18:57 编辑

本教程已于 10 月 1 日更新,本文的 Markdown 版本:
execute.zip (6.53 KB, 下载次数: 11, 售价: 1 粒金粒)

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

作者: 18226085696    时间: 2020-8-10 19:53
nice~~~~~~~~~~~~~~~~

作者: 胖虎123    时间: 2020-8-22 11:46
新萌=无奈=蹲贴=学到了
作者: lxt123qwe    时间: 2020-8-22 15:30
原来if还有blocks,execute居然还能统计区域内方块数量……学会了学会了

作者: XWG_sam    时间: 2020-11-30 00:02
我想知道一个问题:
在岩浆里 踩在灵魂沙上 给一个任意物品 应该怎么写判断
这个问题困扰我很久了
作者: Summer_dreams    时间: 2020-11-30 20:00
沙发沙发沙发沙发沙发




欢迎光临 Minecraft(我的世界)中文论坛 (https://www.mcbbs.net/) Powered by Discuz! X3.5