diff --git a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java index 8f1c7f16..0ea0dd8d 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradleExtension.java +++ b/src/main/java/net/fabricmc/loom/LoomGradleExtension.java @@ -92,6 +92,8 @@ public class LoomGradleExtension { private Mercury[] srcMercuryCache = new Mercury[2]; private final LazyBool forge; private Set mixinMappings = Collections.synchronizedSet(new HashSet<>()); + private final List tasksBeforeRun = Collections.synchronizedList(new ArrayList<>()); + private boolean silentMojangMappingsLicense = false; /** * Loom will generate a new genSources task (with a new name, based off of {@link LoomDecompiler#name()}) @@ -119,7 +121,25 @@ public class LoomGradleExtension { public Mercury getOrCreateSrcMercuryCache(int id, Supplier factory) { return srcMercuryCache[id] != null ? srcMercuryCache[id] : (srcMercuryCache[id] = factory.get()); } - + + public void addTaskBeforeRun(String task) { + synchronized(this.tasksBeforeRun) { + this.tasksBeforeRun.add(task); + } + } + + public List getTasksBeforeRun() { + return tasksBeforeRun; + } + + public void silentMojangMappingsLicense() { + this.silentMojangMappingsLicense = true; + } + + public boolean isSilentMojangMappingsLicenseEnabled() { + return silentMojangMappingsLicense; + } + public Dependency officialMojangMappings() { return new MojangMappingsDependency(project, this); } diff --git a/src/main/java/net/fabricmc/loom/util/RunConfig.java b/src/main/java/net/fabricmc/loom/util/RunConfig.java index f989c217..8575379a 100644 --- a/src/main/java/net/fabricmc/loom/util/RunConfig.java +++ b/src/main/java/net/fabricmc/loom/util/RunConfig.java @@ -24,36 +24,32 @@ package net.fabricmc.loom.util; -import static net.fabricmc.loom.AbstractPlugin.isRootProject; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import java.util.stream.StreamSupport; - import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; import com.google.gson.JsonObject; +import net.fabricmc.loom.LoomGradleExtension; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; +import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; +import org.gradle.plugins.ide.eclipse.model.EclipseModel; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; -import org.gradle.api.Project; -import org.gradle.plugins.ide.eclipse.model.EclipseModel; -import net.fabricmc.loom.LoomGradleExtension; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.*; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import java.util.stream.StreamSupport; + +import static net.fabricmc.loom.AbstractPlugin.isRootProject; public class RunConfig { public String configName; @@ -63,6 +59,7 @@ public class RunConfig { public String runDir; public String vmArgs; public String programArgs; + public List tasksBeforeRun = new ArrayList<>(); public final Map envVariables = new HashMap<>(); public Element genRuns(Element doc) { @@ -88,7 +85,25 @@ public class RunConfig { this.addXml(envs, "env", ImmutableMap.of("name", envEntry.getKey(), "value", envEntry.getValue())); } } - + + if (!tasksBeforeRun.isEmpty()) { + Element methodElement = this.addXml(root, "method", ImmutableMap.of("v", "2")); + + this.addXml(methodElement, "option", ImmutableMap.of("name", "Make", "enabled", "true")); + for (String s : tasksBeforeRun) { + String project = s.substring(0, s.lastIndexOf(':')); + String task = s.substring(s.lastIndexOf(':') + 1); + this.addXml(methodElement, "option", ImmutableMap.builder() + .put("name", "Gradle.BeforeRunTask") + .put("enabled", "true") + .put("tasks", task) + .put("externalProjectPath", project) + .put("vmOptions", "") + .put("scriptParameters", "") + .build()); + } + } + return root; } @@ -186,6 +201,7 @@ public class RunConfig { populate(project, extension, ideaClient, "client"); ideaClient.vmArgs += getOSClientJVMArgs(); ideaClient.vmArgs += " -Dfabric.dli.main=" + getMainClass("client", extension); + ideaClient.tasksBeforeRun = new ArrayList<>(extension.getTasksBeforeRun()); return ideaClient; } @@ -197,6 +213,7 @@ public class RunConfig { ideaServer.configName = "Minecraft Server"; populate(project, extension, ideaServer, "server"); ideaServer.vmArgs += " -Dfabric.dli.main=" + getMainClass("server", extension); + ideaServer.tasksBeforeRun = new ArrayList<>(extension.getTasksBeforeRun()); return ideaServer; } @@ -239,6 +256,14 @@ public class RunConfig { } dummyConfig = dummyConfig.replace("%ENVS%", envs); + + StringBuilder tasksToRun = new StringBuilder(); + for (String s : tasksBeforeRun) { + String project = s.substring(0, s.lastIndexOf(':')); + String task = s.substring(s.lastIndexOf(':') + 1); + tasksToRun.append("