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 的显示形式。