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 字符集合(例如 {"*"}) |
渲染流程
parseKeysToBlockInfoMap把keys→Char2ObjectMap<BlockMeta>。parseStructureToArray解析成String[][],校验每行长宽一致 + 每字符合法。- 构造
GeneratedModelStructure(structure, blockInfoMap, transpose, skipHalfOffset)。 - 渲染时先
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.javasrc/main/java/glowredman/amazingtrophies/model/complex/GeneratedModelStructure.javasrc/main/java/glowredman/amazingtrophies/model/complex/RenderHelper.javasrc/main/java/glowredman/amazingtrophies/model/complex/RenderFacesInfo.javasrc/main/java/glowredman/amazingtrophies/model/complex/CustomRenderBlocks.java