仿生 ModLauncher 不会梦到 LaunchWrapper

MixinConnector

从 1.13 起,Forge 抛弃了原来的 LauncherWrapper,改用了 cpw 编写的 ModLauncher,也就是说,Mixin 原来基于 Tweaker 的那一套不能用了,为此,Mixin 引入了 MixinConnector

首先,你需要让一个类实现 IMixinConnector,比如:

import org.spongepowered.asm.mixin.connect.IMixinConnector;

public class ExampleConnector implements IMixinConnector {

    @Override
    public void connect() {
    }
}

然后在其中添加需要添加的 Mixin 配置文件:

import org.spongepowered.asm.mixin.Mixins;
import org.spongepowered.asm.mixin.connect.IMixinConnector;

public class ExampleConnector implements IMixinConnector {

    @Override
    public void connect() {
        Mixins.addConfiguration("mixins.example.json");
    }
}

最后,你需要在 MANIFEST.MF 文件中,指定这个 jar 文件使用的 Mixin Connector:

文件 META-INF/MANIFEST.MF

Manifest-Version: 1.0
MixinConnector: ExampleConnector

记得在最后空一行。

当然,也可以使用构建工具,比如 Gradle:

jar {
    manifest.attributes(
        'MixinConnector': 'ExampleConnector'
    )
}

剩余的内容就是普通的 Mixin 编写了,包括编写 Mixin 类,配置文件。

ModLauncher 支持

当然,截至本文发出时,ModLauncher 生态仍然没有官方的 Mixin 支持,因此在 ModLauncher 引导 Mixin 需要一点奇淫巧计。

比如我的项目 https://github.com/IzzelAliz/MixinLoader ,下载之后扔到 mods 文件夹,你的 Forge 就有了 Mixin 环境。

其他特性

Mixin 0.8 带来了新的 tsrg 混淆表格式支持,以及 MixinGradle 对 ForgeGradle 3+ 的支持。升级至 MixinGradle 0.7 就可以快乐生成 refmap 了。

同时,现在 Mixin Config 可以继承自其他的,只需要

文件 mixins.example.json

{
  "parent": "mixins.parent.json"
}

更多特性可以阅读官方的 Release note