ExtraLoader 兼容矩阵

[!INFO] 注册真源:loader/extras/ExtraLoader.java(33 处 loaders.add(...)) 目录:loader/extras/ 共 39 个 Java 文件

Mobs Info 用 IExtraLoader 接口为每个 mod 写一个掉落解析器。ExtraLoader 的静态初始化按 modid 守卫条件化注册。

[!IMPORTANT] 文件数 ≠ 注册数:loader/extras/ 有 39 个文件,但只有 33 处 loaders.add(...)。差额来自 6 个不直接注册的文件(见下)。多数注册带条件守卫 && Loader.isModLoaded(...) 或 && !alreadyProvided.contains(LoaderReference.X.modID)。

已注册 loader(33 个)

Minecraft、DraconicEvolution、TinkersConstruct、Witchery、ThaumicHorizons、ThaumicBases、WirelessCraftingTerminal、CoFHCore、HardcoreEnderExpansion、Botania、HarvestCraft、OpenBlocks、BloodArsenal、BloodMagic、Avaritia、ThaumicTinkerer、ForbiddenMagic、ElectroMagicTools、WitchingGadgets、Thaumcraft、Automagy、GregtechPlusPlus、DQRespect、ChocoCraft、ExtraUtilities、EtFuturum、LycanitesMobs、MineTradingCards、Reliquarry、MineFantasyII、LootPlusPlus、EditMobDrops、MineTweaker

不直接注册的 6 个文件

文件 类型 说明
IExtraLoader.java 接口 loader 契约
ExtraLoader.java 注册器 本身不是 loader
Translations.java 枚举 掉落描述的翻译键常量表(30+ 个 MINECRAFT_SLIME、BASE_CHANCE、DROPS_ONLY_WITH_WEAKNESS 等)
ReliquaryCompatibility.java 枚举 LEGACY / MODERN / UNSUPPORTED 三态探测
ReliquaryLegacy.java IExtraLoader Reliquary 1.2 稳定版掉落
ReliquaryModern.java IExtraLoader Reliquary beta 1.2.257+ 掉落

Reliquary 三态版本探测

已注册的 Reliquarry.java 依赖 ReliquaryCompatibility.detect(version, classLoader) 在运行时分派到 Legacy 或 Modern 实现,避免直接初始化可选 mod 的类(枚举注释:“Selects the drop API without initializing optional Reliquary classes”)。

探测顺序(ReliquaryCompatibility.java:16-30):

  1. 反射 xreliquary.init.XRRecipes 与 xreliquary.event.CommonEventHandler,校验 4 个方法签名 → MODERN
  2. 版本等于 "1.2" 且存在 xreliquary/items/ItemSquidBeak.class → LEGACY
  3. 否则 → UNSUPPORTED

[!NOTE] 源码注释指出:Reliquary beta 1.2.257 的版本号也是 "1.2" 但 API 与稳定版不同,故必须先做方法签名探测再退回版本号判断。这个「同版本号不同 API」的陷阱值得记录。

另注意文件命名不一致:注册用的类是 Reliquarry(双 r),而分派相关类都是 Reliquary(单 r)。grep 时容易漏。

与本 wiki 已收录分类的交叉

loader/extras/ 中直接包含 Forbidden Magic 与 BloodArsenal 的掉落解析器(另有 BloodMagic.java,对应 AWWayofTime)。这三个 loader 说明 Forbidden Magic / Blood Arsenal 的生物掉落不遵循原版掉落表,需要独立解析。

关联:API 与事件 · NEI 处理器 · Mixin 列表