NEI 接口实现总表
基本信息
| 属性 | 值 |
|---|---|
| 类型 | NEI 客户端扩展点清单(总表) |
| 源码规模 | 50 个源文件(49 .java + 1 .scala),全在 src/main/scala/net/bdew/neiaddons/ |
| modid | NEIAddons(gradle.properties 的 modId,大小写混用,不是 neiaddons) |
| NEI 依赖 | com.github.GTNewHorizons:NotEnoughItems:2.8.145-GTNH:dev(dependencies.gradle,api 作用域) |
| 网络通道 | bdew.neiaddons,netVersion = 1 |
本 mod 只实现 7 个 NEI 扩展点。grep -rh "import codechicken.nei" src/ 的完整结果只有 20 个不同的 import 符号,说明它的 NEI 接触面非常窄。
已实现的 NEI 接口
| NEI 接口 | 实现类 | 作用 | 门控 |
|---|---|---|---|
IConfigureNEI |
NEIAddonsConfig(net.bdew.neiaddons) |
NEI 唯一的全局配置回调。loadConfig() 遍历已激活的 addon 并逐个调用 addon.loadClient(),把 init() 阶段收集的开关值转成实际的 NEI 注册 |
无(随主 mod 常驻) |
IRecipeHandler |
6 个 handler 全部经 TemplateRecipeHandler 继承得到(见下表) |
合成 / 使用配方页 | 每个由 setting/config 里的开关分别控制 |
IOverlayHandler |
utils/CustomOverlayHandler |
把配方一键灌进容器 | ⚠️ 源码中无任何实例化点,见下方「死代码」 |
ItemFilter |
utils/ModItemFilter |
按 modid + 物品/方块属性过滤 NEI 搜索 | ⚠️ 源码中无任何实例化点 |
INEIGuiAdapter |
appeng/AppEngGuiHandler |
接管 AE2 界面的拖拽放物品 | Applied Energistics 2 addon 激活 + 客户端 |
IContainerTooltipHandler |
developer/DeveloperGuiHandler |
悬停槽位时吐出槽位调试信息 | Developer Tools addon 激活(默认关闭) |
IStackPositioner |
由 utils/CustomOverlayHandler 实例化而非实现:new OffsetPositioner(xOffs, yOffs),喂给 DefaultOverlayRenderer |
叠加层物品坐标偏移 | 随 CustomOverlayHandler 死代码 |
6 个 IRecipeHandler 子类
BaseBreedingRecipeHandler(forestry/)与 BaseProduceRecipeHandler(forestry/)都是 TemplateRecipeHandler 的抽象子类,因此下面 6 个类间接实现 IRecipeHandler。全部用 API.registerRecipeHandler + API.registerUsageHandler 成对注册。
| Handler 类 | 基类 | getRecipeIdent() |
显示名(i18n 键) | GUI 贴图 |
|---|---|---|---|---|
forestry/bees/BeeBreedingHandler |
BaseBreedingRecipeHandler |
beebreeding |
bdew.neiaddons.breeding.beebreeding = “Bee Breeding” |
neiaddons:textures/gui/breeding.png |
forestry/bees/BeeProduceHandler |
BaseProduceRecipeHandler |
beeproduce |
bdew.neiaddons.produce.beeproduce = “Bee Produce” |
neiaddons:textures/gui/products_dynamic.png |
forestry/trees/TreeBreedingHandler |
BaseBreedingRecipeHandler |
treebreeding |
bdew.neiaddons.breeding.treebreeding = “Tree Breeding” |
同 breeding.png |
forestry/trees/TreeProduceHandler |
BaseProduceRecipeHandler |
treeproduce |
bdew.neiaddons.produce.treeproduce = “Tree Produce” |
同 products_dynamic.png |
forestry/butterflies/ButterflyBreedingHandler |
BaseBreedingRecipeHandler |
butterflybreeding |
bdew.neiaddons.breeding.butterflybreeding = “Butterfly Breeding” |
同 breeding.png |
botany/flowers/FlowerBreedingHandler |
BaseBreedingRecipeHandler |
flowerbreeding |
bdew.neiaddons.breeding.flowerbreeding = “Flower Breeding” |
同 breeding.png |
getRecipeName() 在两个基类里都是 final,统一拼成 bdew.neiaddons.breeding. + ident(育种类)或 bdew.neiaddons.produce. + ident(产物类)。
非 NEI 的第三方接口
| 接口 | 实现类 | 归属 |
|---|---|---|
IWailaDataProvider |
exnihilo/waila/CrucibleHandler、BarrelHandler、BeeTrapHandler |
WAILA(不是 NEI),见 Ex Nihilo 集成 |
本 mod 没有实现的 NEI 接口(附 grep 证据)
在 src/main 下逐个搜索,结果为 0 命中文件:
| 简报假设的接口 | grep -rl 命中文件数 |
|---|---|
ICraftingRecipeProvider |
0 |
IItemListOverlay |
0 |
IWorldAwareIItemListProvider |
0 |
IContainerInputHandler |
0 |
IStackStringifyHandler |
0 |
IGuiRecipeButton |
0 |
IIngredientList |
0 |
RegisterRecipeHandler |
0 |
对照之下确实存在的 6 项命中文件数均为 1:IConfigureNEI、IRecipeHandler、IOverlayHandler、ItemFilter、INEIGuiAdapter、IContainerTooltipHandler、IStackPositioner。
注意:IOverlayHandler 与 ItemFilter 虽然被 implements,但在全仓只有各自类声明那一处出现,没有任何 new 或工厂注册。它们是历史遗留的死代码,不要当成生效功能。
死代码清单(三项)
| 类 | 接口 | 证据 |
|---|---|---|
utils/CustomOverlayHandler |
IOverlayHandler |
grep -rn "CustomOverlayHandler" src 只命中自身第 33 行类声明与第 40 行构造函数 |
utils/SetRecipeCommandHandler |
SubPacketHandler |
grep -rn "SetRecipeCommandHandler" src 只命中自身第 19 行与第 24 行构造函数 |
utils/ModItemFilter |
ItemFilter |
grep -rn "ModItemFilter" src 只命中自身第 15 行与第 20 行构造函数 |
另有 utils/ItemStackWithTip 与 utils/PositionedStackWithTip 同样只被彼此引用(ItemStackWithTip 出现在 PositionedStackWithTip 的构造函数参数里),互为死代码对。
API 调用点全清单
grep -rho "API\.[a-zA-Z]*" src | sort -u 的结果:
| API 方法 | 调用位置 | 次数 |
|---|---|---|
API.addItemListEntry |
Utils.safeAddNBTItem() → forestry/bees/BeeHelper、forestry/trees/TreeHelper、forestry/butterflies/ButterflyHelper、botany/flowers/FlowerHelper |
4 |
API.addOption |
MutationDumper 注册点(3 处,见 Mutation 转储工具) |
3 |
API.registerRecipeHandler |
6 个 handler 的注册处 | 6 |
API.registerUsageHandler |
与上同点成对 | 6 |
API.registerNEIGuiHandler |
appeng/AppEngHelper.init() |
1 |
API.registerGuiOverlay |
crafting/AddonCraftingTablesClient.load() |
1(在循环内) |
API.registerGuiOverlayHandler |
同上,循环内 | 1(在循环内) |
相关条目
- 配置文件 - 每个 handler 由哪个开关门控
- Addon 架构与加载顺序 -
IConfigureNEI何时被调用 - Forestry 集成 - 4 个 handler 的详细行为
- Botany 集成 - 1 个 handler
- Applied Energistics 2 集成 -
INEIGuiAdapter - 合成工作台集成 - GUI 叠加层
- Ex Nihilo 集成 - WAILA provider
- 叠加层与 GUI 挂钩 -
IOverlayHandler死代码与工具挂钩 - 开发者工具 -
IContainerTooltipHandler