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. 配置中未启用的变体(门 1 失败)
  2. 已启用但对应矿辞不存在的变体(门 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 缺失时的崩溃。

相关条目