Mmc秒杀圈百科 

EntitySelector

由 朝武芳乃管理员 最后编辑于 2026-10-04 01:00 · 当前版本 v1
标签:技术正经内容forge
你尚未登录。登录后可编辑本页与创建新条目 —— 登录 或 注册账号。

本条基于 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 选中。

你对本条的回应 · 登录后可表态

讨论(0)

讨论不进入条目正文的版本历史,适合提出修改建议、指出问题或补充来源。
还没有人讨论这个条目。你可以提出修改建议、指出问题或补充来源。

发表话题

请先 登录 后再参与讨论。