在插件中使用 Mixin
Mixins 可用于在特定的类加载之前对它们进行修改。你可以在插件中使用 Mixin,以为你的服务器进行专门的定制——而不需要 Fork Sponge 的源代码。相关的修改将直接和你的插件绑定,并且在你的插件被加载时进行。
也參考
- Mixin 的开发文档
Mixin 的开发文档中有着关于 Mixin 的介绍。
- 示例插件
示例插件使用了 Mixin 以在服务端加载的时候输出一条消息。
設定
在你的插件中添加 Mixin 作为依赖库:
dependencies { compile 'org.spongepowered:mixin:0.7.11-SNAPSHOT' }
在你的插件的资源文件夹(Resource Folder)中添加有关于 Mixin 的配置,如
mixins.myplugin.json
:{ "required": true, "minVersion": "0.7.10", "package": "com.example.myplugin.mixin", "refmap": "mixins.myplugin.refmap.json", "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_8", "mixins": [ "MixinMinecraftServer" ] }
在特定的包中添加你的 Mixin 类:
package com.example.myplugin.mixin; import net.minecraft.server.MinecraftServer; import org.spongepowered.asm.mixin.Mixin; @Mixin(MinecraftServer.class) public abstract class MixinMinecraftServer { }
调试
通常情况下,Mixin 的配置文件由插件 JAR 的 Manifest 文件决定。不过由于在 IDE 中的插件并没有以 JAR 的形式打包,因此你需要在命令行参数中指定 Mixin 的配置:
在程序的运行配置选项中为你的每一个 Mixin 配置文件都添加上
--mixin <mixin config file name>
这一命令行参数:--mixin mixins.myplugin.json
生产环境
即使 Mixin 已经可以在你的开发环境中跑起来了,但如果想要应用到生产环境中去,你还需要做一些事情:
在你的 Gradle 构建脚本中添加名为 MixinGradle 的插件:
buildscript { repositories { maven { name = 'sponge' url = 'https://repo.spongepowered.org/maven' } } dependencies { classpath 'org.spongepowered:mixingradle:0.6-SNAPSHOT' } } apply plugin: 'org.spongepowered.mixin'
为你的 Mixin 配置设置映射表:
sourceSets { main { ext.refMap = "mixins.myplugin.refmap.json" } }
在 JAR Manifest 中指定你的 Mixin 配置。如果你想要在 SpongeForge 中加载 Mixin,你需要添加
FMLCorePluginContainsFMLMod
选项:jar { manifest.attributes( 'TweakClass': 'org.spongepowered.asm.launch.MixinTweaker', 'MixinConfigs': 'mixins.myplugin.json', 'FMLCorePluginContainsFMLMod': 'true', ) }
然后请确保你已重新运行了 Gradle 以重新构建插件 JAR。构建完成后,你的插件 JAR 就应该可以在 SpongeVanilla 和 SpongeForge 中使用 Mixin 了。
gradle clean build