Items Containing Aspect Handler
基本信息
| 属性 | 值 |
|---|---|
| 类型 | NEI Recipe / Usage Handler |
| 源码类 | com.gtnewhorizons.aspectrecipeindex.nei.ItemsContainingAspectHandler |
| 基类 | TemplateThaumHandler(→ NEI TemplateRecipeHandler) |
| Overlay ID | thaumcraft.items_containing_aspect |
| 界面名 | aspectrecipeindex.items_containing_aspect.title = “Items Containing Aspect” |
| 背景纹理 | aspectrecipeindex:textures/gui/itemstack_background.png(163×74) |
| IMC 关联物品 | Thaumcraft:ItemResearchNotes(handler 高度 147);催化剂 Thaumcraft:ItemThaumometer、Thaumcraft:blockStoneDevice |
功能:在 NEI 中查看"哪些已扫描物品含有某个元素",按含量从高到低分页展示。这是模组最核心的功能,也是名字里"Index"的实际落点。
加载时机与数据源
loadCraftingRecipes(ItemStack):仅当输入是 ItemAspect、且 Util.shouldShowAspect(aspect) 为真、且结果列表非空时生成页面。
loadCraftingRecipes(String outputId, ...) 两条分支:
outputId等于自己的 overlay → 遍历Aspect.aspects.values(),逐个过滤shouldShowAspect后生成(未发现的continue)。outputId等于"item"→ 转发给ItemStack版本。
数据源与分页机制详见 元素配方索引机制。
页面结构
| 元素 | 值 |
|---|---|
| 每页物品数 | 36(STACKS_COUNT) |
| 网格 | 9 列 × 4 行,间距 18 px |
| 结果槽 | 元素物品,位于 (OUTPUT_X, 5) = (75, 5) |
| 背景板起点 | START_X = 75 - 163/2 + 8(整除后落在 1 附近),START_Y = 116 - 74 = 42 |
| 前置研究 | ResearchCategories.getResearch("ASPECTS"),恒定标记为已完成 |
排序:按 stackSize(= 该物品的该元素含量)降序。
加载进度显示
drawBackground 在 ThaumcraftHooks.isDataLoaded() 为假时绘制 lang 键 aspectrecipeindex.items_containing_aspect.still_load(“Still loading… (%s/%s)”),取值为 getItemsLoaded() / getTotalToLoad(),位置 (2, 32),颜色 text。
绘制前会先 GL11.glColor4f(1,1,1,1) 重置颜色状态,避免上一帧的混合状态污染。
onUpdate() 在数据未加载完时,每 200 tick 用新的 findContainingItemStacks 结果重建第一页及其后续分页(详见 元素配方索引机制)。
Tooltip 增强
handleItemTooltip 覆写:鼠标悬停的物品若已被当前玩家扫描,则往 tooltip 里追加一个 ItemsTooltipLineHandler,标题为 aspectrecipeindex.items_containing_aspect.aspect_list(“Aspects”),内容是该物品的全部元素物品栈(stackSize = 含量,Integer.MAX_VALUE 上限,可换行)。
带缓存:aspectsTooltipStack 记录上次计算的物品栈,相同则复用 aspectsTooltipLineHandler;stack 为 null 时双双清空。
这也是 Mixin 里 ClientTickEventsFMLMixin 要做矩形排除的原因——避免这条 tooltip 与 Thaumcraft 自己的元素渲染重复。
drawExtras 行为
只调 drawExtras(recipe)(父类实现),不额外绘制。父类会画 “See All” 标签与研究控件(受 showResearchKey 控制)。该 handler 的 drawForeground 也仅转发到 drawExtras。
相关条目
- 元素配方索引机制 - 完整的数据流、分页与进度机制
- Mixin 与 LATE 注入 - 进度数据的来源
- Aspect 物品 - 输入与输出物品
- 配置项 -
showUndiscoveredAspectRecipes门控 - Aspect Combination Handler - 同为元素维度的 handler