目标模组列表(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 | — |