跳转至

目标选择器

目标选择器(Target Selector)是命令系统中用于动态选择玩家或实体的语法结构。目标选择器使命令能够根据位置、类型、标签、分数、名称等条件选中目标,而不必写死具体玩家名或实体唯一标识。

概述

目标选择器以@开头,后接选择器变量,并可在方括号中附加选择器参数。例如,@e[type=minecraft:zombie,r=10]表示选择执行位置10格范围内的僵尸实体。

目标选择器的结果受命令执行上下文影响。命令的执行位置、执行维度、执行者和朝向都可能改变选择结果,尤其在使用距离、坐标和局部坐标相关参数时更为明显。

选择器变量

常见选择器变量包括:

选择器 作用
@a 所有玩家
@p 最近的存活玩家
@r 随机存活玩家;指定type参数时也可以用于随机实体
@e 所有实体
@n 最近的实体
@s 当前执行者自身
@initiator NPC交互的玩家

不同命令参数对目标类型有不同要求。有些参数只接受玩家,有些可以接受任意实体,有些只允许单个目标。

选择器参数

选择器参数(Selector Parameter)用于缩小或排序目标选择器的结果。常见参数包括typenametagfamilyscoresxyzrrmc等。

参数可以组合使用。例如,@e[type=minecraft:sheep,tag=marked,c=1]会从带有marked标签的绵羊中选择一个目标。参数之间通常是逻辑与关系,即目标必须同时满足所有条件。

参数 作用
xyz 指定选择器的搜索起点。未指定的轴使用命令当前执行位置。
rrm 按球形距离限制目标。r是最大距离,rm是最小距离。
dxdydz 按长方体区域限制目标。任意一个体积参数存在时,未指定的体积轴按0处理。
c 限制最多返回的目标数量,并受选择器排序规则影响。
type 按实体标识符筛选目标。可以使用!排除指定实体类型。
m 按玩家游戏模式筛选目标。
tag 按实体标签筛选目标。可以重复使用,也可以使用!排除标签。
name 按玩家名或实体自定义名称筛选目标。
family 族(Family)筛选目标。
scores 按记分板分数筛选目标,可使用N....NN..M表示范围。
llm 按玩家经验等级筛选目标。
rxrxm 按俯仰角筛选目标。
ryrym 按偏航角筛选目标。

距离参数与体积参数都会受xyz指定的搜索起点影响。rrm按照距离起点的球形范围筛选目标,而dxdydz按照从搜索起点延伸出的长方体区域筛选目标。体积选择会检查实体的击中箱(Hitbox),因此大型实体即使只有一部分击中箱进入区域,也可能被选中。

c参数不会单独定义排序方式,只会截取排序后的结果。@a@p@e通常按距离从近到远排序,@r按随机顺序排序,@p@r默认只返回一个目标。在需要稳定结果时,应同时使用类型、标签、分数或区域条件,而不应只依赖默认排序。

选择结果

目标选择器可能返回零个、一个或多个实体。若命令参数要求单个目标而选择器返回多个目标,命令可能报错或只按规则取其中一个;若选择器没有匹配目标,命令也可能执行失败。

目标选择器的排序和数量限制会影响最终结果。使用c限制数量时,应同时理解默认排序规则,必要时使用更明确的筛选条件避免结果不稳定。

开发意义

目标选择器是命令系统实现逻辑判断、批量操作和实体管理的基础。它与记分板、标签、实体族、坐标和执行上下文结合后,可以表达复杂的地图逻辑。