合成工作台集成

基本信息

属性 值
类型 GUI 叠加层批量注册(Crafting Tables addon)
@Mod 类 net.bdew.neiaddons.crafting.AddonCraftingTables,modid NEIAddons|CraftingTables
侧 仅客户端(checkSide(side) { return side.isClient(); })
NEI 接口 0 个——只用 API 静态方法,不 implements 任何接口
开关 只有 Addons 的 Crafting Tables(默认 true),无独立配置分类
无外部 mod 依赖 getDependencies() 继承基类返回空数组;8 个目标 mod 逐个单独探测

8 个目标工作台

init() 逐条调 tryLoadTableClass(modId, className, humanName)。每条的流程是 verifyModVersion(modId) → 成功则 Utils.getAndCheckClass(className, GuiContainer.class) 并加入 craftingTables 集合 → 打 "Registered <humanName>";mod 缺失打 "Not registering <humanName>";反射异常被 catch (Throwable e) 兜住并打 "Registering <humanName> failed"。

# modid 类名 日志里的显示名
1 EE3 com.pahimar.ee3.client.gui.inventory.GuiPortableCrafting EE3 Minium Stone
2 BuildCraft|Factory buildcraft.factory.gui.GuiAutoCrafting BC Autorcrafting Table
3 powersuitaddons com.qmxtech.powersuitaddons.client.PortableCraftingGui MPSA In-Place Assembler
4 ProjectE moze_intel.projecte.gameObjs.gui.GUIPhilosStone ProjectE Philosopher Stone
5 BiblioCraft jds.bibliocraft.gui.GuiFancyWorkbench BiblioCraft Fancy Workbench
6 RIO remoteio.client.gui.GuiIntelligentWorkbench RemoteIO Intelligent Workbench
7 Railcraft mods.railcraft.client.gui.GuiCartWork Railcraft Work Cart
8 GalacticraftAmunRa de.katzenpapst.amunra.client.gui.GuiCrafter Amun-Ra Crafting Table

8 个 modid 全部是 1.7.10 时代的老 mod,在 GTNH 里多数已被替代或移除。逐条 verifyModVersion 意味着未安装的项只是不注册,不会报错——所以这个 addon 在现代 GTNH 上很可能一个工作台都注册不到,craftingTables.size() == 0,addon 保持 inactive。

激活条件特殊

它是唯一不靠 active = true 收尾的 addon:

if (craftingTables.size() > 0) {
    logInfo("%d crafting tables registered", craftingTables.size());
    active = true;
}

因此在「Addons 的 Crafting Tables=true 但目标 mod 一个都没装」的组合下,.cfg 开关是开的、addon 却没激活,loadClient() 不执行,什么也不发生。

实际注册的 NEI 东西

loadClient() → AddonCraftingTablesClient.load(),对集合里每个类做两件事:

NEI API 参数
API.registerGuiOverlay <工作台 GuiContainer 类>, "crafting"
API.registerGuiOverlayHandler <工作台 GuiContainer 类>, new DefaultOverlayHandler(), "crafting"

DefaultOverlayHandler 是 NEI 自带的类(codechicken.nei.recipe.DefaultOverlayHandler),本 mod 只是复用它,让这些工作台界面能显示当前配方的 2D 合成叠加层。"crafting" 是 NEI 的内置 handler 名,意味着叠加层走的是标准 3×3 网格布局。

因此这个 addon 没有任何自定义叠加层类——它不 implements IOverlayHandler。真正实现 IOverlayHandler 的 utils/CustomOverlayHandler 是死代码,见 叠加层与 GUI 挂钩。

AddonCraftingTablesClient 是包私有类(class AddonCraftingTablesClient,无 public 修饰符),只有 load() 一个静态方法。

「工作台」判定宽松

tryLoadTableClass 只断言目标类 extends GuiContainer,不检查它是否真的是合成界面。所以任何被列进来的 GUI 都会拿到 "crafting" 叠加层——包括第 7 项 GuiCartWork(Railcraft 的工作车,容器里是车而不是 3×3 网格)和第 3 项 MPSA 的就地组装器。这类界面上的叠加层位置会由 DefaultOverlayHandler 按其内部默认值摆放,可能错位。

相关条目