Complex Trophy Model

基本信息

属性 值
model ID complex
父类 PedestalTrophyModelHandler
注册处 ClientHandler.registerTrophyModelHandlers()
资源需求 调 model/complex/RenderHelper.INSTANCE,可选 RenderHelperVBO(AmazingTrophies.enableVBO 为 false 则禁用 VBO)

强大但复杂的渲染方案:用字符拼图(与类红石 CPU 设计风格相似)在奖杯方块上渲染出任意方块结构。

配置字段

字段 类型 默认 含义
keys JSON 对象 必填 把字符映射到方块注册名:{ "A": "minecraft:stone", ... }
metadata JSON 对象 (缺省) 可选,按 key 指定 meta:<key> → meta 数值;范围 [0, 32767]
structure 字符串二维数组 必填 三维字符拼图——["AAA", ...];所有内层字符串必须等长,且每行字符都必须在 keys 集合或为空白
transpose bool false 是否转置结构(自动反转内部数组)
skipHalfOffset 字符集合 [] 不应用半像素偏移的 key 字符集合(例如 {"*"})

渲染流程

  1. parseKeysToBlockInfoMap 把 keys → Char2ObjectMap<BlockMeta>。
  2. parseStructureToArray 解析成 String[][],校验每行长宽一致 + 每字符合法。
  3. 构造 GeneratedModelStructure(structure, blockInfoMap, transpose, skipHalfOffset)。
  4. 渲染时先 super.render(...) 画底座,再:
    • 平移到 (x, y - 0.5 + trophyPedestalHeight, z)(y - 0.5 + 5/16)。
    • 先绕 Y 转 -90°,再按 rotation 绕 Y 转 22.5°(实际呈现"侧立"的字符拼图)。
    • 委托给 RenderHelper.INSTANCE.renderModel(model)。

getRenderBoundingBox

固定为 ±0.75 × +0.5 × ±0.75——复杂模型已被自动缩放到底座上方,外加旋转裕度。

JSON 示例

3x3x3 立方体(用 8 字符表示 8 角 + 1 透明或挖空格):

{
  "id": "crystal",
  "condition": {...},
  "model": {
    "type": "complex",
    "keys": {
      "A": "minecraft:stone",
      "B": "minecraft:diamond_block"
    },
    "metadata": {
      "B": 0
    },
    "structure": [
      [" AAA ", "AABAA", "AABAA", "AABAA", " AAA "],
      ["ABBBA", "B...B", "B...B", "B...B", "ABBBA"],
      ["ABBBA", "B...B", "B...B", "B...B", "ABBBA"],
      ["ABBBA", "B...B", "B...B", "B...B", "ABBBA"],
      [" AAA ", "AABAA", "AABAA", "AABAA", " AAA "]
    ],
    "transpose": true,
    "skipHalfOffset": ["A", "B"]
  }
}

注:内层数组必须等长;上方示例仅为说明。实际 "structure" 维度为 [5][5][3](行内层 → Y,列外层 → Z,第三层数组索引 → X)。

相关条目

源码

  • src/main/java/glowredman/amazingtrophies/model/complex/ComplexTrophyModelHandler.java
  • src/main/java/glowredman/amazingtrophies/model/complex/GeneratedModelStructure.java
  • src/main/java/glowredman/amazingtrophies/model/complex/RenderHelper.java
  • src/main/java/glowredman/amazingtrophies/model/complex/RenderFacesInfo.java
  • src/main/java/glowredman/amazingtrophies/model/complex/CustomRenderBlocks.java