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。
关联
- mixin 类清单 - 4 个
@Mixin的注入点明细 - ChromaticTooltips - mod 入口
- UniMixins - 另一仓的 mixin 体系(
minVersion亦为0.8.3-GTNH/0.8.5-GTNH系) - GTNHLib - 硬依赖(已登记未成文)