运行时兼容层(compat/ 41 个文件)
概览
| 属性 | 值 |
|---|---|
| 路径 | src/main/java/com/gtnewhorizons/angelica/compat/ |
| 文件数 | 41 |
| 结构 | 顶层 4 + 16 个子包 |
| 调用时机 | ClientProxy.java:134 ModStatus.preInit() |
这是运行时(Java 层)的第三方 mod 兼容,与 CompatHandlers 的 ASM 字节码层兼容、以及 mixin 的编译期注入兼容是三套独立机制。
顶层 4 个
| 文件 | 作用 |
|---|---|
ModStatus.java |
集中探测 20+ 个 mod 是否加载 |
DriverCompatabilityCheck.java |
驱动兼容性检查 |
GTNHLibCompat.java |
gtnhlib 对接 |
ExtendedBlockStorageExt.java |
扩展区块存储 |
ModStatus:20 个加载标志
ModStatus.java 在 preInit()(:37)里逐个探测,产出 20 个 public static boolean:
| 标志 | 行 | 探测方式 |
|---|---|---|
isBackhandLoaded |
:27 |
BackhandReflectionCompat.isBackhandLoaded()(反射,非 Loader) |
isBetterCrashesLoaded |
:16 |
Loader.isModLoaded("bettercrashes") |
isNEIDLoaded |
:17 |
Loader.isModLoaded("neid") |
isNEIDMetadataExtended |
:18 |
派生标志 |
isEIDLoaded |
:19 |
Loader.isModLoaded("endlessids") |
isMetadataExtended |
:20 |
派生标志 |
isLotrLoaded |
:21 |
Loader.isModLoaded("lotr") |
isChunkAPILoaded |
:22 |
Loader.isModLoaded("chunkapi") |
isEIDBiomeLoaded |
:23 |
— |
isXaerosMinimapLoaded |
:24 |
Loader.isModLoaded("XaeroMinimap")(大写 X) |
isHoloInventoryLoaded |
:25 |
Loader.isModLoaded("holoinventory") |
isBattlegearLoaded |
:26 |
— |
isBackhandLoaded |
:27 |
见上 |
isThaumcraftLoaded |
:28 |
— |
isThaumicHorizonsLoaded |
:29 |
— |
isBaublesLoaded |
:30 |
— |
isCosmeticArmorReworkedLoaded |
:31 |
— |
isFluidLoggedLoaded |
:32 |
— |
isCubicChunksLoaded |
:33 |
— |
isBOPLoaded |
:34 |
— |
isEtFuturumLoaded |
:35 |
— |
Logger 名为 "ModCompat"(:14),与 modid angelica / Logger 名 "Angelica" 都不同。
modid 大小写的又一次实证
Loader.isModLoaded("XaeroMinimap") 用的是大写 X,而 TargetedMod 里没有 Xaeros 的独立项(只有 narrowXaeros 配置开关,见 AngelicaModulesConfig)。同一类需求在不同文件里用了不同的大小写风格,说明 Xaeros 的 modid 实际写法需要以本处 Loader.isModLoaded 的实参为准。
16 个子包
| 子包 | 文件数 | 目标 |
|---|---|---|
mojang |
16 | 不是第三方 mod —— 见下 |
bop |
3 | Biomes O’ Plenty(BopFogBlend、FogBiomeCache、FogColourGrid) |
etfuturum |
2 | Et Futurum(EndFlashCompat、EtFuturumCompat) |
iris |
2 | BiomeCategoryCache、ModdedBiomeDetector |
thaumcraft |
2 | Tc4JarMeshes、ThaumometerScreen |
toremove |
2 | MatrixStack、VertexConsumer |
backhand / battlegear2 / bettercrashes / cubicchunks / draconicevolution / dragonapi / endlessids / galaxyspace / holoinventory / lotr |
各 1 | 见下表 |
单文件子包(10 个):
| 子包 | 类 |
|---|---|
backhand |
BackhandReflectionCompat |
battlegear2 |
Battlegear2Compat |
bettercrashes |
BetterCrashesCompat |
cubicchunks |
CubicChunksAPI |
draconicevolution |
PlacedItemRenderCompat |
dragonapi |
DragonAPICompat |
endlessids |
EndlessIDsCompat |
galaxyspace |
GalaxySpaceClouds |
holoinventory |
HoloInventoryReflectionCompat |
lotr |
LOTRCompat |
mojang 子包:不是 mod 兼容
mojang/ 的 16 个文件不是对第三方 mod 的兼容,而是对 Mojang 自己的现代版代码的 1.7.10 移植:
| 类 | 对应现代版 |
|---|---|
Camera / ChunkPos / ChunkSectionPos |
1.13+ 的相机与坐标类 |
ChunkOcclusionData / ChunkOcclusionDataBuilder |
1.17+ 的遮挡剔除数据结构 |
NativeImage |
1.13+ 的原生图像 |
CompatMathHelper |
数学工具 |
RenderLayer / Drawable / Element / ParentElement |
渲染层接口族 |
InteractionHand |
1.9+ 的手部枚举 |
GameModeUtil / Constants / ByteBufferBackedInputStream / AutoClosableAbstractTexture |
工具类 |
统计第三方 mod 兼容时不应把 mojang/ 计入 —— 它是内置的「1.7.10 → 现代版 API」垫片。CompatMathHelper 被 Proxy 的 F3 改写逻辑使用(:355-357 的 CompatMathHelper.clampHeight(bY))。
三套兼容机制对照
| 机制 | 位置 | 目标 mod 数 | 手段 |
|---|---|---|---|
| 运行时(本条目) | compat/ |
约 17(不含 mojang) |
Java 反射 / 直接调用 / 条件分支 |
| ASM | loading/fml/compat/ |
5(CompatHandlers) |
字节码改写 |
| Mixin | mixins/early + late/client |
28(TargetedMod) |
编译期注入 |
同一 mod 常同时出现在多处:extrautils 在三套机制里都有;backhand 在 compat/backhand 与 TargetedMod 里都有。
Proxy 中的直接消费
| 消费点 | 条件 |
|---|---|
ClientProxy.java:134 |
无条件 ModStatus.preInit() |
ClientProxy.java:183-185 |
isBetterCrashesLoaded → BetterCrashesCompat.init() |
ClientProxy.java:218-227 |
isLotrLoaded && CompatConfig.fixLotr → 反射替换 LOTR 三个缓存为 ConcurrentHashMap |
ClientProxy.java:228-230 |
isBOPLoaded → 取 BOPCBlocks.newBopGrass |
相关条目
- CompatHandlers - ASM 层的 5 项
- CompatConfig - 9 个开关
- TargetedMod - 28 项目标探测
- late/client mixin 分组 - mixin 层的 21 个
- Proxy -
ModStatus.preInit()调用点 - Backhand - 被反射探测的 mod 之一
- AngelicaCompat - 下游独立兼容包