diff --git a/buildSrc/src/main/kotlin/org/polyfrost/gradle/addDependencies.kt b/buildSrc/src/main/kotlin/org/polyfrost/gradle/addDependencies.kt index 8bd2f481f..ef273a969 100644 --- a/buildSrc/src/main/kotlin/org/polyfrost/gradle/addDependencies.kt +++ b/buildSrc/src/main/kotlin/org/polyfrost/gradle/addDependencies.kt @@ -43,6 +43,11 @@ fun Project.provideIncludedDependencies(version: Triple?, loader: } else if (version != null && version.second > 12) { // forge / neoforge // TODO add KFF } + if (version == null // legacy dep module + || (version.first == 1 && version.second < 12 && loader == "forge")) { + deps.add(libs.findLibrary("mixin").get().get()) // PolyMixin + } + deps.add(libs.findLibrary("mixin-extras").get().get()) val actualDeps = mutableListOf() for (dep in deps) { actualDeps.add(OCDependency(dep)) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b1ab31662..c9f9c58c7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -25,6 +25,7 @@ lwjgl = "3.3.3" # All downloaded by the isolated-lwjgl3-loader # Legacy only mixin = "0.8.4+build.2" +mixin-extras = "0.4.1" # Gradle kotlinx-abi = "0.14.0" @@ -44,6 +45,7 @@ junit = { module = "org.junit.jupiter:junit-jupiter" } junit-bom = { module = "org.junit:junit-bom", version.ref = "junit-bom" } mixin = { module = "org.polyfrost:polymixin", version.ref = "mixin" } +mixin-extras = { module = "io.github.llamalad7:mixinextras-common", version.ref = "mixin-extras" } isolated-lwjgl3-loader = { module = "org.polyfrost:isolated-lwjgl3-loader", version.ref = "isolated-lwjgl3-loader" } polyio = { module = "org.polyfrost:polyio", version.ref = "polyio" } diff --git a/versions/build.gradle.kts b/versions/build.gradle.kts index 3b8599e33..5e590f8f5 100644 --- a/versions/build.gradle.kts +++ b/versions/build.gradle.kts @@ -36,10 +36,9 @@ loom { } if (project.platform.isForge) { forge { - mixinConfig("mixins.${modId}.json") + mixinConfig("mixins.${modId}.json", "mixins.${modId}.init.json") } } - mixin.defaultRefmapName = "mixins.${modId}.refmap.json" } repositories { @@ -62,6 +61,8 @@ dependencies { } } + annotationProcessor(libs.mixin.extras) + for (dep in listOf("-nanovg").run { if (platform.mcVersion < 11300) this else this + listOf("-tinyfd", "-stb", "") }) { val lwjglDep = "org.lwjgl:lwjgl$dep:${libs.versions.lwjgl.get()}" compileOnlyApi(lwjglDep) { @@ -75,9 +76,6 @@ dependencies { } if (platform.isLegacyForge) { - implementation(libs.mixin) { - isTransitive = false - } compileOnly("cc.polyfrost:oneconfig-${platform}:0.2.2-alpha216") { isTransitive = false } @@ -192,12 +190,12 @@ tasks { "ModSide" to "CLIENT", "ForceLoadAsMod" to true, "TweakOrder" to "0", - "MixinConfigs" to "mixins.$modId.json", + "MixinConfigs" to "mixins.$modId.json,mixins.$modId.init.json", "TweakClass" to tweakClass ) ) } else { - put("MixinConfigs", "mixins.$modId.json") + put("MixinConfigs", "mixins.$modId.json,mixins.$modId.init.json") } } putAll( diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigEarlyMixinInit.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigEarlyMixinInit.java new file mode 100644 index 000000000..7edb1c382 --- /dev/null +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/OneConfigEarlyMixinInit.java @@ -0,0 +1,46 @@ +package org.polyfrost.oneconfig.internal; + +import com.llamalad7.mixinextras.MixinExtrasBootstrap; +import org.objectweb.asm.tree.ClassNode; +import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin; +import org.spongepowered.asm.mixin.extensibility.IMixinInfo; + +import java.util.List; +import java.util.Set; + +public class OneConfigEarlyMixinInit implements IMixinConfigPlugin { + @Override + public void onLoad(String mixinPackage) { + MixinExtrasBootstrap.init(); + } + + @Override + public String getRefMapperConfig() { + return null; + } + + @Override + public boolean shouldApplyMixin(String targetClassName, String mixinClassName) { + return true; + } + + @Override + public void acceptTargets(Set myTargets, Set otherTargets) { + + } + + @Override + public List getMixins() { + return null; + } + + @Override + public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } + + @Override + public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) { + + } +} diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/legacy/OneConfigTweaker.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/legacy/OneConfigTweaker.java index 178fcd96e..7965ff16c 100644 --- a/versions/src/main/java/org/polyfrost/oneconfig/internal/legacy/OneConfigTweaker.java +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/legacy/OneConfigTweaker.java @@ -232,6 +232,7 @@ private static void removeLWJGLException() { public void injectIntoClassLoader(LaunchClassLoader classLoader) { MixinBootstrap.init(); Mixins.addConfiguration("mixins.oneconfig.json"); + Mixins.addConfiguration("mixins.oneconfig.init.json"); removeLWJGLException(); // performance fix diff --git a/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/init/package-info.java b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/init/package-info.java new file mode 100644 index 000000000..09372b56a --- /dev/null +++ b/versions/src/main/java/org/polyfrost/oneconfig/internal/mixin/init/package-info.java @@ -0,0 +1,4 @@ +/** + * Dummy package for `mixins.oneconfig.init.json` + */ +package org.polyfrost.oneconfig.internal.mixin.init; \ No newline at end of file diff --git a/versions/src/main/resources/mixins.oneconfig.init.json b/versions/src/main/resources/mixins.oneconfig.init.json new file mode 100644 index 000000000..da8a1aee7 --- /dev/null +++ b/versions/src/main/resources/mixins.oneconfig.init.json @@ -0,0 +1,8 @@ +{ + "compatibilityLevel": "JAVA_8", + "minVersion": "0.8", + "package": "org.polyfrost.oneconfig.internal.mixin.init", + "plugin": "org.polyfrost.oneconfig.internal.OneConfigEarlyMixinInit", + "verbose": true, + "target": "@env(INIT)" +} \ No newline at end of file diff --git a/versions/src/main/resources/mixins.oneconfig.json b/versions/src/main/resources/mixins.oneconfig.json index 461613143..d4acce88e 100644 --- a/versions/src/main/resources/mixins.oneconfig.json +++ b/versions/src/main/resources/mixins.oneconfig.json @@ -1,8 +1,7 @@ { "compatibilityLevel": "JAVA_8", - "minVersion": "0.7", + "minVersion": "0.8", "package": "org.polyfrost.oneconfig.internal.mixin", - "refmap": "mixins.oneconfig.refmap.json", "plugin": "org.polyfrost.oneconfig.internal.OneConfigMixinInit", "injectors": { "maxShiftBy": 5