diff --git a/build.gradle b/build.gradle index b0cffca8..a4135ed9 100644 --- a/build.gradle +++ b/build.gradle @@ -41,7 +41,7 @@ dependencies { // implementation ('org.benf:cfr:0.136') implementation ('org.jetbrains:intellij-fernflower:1.0.0.2') - implementation ('net.fabricmc:sponge-mixin:0.7.11.4') { + implementation ('net.fabricmc:sponge-mixin:0.7.11.10') { exclude module: 'launchwrapper' exclude module: 'guava' } diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 4058e586..366d5e6d 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -29,11 +29,14 @@ import net.fabricmc.loom.providers.MinecraftMappedProvider; import net.fabricmc.loom.providers.MinecraftProvider; import net.fabricmc.loom.util.LoomDependencyManager; import org.gradle.api.Project; +import org.gradle.api.artifacts.Dependency; +import javax.annotation.Nullable; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Objects; public class LoomGradleExtension { public String runDir = "run"; @@ -74,6 +77,24 @@ public class LoomGradleExtension { return projectCache; } + @Nullable + public String getMixinVersion() { + for (Dependency dependency : project.getConfigurations().getByName("compile").getDependencies()) { + if (dependency.getName().equalsIgnoreCase("mixin") && dependency.getGroup().equals("org.spongepowered")) { + return dependency.getVersion(); + } + + if (dependency.getName().equals("sponge-mixin") && dependency.getGroup().equals("net.fabricmc")) { + if (Objects.requireNonNull(dependency.getVersion()).split("\\.").length >= 4) { + return dependency.getVersion().substring(0, dependency.getVersion().lastIndexOf('.')) + "-SNAPSHOT"; + } + return dependency.getVersion(); + } + } + + return null; + } + public LoomDependencyManager getDependencyManager() { return dependencyManager; } diff --git a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java index dfa1a3fb..edd00365 100644 --- a/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java +++ b/src/main/java/net/fabricmc/loom/util/LoomDependencyManager.java @@ -66,7 +66,7 @@ public class LoomDependencyManager { } for(String config : targetConfigs){ Configuration configuration = project.getConfigurations().getByName(config); - configuration.getDependencies().stream().forEach(dependency -> { + configuration.getDependencies().forEach(dependency -> { for(DependencyProvider provider : dependencyProviderList){ if(provider.getTargetConfig().equals(config)){ DependencyProvider.DependencyInfo info = new DependencyProvider.DependencyInfo(dependency, configuration); diff --git a/src/main/java/net/fabricmc/loom/util/MixinRefmapHelper.java b/src/main/java/net/fabricmc/loom/util/MixinRefmapHelper.java index 1638e216..c5038575 100644 --- a/src/main/java/net/fabricmc/loom/util/MixinRefmapHelper.java +++ b/src/main/java/net/fabricmc/loom/util/MixinRefmapHelper.java @@ -50,7 +50,7 @@ public final class MixinRefmapHelper { private MixinRefmapHelper() { } - public static boolean addRefmapName(String filename, File output) { + public static boolean addRefmapName(String filename, String mixinVersion, File output) { Set mixinFilenames = findMixins(output, true); if (mixinFilenames.size() > 0) { @@ -61,7 +61,12 @@ public final class MixinRefmapHelper { @Override protected String transform(ZipEntry zipEntry, String input) throws IOException { JsonObject json = GSON.fromJson(input, JsonObject.class); - json.addProperty("refmap", filename); + if (!json.has("refmap")) { + json.addProperty("refmap", filename); + } + if (!json.has("minVersion") && mixinVersion != null) { + json.addProperty("minVersion", mixinVersion); + } return GSON.toJson(json); } })).toArray(ZipEntryTransformerEntry[]::new) @@ -82,7 +87,7 @@ public final class MixinRefmapHelper { try { JsonObject json = GSON.fromJson(inputStreamReader, JsonObject.class); if (json != null && json.has("mixins") && json.get("mixins").isJsonArray()) { - if (!onlyWithoutRefmap || !json.has("refmap")) { + if (!onlyWithoutRefmap || !json.has("refmap") || !json.has("minVersion")) { mixinFilename.add(entry.getName()); } } diff --git a/src/main/java/net/fabricmc/loom/util/ModRemapper.java b/src/main/java/net/fabricmc/loom/util/ModRemapper.java index a9478288..1f6503e1 100644 --- a/src/main/java/net/fabricmc/loom/util/ModRemapper.java +++ b/src/main/java/net/fabricmc/loom/util/ModRemapper.java @@ -31,6 +31,7 @@ import net.fabricmc.tinyremapper.OutputConsumerPath; import net.fabricmc.tinyremapper.TinyRemapper; import net.fabricmc.tinyremapper.TinyUtils; import org.gradle.api.Project; +import org.gradle.api.artifacts.Dependency; import java.io.File; import java.nio.file.Path; @@ -100,7 +101,7 @@ public class ModRemapper { } if (extension.refmapName != null && extension.refmapName.length() > 0) { - if (MixinRefmapHelper.addRefmapName(extension.refmapName, modJarOutput)) { + if (MixinRefmapHelper.addRefmapName(extension.refmapName, extension.getMixinVersion(), modJarOutput)) { project.getLogger().debug("Transformed mixin reference maps in output JAR!"); } }