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。

相关条目