NEI 集成

基本信息

属性 值
脚本类数量 1(mods/nei/NEI.java,共 169 行)
脚本名 mods.nei.NEI
门控 @ModOnly("NotEnoughItems")(NEI.java:27)
@ZenMethod 数 3
依赖声明 implementation("com.github.GTNewHorizons:NotEnoughItems:2.8.93-GTNH:dev")(dependencies.gradle:3)
NEI API 使用 codechicken.nei.api.API(NEI.java:7)
注册路径 由 MineTweakerRegistry 构建期扫描自动注册

NEI 是本仓唯一的 implementation(运行时)依赖 —— 与 IC2 的 compileOnly 不同,NEI 属于随包携带的编译依赖。mcmod.info 里 "dependencies": [] 为空,声明只在 gradle 层面。

3 个脚本方法

NEI.java 全部 3 个 @ZenMethod 均为 public static void,各自包一个 IUndoableAction 交给 MineTweakerAPI.apply:

方法 签名 动作类 客户端 API 源码行
hide (IItemStack item) NEIHideItemAction API.hideItem(stack) :35-38
addEntry (IItemStack stack) NEIAddEntryAction API.addItemListEntry(item) :45-48
overrideName (IItemStack item, String name) NEIOverrideNameAction API.setOverrideName(item, name) :57-60

类 javadoc 说明用途(:17-25):隐藏 NEI 条目、添加带 NBT 的新条目、覆盖显示名 —— 可用于给物品加自定义说明或提供带特定 NBT 的可生成物品。

撤销行为

三个动作的可撤销性不同,这直接影响 /mt 重载能否还原:

动作 基类 canUndo undo() 行为 是否产生「卡死」动作
NEIHideItemAction IUndoableAction true(:119-121) API.addItemListEntry(stack) —— 恢复显示 否
NEIAddEntryAction IUndoableAction true(:80-82) API.hideItem(item) —— 移除条目 否
NEIOverrideNameAction OneWayAction 继承(false) 不可撤销 是

NEIOverrideNameAction 继承 minetweaker.OneWayAction(:144),该基类(minetweaker/OneWayAction.java)对 canUndo() 返回 false、undo() 为空实现、describeUndo() 固定返回字符串 "impossibru!"。所以 overrideName 改名后无法通过脚本重载还原,会被 MTTweaker.rollback 记入 wereStuck 并打出 [Stuck] 1/2/3 三行日志(MTTweaker.java:88-91),下次加载时再补一条 Stuck: <describe>(:174-178)。它在日志里的撤销描述只会显示 impossibru!,不显示具体物品。

getOverrideKey() 的实现也不一致:前两个返回 null(:100-102、:138-140),NEIOverrideNameAction 返回 item 本身(:165-167),使同一物品的多次改名能互相覆盖而非叠加卡死。

描述文本

三个动作的 describe() / describeUndo() 会写进 logs/minetweaker.log:

动作 describe() describeUndo()
hide Hiding <stack.getUnlocalizedName()> in NEI(:130) Displaying <...> in NEI(:134)
addEntry Adding <item.getDisplayName()> as NEI entry(:91) Removing <...> as NEI entry(:95)
overrideName Overriding NEI item name of <...> to <name>(:161) impossibru!(继承 OneWayAction)

注意前两个一个用 getUnlocalizedName()、一个用 getDisplayName(),日志文案不统一。

关系说明:与 modtweaker 无关

本条目只覆盖 MineTweaker 3 自带的 NEI 支持(minetweaker/mods/nei/NEI.java)。GT5 的脚本桥接是另一个模组 modtweaker / GTTweaker,在本 wiki 中独立成条,两者代码与 API 无交集。

另注:api/compat/IJEIRecipeRegistry.java 是给 JEI 配方查询预留的兼容层,MineTweakerAPI.java:55 把它初始化为 DummyJEIRecipeRegistry(api/compat/DummyJEIRecipeRegistry.java:7)。api/tooltip/IngredientTooltips.java:59、:74 会调 getIjeiRecipeRegistry().invalidateTooltips(ingredient) 来让 tooltip 失效,所以这个钩子是活的;但全仓没有任何 setIjeiRecipeRegistry 调用方,即永远跑在空实现上,除非其他模组主动注入。IJEIRecipeRegistry 本身没有 @ZenClass,脚本取不到该对象。

相关条目