本条基于 Minecraft 1.20.1 + Forge,Mojang 映射名。
LevelEntityGetterAdapter(net.minecraft.world.level.entity.LevelEntityGetterAdapter)是 LevelEntityGetter 接口的原版实现,是外部代码查询“世界里有哪些实体”的统一入口。
与实体储存的关系
- 本身不存实体,只持有两个引用:
visibleEntities(EntityLookup)和sectionStorage(EntitySectionStorage)。 - EntityLookup 内部是按 ID 的 Int2ObjectMap 和按 UUID 的 Map,是实体的主表。
get(int)、get(UUID)、getAll()、按类型遍历 → 走visibleEntities。- 按
AABB范围查询 → 走sectionStorage(按 16³ 区块段分组)。 - 服务端由
PersistentEntitySectionManager创建,客户端由TransientEntitySectionManager创建,分别通过 ServerLevel /ClientLevel的getEntities()暴露。
所在链路
- /forge entity list:EntityCommand →
getEntities().getAll()→ Iterable.forEach - say @e:EntitySelector →
ServerLevel.getEntities(EntityTypeTest, ...)→get(EntityTypeTest, consumer) - LevelRenderer:LevelRenderer →
ClientLevel.entitiesForRendering()→getAll()
备注
三条链路都经过它,所以从 EntityLookup 中移除的实体,在指令、实体列表和渲染中都会“消失”;但它不管 tick,tick 由 EntityTickList 单独管理。