本条基于 Minecraft 1.20.1 + Forge,Mojang 映射名。
EntitySelector(net.minecraft.commands.arguments.selector.EntitySelector)是 @e、@a、@p 等目标选择器解析后的对象,findEntities() 负责到世界里查找实体。
say @e 链路
SayCommand → MessageArgument 解析消息里的选择器 → EntitySelector.findEntities(source) → 把实体名拼进消息。
与实体储存的关系
@e默认:不限维度、不限数量、过滤条件为Entity::isAlive。- 指定 UUID:逐个维度调用
ServerLevel.getEntity(UUID),最终查 EntityLookup 的 UUID Map。 - 不带范围:
ServerLevel.getEntities(EntityTypeTest, Predicate, List, int)→ LevelEntityGetterAdapter → 遍历 EntityLookup 的 Int2ObjectMap。 - 带
dx/dy/dz或distance:先算出AABB,改走EntitySectionStorage按区块段查询,且只查执行者所在维度。 - 不限维度时遍历
server.getAllLevels()中的每个 ServerLevel。
备注
它不读 EntityTickList:停止 tick 的实体只要还在 EntityLookup 里且 isAlive() 为真,仍会被 @e 选中。