Entity Trophy Model

基本信息

属性 值
model ID entity
父类 PedestalTrophyModelHandler
注册处 ClientHandler.registerTrophyModelHandlers()

配置字段

字段 类型 默认 含义
entity 字符串 必填 实体名或全限定类名(EntityList.stringToClassMapping 优先,回退 Class.forName)
yOffset double -0.1875 模型上下偏移(沿 Y,相对底座顶面)
yawOffset float 180.0 模型初始偏航
scale float 0.34375 整体缩放(11/32,约 0.34 倍)
nbt SNBT 字符串 "{}" 渲染前应用到实体的 NBT(用于伪造特殊属性)

实体实例化:clazz.getConstructor(World.class).newInstance((World) null),再调用 entity.readFromNBT(compound) 应用 NBT。无 World 多用于渲染,但若实体依赖 World 内部状态可能出现 NPE。

渲染细节

先 super.render(...) 渲染底座,然后:

  1. 复制 BossStatus 当前状态(bossName, hasColorModifier, healthScale, statusBarTime)——若 entity 实现 IBossDisplayData,渲染结束后还原这些字段,避免影响实际 boss bar。
  2. 旋转 = yawOffset - 22.5f * rotation。
  3. 通过 RenderManager.instance.getEntityRenderObject(entity) 获取 Render<? extends Entity> 并 doRender(...)。
  4. finally 块中 entity.setWorld(null),断开实例与世界的关联。

对 EntityLivingBase 与 EntityDragon 还会联动 renderYawOffset / prevRenderYawOffset / rotationYawHead / prevRotationYawHead(及龙身 ringBuffer),保证完整跟随旋转。

getRenderBoundingBox

按 scale * max(width, height) 推算体积——实体比底座大很多,必须扩 Box 避免被视锥剔除。

JSON 示例

在底座上展示钻石剑当作奖杯:

{
  "id": "creeper_head",
  "condition": {...},
  "model": {
    "type": "entity",
    "entity": "Creeper",
    "scale": 0.5,
    "yOffset": -0.2
  }
}

相关条目

源码

src/main/java/glowredman/amazingtrophies/model/EntityTrophyModelHandler.java