Mixin¶
MinecraftまたはMODのコードを一部改変できる仕組み。
概要¶
実際に何ができるかコードで解説します。
対象クラス
SomethingLogic.java
Mixinサイド
class SomethingLogic {
public void process() {
System.out.println("Proceed");
}
}
MixinSomethingLogic.java
@Mixin(value = SomethingLogic.class, remap = false)
public class MixinSomethingLogic {
@Inject(method = "process()V", at = @At("HEAD"))
private void onProcess(CallbackInfo ci) {
System.out.println("Injected");
}
}
このように記述できます。
このMixinがSomethingLogicに適応されると、概念的には1以下のようになります。
SomethingLogic(Injected).java
class SomethingLogic {
public void process() {
onProcess(new CallbackInfo(...))
System.out.println("Proceed");
}
private void onProcess(CallbackInfo ci) {
System.out.println("Injected");
}
}
Mixinセットアップ¶
以下をbuild.gradleの冒頭に追加。
build.gradle
buildscript {
repositories {
maven { url = 'https://repo.spongepowered.org/repository/maven-public/' }
mavenCentral()
}
dependencies {
classpath 'org.spongepowered:mixingradle:0.7-SNAPSHOT'
}
}
以下をplugins {}ブロックの下に追加。
以下をsrc/main/resources/$(modid).mixins.jsonに
$(modid).mixins.json
{
"required": true,
"minVersion": "0.8",
"package": "$(groupId).mixin",
"compatibilityLevel": "JAVA_17",
"mixins": [],
"client": [],
"server": [],
"injectors": {
"defaultRequire": 1
}
}
$(modid)はModのIDに置き換え、
$(groupId)は実際のグループIDに置き換えてください。
次に、build.gradleのminecraft {}ブロックの下に以下を追加。
-
実際はonProcessのメソッド名やアノテーションなどが異なる。 ↩