integration/modules/NEIHelpers(nei-helpers)

覆盖范围

appeng.integration.modules.NEIHelpers 包,17 个 .java 文件 —— integration/ 下第三大的子包(仅次于 waila/ 的 22)。

实测:find integration/modules/NEIHelpers -name '*.java' | wc -l = 17。

17 个类全表

类 基类 / 接口 注册点(modules/NEI.java)
NEIAEShapedRecipeHandler extends TemplateRecipeHandler init() :133
NEIAEShapelessRecipeHandler extends TemplateRecipeHandler init() :134
NEIInscriberRecipeHandler extends TemplateRecipeHandler init() :135
NEIWorldCraftingHandler implements ICraftingHandler, IUsageHandler init() :136
NEIGrinderRecipeHandler extends TemplateRecipeHandler init() :142(受 AEFeature.GrindStone 门控)
NEIFacadeRecipeHandler extends TemplateRecipeHandler init() :146(受 AEFeature.Facades + EnableFacadeCrafting 门控)
NEICellViewHandler implements IUsageHandler init() :138
NEIPatternViewHandler implements IUsageHandler init() :139
NEIOreDictionaryFilter implements ItemFilter.ItemFilterProvider init() :132
NEIAEBookmarkContainerHandler implements IBookmarkContainerHandler init() :150(GuiSkyChest)
NEIAETerminalBookmarkContainerHandler implements IBookmarkContainerHandler init() :153 / :156 / :159 / :162 / :165(5 个 GUI)
NEIGuiHandler extends INEIGuiAdapter init() :130
TerminalCraftingSlotFinder implements IStackPositioner —
NEICellSearchFilter implements SearchTokenParser.ISearchParserProvider —
NEICraftingHandler implements IOverlayHandler —
NEIInputHandler implements IContainerInputHandler —
NEISearchField 无(工具类) —

⚠️ 后 5 个在 init() 里没有 addNewAttunement 式的显式注册行, 它们的挂载点在本分片外(客户端 GUI / 输入处理链)。

五个「NEI 侧基类」与「AE2 侧基类」

继承的 NEI 基类 派生的 AE2 类 数量
codechicken.nei.api.TemplateRecipeHandler 6 个 recipe handler 6
codechicken.nei.api.IUsageHandler NEICellViewHandler / NEIPatternViewHandler 2
codechicken.nei.api.IBookmarkContainerHandler 2 个 bookmark handler 2
codechicken.nei.api.INEIGuiAdapter NEIGuiHandler 1
codechicken.nei.api.ItemFilter.ItemFilterProvider NEIOreDictionaryFilter 1

即 6 / 17 走 TemplateRecipeHandler 路线 —— 这是本包的主体。

唯一的双重角色类

NEIWorldCraftingHandler 同时 implements ICraftingHandler 和 IUsageHandler: 既作为配方来源,又作为「合成某物品需要什么」的查询源。 其余 recipe handler 都只继承 TemplateRecipeHandler(只做配方侧)。

反射 vs 直接继承

⚠️ 本包 17 个类全部直接 import 并继承 codechicken.nei.* 类型 (如 TemplateRecipeHandler、IUsageHandler、IOverlayHandler)。

这与 modules/NEI.java 的做法相反:后者在构造期用 Class.forName + getDeclaredMethod 反射探测 API (NEI.java:101-173),只有 API.addKeyBind(:123)与 GuiContainerManager.addTooltipHandler(:167)等少数几处直接调用。

安全性一致:整个 NEI 目标在 NotEnoughItems 未装时 FAILED, NEI.class 及其 17 个 helper 都不被加载 (integration/IntegrationNode.java:82)。

配方 handler 与 AEFeature 的门控关系

handler 门控 缺失时后果
NEIGrinderRecipeHandler AEFeature.GrindStone NEI 里看不到磨石配方
NEIFacadeRecipeHandler AEFeature.Facades 且 AEFeature.EnableFacadeCrafting NEI 里看不到 facade 配方

其余 4 个 recipe handler 无条件注册。

对应条目:AEFeature.GrindStone、 AEFeature.Facades、 AEFeature.EnableFacadeCrafting。

快捷键 gui.pattern_view = P

modules/NEI.java:123 的 API.addKeyBind("gui.pattern_view", Keyboard.KEY_P) 使得配方视图 GUI 可用。相关 GUI 在 appeng/client/gui/(不在本分片): GuiPatternTerm(配方终端)、 GuiPatternTermEx(扩展配方终端)、 GuiOptimizePatterns。

跨 mod 物品不混入

本包所有 handler 的输入是 AE2 的 PatternItemStack / CraftingPatternDetails(AE2 类型),输出是 NEI 的 ItemStack。 两者在 TemplateRecipeHandler 的 getIngredients() / getCraftingResult() 边界上转换。

⚠️ 本包不构造 NEI 的物品,只读 AE2 的物品再转成 NEI 的显示形式。

相关条目