Aspect Combination Handler
基本信息
| 属性 | 值 |
|---|---|
| 类型 | NEI Recipe / Usage Handler |
| 源码类 | com.gtnewhorizons.aspectrecipeindex.nei.AspectCombinationHandler |
| 基类 | TemplateThaumHandler |
| Overlay ID | thaumcraft.aspects |
| 界面名 | aspectrecipeindex.aspect_combination.title = “Aspect Combination” |
| IMC 关联物品 | Thaumcraft:blockTable:2(研究桌,handler 高度 43) |
功能:查询元素的父元素(是复合元素则显示 成分A + 成分B = 结果,是原始元素则显示 “Primal”),以及"某元素能参与合成出哪些新元素"。
加载路径
| 方法 | 条件 | 行为 |
|---|---|---|
loadCraftingRecipes(ItemStack) |
输入是 ItemAspect 且 shouldShowAspect |
为该元素建一个 AspectCombinationRecipe |
loadCraftingRecipes(String, Object...) |
outputId == overlay |
遍历 Aspect.aspects.values(),逐个过滤可见性 |
| 同上 | outputId == "item" |
转发到 ItemStack 版本 |
loadUsageRecipes(ItemStack) |
输入是 ItemAspect 且 shouldShowAspect |
遍历 Aspect.getCompoundAspects(),凡 ArrayUtils.contains(components, 输入元素) 且该复合元素也可见,则为其建配方 |
loadUsageRecipes(String, Object...) |
inputId == "item" |
转发 |
| 同上 | inputId == overlay |
转发给 loadCraftingRecipes(而非 usage)——即在 overlay 下用法的"下一页"会回到配方加载 |
可见性判定为 Util.shouldShowAspect(aspect),受 showUndiscoveredAspectRecipes 门控。
界面布局
原始元素(aspect.isPrimal()):
- 只有结果,位置
(OUTPUT_X, 5)=(75, 5)。 drawBackground在(84, 25)居中绘制 lang 键tc.aspect.primal。
复合元素:
- 结果在
(75 - 33, 13)=(42, 13)。 - 两个成分分别在
(75, 13)与(75 + 33, 13)=(108, 13)。 - 背景绘制时先
GL11.glTranslatef(-33, 8, 0)整体左移上移,再在(68, 17)画"="、(100, 17)画"+",最后平移回去((33, -8, 0))。
成分取自 aspect.getComponents(),固定索引 components[0] 与 components[1]。
drawExtras 特例
drawExtras 覆写:只对第 0 个配方调用父类实现(源码注释 “Only show these for the first result to limit clutter”)。因此翻页时研究控件与 “See All” 标签只在第一页出现。
前置研究
每个配方都挂 ResearchCategories.getResearch("ASPECTS"),且恒定标记为已完成(true)——这条配方本质是"知识说明"而非合成步骤。
相关条目
- Aspect 物品 - 输入与输出物品
- 配置项 -
showUndiscoveredAspectRecipes - Items Containing Aspect Handler - 另一个元素维度 handler
- IMC 注册消息 - 研究桌催化剂注册