Minecraft最新最全指令教学5 目标选择器进阶(PC 1.15.2)
MJ_Hamster
编辑于 2020年03月13日 14:02
收录于文集
共22篇

耗子的指令课堂(5)

引导

在接下来的所有指令教学中,我会使用不同颜色的字强调不同种类的内容,方便大家阅读与查看。凡例:

深蓝色  标题

橙色      技术类文字

深绿色  专有名词

红色      强调

粉色      区分数字内容

紫色      范例

第一章  命令基础知识

1.4.2  目标选择器参数(2)

9. y_rotation(水平旋转)和x_rotation(垂直旋转)

        表示实体视角在水平面的角度和竖直面的角度。

        水平面上正北方向是-180,东方向是-90,南方向是0,西方向是90,再回到正北方向是180(-180,虽然F3信息写的是-180,但是在命令中使用180会正确执行)。竖直面上竖直向上是-90,水平向前是0,竖直向下数值是90。参考下图,只要记住“顺时针逐渐增大”的规律就好理解多了。

水平旋转与垂直旋转数值图解

        举例:选取所有正在仰头45°的实体:@e[x_rotation=-45];随机一名正在看向x、z负方向夹角方向(西北方)的玩家@r[y_rotation=90..180]。

10. limit(数量限制)和sort(排序)

        有些目标选择器变量是可以有数量限制的,但1个有时无法满足我们的需求。这个时候limit和sort就可以用得上了。Limit这个词有限制的意思,参数值就是你选择的目标数(当然@r和@p的默认limit值是1)。而sort就是排序的方法,这个参数有4种值:nearest(最近)、furthest(最远)、random(随机)和arbitrary(不排序)。

        现在来看引言中提到的一个问题:选择随机两只僵尸。现在我们就可以使用@e[type=zombie,limit=2,sort=random]选定。

        再比如选择离(100,65,-1299)最远的处于旁观模式的两名玩家可以用@a[x=100,y=65,z=-1299,gamemode=spectator,limit=2,sort=furthest]选定。

        特殊的是,选择随机和最近玩家有两种方式,都可以正确识别。可以使用@p或@a,也就是说可以用@p或者@a[limit=1,sort=nearest]选定。

警告:现在目标选择器参数的内容来到了难点,请读者分次学习。

提示:接下来的目标选择器参数部分现在只需要掌握使用方法,具体的内容会在讲解对应内容的时候提到。

11. tag(玩家自定义标签)

对应内容:命令/tag

        顾名思义,就是选定拥有玩家赋予的某个标签的单位。格式:[tag=标签名]。

        多个tag可以并列使用,比如:[tag=标签名1,tag=标签名2,……]。

        举例:选择所有拥有标签A和B,但没有标签MJ的实体:@e[tag=A,tag=B,tag=!MJ]。

12. nbt(NBT标签)、scores(计分板分数)

对应内容:NBT标签、命令/scoreboard

        选定NBT标签是否为某一值、计分板中分数是否为某一值或在某一范围内的参数。这两个部分格式类似,所以拿到一起讲。当要选定具体的NBT标签、具体的记分项的时候需要用大括号括起来。格式:[nbt={标签:[子标签]}]和[scores={记分项=值或范围}]。比如:

        选定记分项MJ的分数为10的所有玩家:@a[scores={MJ=10}]

        选定记分项MJ的分数不小于10的所有玩家:@a[scores={MJ=10..}]

        选定记分项MJ的分数不小于10、记分项hi的分数在20和21.5之间的所有玩家:@a[scores={MJ=10..,hi=20..21.5}]

        选定所有装了鞍的猪:@e[type=pig,nbt={Saddle:true(或1)}]

        · Saddle是猪是否装有鞍的标签,true或1表示“是”。

        选定所有火把掉落物:@e[type=item,nbt={Item:{id:"minecraft:torch"}}]

        · Item指设置掉落物的标签,id指选择掉落物名称的标签,且minecraft:字段不可以省略。

        注意:虽然@e[nbt={Tags:[A,B]}]和@e[tag=A,tag=B]作用相同,但是后者更简洁而且CPU运算量更低。(NBT标签Tags代表实体具有的玩家自定义标签)

13. advancements(进度)

对应内容:命令/advancement

        进度是游戏中必须或非常具有挑战性的任务,而这个参数可以通过玩家是否完成某一任务或者完成达成某一进度的先决条件筛选目标。

        举例:选择所有完成了进度“见鬼去吧(反弹恶魂的火球杀死恶魂)”的所有玩家:@a[advancements={nether/return_to_sender=true}]。“nether/return_to_sender”是进度“见鬼去吧”的内部ID,“true”指完成了这个进度。

        再比如选择获得过钻石胸甲的任意两名玩家:@r[limit=2,advancements={story/shiny_gear={diamond_chestplate=true}}]。虽然使用了advancements参数,但玩家不一定正在装备钻石胸甲。这条选择器的含义是:通过获得钻石胸甲完成进度“钻石护体”的随机两名玩家。在游戏中其中“story/shiny_gear”是进度“钻石护体”的内部ID,“diamond_chestplate(钻石胸甲)”是完成“钻石护体”进度的需求(requirements)之一(任意类型钻石盔甲)。

14. predicate(谓词)

对应内容:数据文件:谓词

       有些时候,这些选择器是不够用的。作为1.15版本引进的黑科技,谓词可以让玩家自定义目标选择器参数。同样地由于涉及较深的技术层面,这里只讲用法,内容会在后面讲到。

       格式:[predicate=命名空间]。代表选择符合玩家自定义选择器条件的单位。

       举例:@a[predicate=MJ:p01]代表选择所有符合谓词MJ:p01中所有条件的玩家。“MJ:p01”是数据包中对应谓词的命名空间(游戏读取路径)。

Q&A:

       Q:谓词是否拥有和tag相同的并列格式?

       A:当然有。但是一般都整合在数据包里了,根本不需要并列。

       花了这么长时间讲解目标选择器,虽然看起来内容很长很复杂,但是常用的也就几个,初学者只要把5个变量和前10个参数记起来就很够用了。至于想要探索深层面知识的玩家,也可以把后面几个记住,我会在后面的内容中为大家具体讲解。

下一篇:第一章 命令基础知识  1.5 样式代码与JSON格式(第一部分)