NEI 隐藏禁用奇点
基本信息
| 属性 | 值 |
|---|---|
| 实现 | NEI.java(全类仅一个 hide 静态方法,私有构造) |
| 调用 | API.hideItem(itemStack)(codechicken.nei.api.API) |
| 调用点 | CommonProxy.addToRecipeInput(),共 2 处(:775、:776) |
| NEI 是否硬依赖 | 否。仅 Loader.isModLoaded("NotEnoughItems") 软判断 |
双重开关
hideDisabledSingularities 在构造函数中算出(:723-724):
hideDisabledSingularities = config.get(CATEGORY_GENERAL, "hideDisabledSingularitiesInNei", true)
.getBoolean() && Loader.isModLoaded("NotEnoughItems");
&& 短路意味着:即使配置为 true,若 NEI 未安装,hideDisabledSingularities 也是 false,NEI.hide(...) 永远不会被调用(也因此不会触发 NEI 类的类加载错误)。
触发点
隐藏发生在两道门任一失败时(:775-776):
if (allowed.containsKey(...) && allowed.get(...).contains(...)) {
if (矿辞存在) { 注册配方 }
else if (hideDisabledSingularities) NEI.hide(new ItemStack(singularity, 1, i)); // 门 2 失败
} else if (hideDisabledSingularities) NEI.hide(new ItemStack(singularity, 1, i)); // 门 1 失败
即被隐藏的是:
- 配置中未启用的变体(门 1 失败)
- 已启用但对应矿辞不存在的变体(门 2 失败,例如没装 Tinkers’ Construct 却开着
tinkersConstruct组)
隐藏的粒度是单个 meta(new ItemStack(singularity, 1, i)),不是整个物品。
关闭后的表现
若 hideDisabledSingularitiesInNei 设为 false,禁用变体仍会完整出现在 NEI 中(getSubItems 仍会枚举全部 meta),但没有任何获取配方——属于"看得见拿不到"的状态。
限制
- 只隐藏奇点物品本身,不涉及配方、用法或 overlay;本模组不注册任何 NEI handler。
- 隐藏发生在
postInit,早于玩家打开 NEI 界面,正常生效。 NEI.hide直接调API.hideItem,没有 try/catch 保护——完全依赖上面的isModLoaded短路来避免 NEI 缺失时的崩溃。