MixinBooter

MixinBooter

包含Mixin库的版本1.8 - 1.12.2。

MixinBooter

允许任何适用于模组的混入在 1.8 - 1.12.2 版本上轻松工作

伪更新日志:

  • 自 4.2 版本起,MixinBooter 的 API 已更改,鼓励所有使用混入的模组依赖 MixinBooter,即使是那些混入至原版/Forge/库类中的模组。这是为了避免因混入版本不匹配而导致模组在尝试实现模组化混入时崩溃(例如 VanillaFix)。感谢 @embeddedt 推荐并帮助我引入此更改!
  • 自 5.0 版本起,MixinExtras 由 @LlamaLad7 提供并被遮罩(shaded)。可供开发者使用。
  • 自 8.0 版本起,MixinBooter 现在适用于 1.8 至 1.12.2 版本。一个单一构建即可适用于所有这些版本!(TODO:支持 LiteLoader?)
  • 自 8.4 版本起,MixinBooter 主动尝试与 SpongeForge 兼容。
  • 自 9.2 版本起,MixinBooter 为 1.8.x 的使用恢复了旧的 MixinLoader 注解。
  • 自 10.0 版本起,MixinBooter 遵循 Mixin 0.8.7。
  • 自 11.0 版本起,MixinBooter 构建于 CleanMix 之上。这是为了与 Cleanroom 创建统一后端所做的努力。
    • 你不再需要自己为注解处理器声明依赖。
    • 同时增加了一个配置文件(config/mixinbooter.cfg),用于将混入配置列入黑名单以及切换调试选项。
    • 专用的 logs/mixinbooter.log 混入日志。具备追踪类加载以便进行精确调试的能力。
    • 允许传统的 MixinConfig + MixinConnector 清单属性条目完全参与该生态系统。
    • 混入所有者的模组发现机制,更好的 isModLoaded 检查。
    • 抑制 Forge 的“损坏的 Zip”警告。
    • 逐步淘汰混入“阶段(phases)”。

面向开发者 ~ 入门指南:

  1. 添加 CleanroomMC 的仓库并依赖 MixinBooter 的 Maven 条目:
repositories {
    maven {
        url 'https://maven.cleanroommc.com'
    }
}

dependencies {
    def mixin = 'zone.rong:mixinbooter:11.0'

    implementation (mixin) {
        transitive = false
    }
    annotationProcessor mixin

    // 用于生成 refmap 的 RetroFuturaGradle:
    modUtils.enableMixins(mixin)
    // modUtils.enableMixins(mixin, 'mod_id.mixins.refmap.json') << 将 refmap 名称作为第二个参数添加(可选)
}
  1. 选择如何注册你的混入配置。MixinBooter 支持多种方式:

(自 11.0 版本起,不再有早/晚阶段之分,因此 IEarly/ILateMixinLoaders 已被弃用)

  • MixinConfigs 清单属性:无需加载器类。将你的混入配置文件名称以空格分隔的列表添加到你的 jar 清单中。MixinBooter 直接从 jar 清单中读取并注册它们。
  • MixinConnector 清单属性:以编程方式注册配置。将其指向一个实现了 org.spongepowered.asm.mixin.connect.IMixinConnector 的类,其 connect() 方法会在启动期间被调用,你可以在其中自行调用 Mixins.addConfiguration(...)。

这两个清单属性均在你的 jar 任务中设置:

jar {
    manifest {
        attributes(
                'MixinConfigs': 'mixins.mymod.json',
                'MixinConnector': 'com.example.mymod.MyMixinConnector'
        )
    }
}
public class MyMixinConnector implements IMixinConnector {

    @Override
    public void connect() {
        // 在注册之前检查模组是否已加载?
        // 通过 zone.rong.mixinbooter.service.ModDiscoverer.isModPresent(String modId) 实现
        Mixins.addConfiguration("mixins.mymod.json");
    }

}