Minecraft(我的世界)中文论坛

 找回密码
 注册(register)
查看: 888|回复: 6

[命令] [1.13+]新版execute命令详解

 关闭 [复制链接]
song2006 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
322
钻石
性别
保密
注册时间
2017-7-2
查看详细资料
 楼主| 发表于 2019-8-14 11:49:23 | 显示全部楼层 |阅读模式

您尚未登录,立即登录享受更好的浏览体验!

您需要 登录 才可以下载或查看,没有帐号?注册(register)

x
本帖最后由 song2006 于 2019-8-14 12:30 编辑
相信很多人在经历1.13的命令大改后都不会用execute了吧
那就跟我一起从头学习一下1.13的execute新语法吧



1.基本语法



命令格式:/execute [修饰子命令] [修饰子命令参数] ... [条件子命令] [条件子命令判断类型] [条件判断内容] ... [储存子命令] [储存子命令参数] ... [run子命令] [要运行的具体命令]
从上面看到,execute的所有参数都是可选的,说明这条命令有着极大的拓展性(那run和要执行的命令都可以没有??这个留到后面讲)

2.run子命令

它的作用很简单:执行一条命令。这个子命令比较特殊,只能放在execute的最末尾。

举个例子:/execute run setblock ~ ~ ~ stone

- 和一般的命令没有区别,就是在当前位置放一个石头。


3.修饰子命令

  • 什么是修饰子命令?
修饰子命令可以更改命令运行的环境。例如模拟指定实体对象、模拟指定位置等。一个execute可以套多个修饰子命令,系统会由左到右依次解析。



  • 修饰子命令-as
它可以使命令的执行者作为指定的实体。参数就是一个实体选择器。如果同时选中了多个目标,每个目标都会执行一次。
        举个例子:/execute as @e[type=item] run say 我是物品
        - 让所有的掉落物都说一句“我是物品”。


  • 修饰子命令-at
让命令的执行位置改为指定的实体位置、朝向和维度。参数是一个实体选择器。如果同时选中了多个目标,每个目标都会执行一次。它通常与as连用,做到模拟指定实体执行命令的效果(就像1.12前那样)。相当于打包的rotated as、in和positioned as。

        举个例子:/execute at @a run summon pig ~ ~2 ~
        - 让所有的玩家头上生成一头猪。


  • 修饰子命令-align
将运行位置的坐标转化为方块坐标(向下取整)。可以用这个子命令来偏正盔甲架或玩家的位置。它的参数可以是x、y、z三个字母的任意组合,表示需要转化的坐标轴。

        举个例子:/execute align xyz run tp @s ~ ~ ~
        - 把你的坐标偏正为方块中心的位置。




  • 修饰子命令-anchored
在使用局部坐标时或者使用朝向命令时更改此命令的基准点为实体脚或眼睛的位置。参数只能是feet或eyes。

        其实我也没读懂......还是不举例免得误导别人吧




  • 修饰子命令-facing
将命令执行的朝向修改为朝向指定的位置,可以指定为朝向一个方块或是一个实体。他的参数可以是一个坐标(此模式下将会朝向这个坐标),或是entity <实体选择器> <feet|eyes>(此模式下会朝向选定的实体,feet代表朝向实体的脚,eyes则代表眼睛)

        举个例子:/execute facing entity @e[type=armor_stand,limit=1,sort=nearest] feet run tp @s ~ ~ ~ ~ ~

        - 使你面向最近的一个盔甲架。



  • 修饰子命令-in
将命令的执行维度改为指定的维度。参数只能是overworld(主世界),the_nether(下界),the_end(末地)。

        举个例子:/execute in the_nether run tp ~ ~ ~
        - 把你传送到下界,但坐标不变。



  • 修饰子命令-positioned
将命令的执行位置改为指定的坐标。参数可以直接填一个坐标(直接作为该坐标),或是as <目标选择器>(作为指定实体的坐标,和at有一点点区别,这个子命令只更改位置,而at可以模拟位置、朝向和维度)。

        举个例子:/execute positioned 0 0 0 run kill @a[distance=..10]
        - 清除所有靠近坐标0,0,0十格以内的玩家。

  • 修饰子命令-rotated
将命令执行的朝向改为指定的朝向(注意他和facing不同)。参数可以直接填y和x的旋转角度(直接作为该朝向),或是as <实体选择器>(作为指定实体的朝向,而不是朝向此实体

        举个例子:/execute rotated as @e[type=armor_stand,limit=1,sort=nearest] run tp @s ~ ~ ~ ~ ~
        - 使你的朝向与最近的一个盔甲架相同。请注意和facing中的例子区分。
4.条件子命令
  • 什么是条件子命令?
条件子命令可以让命令在满足/不满足特定条件的情况下才能执行。和修饰子命令一样,一个execute中可以套用多个条件子命令,由左到右进行解析。如果套有多个条件子命令,他们的关系是“”,也就是说只要有一个条件子命令不符合条件,整个命令都不会执行


  • 条件子命令-if和unless
if和unless的作用差不多,并且他们可选的参数都是一样的,只不过if模式下满足特定条件才能执行命令,unless模式则反之,不满足特定条件则执行命令。还记得一开头提到run和执行的命令也可以不用填写吗?只有在execute以条件子命令结尾时才可以不填写run,用来判断指定事物并返回判断结果(可以用后面讲的储存子命令来获取,或是用红石比较器来作为红石信号输出)



  • 条件判断参数-block
判断指定位置的方块是否与指定的方块相符。(等效于1.12之前的/testforblock
格式:/execute ... <if|unless> block <坐标> <方块>

方块一栏可以填写方块英文名称,也可以填写一个方块标签(表示判断这个方块是否拥有指定标签)。支持方块状态和NBT标签的判断。

        举个例子:/execute as @a at @a if block ~ ~-1 ~ #minecraft:wool run kill @s
        - 如果玩家脚下是羊毛,则清除该玩家。


  • 条件判断参数-blocks
判断两个区域内的方块是否相符。(等效于1.12之前的/testforblocks
格式:/execute ... <if|unless> blocks <区域1的起点坐标> <区域1的终点坐标> <区域2的坐标> <all|masked>

坐标的填写格式与/clone相同。all模式表示选中并比较区域内所有的方块,masked则会忽略空气方块和结构空位。

        举个例子:/execute if blocks ~ ~-1 ~ ~ ~-1 ~ 20 5 60 all run give @s diamond
        - 如果玩家脚下的方块和处于20,5,60坐标的方块相同,给予玩家一个钻石。


  • 条件判断参数-data
判断指定的实体或方块的NBT标签是否和指定的相符。
格式:/execute ... <if|unless> data <block|entity> <选择器|方块坐标> <指定NBT标签|NBT索引路径>

只有在block模式下才能使用方块坐标,在entity模式下才能使用选择器。NBT索引路径的格式详见这里

        举个例子:/execute if data entity @s {example:20s}
        - 判断执行者的example标签的值是否为short类型的20。


  • 条件判断参数-entity
判断世界上是否存在指定的实体。(等效于1.12之前的/testfor)
格式:/execute ... <if|unless> entity <选择器>

这么简单我还是不举例子了吧
  • 条件判断参数-score
判断指定实体的计分板分数是否满足指定运算符的条件,或是处于指定的范围中。(是升级版的1.12前的/scoreboard players test)
格式:/execute ... <if|unless> score <选择器> <目标记分项> <运算符> <要比较的实体选择器> <要比较的目标计分项>
或:/execute ... <if|unless> score <选择器> <目标记分项> matches <数值范围>
数值范围的表示方法参照1.13的新方式

        举个例子:/execute if score @s foo matches 2..10 run effect give @s speed 30
        - 如果执行者的foo分数在2~10之间,那么给予执行者速度效果30秒。



  • 条件判断参数-score
判断指定实体的计分板分数是否满足指定运算符的条件,或是处于指定的范围中。(是升级版的1.12前的/scoreboard players test)
格式:/execute ... <if|unless> score <选择器> <目标记分项> <运算符> <要比较的实体选择器> <要比较的目标计分项>
或:/execute ... <if|unless> score <选择器> <目标记分项> matches <数值范围>
数值范围的表示方法参照1.13的新方式

        举个例子:/execute if score @s foo matches 2..10 run effect give @s speed 30
        - 如果执行者的foo分数在2~10之间,那么给予执行者速度效果30秒。


5.储存子命令
  • 什么是储存子命令?
储存子命令用于将命令的执行/返回结果储存到计分板、NBT标签或是boss栏是1.12之前/stats的升级版。

后面的内容可能有点难懂,萌新请跳过或左转




  • 储存子命令-store
基本的储存子命令,配合后面的储存子命令模式使用。



  • 储存子命令模式-result和success
result会储存命令返回的更改结果,取代了之前的/stats ... AffectedBlocks(更改的方块数),AffectedEntities(更改的实体数),AffectedItems(更改的物品数)和QueryResult(查询类命令的查询结果)。

success会储存命令的成功次数。一般来说它返回的值只能是0或1,如果和as连用使多个实体执行同一命令,那么有多少个实体成功执行了命令,返回值就为几。

格式:
/execute ... store <result|success> score <选择器> <目标记分项>
将返回的值储存为指定实体的计分项。

/execute ... store <result|success> <block|entity> <方块坐标|实体选择器> <NBT索引路径> <byte|double|float|int|long|short> <倍率>
将返回的值先乘上指定倍率,再储存到指定方块或实体的NBT中。浅黄色背景部分表示储存值的数据类型。如果储存为float或double等小数类型,那么会先乘以倍率后向下取整。这个命令只能替换现有的NBT值,不能创造新的标签。

/execute ... store <result|success> bossbar <boss栏的id> <value|max>
将返回的值储存到boss栏的当前值或上限值。


        举几个例子:
        /execute as @a store success score #fakeman players run trigger foo
        - 将玩家数量的值储存到#fakeman的players分数中。假设foo触发器存在,没有任何用途,并且一直保持开启。

        /execute store result score #fakeman entity run kill @e[type=!player]
        - 清除世界上所有除玩家外的实体,并将实体的数量储存到#fakeman的entity分数中。






6.结束语



可以看到,其实1.13的命令大改是把命令变得更好理解(英文国家)、更好用了。

所以不要惧怕这种大的改变,

要积极地去学习与了解。







一位mcbbs萌新写的第一篇教程帖,若有错误欢迎指出,还请大佬们多多包涵。



部分内容引自中文Minecraft Wiki:










欢迎评分送人气丫




评分

参与人数 2金粒 +6 收起 理由
SPGoding + 1 缺乏时效性
⊙u⊙ + 5 友情提示:有人踩了。不是我....

查看全部评分

ruhuasiyu 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
16869
钻石
性别
保密
注册时间
2014-10-16
查看详细资料
发表于 2019-8-14 12:05:15 | 显示全部楼层
所以你看了wiki还是没搞懂at和positioned as的区别吗?anchored你基本也没说清
回复

使用道具 举报

song2006 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
322
钻石
性别
保密
注册时间
2017-7-2
查看详细资料
 楼主| 发表于 2019-8-14 12:25:40 | 显示全部楼层
ruhuasiyu 发表于 2019-8-14 12:05
所以你看了wiki还是没搞懂at和positioned as的区别吗?anchored你基本也没说清

已修改awa
写的时候有点急没看清
回复

使用道具 举报

颜魂i 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
176
钻石
性别
保密
注册时间
2019-7-28
查看详细资料
发表于 2019-8-14 12:48:27 | 显示全部楼层
看半天没看懂
回复

使用道具 举报

BlackCB. 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
8301
钻石
性别
保密
注册时间
2015-6-20
查看详细资料
发表于 2019-8-14 13:04:34 | 显示全部楼层
我感觉这样的教程还不如直接去看维基
给不会的人写的基础教程就应该尽可能的简单易懂,而不是搬弄晦涩的词汇
起码得有几个例子吧?
回复

使用道具 举报

song2006 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
322
钻石
性别
保密
注册时间
2017-7-2
查看详细资料
 楼主| 发表于 2019-8-14 14:29:39 来自手机 | 显示全部楼层
天狼星black 发表于 2019-8-14 13:04
我感觉这样的教程还不如直接去看维基
给不会的人写的基础教程就应该尽可能的简单易懂,而不是搬弄晦涩的词 ...

没有例子?每个子命令下面不都举了例子吗?
回复

使用道具 举报

CHElover_C60 当前离线
帖子
主题
精华
贡献
最后登录
1970-1-1
爱心
积分
2399
钻石
性别
保密
注册时间
2018-11-16
查看详细资料
发表于 2019-8-14 22:11:02 | 显示全部楼层
本帖最后由 CHElover_C60 于 2019-8-14 22:14 编辑

anchored用于修改命令基准点,影响局部坐标以及facing子命令。默认指令基准点为feet

/tp ^ ^ ^                                              #将自己传送至脚部(相当于没变化)
/execute anchored eyes run tp ^ ^ ^       #将自己传送至眼部(没有潜行时,相当于向上传送1.62个方块)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册(register)

本版积分规则

Archiver|小黑屋|Mcbbs.net ( 京ICP备15023768号-1 ) | 京公网安备 11010502037624号 | 手机版

GMT+8, 2019-11-22 17:43 , Processed in 0.042148 second(s), Total 16, Slave 14 queries , Gzip On, MemCached On.

"Minecraft"以及"我的世界"为Mojang Synergies AB的商标 本站与Mojang以及微软公司没有从属关系

© 2010-2019 我的世界中文论坛 版权所有 本站原创图文内容版权属于原创作者,未经许可不得转载

快速回复 返回顶部 返回列表