合成工作台集成
基本信息
| 属性 | 值 |
|---|---|
| 类型 | 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 按其内部默认值摆放,可能错位。
相关条目
- 配置文件 - 该 addon 无独立配置分类
- NEI 接口实现总表 - 本 addon 实现 0 个接口
- 叠加层与 GUI 挂钩 - 复用的
DefaultOverlayHandler与真正的IOverlayHandler死代码 - Addon 架构与加载顺序 -
craftingTables.size() > 0的激活判定