LoadControllerMixin

基本信息

属性 值
全名 io.github.tox1cozz.mixinbooterlegacy.loader.mixin.LoadControllerMixin
文件 module-mixinbooterlegacy/src/main/java/…/loader/mixin/LoadControllerMixin.java
行数 104
目标 LoadController
所属配置 mixin.mixinbooterlegacy.json
启用版本 Minecraft 1.7.10

注入点

@Mixin(value = LoadController.class, remap = false)
public class LoadControllerMixin {
    @Inject(method = "distributeStateMessage(Lcpw/mods/fml/common/LoaderState;[Ljava/lang/Object;)V",
            at = @At("HEAD"))
项 值
目标类 LoadController
remap false
注入方法 distributeStateMessage
描述符 (Lcpw/mods/fml/common/LoaderState;[Ljava/lang/Object;)V
at HEAD

实现要点

⚠️ remap = false 是必需的:LoadController 是 MixinBooter 自身的类, 不参与 Minecraft 混淆名映射。描述符里 LoaderState 用的是 cpw.mods.fml.common.LoaderState 全限定名而非内部名 aI, 正是 remap = false 的体现。

⚠️ distributeStateMessage 是 FML 状态分发方法 —— 在该方法 HEAD 注入意味着能在 FML 各加载阶段(CONSTRUCTING / PREINIT / etc.) 的最开始插入逻辑。这正是实现「早期 / 晚期 mixin 编排」的关键挂载点。

⚠️ 本 mixin 内部会主动抛 MixinInitialisationError,当被注解的类 标了 @LateMixin 却没实现 ILateMixinLoader 接口时:

throw new MixinInitialisationError(String.format(
  "The class %s has the LateMixin annotation, but does not implement the ILateMixinLoader interface.",
  clazz.getName()));

即晚期 mixin 的前置契约校验,不满足则直接失败。

⚠️ 3 个模块各有 1 个针对 LoadController 的 mixin

模块 类 是否被应用
module-mixinbooterlegacy 本类 配置有列出,但该配置未列入 manifest
module-gtnhmixins LateMixinOrchestrationMixin 是
module-gasstation com/falsepattern/gasstation/mixins/mixin/LoadControllerMixin.java 否(mixins 数组为空)

⚠️ 三个 mixin 注入同一方法(gtnhmixins 那个也注入 distributeStateMessage 的 HEAD)。@Inject 到同一 HEAD 位置时, 多个注入器按 mixin 优先级与配置加载顺序依次执行,顺序不保证。

相关条目