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,脚本取不到该对象。