目标模组列表(TargetedMod)

基本信息

属性 值
枚举 com.mitchej123.hodgepodge.mixins.TargetedMod
源文件 src/main/java/com/mitchej123/hodgepodge/mixins/TargetedMod.java(119 行)
枚举条目 62
实现接口 com.gtnewhorizon.gtnhmixins.builders.ITargetMod(GTNHMixins)
匹配方式 modId 字符串 / coremod 类名 / 普通类名 / 双重判定 / 版本比较,共 5 种
关联 Mixin 系统、跨模组修复

功能

TargetedMod 是 Hodgepodge 的第三方模组登记表。它本身不产生任何行为,只回答一个问题:「这个模组在不在?什么版本?」。

401 个 Mixin 条目中有 153 个用 addRequiredMod(TargetedMod.X) 声明必需模组(合计 162 次引用),35 个用 addExcludedMod(TargetedMod.X) 声明互斥模组(合计 45 次引用)。没有这张表,Hodgepodge 就得给 60 多个模组各写一套兼容性判断。

5 种匹配方式

方式 写法 例子
按 modId TargetedMod("modid") BIBLIOCRAFT("BiblioCraft")
按 coremod 类 TargetedMod("类全名", "modid") COFH_CORE("cofh.asm.LoadingPlugin", "CoFHCore")
按普通类(无 modId) TargetedMod(null, null, "类全名") BUKKIT(null, null, "org.bukkit.World")
版本判定 new TargetModBuilder().setTargetClass(...).testModVersion(...) FALSETWEAKS_LT_433
双重判定 setTargetClass(...).testModAnnotation(...) IC2

三个值得单独说明的条目

IC2 —— 源码注释:「Target only IC2, not IC2 Classic. Both have the same mod id.」。IC2 与 IC2 Classic 共用 modId IC2,因此改用 testModAnnotation(modId -> modId.equals("IC2"), name -> !name.contains("Classic"), null) 按类名把 Classic 排除。这是本枚举里 22 个必需条目(最多)的基础。

GTNHLIB("GTNHLib Core", "gtnhlib") —— 源码注释:「this is not a class name, but it’s what actually shows up in the coremod list」。GTNHLib 硬依赖自己,因此也要在表里。

FALSETWEAKS_LT_433 —— 唯一的副作用型条目。源码注释:「FalseTweaks versions before 4.3.3 don’t handle Tesselator.instance calls in mixins」,其 testModVersion 谓词在返回 true 的同时执行 Launch.blackboard.remove("hodgepodge.FixesConfig.fixBottomFaceUV")(TargetedMod.java:33-38)—— 即版本判定顺带关掉一个不兼容的修复。

ENDERCORE_WITH_MODLIST —— 源码注释解释了这个看似奇怪的命名:「this is not ender io but a library for it, it used to contain the transformer that got removed and added via mixin in this mod, so we don’t load our mixins if an old version of the mod that contains this class is loaded」。

版本比较

版本比较统一走 cpw.mods.fml.common.versioning.ComparableVersion(TargetedMod.isVersionLessThan,:107-109),不是字符串比较,因此 4.3.3 与 4.3.10 的顺序正确。

数值

指标 值
枚举条目 62
作为必需模组被引用的不同条目 46
作为互斥模组被引用的不同条目 19
只被用作互斥(从不作为必需)的条目 14
两种身份兼有(既作必需又作互斥) 5 个:ArchaicFix(1 必需 / 6 互斥)、Bukkit(5 / 10)、EndlessIds(4 / 1)、lwjgl3ify(2 / 1)、Optifine(1 / 4)

互斥但从不被要求的有 14 个:Angelica、Angelica<2.1.58、BugTorch、DragonAPI、Dreamcraft、Endercore(With Modlist)、EtFutuRequiem、FalseTweaks、FalseTweaks<4.3.3、FastCraft、ModernKeyBinding、NotFine、Supernova、Ultramine。它们代表「Hodgepodge 在这些模组存在时主动让路」。

必需条目数 Top 10

模组 必需 Mixin 条目
IC2 22
Extra Utilities 19
Biomes O’ Plenty 14
Thaumcraft 12
CoFH Core 8
Bibliocraft 8
Witchery 8
Bukkit 5
Harvest the Nether 4
EndlessIds 4

互斥条目数 Top 5

模组 排除 Mixin 条目 原因(源码可见)
Bukkit 10 Bukkit 自行重写底层,多处变换器主动避让
ArchaicFix 6 渲染/资源管线与 ArchaicCore 冲突
Optifine 4 渲染管线冲突
Angelica 4 渲染管线冲突
Ultramine 3 服务端实现差异

明细

全部 62 个条目,及其在 Mixins.java 中作为必需 / 互斥被引用的次数。

枚举条目 匹配目标 必需 Mixin 条目 排除 Mixin 条目
ADVANCED_SOLAR_PANELS modId AdvancedSolarPanel 1 —
ANGELICA 类 com.gtnewhorizons.angelica.loading.AngelicaTweaker — 4
ANGELICA_LT_2158 modId angelica;类 com.gtnewhorizons.angelica.AngelicaMod;版本 < 2.1.58 — 1
ARCHAICFIX 类 org.embeddedt.archaicfix.ArchaicCore 1 6
AUTOMAGY modId Automagy 2 —
BAUBLES modId Baubles 1 —
BETTERHUD modId hud 2 —
BIBLIOCRAFT modId BiblioCraft 8 —
BOP modId BiomesOPlenty 14 —
BIBLIOWOODSFORESTRY modId BiblioWoodsForestry 1 —
BUGTORCH 类 jss.bugtorch.mixinplugin.BugTorchEarlyMixins — 1
BUKKIT 类 org.bukkit.World 5 10
CANDYCRAFT modId candycraftmod 1 —
COFH_CORE 类 cofh.asm.LoadingPlugin 8 —
DAMAGE_INDICATORS modId DamageIndicatorsMod 1 —
DRAGONAPI 类 Reika.DragonAPI.Auxiliary.DragonAPIASMHandler — 2
DREAMCRAFT 类 com.dreammaster.coremod.DreamCoreMod — 2
ENDERCORE_WITH_MODLIST 类 com.enderio.core.common.transform.EnderCoreTransformerClient — 1
ENDLESSIDS 类 com.falsepattern.endlessids.asm.EndlessIDsCore 4 1
ETFURUMREQUIEM 类 ganymedes01.etfuturum.mixinplugin.EtFuturumEarlyMixins — 1
EXTRATIC modId ExtraTiC 1 —
EXTRA_UTILITIES modId ExtraUtilities 19 —
FALSETWEAKS 类 com.falsepattern.falsetweaks.asm.CoreLoadingPlugin — 2
FALSETWEAKS_LT_433 类 com.falsepattern.falsetweaks.FalseTweaks;版本 < 4.3.3;同时移除黑板标志 — 1
FASTCRAFT 类 fastcraft.Tweaker — 1
GALACTICRAFT_CORE 类 micdoodle8.mods.galacticraft.core.asm.GCLoadingPlugin 2 —
GLIBYS_VOICE_CHAT modId gvc 1 —
GT5U modId gregtech — —
GT6 类 gregtech.asm.GT_ASM — —
GTNHLIB modId GTNHLib Core 2 —
HARVESTCRAFT modId harvestcraft 1 —
HARVESTTHENETHER modId harvestthenether 4 —
HUNGER_OVERHAUL modId HungerOverhaul 3 —
IC2 类 ic2.core.IC2;按 modId/类名双重判定 22 —
IMMERSIVE_ENGINENEERING modId ImmersiveEngineering 1 —
JOURNEYMAP modId journeymap 3 —
LOTR 类 lotr.common.coremod.LOTRLoadingPlugin 3 —
LWJGL3IFY 类 me.eigenraven.lwjgl3ify.core.Lwjgl3ifyCoremod 2 1
MINECHEM modId minechem 1 —
MINEFACTORY_RELOADED modId MineFactoryReloaded 4 —
MODERNKEYBINDING 类 committee.nova.mkb.ModernKeyBinding — 2
MODULARPOWERSUITS modId powersuits 3 —
MORPHEUS modId Morpheus 1 —
MRTJPCORE_V_BEFORE_113 类 mrtjp.core.handler.MrTJPCoreMod;版本 < 1.1.3 2 —
NOTENOUGHITEMS 类 codechicken.nei.asm.NEICorePlugin 1 —
NOTFINE 类 jss.notfine.mixinplugin.NotFineEarlyMixins — 1
OPTIFINE 类 optifine.OptiFineForgeTweaker 1 4
PORTAL_GUN modId PortalGun 1 —
PROJECTE modId ProjectE 1 —
RAILCRAFT modId Railcraft 1 —
SUPERNOVA 类 com.mitchej123.supernova.core.SupernovaCore — 1
THAUMCRAFT modId Thaumcraft 12 —
THERMALDYNAMICS modId ThermalDynamics 2 —
THERMALEXPANSION modId ThermalExpansion 1 —
TINKERSCONSTRUCT modId TConstruct 1 —
TRAVELLERSGEAR modId TravellersGear 2 —
ULTRAMINE 类 org.ultramine.server.UltraminePlugin — 3
VOXELMAP 类 com.thevoxelbox.voxelmap.litemod.VoxelMapTransformer 4 —
WITCHERY modId witchery 8 —
XAEROMINIMAP modId XaeroMinimap 1 —
XAEROWORLDMAP modId XaeroWorldMap 1 —
ZTONES modId Ztones 1 —