mixin 配置

基本信息

属性 值
配置文件 3(.json)+ 1 个 refmap
@Mixin 类 4(early 3 + late 1)
minVersion 0.8.5-GTNH(3 个配置一致)
compatibilityLevel JAVA_8
target @env(DEFAULT)(3 个一致)
启用 gradle.properties:101 usesMixins = true
启用版本 Minecraft 1.7.10

3 个配置文件

文件 package mixins 数组
mixins.chromatictooltips.json 无 无
mixins.chromatictooltips.early.json com.slprime.chromatictooltips.mixins.early 无
mixins.chromatictooltips.late.json com.slprime.chromatictooltips.mixins.late 无

⚠️ 三个配置文件都没有 mixins 数组,也没有 plugin 字段。 这是 GTNH MDK 的 early/late 约定:根配置 mixins.<modid>.json 不列 mixin, 由 .early.json / .late.json 分别承载,包名通过 package 字段给出。

⚠️ 三者共用同一个 refmap:mixins.chromatictooltips.refmap.json。 按「一个配置一个 refmap」的惯例去数会以为有 3 个。

4 个 @Mixin 类与目标(逐条核对)

配置 类 @Mixin 目标 priority
early mixins/early/MixinGuiContainerCreative.java:25 GuiContainerCreative.class 默认
early mixins/early/MixinGuiScreen.java:17 GuiScreen.class 999
early mixins/early/ItemEnchantedBookMixin.java:15 ItemEnchantedBook.class 默认
late mixins/late/MixinGuiContainerCreative.java:25 GuiContainerCreative.class 默认

⚠️ required: true 的启动风险裁定

三个配置全部 required: true。逐条核对 4 个 mixin 的目标类:

目标类 全名 归属
GuiContainerCreative net.minecraft.client.gui.inventory.GuiContainerCreative Minecraft 原版
GuiScreen net.minecraft.client.gui.GuiScreen Minecraft 原版
ItemEnchantedBook net.minecraft.item.ItemEnchantedBook Minecraft 原版

裁定:不存在「目标属第三方 mod 而缺该 mod 则启动即崩」的缺陷。

理由:4 个目标全部是 Minecraft 1.7.10 原版类, 在任何 1.7.10 客户端上恒定存在,不依赖任何第三方 mod。 因此无需 addRequiredMod / shouldApplyMixin 兜底。

⚠️ 唯一的版本前提是 minVersion = 0.8.5-GTNH —— 要求 GTNH 特制版 Mixin 0.8.5。用非 GTNH 版 Mixin 会被拒。 本 mod 不提供 IMixinConfigPlugin 来自行放宽该约束。

⚠️ 这与 UniMixins 的情况正好相反: 那边 mixin.mixinbooterlegacy.json 与 mixins.gtnhmixins.json 也是 required: true 且无 plugin,但其目标 LoadController 是 mixin loader 自身内部类。两边都属「自带目标」,但成因不同。

⚠️ GuiContainerCreative 被混入 2 次

early/ 与 late/ 各有一个同名 MixinGuiContainerCreative, 目标类相同(GuiContainerCreative),但分属两个配置、两个时机。

⚠️ 按「类名去重」统计 mixin 会得到 3,实际是 4 个类 / 4 次应用。 两处实现不同(early 与 late 阶段),不是重复文件。

MixinGuiScreen 的 priority = 999

@Mixin(priority = 999, value = GuiScreen.class)

⚠️ 优先级 999(远高于默认 1000 基准之外的极高端)—— 用于确保本 mixin 在其它针对 GuiScreen 的 mixin 之前应用, 抢占注入点。

⚠️ 这也意味着与其它 mod 的 GuiScreen mixin 存在顺序耦合; 999 是个魔法数字,源码无注释解释取值依据。

加载器

mixins/ 下另有 3 个非 mixin 类:

类 作用
EarlyMixinsLoader 早期加载引导
LateMixinsLoader 晚期加载引导
Mixins 共用常量 / 工具

⚠️ 这 3 个类不含 @Mixin,但名字里有 Mixin。 mixins/ 目录共 7 个文件,其中只有 4 个是 @Mixin。

关联