diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-01-30 18:42:42 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-02-02 14:59:33 +0800 |
| commit | 32e5297de48e47644963a348ff61b5c54c669d95 (patch) | |
| tree | 65f0954a3d78b5b660d464df121bbdcad99ff243 /src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java | |
| parent | 056d46f4d46d75b3d1c366e734cc620738108708 (diff) | |
| parent | 6a315be278216e04f8b2d741a346c9af54eaf4f4 (diff) | |
| download | architectury-loom-32e5297de48e47644963a348ff61b5c54c669d95.tar.gz architectury-loom-32e5297de48e47644963a348ff61b5c54c669d95.tar.bz2 architectury-loom-32e5297de48e47644963a348ff61b5c54c669d95.zip | |
Merge remote-tracking branch 'FabricMC/dev/0.6' into dev/0.6-forge
Diffstat (limited to 'src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java')
| -rw-r--r-- | src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java | 115 |
1 files changed, 67 insertions, 48 deletions
diff --git a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java index 1e75b56b..eb85934a 100644 --- a/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java +++ b/src/main/java/net/fabricmc/loom/configuration/ide/RunConfig.java @@ -31,7 +31,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.UUID; import java.util.function.Supplier; @@ -44,7 +43,6 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.gradle.api.Project; import org.gradle.api.tasks.SourceSet; @@ -63,6 +61,7 @@ public class RunConfig { public String ideaModuleName; public String vscodeProjectName; public String mainClass; + public String runDirIdeaUrl; public String runDir; public String vmArgs; public String programArgs; @@ -75,7 +74,7 @@ public class RunConfig { this.addXml(root, "module", ImmutableMap.of("name", ideaModuleName)); this.addXml(root, "option", ImmutableMap.of("name", "MAIN_CLASS_NAME", "value", mainClass)); - this.addXml(root, "option", ImmutableMap.of("name", "WORKING_DIRECTORY", "value", runDir)); + this.addXml(root, "option", ImmutableMap.of("name", "WORKING_DIRECTORY", "value", runDirIdeaUrl)); if (!Strings.isNullOrEmpty(vmArgs)) { this.addXml(root, "option", ImmutableMap.of("name", "VM_PARAMETERS", "value", vmArgs)); @@ -113,8 +112,8 @@ public class RunConfig { return e; } - private static String getIdeaModuleName(Project project) { - String module = project.getName() + ".main"; + private static String getIdeaModuleName(Project project, SourceSet srcs) { + String module = project.getName() + "." + srcs.getName(); while ((project = project.getParent()) != null) { module = project.getName() + "." + module; @@ -126,13 +125,12 @@ public class RunConfig { private static void populate(Project project, LoomGradleExtension extension, RunConfig runConfig, String mode) { runConfig.configName += extension.isRootProject() ? "" : " (" + project.getPath() + ")"; runConfig.eclipseProjectName = project.getExtensions().getByType(EclipseModel.class).getProject().getName(); - runConfig.ideaModuleName = getIdeaModuleName(project); runConfig.vscodeProjectName = extension.isRootProject() ? "" : project.getPath(); - runConfig.runDir = "file://$PROJECT_DIR$/" + extension.runDir; runConfig.vmArgs = ""; + runConfig.programArgs = ""; if ("launchwrapper".equals(extension.getLoaderLaunchMethod())) { - runConfig.mainClass = "net.minecraft.launchwrapper.Launch"; + runConfig.mainClass = "net.minecraft.launchwrapper.Launch"; // TODO What about custom tweakers for run configs? runConfig.programArgs += "--tweakClass " + ("client".equals(mode) ? Constants.LaunchWrapper.DEFAULT_FABRIC_CLIENT_TWEAKER : Constants.LaunchWrapper.DEFAULT_FABRIC_SERVER_TWEAKER); } else { runConfig.mainClass = "net.fabricmc.devlaunchinjector.Main"; @@ -186,50 +184,74 @@ public class RunConfig { } } - public static RunConfig clientRunConfig(Project project) { - LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); - - RunConfig ideaClient = new RunConfig(); - ideaClient.configName = "Minecraft Client"; - ideaClient.programArgs = ""; - populate(project, extension, ideaClient, "client"); - ideaClient.vmArgs += getOSClientJVMArgs(); - ideaClient.vmArgs += " -Dfabric.dli.main=" + getMainClass("client", extension); - ideaClient.vscodeBeforeRun = new ArrayList<>(extension.getTasksBeforeRun()); + // Turns camelCase/PascalCase into Capital Case + // caseConversionExample -> Case Conversion Example + private static String capitalizeCamelCaseName(String name) { + if (name.length() == 0) { + return ""; + } - return ideaClient; + return name.substring(0, 1).toUpperCase() + name.substring(1).replaceAll("([^A-Z])([A-Z])", "$1 $2"); } - public static RunConfig serverRunConfig(Project project) { + public static RunConfig runConfig(Project project, RunConfigSettings settings) { LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); + String name = settings.getName(); - RunConfig ideaServer = new RunConfig(); - ideaServer.configName = "Minecraft Server"; - ideaServer.programArgs = "nogui "; - populate(project, extension, ideaServer, "server"); - ideaServer.vmArgs += " -Dfabric.dli.main=" + getMainClass("server", extension); - ideaServer.vscodeBeforeRun = new ArrayList<>(extension.getTasksBeforeRun()); + String configName = settings.getConfigName(); + String mode = settings.getMode(); + SourceSet sourceSet = settings.getSource(project); - return ideaServer; - } + String defaultMain = settings.getDefaultMainClass(); - public static RunConfig dataRunConfig(Project project) { - LoomGradleExtension extension = project.getExtensions().getByType(LoomGradleExtension.class); + if (defaultMain == null) { + throw new IllegalArgumentException("Run configuration '" + name + "' must specify 'defaultMainClass'"); + } - RunConfig ideaServer = new RunConfig(); - ideaServer.configName = "Generate Data"; - ideaServer.programArgs = ""; - populate(project, extension, ideaServer, "data"); - ideaServer.vmArgs += " -Dfabric.dli.main=" + getMainClass("data", extension); - ideaServer.vscodeBeforeRun = new ArrayList<>(extension.getTasksBeforeRun()); + if (configName == null) { + configName = ""; + String srcName = sourceSet.getName(); - return ideaServer; - } + if (!srcName.equals(SourceSet.MAIN_SOURCE_SET_NAME)) { + configName += capitalizeCamelCaseName(srcName) + " "; + } + + configName += "Minecraft " + capitalizeCamelCaseName(name); + } + + if (mode == null) { + mode = name; + } + + String runDir = settings.getRunDir(); - // This can be removed at somepoint, its not ideal but its the best solution I could thing of - public static boolean needsUpgrade(File file) throws IOException { - String contents = FileUtils.readFileToString(file, StandardCharsets.UTF_8); - return !(contents.contains("net.fabricmc.devlaunchinjector.Main")); + if (runDir == null) { + runDir = "run"; + } + + RunConfig runConfig = new RunConfig(); + runConfig.configName = configName; + populate(project, extension, runConfig, mode); + runConfig.ideaModuleName = getIdeaModuleName(project, sourceSet); + runConfig.runDirIdeaUrl = "file://$PROJECT_DIR$/" + runDir; + runConfig.runDir = runDir; + + // Custom parameters + for (String progArg : settings.getProgramArgs()) { + runConfig.programArgs += " " + progArg; + } + + for (String vmArg : settings.getVmArgs()) { + runConfig.vmArgs += " " + vmArg; + } + + runConfig.vmArgs += " -Dfabric.dli.main=" + getMainClass(mode, extension, defaultMain); + + // Remove unnecessary leading/trailing whitespaces we might have generated + runConfig.programArgs = runConfig.programArgs.trim(); + runConfig.vmArgs = runConfig.vmArgs.trim(); + + return runConfig; } public String fromDummy(String dummy) throws IOException { @@ -243,6 +265,7 @@ public class RunConfig { dummyConfig = dummyConfig.replace("%MAIN_CLASS%", mainClass); dummyConfig = dummyConfig.replace("%ECLIPSE_PROJECT%", eclipseProjectName); dummyConfig = dummyConfig.replace("%IDEA_MODULE%", ideaModuleName); + dummyConfig = dummyConfig.replace("%RUN_DIRECTORY%", runDir); dummyConfig = dummyConfig.replace("%PROGRAM_ARGS%", programArgs.replaceAll("\"", """)); dummyConfig = dummyConfig.replace("%VM_ARGS%", vmArgs.replaceAll("\"", """)); @@ -276,11 +299,7 @@ public class RunConfig { return ""; } - private static String getMainClass(String side, LoomGradleExtension extension) { - if (extension.isForge()) { - return "net.minecraftforge.userdev.LaunchTesting"; - } - + private static String getMainClass(String side, LoomGradleExtension extension, String defaultMainClass) { JsonObject installerJson = extension.getInstallerJson(); if (installerJson != null && installerJson.has("mainClass")) { @@ -306,7 +325,7 @@ public class RunConfig { return "net.minecraft.launchwrapper.Launch"; } - return "net.fabricmc.loader.launch.knot.Knot" + side.substring(0, 1).toUpperCase(Locale.ROOT) + side.substring(1).toLowerCase(Locale.ROOT); + return defaultMainClass; } private static String encodeEscaped(String s) { |
