目标选择器¶
目标选择器(Target Selector)是命令系统中用于动态选择玩家或实体的语法结构。目标选择器使命令能够根据位置、类型、标签、分数、名称等条件选中目标,而不必写死具体玩家名或实体唯一标识。
概述¶
目标选择器以@开头,后接选择器变量,并可在方括号中附加选择器参数。例如,@e[type=minecraft:zombie,r=10]表示选择执行位置10格范围内的僵尸实体。
目标选择器的结果受命令执行上下文影响。命令的执行位置、执行维度、执行者和朝向都可能改变选择结果,尤其在使用距离、坐标和局部坐标相关参数时更为明显。
选择器变量¶
常见选择器变量包括:
| 选择器 | 作用 |
|---|---|
@a | 所有玩家 |
@p | 最近的存活玩家 |
@r | 随机存活玩家;指定type参数时也可以用于随机实体 |
@e | 所有实体 |
@n | 最近的实体 |
@s | 当前执行者自身 |
@initiator | 与NPC交互的玩家 |
不同命令参数对目标类型有不同要求。有些参数只接受玩家,有些可以接受任意实体,有些只允许单个目标。
选择器参数¶
选择器参数(Selector Parameter)用于缩小或排序目标选择器的结果。常见参数包括type、name、tag、family、scores、x、y、z、r、rm、c等。
参数可以组合使用。例如,@e[type=minecraft:sheep,tag=marked,c=1]会从带有marked标签的绵羊中选择一个目标。参数之间通常是逻辑与关系,即目标必须同时满足所有条件。
| 参数 | 作用 |
|---|---|
x、y、z | 指定选择器的搜索起点。未指定的轴使用命令当前执行位置。 |
r、rm | 按球形距离限制目标。r是最大距离,rm是最小距离。 |
dx、dy、dz | 按长方体区域限制目标。任意一个体积参数存在时,未指定的体积轴按0处理。 |
c | 限制最多返回的目标数量,并受选择器排序规则影响。 |
type | 按实体标识符筛选目标。可以使用!排除指定实体类型。 |
m | 按玩家游戏模式筛选目标。 |
tag | 按实体标签筛选目标。可以重复使用,也可以使用!排除标签。 |
name | 按玩家名或实体自定义名称筛选目标。 |
family | 按族(Family)筛选目标。 |
scores | 按记分板分数筛选目标,可使用N..、..N或N..M表示范围。 |
l、lm | 按玩家经验等级筛选目标。 |
rx、rxm | 按俯仰角筛选目标。 |
ry、rym | 按偏航角筛选目标。 |
距离参数与体积参数都会受x、y、z指定的搜索起点影响。r和rm按照距离起点的球形范围筛选目标,而dx、dy、dz按照从搜索起点延伸出的长方体区域筛选目标。体积选择会检查实体的击中箱(Hitbox),因此大型实体即使只有一部分击中箱进入区域,也可能被选中。
c参数不会单独定义排序方式,只会截取排序后的结果。@a、@p和@e通常按距离从近到远排序,@r按随机顺序排序,@p和@r默认只返回一个目标。在需要稳定结果时,应同时使用类型、标签、分数或区域条件,而不应只依赖默认排序。
选择结果¶
目标选择器可能返回零个、一个或多个实体。若命令参数要求单个目标而选择器返回多个目标,命令可能报错或只按规则取其中一个;若选择器没有匹配目标,命令也可能执行失败。
目标选择器的排序和数量限制会影响最终结果。使用c限制数量时,应同时理解默认排序规则,必要时使用更明确的筛选条件避免结果不稳定。
开发意义¶
目标选择器是命令系统实现逻辑判断、批量操作和实体管理的基础。它与记分板、标签、实体族、坐标和执行上下文结合后,可以表达复杂的地图逻辑。