Mixin 枚举

基本信息

属性 值
枚举 com.gtnewhorizon.gtnhlib.mixins.Mixins
源码 src/main/java/com/gtnewhorizon/gtnhlib/mixins/Mixins.java
接口 com.gtnewhorizon.gtnhmixins.builders.IMixins
枚举条目数 27
引用的 mixin 类总数 54
目标 mod 枚举 com.gtnewhorizon.gtnhlib.mixins.TargetMods(3 个)

⚠️ 本枚举是 mixin 清单的唯一真实来源。 4 个 mixins.gtnhlib*.json 的 mixins / client / server 数组全为空(见 Mixin 引导流程),按 JSON 统计会得到 0。详见本条目末尾的计数校验。

功能

Mixins 枚举把每个注入组表达为一个 MixinBuilder,带阶段(EARLY/LATE)、条件(setApplyIf)与目标 mod 依赖(addRequiredMod / addExcludedMod)。GTNHLibCore.getMixins() 与 GTNHLibLateMixinLoader.getMixins() 分别按阶段取用。

27 个条目

约定:C = client 侧,M = 双方。

# 枚举名 阶段 条件 mixin 数 作用
1 THREAD_SAFE_TESSELLATOR EARLY 无 1 C MixinTessellator
2 WAVEFRONT_VBO EARLY 无 1 C MixinWavefrontObject
3 AUTO_CONFIG_GUI EARLY 无 1 C fml.MixinGuiModList
4 EVENT_BUS_ACCESSOR EARLY 无 2 M fml.EventBusAccessor、fml.EnumHolderAccessor
5 TOOLTIP_RENDER EARLY 无 1 C MixinGuiScreen
6 EQUIPMENT_CHANGE_EVENT EARLY 无 1 M MixinEntityLivingBase
7 BACKPORT_SERVER_TICKING EARLY 无 1 M MixinMinecraftServer
8 GAME_RULES_API EARLY 无 1 M MixinGameRules
9 BRIGADIER EARLY 无 2 M MixinCommandHandler、MixinCommandHelp
10 FONT_RENDERER EARLY enableFontRendererMixin 1 C 字体渲染替换
11 BLOCK_PROPERTIES_ACCESSORS EARLY 无 1 M MixinTileEntitySkull
12 MODEL_TEXTURE_LOADING EARLY () -> true 7 C 自动加载模型/纹理/元数据
13 MODEL_PARTICLE_FIXES EARLY () -> true 5 C 覆盖模型粒子图标
14 MODEL_ITEM_RENDERER EARLY 无 1 C 修 MixinModelFHC 原点枢轴
15 MODEL_BLOCK_CRACKS EARLY 无 1 C 修复模型方块裂纹纹理
16 DYNAMIC_BLOCK_SOUNDS EARLY blockSoundMixins 7(5 M + 2 C) 动态方块音效
17 ENTITY_RENDERER_ACCESSOR EARLY 无 1 C 访问 EntityRenderer lightmap
18 ITEM_TRANSLUCENCY EARLY enableTranslucentItemRenders 2 C 半透明物品渲染
19 CUSTOM_CHAT_COMPONENT_REGISTRATION EARLY 无 1 M 自定义聊天组件注册
20 MULTI_RELEASE_JAR_FILTER EARLY 无(排除 LWJGL3ify) 1 M 跳过 mod 发现中的多版本 JAR 条目
21 PICK_BLOCK_TRAP EARLY 无 1 C MixinMinecraft_PickBlockTrap
22 ENHANCED_INFUSION_RECIPE LATE 需 Thaumcraft 1 M 附魔台配方替换而非消耗
23 CONFIG_ORDER EARLY 无 1 C fml.MixinGuiConfig
24 WORLD_DELETION_EVENT EARLY 无 1 C MixinGuiSelectWorld
25 WORLD_LOAD_WARNING EARLY 无 2 M 世界转换警告系统 accessor
26 MODDED_FLOWERS_IN_FLOWER_POT EARLY enableMoreFlowerPottage 3 M 模组方块入花盆
27 BIOMES_O_PLENTY_FLOWER_POT LATE enableMoreFlowerPottage + 需 Biomes O’ Plenty 6 M BoP 方块实现 IFlowerPottable

条件列为「无」者,走 Mixins(Side side, String... mixins) 简写构造器(Mixins.java:95-97),该构造器固定 .setPhase(Phase.EARLY):

Mixins(Side side, String... mixins) {
    builder = new MixinBuilder().addSidedMixins(side, mixins).setPhase(Phase.EARLY);
}

第 26 条的 MixinRenderBlocks_FlowerPot 虽为客户端类,但在枚举中以 addCommonMixins 登记(Mixins.java:112-115),故 3 个 mixin 全按 common 计。上表 27 行求和 = 54,与磁盘统计一致。

目标 mod 依赖

mixins/TargetMods.java 声明 3 个目标:

常量 coreModClass modId
LWJGL3IFY me.eigenraven.lwjgl3ify.core.Lwjgl3ifyCoremod —
THAUMCRAFT — Thaumcraft
BIOMES_O_PLENTY biomesoplenty.BiomesOPlenty BiomesOPlenty

用法:ENHANCED_INFUSION_RECIPE 用 addRequiredMod(TargetMods.THAUMCRAFT);MULTI_RELEASE_JAR_FILTER 用 addExcludedMod(TargetMods.LWJGL3IFY)。

计数校验(两条独立路径互证)

路径 A — 从枚举解析引用名(排除 new MixinBuilder("…") 的描述字符串):

names referenced by enum: 54
UNRESOLVED: []

路径 B — 从磁盘枚举 mixins/ 下的 mixin 源文件:

目录 文件数
mixins/early/(含 block_sounds 7、fml 5、models 9、models/particles 5) 47
mixins/late/(含 flowerpotcompat 6) 7
mixins/preinit/ 1
合计 55

55 = 54(枚举)+ 1(PreInitMixinPlugin),两条路径完全吻合。54 个被引用的 mixin 名全部能在磁盘上找到对应 .java,无悬空引用 —— 这一点与 MineTweaker3 那类"字符串反射出 5 个类名、3 个不存在"的情况不同。

计数脚本按需在枚举中的相对前缀(block_sounds、fml、models、models.particles、flowerpotcompat)展开定位;例如 "MixinEnhancedInfusionRecipe" 解析到 mixins/late/MixinEnhancedInfusionRecipe.java,"models.FRMAccessor" 解析到 mixins/early/models/FRMAccessor.java。

交互

条目通过两个加载器被消费:

  • GTNHLibCore.getMixins(Set<String> loadedCoreMods) → IMixins.getEarlyMixins(Mixins.class, loadedCoreMods) → 走 mixins.gtnhlib.early.json
  • GTNHLibLateMixinLoader.getMixins(Set<String> loadedMods) → IMixins.getLateMixins(Mixins.class, loadedMods) → 走 mixins.gtnhlib.late.json

setApplyIf 的 lambda 在 early 阶段就要求值(eventbus/AutoEventBus 同类机制见 core/GTNHLibCore 的配置期注册),因此条件里引用的配置项必须在 coremod 构造期已就绪。

相关条目