我相信,你在输入目标选择器后,指令提示会出现一个符号,那就是“[”。
为什么呢?其实,一个目标选择器实际上有两个部分:
变量[筛选参数
其中的变量即我们了解过的a、e之类的,而筛选参数则是通过各种特定的条件从已选择的实体中细分出需要的实体。
那么到底有多少种筛选参数呢?答:到目前为止(2021-8-24),Java版有21个筛选参数,16个筛选标准;基岩版有21个筛选参数,13个筛选标准。
这些参数如下:
--坐标类型--
\\坐标\\
x、y、z
\\距离(球形范围)\\
distance(以上)
r、rm(基岩版和以下)
\\立方体范围\\
dx、dy、dz
--记分板类型--
\\记分板分数\\
sres
\\标签\\
tag
\\队伍名\\(仅Java)
team
--其他类型--
\\数量\\
limit、sort(以上)
c(基岩版和以下)
\\经验等级\\
level(以上)
l、lm(基岩版和以下)
\\游戏模式\\
gamemode(以上)
m(基岩版和以下)
\\名称\\
name
\\垂直旋转角度\\
x_rotation(以上)
rx、rxm(基岩版和以下)
\\水平旋转角度\\
y_rotation(以上)
ry、rym(基岩版和以下)
\\实体类型\\
type
\\实体家族\\(仅基岩版)
family
\\实体数据标签\\(仅Java版)
NBT
\\游戏进度\\(仅Java版)
advancements
\\谓词\\(仅Java版)
predicate
是不是看起来很复杂?其实的确有点复杂,但我们得先看看格式:
(注意,接下来的“
”都不属于格式的符号,属于必填符号,“”符号仍是格式符号)
[参数名=参数值,参数名=参数值,…
唉,你有没有发现,这和JSON有点像啊。
没错,你可以按照JSON的理解方式去理解,只不过需要注意以下三点:
一、目标选择器参数最外层要用中括号包
二、目标选择器参数其参数名和参数值之间是用等于号,而不是用分号
三、平台特性,大部分英文半角符号会被强制改为中文全角符号
现在详细的讲讲各种参数的使用方式。
(坐标)
这个很熟悉吧,就是坐标而已。“x”就是X坐标,“y”就是Y坐标,“z”就是Z坐标。
那么举个栗子:
e [x =1 ,y =60 ,z =30
这个意思是设定执行指令的地点为(1,60,30)。这里讲一下,执行指令时有两个比较重要的东西:
执行指令者和执行指令基准点
执行指令者即执行这条指令的实体或玩家,执行指令基准点即执行这条指令时的地点,一般基准点即执行指令者的地方,但你可以通过目标选项器的x、y、z三个参数来改变执行基准点。
基准点有什么用呢?接下来的参数你就知道有什么用了。
对了,在基岩版,x、y、z三个参数的值是可以使用相对坐标的。
(距离)
使用圆规画圆,首先需要找到一个圆心,然后确定圆的半径,最后旋转360°就画出了一个圆。
在Minecraft中,使用距离参数确定需要选择实体的范围,本质上就是在画一个圆(实际上是个球)。这个圆的圆心就是执行指令基准点,圆的半径则是需要使用r或是distance参数确定。
比如:
a[x=23,y=65,z=-33,r=10]——以下和基岩版
a[x=23,y=65,z=-33,distance=..10]——以上
这个目标选择器的意思是:以坐标(23,65,-33)为基准点,范围10格内的所有玩家
但如果我们要这范围10格以外的玩家怎么办?这样做:
a[x=23,y=65,z=-33,rm=10]——以下和基岩版
a[x=23,y=65,z=-33,distance=10..]——以上
这个目标选择器的意思是:以坐标(23,65,-33)为基准点,范围10格外的所有玩家
可惜起点并不能放图,不然这用图表示会更好。
我们可以总结出r和rm的作用:
r参数的作用是:选取所有距离基准点小于R格的实体
rm参数的作用是:选取所有距离基准点大于RM格的实体
更高级一点,你还可以r和rm一起用,比如:
a[x=23,y=65,z=-33,r=10,rm=5]——以下和基岩版
a[x=23,y=65,z=-33,distance=5..10]——以上
这样子可以选取距离基准点大于5格但小于10格的玩家。
你也可以:
a[x=23,y=65,z=-33,r=10,rm=10]——以下和基岩版
a[x=23,y=65,z=-33,distance=10]——以上
这样子可以选取距离基准点10格的玩家(注意,只能是10格,多一点少一点都不行)。
只不过需要注意,就是R必须大于等于RM,不然什么也选不中。
r和rm毕竟是基岩版和以下版本用的,在Java版以上版本使用的distance,又是怎么用的呢?
其实上面讲r和rm时,顺带列出来相同用法的distance,就已经告诉你distance的四种用法了。
如果你还不清楚,我们就将R和RM两个参数值代入到distance,来告诉你distance到底怎么用:
[distance =..
——选取所有距离基准点小于R格的实体
[distance =RM..]——选取所有距离基准点大于RM格的实体。
[distance =RM..
——选取所有距离基准点大于RM格小于R格的实体。
[distance =R|RM]——选取所有距离基准点格的实体。
发现规律了没有?那两个点在数字左边,就代表小于X格的实体;在右边,即大于X格的实体;在两个数值中间,就代表距离在这两个值中间的实体;没有那两个点,只有一个数值,那么就只代表距离X格的实体。
懂了没?这已经非常详细了。
(立方体范围)
使用/fill确定的立方体范围很好理解,而目标选择器的立方体范围......
因为它并不是让你找两个点......
而是,以基准点分别向三个方向延伸多少格构成的立方体!
(Mojang本来这么做是为了相对坐标,只不过这就导致使用绝对坐标时很头疼)
举个最简单的例子:
a [x=0,y=0,z=0,dx=10,dy=10,dz=10
这个目标选择器的意思是:
选取从(0,0,0)到(10,10,10)构成的立方体内的所有玩家。
更深一层的意思是:
以基准点(0,0,0)向正X轴延伸10格,正Y轴延伸10格,正Z轴延伸10格所构成的立方体内的所有玩家。
但一般来说,基准点可不会是这么简单的三个数值。所以我们使用dx、dy、dz时,必须要掌握一个技术:将/fill构成立方体的两点坐标转化为目标选择器的基准点和延伸格数。
将/fill构成立方体的两个坐标记为:
A?=(x?,y?,z?)
A?=(x?,y?,z?)
设定A?为基准点,即:
[x=x?,y=y?,z=z?
A?-A?,得:
A?=(x?-x?,y?-y?,z?-z?)
这个结果就是dx、dy、dz的值了:
[x=x?,y=y?,z=z?,dx=x?-x?,dy=y?-y?,dz=z?-z?
举个例子:
A?=(287,65,122)
A?=(300,69,24)
就可以得出:
[x=287,y=65,z=122,dx=13,dy=4,dz=-98
这样子,以后我们就不用刻意去记到底要延伸多少格了(除了x、y、z并没有指定的情况下,这时候就要以相对坐标的思维去思考了)。
对了,在Java版,判定实体是否在范围内是按照碰撞箱是否有重叠判断,在基岩版是按照脚部坐标判断。
(记分板分数)
(记分板标签)
(队伍名称)
上面几格都是关于“记分板”(sreboard)的,这个以后在讲记分板时会单独拿出来讲。
(选取数量)
这个很有意思。以上版本是limit、sort,基岩版和以下版本是只有一个c。
由于limit和sort相比于c是大径相庭,所以我们先从limit和sort开始。
使用e,我们可以选择所有实体,但我们该怎么选择10只实体呢?
e [limit =10
就可以了。
但如果要选中最靠近基准点的实体该怎么办?
这时候我们就需要使用sort,调整选取模式。
a和e默认选取模式是按照实体生成时间由长到短排列,即越老排越前面,对应sort的选取模式即:a
itrary。
我们要选中最靠近基准点的实体,只需要使用nearest模式即可:
e[limit =1,sort=nearest
这样子就可以选取最靠近基准点的实体了。
sort一共有四种模式:
nearest——由近到远
furthest——由远到近
random——随机
itrary——按生成时间由老到新
其中,random和a
itrary模式c参数基本上模仿不了或只能模仿一点点。
那么c参数该如何使用呢?
先别着急,因为还有一个知识点没讲:
其实,当使用p和r变量的时候,limit默认为1,更改limit会增加选择最近(p默认sort模式为nearest)或随机(r默认random模式)目标的数量。当使用a或e变量时,此方式会限制目标数量。如果是s呢?那还用说吗?你有10个吗?Minecraft可没有分身术。
注意一点,limit不能写负数,但c可以。
c参数为正整数时,在除r变量外会选取最靠近基准点的C个目标;为负整数时,在除r变量外会选取最远离基准点的C个目标。比如:
a [c =5
a [c=-5
前者会选取最近的5名玩家,后者会选取最远的5名玩家。
但如果要随机排序呢?那么就得改成r(随机排序)了。但这样子就无法随机实体(比如用盔甲架阵随机生成地形,基岩版必须要使用记分板随机0和1,然后再目标选择器选择)。
c参数还有一个小知识,如果所有目标都一样远(你这不是钻牛角尖吗),在负整数的情况下将会选取生成时间越晚的实体,正整数情况下将会选取生成时间越早的实体。
(经验等级)
这个经验等级两个版本又不相同了。java版高于是level,基岩版和低于是l和lm。
等等,你有没有发现,这和那个rm、r、distance不超级像的吗?
没错,基本上你怎么用距离的,选取经验等级就怎么用。比如选取经验等级低于5的玩家:
a[l=5]——以下和基岩版
a[level=..5]——以上
又比如选取经验等级高于5的玩家:
a[lm=5]——以下和基岩版
a[level=5..]——以上
又比如选取经验等级在5到10级之间的玩家:
a[l=10,lm=5]——以下和基岩版
a[level=5..10]——以上
又比如选取经验等级为5级的玩家:
a[l=5,lm=5]——以下和基岩版
a[level=5]——以上
懂了吧?不懂就对照r、rm、distance多看几遍。
本章就到此结束。
阅读Minecraft指令手册最新章节 请关注热血小说网(www.oaksh.cn)