From 7a1bf321345e2084d89397189534ffb9dd0759b7 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 30 Dec 2020 15:58:41 +0800 Subject: [PATCH] Allow specifying multiple mixin configs for forge --- .../net/fabricmc/loom/AbstractPlugin.java | 50 +++++++------------ .../fabricmc/loom/LoomGradleExtension.java | 1 + .../loom/providers/LaunchProvider.java | 7 +++ 3 files changed, 25 insertions(+), 33 deletions(-) diff --git a/src/main/java/net/fabricmc/loom/AbstractPlugin.java b/src/main/java/net/fabricmc/loom/AbstractPlugin.java index 5a76c6d5..e4410dfb 100644 --- a/src/main/java/net/fabricmc/loom/AbstractPlugin.java +++ b/src/main/java/net/fabricmc/loom/AbstractPlugin.java @@ -24,14 +24,17 @@ package net.fabricmc.loom; -import java.io.IOException; -import java.util.HashSet; -import java.util.Map; -import java.util.Optional; -import java.util.Set; - import com.google.common.collect.ImmutableMap; import groovy.util.Node; +import net.fabricmc.loom.providers.*; +import net.fabricmc.loom.task.AbstractLoomTask; +import net.fabricmc.loom.task.RemapAllSourcesTask; +import net.fabricmc.loom.task.RemapJarTask; +import net.fabricmc.loom.task.RemapSourcesJarTask; +import net.fabricmc.loom.util.*; +import net.fabricmc.loom.util.mixin.JavaApInvoker; +import net.fabricmc.loom.util.mixin.KaptApInvoker; +import net.fabricmc.loom.util.mixin.ScalaApInvoker; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.Task; @@ -52,32 +55,8 @@ import org.gradle.api.tasks.bundling.Jar; import org.gradle.api.tasks.javadoc.Javadoc; import org.gradle.plugins.ide.idea.model.IdeaModel; -import net.fabricmc.loom.providers.ForgeProvider; -import net.fabricmc.loom.providers.ForgeUniversalProvider; -import net.fabricmc.loom.providers.ForgeUserdevProvider; -import net.fabricmc.loom.providers.LaunchProvider; -import net.fabricmc.loom.providers.MappingsCache; -import net.fabricmc.loom.providers.MappingsProvider; -import net.fabricmc.loom.providers.McpConfigProvider; -import net.fabricmc.loom.providers.MinecraftProvider; -import net.fabricmc.loom.providers.PatchProvider; -import net.fabricmc.loom.task.AbstractLoomTask; -import net.fabricmc.loom.task.RemapAllSourcesTask; -import net.fabricmc.loom.task.RemapJarTask; -import net.fabricmc.loom.task.RemapSourcesJarTask; -import net.fabricmc.loom.util.Constants; -import net.fabricmc.loom.util.DownloadUtil; -import net.fabricmc.loom.util.FabricApiExtension; -import net.fabricmc.loom.util.GroovyXmlUtil; -import net.fabricmc.loom.util.JarRemapper; -import net.fabricmc.loom.util.LoomDependencyManager; -import net.fabricmc.loom.util.NestedJars; -import net.fabricmc.loom.util.RemappedConfigurationEntry; -import net.fabricmc.loom.util.SetupIntelijRunConfigs; -import net.fabricmc.loom.util.SourceRemapper; -import net.fabricmc.loom.util.mixin.JavaApInvoker; -import net.fabricmc.loom.util.mixin.KaptApInvoker; -import net.fabricmc.loom.util.mixin.ScalaApInvoker; +import java.io.IOException; +import java.util.*; public class AbstractPlugin implements Plugin { protected Project project; @@ -295,9 +274,14 @@ public class AbstractPlugin implements Plugin { if (extension.isForge()) { remapJarTask.getToM().set("srg"); ((Jar) jarTask).manifest(manifest -> { + List configs = new ArrayList<>(); if (extension.mixinConfig != null) { - manifest.attributes(ImmutableMap.of("MixinConfigs", extension.mixinConfig)); + configs.add(extension.mixinConfig); } + if (extension.mixinConfigs != null) { + configs.addAll(extension.mixinConfigs); + } + manifest.attributes(ImmutableMap.of("MixinConfigs", String.join(",", configs))); }); } diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 0ea0dd8d..8aaa180b 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -77,6 +77,7 @@ public class LoomGradleExtension { public Function intermediaryUrl = mcVer -> "https://maven.fabricmc.net/net/fabricmc/intermediary/" + mcVer + "/intermediary-" + mcVer + "-v2.jar"; public boolean shareCaches = false; public String mixinConfig = null; // FORGE: Passed to Minecraft + public List mixinConfigs = null; // FORGE: Passed to Minecraft private final ConfigurableFileCollection unmappedMods; diff --git a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java index 48fe2e50..855cc507 100644 --- a/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java +++ b/src/main/java/net/fabricmc/loom/providers/LaunchProvider.java @@ -87,11 +87,18 @@ public class LaunchProvider extends DependencyProvider { .property("net.minecraftforge.gradle.GradleStart.srg.srg-mcp", getExtension().getMappingsProvider().srgToNamedSrg.getAbsolutePath()); String mixinConfig = getExtension().mixinConfig; + List mixinConfigs = getExtension().mixinConfigs; if (mixinConfig != null) { launchConfig.argument("-mixin.config"); launchConfig.argument(mixinConfig); } + if (mixinConfigs != null) { + for (String config : mixinConfigs) { + launchConfig.argument("-mixin.config"); + launchConfig.argument(config); + } + } } //Enable ansi by default for idea and vscode