实体注册表:查看版本 v1
由 朝武芳乃 于 2026-10-04 01:17 保存 · 1694 字节
''本条基于 Minecraft 1.20.1 + Forge,Mojang 映射名。''
'''实体注册表'''是登记所有'''实体类型'''(<code>EntityType</code>)的注册表。注意:它登记的是“类型”,不是世界里的实体实例。
== 位置 ==
* 原版:<code>BuiltInRegistries.ENTITY_TYPE</code>(<code>Registry<EntityType<?>></code>),键是 <code>minecraft:zombie</code> 这样的 <code>ResourceLocation</code>。
* Forge:<code>ForgeRegistries.ENTITY_TYPES</code>(<code>IForgeRegistry<EntityType<?>></code>),模组一般用 <code>DeferredRegister.create(ForgeRegistries.ENTITY_TYPES, MODID)</code> 注册。
* 注册阶段结束后注册表会冻结,运行时无法再正常添加新类型。
== EntityType 里有什么 ==
实体工厂(<code>EntityType.EntityFactory</code>)、碰撞箱尺寸、分类(<code>MobCategory</code>)、追踪距离与更新间隔等。生成实体时由 <code>EntityType.create(level)</code> 调用工厂创建实例。
== 与实体储存的区别 ==
* 实体实例存放在 [[EntityLookup]]、[[EntityTickList]] 等容器中(见 [[ServerLevel]]),与注册表无关;从注册表里拿不到“世界上有哪些实体”。
* 读档时,实体 NBT 里的 <code>id</code> 会先在注册表中查到 <code>EntityType</code>,再创建实体并加入上述容器。
== 所在链路 ==
* [[EntityCommand]](/forge entity list):用 <code>ForgeRegistries.ENTITY_TYPES.getKey(e.getType())</code> 把实体按类型名分组,过滤器匹配的也是注册表的键。
* [[EntitySelector]]:<code>@e[type=...]</code> 会把类型名解析为 <code>EntityType</code>,再作为 <code>EntityTypeTest</code> 过滤实体。
其他版本
- v1 · 2026-10-04 01:17 · 朝武芳乃 · 新建条目