ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 目标选择器 ## 用途 命令很多时候是需要针对实体去执行的,比如`tp`命令。如果你使用玩家名来指定传送的玩家,比如**tp pca006132 0 5 0**,你就需要针对每个玩家写一个命令。 这方法在很多情况下是不可能使用的,因为我们不一定会知道被传送的玩家是谁,而且就算知道所有玩家,我们也需要举出所有的可能(穷举),不然就有些玩家无法传送,这样做需要的命令数就会非常多。除此之外,如果我们这样做,我们就无法传送玩家以外的实体了,所以穷举玩家名的方法是接近不可能的。 所以,在针对实体执行命令的情况下,我们通常会使用目标选择器。 选择器的用途,就是根据某些条件(用选择器参数指定)来选择实体,所以选择到的数量可以是没有/一个/多个。 ## 格式 ``` @选择器名称 @选择器名称[参数1=值,参数2=值] ``` |参数名称|描述| |----|----| |选择器名称|决定选择器行为| |参数|额外选择条件。不一定要存在,但如果存在一个或多个参数则必须用方括号括住,并且以逗号分隔开不同的参数(所有符号都是英文符号,如,和[])| |值|参数所对应的数值,用来确定参数所对应的数据,与参数结合使用来选择实体。| > 注: 每个参数只能出现一次 > 选择器内不能出现空格 ### 选择器名称 |名称|描述| |---|---| |p| 最近的玩家(type参数在此无效)| |a| 全部玩家(包括死去的玩家, type参数在此无效)| |r| 随机实体(默认为玩家)| |e| 所有实体(包括玩家)| |s| 执行者(实体,当执行者不符合要求时则不选择任何实体)| ### 参数 格式: 参数名=数值 文字类的数值前加上!则代表选择所有非该数值的目标 数值不能出现小数。 |名称|描述| |---|---| |x,y,z|以该坐标作为**判定的起始点**(默认为执行坐标)<br> 比如你填写x=1,y=1,而你执行命令的坐标是x=5,y=5,z=5,那么那个判定的起始点就是x=1,y=1,z=5<br> 如果**只是填写其中一个/两个参数**,**剩下的就会默认为执行坐标**(比如x=5,而执行坐标是100 5 200,那么那个判定的起始点就是 5 5 200)| |r,rm|离判定的起始点(参见上方x, y, z参数)的**距离** (r就是判定区域的**半径**,rm就是**不包括在**判定区域内的圆形半径)<br> 比如r=5就是选择所有在5格范围内的实体,rm=5就是选择所有5格范围外的实体<br> 比如@p[r=10,rm=3]就是离判定的起始点的距离小于等于10米,大于3米的最近玩家| |m|玩家的游戏模式<br> 0=生存,1=创造,2=冒险,3=旁观| |c|数量<br> 这个是根据选择顺序来选择的<br> 正数的话就是选择最先选择到的n个实体,负数就是选择最后选择到的n个实体<br> 所以请参见下方的选择优先规则<br> 比如@e[c=5]就是最近的5个实体,@e[c=-5]就是最远的5个实体<br><br>**重要**:当c=1、选择器名称不为`r`并且命令执行者的类型符合选择器选择到的实体类型,选择器将会选择执行者| |l,lm|经验等级,l是小于等于,lm是大于等于| |score_变量|该变量(objective)的**分数范围**(小于**等于**)| |score_变量_min|该变量(objective)的**分数范围**(大于**等于**)| |team|队伍名称(可以使用!表示不等于, 如team=!blue就是选择不在blue队伍里的)<br> team= 就是代表没有队伍的实体(比如@e[team=])<br> team=!就是代表有队伍的实体| |name|实体的名称(可以使用!表示不等于, 如name=!pca就是选择名称不是pca的实体)| |dx,dy,dz|长方体的范围<br> 由起始点(参见上方x, y, z参数)延伸出去(dx就是沿着x轴延伸的格数,如此类推。正数就向正的方向,负数就向负的方向,范围必定是完整的格子,没有任何偏移,即使执行位置不是整数)的范围内的实体<br> *注意: 只要实体的碰撞箱接触到这范围就会被选中,而不是看其坐标<br> ![dxdydz.png](https://box.kancloud.cn/c39b74901cb2a514779dccb393acf95e_400x350.png)| |rx,rxm|实体垂直朝向(看的方向)<br> 0:水平;-90:向上;90:向下<br> rx:最大的角度;rxm:最小的角度<br>只会视乎角度的整数部分, 比如实体的实际方向是1.1, rx=1,rxm=0和rx=2,rxm=1都会选择到那个实体<br>当rx>rxm的时候, 选择到的角度范围就是rx-rxm;<br> 当rx<rxm的时候, 范围就会断开, 也就是上一个情况的相反, 详见下方例子| |ry,rym|实体水平朝向(看的方向)<br> 0:+Z方向;90:-X方向;180(-180):-Z方向;-90:+X方向<br> (可以使用大于180的度数)<br> ry:最大的角度;rym:最小的角度(如ry=50, rym=0就是50度的范围;ry=0, rym=50就是310度的范围)<br>当ry>rym, 选择到的角度范围=ry-rym;<br> 当rym>ry, **选择到不到**的角度范围就是ry-rym, 也就是上一个情况的相反, 详见下放例子<br> ![rxry.png](https://box.kancloud.cn/38d311cbc52f43cc95e7b5f73c106b46_400x400.png)| |type|实体种类(所有summon的实体种类+player。可以使用!表示不等于,如type=!player就是所有不是玩家的实体)<br> type=!lightning_bolt则代表所有类型的实体(对@r相当有用)| |tag|选择拥有此标签的实体,<br> 在数值前添加"!"将只选择不拥有此标签的实体,<br> 提供空的标签名将选择所有没有标签的实体,<br> 只填写“!”将选择任何拥有标签的实体。<br> 注意: 只能检查一个tag| ## 空间限制 如果选择器里有任何关于坐标的参数(比如r/rm/dx),那个参数的作用范围就是执行的世界(其他世界的不会被选择到) 如果那个选择器里同时有dx/dy/dz和r/rm,那么选择到的范围就是dx/dy/dz和r/rm重叠的范围 如果那个选择器里有dx/dy/dz任何一个/两个,那么剩余的会默认为0 > 关于死去的玩家: > 死去的玩家能够被`@a`选择器选择到,然而当我们加入了任何空间限制后就无法选择 > ~~故此我们认为死去的玩家是存在于第四维的【严肃脸】~~ ## 选择顺序 选择器会优先选择在执行的世界的实体/玩家(先选择最近的实体,当那些实体的距离一样时,它就会优先选择存在最久的),然后就是别的世界距离你现在坐标最近的实体 ## 常见错误 + 重复的选择器参数,比如两个type + 以为score_变量名称=数值代表选择分数=数值的实体,然而事实是选择分数小于等于数值的实体 + 大小写/全型半型错误。实际上那些参数的名称都是小写,而那些数值也是大小写敏感的 + 把实体NBT当作选择器参数一样写,然而选择器参数就那几个,NBT并不是选择器参数,选择器参数也不是NBT + 以为物品名称就是它扔出来之后的名称,然而并不是(原因:物品名称的NBT是 **{Item:{tag:{display:{Name:名称}}}}**,而实体名称的NBT是 **{CustomName:名称}**) + 逻辑相关错误,比如在执行这个指令的时候分数不可能在指定范围内 + @a写成@e[type=player],或者是@p写成@a[c=1]。严格来说并不是错误,然而这个是不好的习惯 因为这样子你的命令可读性就会减低,而且那个命令长度会增加,不好写 + 开括号之后需要关括号,比如 **@e[type=armor_stand.r=3** 就会判断为@e,相差会很远 ## 特殊情况 + c=1时,MC会有特别的选择实体方法。比如牌子点击的话就会选择点击者(尽管点击者未必与执行坐标,也就是牌子的位置最近),或者UUID碰撞/因特殊原因无法选择时能选择到该实体。然而注意,要使用此功能的话请不要填写其他参数,否则可能会导致MC不采取此方法选择实体 ## 例子 选择一个距离执行点5格以外,最近的实体 ``` @e[rm=5,c=1] ``` --- 选择所有变量(objective) X分数大于50、小于100,变量Y分数大于等于-200,小于等于0,目标Z分数等于200的实体 ``` @e[score_X_min=51,score_X=99,score_Y_min=-200,score_Y=0,score_Z_min=200,score_Z=200] ``` --- 选择随机5个实体 ``` @r[c=5,type=!lightning_bolt] ``` --- 选择ry=0至ry=90的实体(0≤ry≤90) ![0-90](https://box.kancloud.cn/3ed124d6fcf5dbf61da856b10a59f6f6_363x361.png) ``` @e[ry=90,rym=0] ``` --- 选择ry=90至ry=0的实体(0≤ry≤90) ![90-0](https://box.kancloud.cn/ecf12c4ba4c39db56232bf1492acd0fc_363x361.png) ``` @e[ry=0,rym=90] ``` --- 选择rx=20至rx=-20的实体(-20≤rx≤20) ![-20-20](https://box.kancloud.cn/1be9af3656606cbe629e61fa4e6e59fb_181x324.png) ``` @e[rx=20,rxm=-20] ``` --- 选择rx>=20和rx<=-20的实体(rx≤-20 or rx≥20) ![-20-20](https://box.kancloud.cn/632a00b52a869cb1dff9491228c9aa1a_181x324.png) ``` @e[rxm=20,rx=-20] ```