兼容模组(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*\} 无命中)。