diff --git a/build.gradle b/build.gradle index e59045b..e640d74 100644 --- a/build.gradle +++ b/build.gradle @@ -2,6 +2,7 @@ plugins { id 'fabric-loom' version '1.2-SNAPSHOT' apply(false) id 'net.minecraftforge.gradle' version '[6.0,6.2)' apply(false) id 'org.spongepowered.gradle.vanilla' version '0.2.1-SNAPSHOT' apply(false) + id("org.spongepowered.mixin") version "0.7-SNAPSHOT" apply(false) } subprojects { @@ -59,7 +60,7 @@ subprojects { } processResources { - filesMatching(['pack.mcmeta', 'fabric.mod.json', 'mods.toml']) { + filesMatching(['pack.mcmeta', 'fabric.mod.json', 'mods.toml', '*.mixins.json']) { expand project.properties } } diff --git a/common/src/main/java/com/example/examplemod/mixin/MixinMinecraft.java b/common/src/main/java/com/example/examplemod/mixin/MixinMinecraft.java new file mode 100644 index 0000000..91d9161 --- /dev/null +++ b/common/src/main/java/com/example/examplemod/mixin/MixinMinecraft.java @@ -0,0 +1,20 @@ +package com.example.examplemod.mixin; + +import com.example.examplemod.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.TitleScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(Minecraft.class) +public class MixinMinecraft { + + @Inject(at = @At("TAIL"), method = "") + private void init(CallbackInfo info) { + + Constants.LOG.info("This line is printed by an example mod common mixin!"); + Constants.LOG.info("MC Version: {}", Minecraft.getInstance().getVersionType()); + } +} \ No newline at end of file diff --git a/common/src/main/resources/examplemod.mixins.json b/common/src/main/resources/examplemod.mixins.json new file mode 100644 index 0000000..3bc0b93 --- /dev/null +++ b/common/src/main/resources/examplemod.mixins.json @@ -0,0 +1,18 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.example.examplemod.mixin", + "refmap": "${mod_id}.refmap.json", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + "MixinMinecraft" + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} + diff --git a/fabric/build.gradle b/fabric/build.gradle index efc8d40..f4a766b 100644 --- a/fabric/build.gradle +++ b/fabric/build.gradle @@ -17,6 +17,9 @@ dependencies { } loom { + mixin { + defaultRefmapName.set("${mod_id}.refmap.json") + } runs { client { client() diff --git a/fabric/src/main/java/com/example/examplemod/mixin/ExampleMixin.java b/fabric/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java similarity index 86% rename from fabric/src/main/java/com/example/examplemod/mixin/ExampleMixin.java rename to fabric/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java index cd8beb0..3680cdb 100644 --- a/fabric/src/main/java/com/example/examplemod/mixin/ExampleMixin.java +++ b/fabric/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java @@ -9,13 +9,12 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @Mixin(TitleScreen.class) -public class ExampleMixin { +public class MixinTitleScreen { @Inject(at = @At("HEAD"), method = "init()V") private void init(CallbackInfo info) { Constants.LOG.info("This line is printed by an example mod mixin from Fabric!"); Constants.LOG.info("MC Version: {}", Minecraft.getInstance().getVersionType()); - Constants.LOG.info("Classloader: {}", this.getClass().getClassLoader()); } } \ No newline at end of file diff --git a/fabric/src/main/resources/modid.mixins.json b/fabric/src/main/resources/examplemod.fabric.mixins.json similarity index 72% rename from fabric/src/main/resources/modid.mixins.json rename to fabric/src/main/resources/examplemod.fabric.mixins.json index 77cce1a..ad174ea 100644 --- a/fabric/src/main/resources/modid.mixins.json +++ b/fabric/src/main/resources/examplemod.fabric.mixins.json @@ -2,11 +2,14 @@ "required": true, "minVersion": "0.8", "package": "com.example.examplemod.mixin", + "refmap": "${mod_id}.refmap.json", "compatibilityLevel": "JAVA_17", "mixins": [ ], "client": [ - "ExampleMixin" + "MixinTitleScreen" + ], + "server": [ ], "injectors": { "defaultRequire": 1 diff --git a/fabric/src/main/resources/fabric.mod.json b/fabric/src/main/resources/fabric.mod.json index 93091c4..01122c0 100644 --- a/fabric/src/main/resources/fabric.mod.json +++ b/fabric/src/main/resources/fabric.mod.json @@ -20,7 +20,8 @@ ] }, "mixins": [ - "modid.mixins.json" + "examplemod.mixins.json", + "examplemod.fabric.mixins.json" ], "depends": { "fabricloader": ">=0.14", diff --git a/forge/build.gradle b/forge/build.gradle index a32888e..6f3d0c4 100644 --- a/forge/build.gradle +++ b/forge/build.gradle @@ -2,10 +2,18 @@ plugins { id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' + id 'org.spongepowered.mixin' } archivesBaseName = "${mod_name}-forge-${minecraft_version}" +mixin { + add(sourceSets.main, "${mod_id}.refmap.json") + + config("${mod_id}.mixins.json") + config("${mod_id}.forge.mixins.json") +} + minecraft { mappings channel: 'official', version: minecraft_version @@ -67,6 +75,7 @@ sourceSets.main.resources.srcDir 'src/generated/resources' dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" compileOnly project(":common") + annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT:processor") } tasks.withType(JavaCompile) { diff --git a/forge/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java b/forge/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java new file mode 100644 index 0000000..a2e0c4b --- /dev/null +++ b/forge/src/main/java/com/example/examplemod/mixin/MixinTitleScreen.java @@ -0,0 +1,20 @@ +package com.example.examplemod.mixin; + +import com.example.examplemod.Constants; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.screens.TitleScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(TitleScreen.class) +public class MixinTitleScreen { + + @Inject(at = @At("HEAD"), method = "init()V") + private void init(CallbackInfo info) { + + Constants.LOG.info("This line is printed by an example mod mixin from Forge!"); + Constants.LOG.info("MC Version: {}", Minecraft.getInstance().getVersionType()); + } +} \ No newline at end of file diff --git a/forge/src/main/resources/examplemod.forge.mixins.json b/forge/src/main/resources/examplemod.forge.mixins.json new file mode 100644 index 0000000..95882ac --- /dev/null +++ b/forge/src/main/resources/examplemod.forge.mixins.json @@ -0,0 +1,17 @@ +{ + "required": true, + "minVersion": "0.8", + "package": "com.example.examplemod.mixin", + "refmap": "${mod_id}.refmap.json", + "compatibilityLevel": "JAVA_17", + "mixins": [ + ], + "client": [ + "MixinTitleScreen" + ], + "server": [ + ], + "injectors": { + "defaultRequire": 1 + } +} \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 465535d..b777390 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,7 @@ fabric_loader_version=0.14.11 # Mod options mod_name=MultiLoader mod_author=Jared -mod_id=multiloader +mod_id=examplemod # Gradle org.gradle.jvmargs=-Xmx3G