From a32b94a6575ce3631709aa1f8a05723c32103dfe Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 21 Sep 2016 10:46:57 +0100 Subject: [PATCH] Add runServer and runClient tasks --- .../net/fabricmc/loom/LoomGradlePlugin.java | 3 + .../loom/task/GenVSCodeProjectTask.java | 62 ++++++------- .../net/fabricmc/loom/task/MergeJarsTask.java | 2 +- .../net/fabricmc/loom/task/RunClientTask.java | 92 +++++++++++++++++++ .../net/fabricmc/loom/task/RunServerTask.java | 89 ++++++++++++++++++ 5 files changed, 216 insertions(+), 32 deletions(-) create mode 100644 src/main/java/net/fabricmc/loom/task/RunClientTask.java create mode 100644 src/main/java/net/fabricmc/loom/task/RunServerTask.java diff --git a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java index 96c0a31..fd39b4e 100644 --- a/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java +++ b/src/main/java/net/fabricmc/loom/LoomGradlePlugin.java @@ -42,5 +42,8 @@ public class LoomGradlePlugin extends AbstractPlugin { makeTask("genIdeaRuns", GenIdeaProjectTask.class).dependsOn("cleanIdea").dependsOn("idea").dependsOn("extractNatives"); makeTask("vscode", GenVSCodeProjectTask.class).dependsOn("extractNatives"); + + makeTask("runClient", RunClientTask.class).dependsOn("buildNeeded"); + makeTask("runServer", RunServerTask.class).dependsOn("buildNeeded"); } } diff --git a/src/main/java/net/fabricmc/loom/task/GenVSCodeProjectTask.java b/src/main/java/net/fabricmc/loom/task/GenVSCodeProjectTask.java index 7c6063e..e05199b 100644 --- a/src/main/java/net/fabricmc/loom/task/GenVSCodeProjectTask.java +++ b/src/main/java/net/fabricmc/loom/task/GenVSCodeProjectTask.java @@ -44,40 +44,40 @@ import java.util.List; */ public class GenVSCodeProjectTask extends DefaultTask { - @TaskAction - public void genVsCodeProject() throws IOException { - LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); - File classPathFile = new File("vscodeClasspath.txt"); - File configFile = new File("javaconfig.json"); + @TaskAction + public void genVsCodeProject() throws IOException { + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); + File classPathFile = new File("vscodeClasspath.txt"); + File configFile = new File("javaconfig.json"); - Gson gson = new Gson(); - Version version = gson.fromJson(new FileReader(Constants.MINECRAFT_JSON.get(extension)), Version.class); + Gson gson = new Gson(); + Version version = gson.fromJson(new FileReader(Constants.MINECRAFT_JSON.get(extension)), Version.class); - List libs = new ArrayList<>(); - for (Version.Library library : version.libraries) { - if (library.allowed() && library.getFile(extension) != null && library.getFile(extension).exists()) { - libs.add(library.getFile(extension).getAbsolutePath()); - } - } - libs.add(Constants.MINECRAFT_MAPPED_JAR.get(extension).getAbsolutePath()); - for (File file : getProject().getConfigurations().getByName("compile").getFiles()) { - libs.add(file.getAbsolutePath()); - } - FileUtils.writeLines(classPathFile, libs); + List libs = new ArrayList<>(); + for (Version.Library library : version.libraries) { + if (library.allowed() && library.getFile(extension) != null && library.getFile(extension).exists()) { + libs.add(library.getFile(extension).getAbsolutePath()); + } + } + libs.add(Constants.MINECRAFT_MAPPED_JAR.get(extension).getAbsolutePath()); + for (File file : getProject().getConfigurations().getByName("compile").getFiles()) { + libs.add(file.getAbsolutePath()); + } + FileUtils.writeLines(classPathFile, libs); - JsonObject jsonObject = new JsonObject(); - JsonArray jsonArray = new JsonArray(); - jsonArray.add("src/main/java"); - jsonArray.add("src/main/resorces"); - jsonArray.add("src/test/java"); - jsonArray.add("src/test/resorces"); - jsonObject.add("sourcePath", jsonArray); - JsonElement element = new JsonPrimitive(classPathFile.getName()); - jsonObject.add("classPathFile", element); - element = new JsonPrimitive("vscode"); - jsonObject.add("outputDirectory", element); + JsonObject jsonObject = new JsonObject(); + JsonArray jsonArray = new JsonArray(); + jsonArray.add("src/main/java"); + jsonArray.add("src/main/resorces"); + jsonArray.add("src/test/java"); + jsonArray.add("src/test/resorces"); + jsonObject.add("sourcePath", jsonArray); + JsonElement element = new JsonPrimitive(classPathFile.getName()); + jsonObject.add("classPathFile", element); + element = new JsonPrimitive("vscode"); + jsonObject.add("outputDirectory", element); - FileUtils.write(configFile, gson.toJson(jsonObject), Charset.defaultCharset()); - } + FileUtils.write(configFile, gson.toJson(jsonObject), Charset.defaultCharset()); + } } diff --git a/src/main/java/net/fabricmc/loom/task/MergeJarsTask.java b/src/main/java/net/fabricmc/loom/task/MergeJarsTask.java index 52209cf..a71d3b0 100644 --- a/src/main/java/net/fabricmc/loom/task/MergeJarsTask.java +++ b/src/main/java/net/fabricmc/loom/task/MergeJarsTask.java @@ -40,7 +40,7 @@ public class MergeJarsTask extends DefaultTask { public void mergeJars() throws IOException { LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); - if(!Constants.MINECRAFT_MERGED_JAR.get(extension).exists()){ + if (!Constants.MINECRAFT_MERGED_JAR.get(extension).exists()) { this.getLogger().lifecycle(":merging jars"); FileInputStream client = new FileInputStream(Constants.MINECRAFT_CLIENT_JAR.get(extension)); FileInputStream server = new FileInputStream(Constants.MINECRAFT_SERVER_JAR.get(extension)); diff --git a/src/main/java/net/fabricmc/loom/task/RunClientTask.java b/src/main/java/net/fabricmc/loom/task/RunClientTask.java new file mode 100644 index 0000000..bcb1840 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/task/RunClientTask.java @@ -0,0 +1,92 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2016 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.task; + +import com.google.gson.Gson; +import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.Version; +import org.gradle.api.tasks.JavaExec; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; + +public class RunClientTask extends JavaExec { + + @Override + public void exec() { + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); + Gson gson = new Gson(); + Version version = null; + try { + version = gson.fromJson(new FileReader(Constants.MINECRAFT_JSON.get(extension)), Version.class); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + List libs = new ArrayList<>(); + for (File file : getProject().getConfigurations().getByName("compile").getFiles()) { + libs.add(file.getAbsolutePath()); + } + for (File file : getProject().getConfigurations().getByName(Constants.CONFIG_MC_DEPENDENCIES_CLIENT).getFiles()) { + libs.add(file.getAbsolutePath()); + } + for (File file : getProject().getConfigurations().getByName(Constants.CONFIG_MC_DEPENDENCIES).getFiles()) { + libs.add(file.getAbsolutePath()); + } + //Used to add the fabric jar that has been built + for (File file : new File(getProject().getBuildDir(), "libs").listFiles()) { + if (file.isFile()) { + libs.add(file.getAbsolutePath()); + } + } + libs.add(Constants.MINECRAFT_MAPPED_JAR.get(extension).getAbsolutePath()); + classpath(libs); + + args("--tweakClass", "net.fabricmc.base.launch.FabricClientTweaker", "--assetIndex", version.assetIndex.id, "--assetsDir", new File(extension.getFabricUserCache(), "assets-" + extension.version).getAbsolutePath()); + + setWorkingDir(new File(getProject().getRootDir(), "run")); + + super.exec(); + } + + @Override + public String getMain() { + return "net.minecraft.launchwrapper.Launch"; + } + + @Override + public List getJvmArgs() { + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); + List args = new ArrayList<>(); + args.add("-Djava.library.path=" + Constants.MINECRAFT_NATIVES.get(extension).getAbsolutePath()); + args.add("-Dfabric.development=true"); + return args; + } + +} diff --git a/src/main/java/net/fabricmc/loom/task/RunServerTask.java b/src/main/java/net/fabricmc/loom/task/RunServerTask.java new file mode 100644 index 0000000..1d895b2 --- /dev/null +++ b/src/main/java/net/fabricmc/loom/task/RunServerTask.java @@ -0,0 +1,89 @@ +/* + * This file is part of fabric-loom, licensed under the MIT License (MIT). + * + * Copyright (c) 2016 FabricMC + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package net.fabricmc.loom.task; + +import com.google.gson.Gson; +import net.fabricmc.loom.LoomGradleExtension; +import net.fabricmc.loom.util.Constants; +import net.fabricmc.loom.util.Version; +import org.gradle.api.tasks.JavaExec; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.util.ArrayList; +import java.util.List; + +public class RunServerTask extends JavaExec { + + @Override + public void exec() { + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); + Gson gson = new Gson(); + Version version = null; + try { + version = gson.fromJson(new FileReader(Constants.MINECRAFT_JSON.get(extension)), Version.class); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + + List libs = new ArrayList<>(); + for (File file : getProject().getConfigurations().getByName("compile").getFiles()) { + libs.add(file.getAbsolutePath()); + } + for (File file : getProject().getConfigurations().getByName(Constants.CONFIG_MC_DEPENDENCIES).getFiles()) { + libs.add(file.getAbsolutePath()); + } + //Used to add the fabric jar that has been built + for (File file : new File(getProject().getBuildDir(), "libs").listFiles()) { + if (file.isFile()) { + libs.add(file.getAbsolutePath()); + } + } + libs.add(Constants.MINECRAFT_MAPPED_JAR.get(extension).getAbsolutePath()); + classpath(libs); + + args("--tweakClass", "net.fabricmc.base.launch.FabricServerTweaker"); + + setWorkingDir(new File(getProject().getRootDir(), "run")); + + super.exec(); + } + + @Override + public String getMain() { + return "net.minecraft.launchwrapper.Launch"; + } + + @Override + public List getJvmArgs() { + LoomGradleExtension extension = this.getProject().getExtensions().getByType(LoomGradleExtension.class); + List args = new ArrayList<>(); + args.add("-Djava.library.path=" + Constants.MINECRAFT_NATIVES.get(extension).getAbsolutePath()); + args.add("-Dfabric.development=true"); + return args; + } + +}