neiaddons

[!INFO] Git Commit: 1dfa653 | Updated: 2026-09-24

NEI Addons(modid NEIAddons)是 bdew 为 Not Enough Items 写的扩展包,GTNH 1.7.10 维护分支。它自己不注册任何游戏内容——没有方块、物品、实体、附魔、维度或指令——全部功能都是给 NEI 增加配方页、搜索索引条目、GUI 叠加层和 tooltip。

一个 jar 里塞了 7 个 @Mod 容器(1 主 + 6 addon),主容器负责按配置逐个激活 addon,NEI 回调 IConfigureNEI.loadConfig() 时再让每个激活的 addon 注册自己的 NEI 扩展。

源码规模

属性 值
源文件 50 个(49 .java + 1 .scala)
目录 全部在 src/main/scala/net/bdew/neiaddons/(GTNH Scala 迁移布局,Java 文件也放在 scala 目录下)
唯一的 .scala forestry/MutationDumper.scala
根包 net.bdew.neiaddons
Minecraft 1.7.10,Forge 10.13.4.1614,channel stable
构建 com.gtnewhorizons.gtnhconvention 插件,build.gradle 仅 4 行
授权 MMPL 1.0

依赖

dependencies.gradle 只有三条,全部带 :dev classifier:

声明 坐标 作用域 作用
api com.github.GTNewHorizons:NotEnoughItems:2.8.145-GTNH:dev 硬依赖 7 个 NEI 接口的来源
implementation com.github.GTNewHorizons:ForestryMC:4.11.31:dev 软依赖 5 个遗传类 handler
implementation com.github.GTNewHorizons:waila:1.19.30:dev 软依赖 3 个 WAILA provider

⚠️ 本仓库没有 devOnlyNonPublishable 配置——grep -rn "devOnlyNonPublishable" --include=*.gradle --include=*.properties 在整个源码树零命中。GTNH 的软依赖惯例是用 :dev classifier 表达:这些依赖只存在于开发期 classpath,发布出去的 pom 会剔除它们。因此:

  • 发布版 jar 不声明 Forestry 与 Waila 为依赖,玩家必须自行安装。
  • 运行时安全靠两层反射 + 两层自检兜底:Utils.getAndCheckClass / Utils.getAndCheckStaicField 反射加载所有跨 mod 类;BaseAddon.getDependencies() + verifyModVersion() 在 preInit 阶段就判存在性与版本。
  • 因此哪个集成真正生效,取决于玩家实际装了谁,而不是 gradle 声明。

7 个 NEI 接口(本 wiki 的核心)

NEI 接口 实现类 状态
IConfigureNEI NEIAddonsConfig 生效
IRecipeHandler 6 个类,经 TemplateRecipeHandler 间接实现 生效
INEIGuiAdapter AppEngGuiHandler 生效
IContainerTooltipHandler DeveloperGuiHandler 生效但默认关闭
IOverlayHandler CustomOverlayHandler 死代码,无实例化点
ItemFilter ModItemFilter 死代码,无实例化点
IStackPositioner 由 CustomOverlayHandler 实例化 OffsetPositioner 使用 随死代码

6 个 addon 速查

addon modid 后缀 目标 mod 侧 产出
Applied Energistics 2 |AppEng appliedenergistics2 双端 AE2 界面 NEI 拖拽填装 + 1 条 C2S 包
Botany |Botany Botany 仅客户端 1 个花育种页
Crafting Tables |CraftingTables 8 个老 mod 仅客户端 8 类界面的合成叠加层
Developer Tools |Developer 无 仅客户端 槽位调试 tooltip(默认关闭)
Ex Nihilo |ExNihilo exnihilo + Waila 仅客户端 3 个 WAILA provider(非 NEI)
Forestry |Forestry Forestry 双端 5 个遗传类配方页 + 5 类搜索注入

本 mod 没有的东西(grep 证据)

在 src/main 下全量搜索,下列模式全部零命中文件:

模式 含义 命中
GameRegistry.registerBlock / registerBlock 方块注册 0
registerItem / new Item( / new Block( 物品注册 0
registerTileEntity / TileEntity extends TileEntity 0
EntityRegistry / @EntityHandler 实体 0
extends Block Block 子类 0
Enchantment 附魔 0
addChatCommand / CommandBase / ICommand 指令 0
new KeyBinding / KeyBinding / registerKeyBinding 热键 0(连 grep 都是 NO MATCH)
BiomeGen / WorldProvider / registerDimension 群系 / 维度 / 世界生成 0
Achievement 成就 0
Potion Buff / Debuff 0

⇒ 本 mod 没有方块、物品、实体、多方块结构、附魔、世界/维度、热键、Buff/Debuff、群系、结构、成就、物品效果、指令这 13 个维度中的任何一个。 本 wiki 因此不建对应目录。

唯一不属于 NEI 的第三方接口是 WAILA 的 IWailaDataProvider × 3。

死代码清单

以下类在源码中实现接口 / 写完整逻辑,但全仓无任何实例化点,不要当成生效功能:

类 接口 证据
utils/CustomOverlayHandler IOverlayHandler grep -rn 只命中自身第 33、40 行
utils/SetRecipeCommandHandler SubPacketHandler 只命中自身第 19、24 行
utils/ModItemFilter ItemFilter 只命中自身第 15、20 行
utils/ItemStackWithTip + utils/PositionedStackWithTip — 只被彼此引用
Utils.getAndCheckStaicField — 无调用点(方法名 Staic 为源码原样拼写)
AppEngGuiHandler.isMouseOverSlot — 无调用点(用的是继承来的同名方法)
assets/.../textures/items/invalid.png — 无代码引用

与 mcmod.info 的不一致

src/main/resources/mcmod.info 声明了 9 个 mod 容器,@Mod 注解只有 7 个。多出的两条元数据:

mcmod.info 里的 modid 源码中是否存在
NEIAddons|ExtraBees ❌ 无 AddonExtraBees 类
NEIAddons|MiscPeripherals ❌ 无 AddonMiscPeripherals 类

这两条是上游遗留。Extra Bees 的支持仍然存在,但它是以 BeeHelper.getMobCombs() 里 Loader.isModLoaded("ExtraBees") + 反射取 binnie.extrabees.ExtraBees.comb 字段的方式实现的蜂蜡子物品扩展,不是独立 addon。Misc Peripherals 完全没有残留。

条目索引

游戏设定

  • 配置文件 - config/NEIAddons.cfg 的全部 21 个选项,逐项标注门控哪个集成
  • Addon 架构与加载顺序 - 7 个 @Mod 容器的加载链路、checkSide / verifyModVersion 判定、meta 描述改写
  • 网络协议 - 通道 bdew.neiaddons、hello 握手、SetAE2FakeSlot 包
  • 开发者工具 - IContainerTooltipHandler 槽位调试,唯一默认关闭的 addon
  • Mutation 转储工具 - 唯一的 .scala 文件与 3 处 API.addOption

NEI 集成