兼容模组(Compatibility)

基本信息

属性 值
兼容性清单类 com.fouristhenumber.utilitiesinexcess.compat.Mods(enum,Mods.java:7-26)
声明的兼容目标 15 个
实际有代码的兼容包 11 个(compat/ 下 11 个子目录)
依赖检测方式 cpw.mods.fml.common.Loader.isModLoaded(modid),结果缓存在 loaded 字段(Mods.java:42-51)

功能

Mods 枚举是本模组唯一的跨模组探测入口。每个条目带一个 modid 字符串,isLoaded() 惰性求值并缓存——每个 mod 在整个游戏生命周期内只调用一次 Loader.isModLoaded。

注意枚举的 modid 与 mod 显示名常常不同(下表逐条列出),这是本模组探测逻辑的关键。

数值 — 完整兼容清单

枚举条目 实际 modid 兼容代码 用途
Baubles Baubles — 天界之环、手套的饰品栏装备
Thaumcraft Thaumcraft — 洒水壶的 FakeThaumcraftPlayer 绕过保护检查(ItemWateringCan.java:386 附近)
NEI NotEnoughItems compat/nei/ 3 个配方处理器:末影莲祭坛、伪反转、和平配方
CraftTweaker MineTweaker3 compat/crafttweaker/ 末影莲祭坛脚本 API(CommonProxy.java:132-134)
FindIt findit compat/findit/FindItHelper.java 交易站 / FindIt 物品展示
Waila Waila — 软依赖(@Mod 的 after:Waila),尖刺、诅咒之地、智能泵的 tooltip
Tinkers TConstruct compat/tinkers/ 基岩液态金属材料、3 个类(TinkersCompat / TinkersMaterials / BedrockiumActiveToolMod)
ExtraUtilities ExtraUtilities compat/exu/ 世界转换警告与兼容(ExuWorldConversionWarning、PosteaTransforms)
Postea postea compat/exu/ 世界转换(同上)
ForgeMicroBlock ForgeMicroblock compat/ForgeMultipart/ FMP 多方块部件(10 个类,含 UEMultipart 系列)
Backhand backhand — 副手持铲子,供建筑法杖使用
GregTech gregtech_nh — 建筑法杖识别 MetaGeneratedTool + ToolTrowel(BuildersSelection.java:98-99);NEI 建筑法杖信息页(IMCForNEI.java:77-79)
SimpleSkinBackport simpleskinbackport compat/simpleskinbackport/SsbCompat.java 皮肤兼容(ClientProxy.java:105-107)
EndlessIDs endlessids compat/endlessids/EIDsHelper.java Lapis Aetherius 染色版的注册门(BlockColored.java:151-154)
Controlling controlling — 已注释掉:KeybindUtils.java:19-22 的使用点全部被注释

Mods.java:10-24 是唯一的声明来源。

数值 — 已核实的"未接线"条目

条目 状态 证据
Mods.Controlling 使用点全部被注释掉 KeybindUtils.java:19-22
TargetedMod.ANGELICA UIEMixinLoader 中 5 处 addRequiredMod 全部被注释掉 UIEMixinLoader.java 的 mixin 段;TargetedMod.java:11 定义了条目但无 Mixin 使用

按规范,被注释掉的使用点计为 0:Controlling 虽有枚举声明与 modid,但当前版本没有任何生效的兼容代码;ANGELICA 同样已定义但未接线。本仓中没有注释、测试或提交信息能确定这是刻意保留还是遗漏,故只陈述事实。

数值 — 依赖分级

硬依赖(缺失则无法运行)

依赖 来源 声明位置
GTNHLib >= 0.11.23 @Mod(dependencies = "required-after:gtnhlib@[0.11.23,)") UtilitiesInExcess.java 的 @Mod 注解
ModularUI2 Gradle implementation + jitpack.yml dependencies.gradle
CoFH Energy API(cofh-lib / CoFHLib) Gradle implementation,作为 api 暴露 dependencies.gradle
Forge 10.13.4.1614 gradle.properties 的 forgeVersion —
Minecraft 1.7.10 gradle.properties 的 minecraftVersion —

后三者未在 @Mod 的 dependencies 字符串中显式声明,属 Gradle 层面的硬依赖。

软依赖(@Mod 声明为 after:,缺失则部分功能不可用)

依赖 @Mod 中的声明
ForgeMicroblock after:ForgeMicroblock
Waila after:Waila
NotEnoughItems >= 2.8.108-GTNH after:NotEnoughItems@[2.8.108-GTNH,)

完整 @Mod 依赖字符串(UtilitiesInExcess.java:19-27):

required-after:gtnhlib@[0.11.23,);
after:ForgeMicroblock;
after:Waila;
after:NotEnoughItems@[2.8.108-GTNH,)

仅编译期引用(compileOnly,运行期全靠 Mods 探测)

依赖 版本 用途
GT5-Unofficial(gregtech_nh) 5.09.54.12 建筑法杖铲子识别 + NEI 信息页
Angelica 2.1.49 已声明但未接线(所有 addRequiredMod 被注释)
endlessids 1.7.4 Lapis Aetherius 染色版门控
backhand 1.8.11 副手铲子
simpleskinbackport 1.0.2-GTNH 皮肤
findit 1.4.3 交易站
waila 1.19.30 tooltip
Postea 1.2.5 世界转换
Thaumcraft 4.2.3.5 洒水壶的 FakeThaumcraftPlayer
CraftTweaker(MineTweaker3) 3.4.7 末影莲祭坛脚本 API
TinkersConstruct 1.14.93-GTNH 基岩液态金属材料
ForgeMultipart 1.7.10 FMP 多方块部件
Controlling 2.1.9 已声明但使用点被注释
Baubles — 未在 dependencies.gradle 中声明;仅通过 Mods 枚举探测

关于 GregTech 的宿主判定:本条目不从名称推断——dependencies.gradle:42 声明的是 compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.54.12:dev"),Mods.GregTech("gregtech_nh")(Mods.java:21)与该依赖的 modid 一致,且使用点(BuildersSelection.java:98-99 的 MetaGeneratedTool + ToolTrowel、IMCForNEI.java:77-79)都指向 GT5-Unofficial 5.09.54.12 而非原始 GregTech 5。

关于 Angelica:Angelica 确实是已声明的编译期依赖(dependencies.gradle:45,com.github.GTNewHorizons:Angelica:2.1.49:dev),TargetedMod.ANGELICA 也有对应条目(TargetedMod.java:11)。但 UIEMixinLoader 中所有 addRequiredMod(TargetedMod.ANGELICA) 调用都被注释掉,因此当前没有任何 Mixin 实际作用于 Angelica。依赖已声明、目标已定义、接线被注释——三者并存是可核实的事实组合。

数值 — Mixin 清单

mixins.utilitiesinexcess.json 的 mixins 数组是空的(该文件只含 required / minVersion: 0.8.5-GTNH / refmap / target / compatibilityLevel: JAVA_8)。真实列表在 Java 侧,由 GTNHLib 的 MixinBuilder 声明(mixins/Mixins.java),并由 mixins.utilitiesinexcess.early.json(package: …mixins.early)承载。

MixinBuilder 条目 包含类数 条件 阶段
CURSED_EARTH_SPAWNER 1 BlockConfig.enableCursedEarth EARLY
GLOVE 3 ItemConfig.enableGlove EARLY
BAUBLE_RENDERS 2 Mods.Baubles.isLoaded() EARLY
TRUE_TOUCHSCREEN_ARGB_SCREENSHOTS 3 BlockConfig.enableTrueGreenscreen EARLY
ACCESSORS(通用) 7 无条件 EARLY
ACCESSORS_CLIENT 1 客户端 EARLY
合计 17 — 全部 EARLY

交叉验证:mixins/early/minecraft/ 实有 9 个类 + mixins/early/minecraft/accessors/ 实有 8 个类 = 17,与条目声明数一致。全部 Mixin 均为 EARLY 阶段(早加载),TargetedMod 枚举只定义了 ANGELICA 一个目标且未被使用。

数值 — 异常处理

全仓 2 处可疑的异常处理(catch (Throwable) / 静默 catch):

位置 形式 是否静默
compat/mui/tradingpost/VillagerSyncHandler.java:253 catch (Throwable e) { return false; } 完全静默——不打印、不记录、不重抛,直接返回 false
common/dimensions/underworld/UnderWorldEvents.java:246 catch (Exception exception) { exception.printStackTrace(); continue; } 半静默——用 printStackTrace() 而非模组日志系统,然后继续循环

全仓没有空 catch 块 catch (...) { }(脚本化扫描 catch\s*\([^)]*\)\s*\{\s*\} 无命中)。

相关条目