diff --git a/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java b/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java index 46acac1..2844d2d 100644 --- a/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java +++ b/src/main/java/com/hypherionmc/modfusioner/actions/JarMergeAction.java @@ -1,7 +1,7 @@ package com.hypherionmc.modfusioner.actions; import com.hypherionmc.modfusioner.Constants; -import com.hypherionmc.modfusioner.plugin.ModFusionerExtension; +import com.hypherionmc.modfusioner.plugin.FusionerExtension; import com.hypherionmc.modfusioner.utils.FileTools; import fr.stevecohen.jarmanager.JarPacker; import fr.stevecohen.jarmanager.JarUnpacker; @@ -37,7 +37,7 @@ public class JarMergeAction { @Setter private File forgeInput; @Setter private File fabricInput; @Setter private File quiltInput; - private final Map customInputs; + private final Map customInputs; // Relocations @Setter private Map forgeRelocations; @@ -48,7 +48,7 @@ public class JarMergeAction { @Setter private List forgeMixins; // Custom - private Map> customTemps; + private Map> customTemps; // Relocations private final List ignoredPackages; @@ -143,7 +143,7 @@ public class JarMergeAction { FileTools.moveDirectory(fabricTemp, mergedTemp); FileTools.moveDirectory(quiltTemp, mergedTemp); - for (Map.Entry> entry : customTemps.entrySet()) { + for (Map.Entry> entry : customTemps.entrySet()) { for (Map.Entry entry2 : entry.getValue().entrySet()) { FileTools.moveDirectory(entry2.getValue(), mergedTemp); } @@ -213,7 +213,7 @@ public class JarMergeAction { remapJar(fabricInput, "fabric", fabricRelocations); remapJar(quiltInput, "quilt", quiltRelocations); - for (Map.Entry entry : customInputs.entrySet()) { + for (Map.Entry entry : customInputs.entrySet()) { if (FileTools.exists(entry.getValue())) { remapCustomJar(entry.getKey(), entry.getValue()); } @@ -281,7 +281,7 @@ public class JarMergeAction { * @param jarFile - The input jar of the custom project to be processed * @throws IOException - Thrown if an io exception occurs */ - private void remapCustomJar(ModFusionerExtension.CustomConfiguration configuration, File jarFile) throws IOException { + private void remapCustomJar(FusionerExtension.CustomConfiguration configuration, File jarFile) throws IOException { String name = configuration.getProjectName(); File remappedJar = FileTools.createOrReCreateF(new File(tempDir, "tempCustomInMerging_" + name + ".jar")); @@ -331,7 +331,7 @@ public class JarMergeAction { remapJarResources(fabricInput, "fabric", fabricTemps, fabricRelocations); remapJarResources(quiltInput, "quilt", quiltTemps, quiltRelocations); - for (Map.Entry> entry : customTemps.entrySet()) { + for (Map.Entry> entry : customTemps.entrySet()) { for (Map.Entry entry2 : entry.getValue().entrySet()) { if (entry2.getKey() != null && entry2.getKey().exists()) { File customTemps = entry2.getValue(); @@ -449,7 +449,7 @@ public class JarMergeAction { if (FileTools.exists(quiltInput)) quiltManifest.read(fileInputStream = new FileInputStream(new File(quiltTemp, "META-INF/MANIFEST.MF"))); if (fileInputStream != null) fileInputStream.close(); - for (Map.Entry> entry : customTemps.entrySet()) { + for (Map.Entry> entry : customTemps.entrySet()) { for (Map.Entry entry2 : entry.getValue().entrySet()) { Manifest manifest = new Manifest(); if (FileTools.exists(entry2.getKey())) { @@ -514,7 +514,7 @@ public class JarMergeAction { if (FileTools.exists(fabricInput)) new File(fabricTemp, "META-INF/MANIFEST.MF").delete(); if (FileTools.exists(quiltInput)) new File(quiltTemp, "META-INF/MANIFEST.MF").delete(); - for (Map.Entry> entry : customTemps.entrySet()) { + for (Map.Entry> entry : customTemps.entrySet()) { for (Map.Entry entry2 : entry.getValue().entrySet()) { if (FileTools.exists(entry2.getKey())) new File(entry2.getValue(), "META-INF/MANIFEST.MF").delete(); } @@ -555,7 +555,7 @@ public class JarMergeAction { removeDuplicateRelocationResources.put("quilt/" + duplicatePath, duplicatePath); } - for (Map.Entry> entry : customTemps.entrySet()) { + for (Map.Entry> entry : customTemps.entrySet()) { for (Map.Entry entry2 : entry.getValue().entrySet()) { if (FileTools.exists(entry2.getKey())) { String name = entry.getKey().getProjectName(); diff --git a/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerExtension.java b/src/main/java/com/hypherionmc/modfusioner/plugin/FusionerExtension.java similarity index 70% rename from src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerExtension.java rename to src/main/java/com/hypherionmc/modfusioner/plugin/FusionerExtension.java index f8919f1..c66e967 100644 --- a/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerExtension.java +++ b/src/main/java/com/hypherionmc/modfusioner/plugin/FusionerExtension.java @@ -6,55 +6,71 @@ import lombok.Setter; import java.util.*; -/** - * @author HypherionSA - * Main Plugin Extension allowing users to configure the plugin - */ -public class ModFusionerExtension { +public class FusionerExtension { // Group, or package names that will be used for the final jar - @Getter @Setter - String group; + @Getter + @Setter + String packageGroup; // The name of the final jar @Getter @Setter - String outJarName; + String mergedJarName; - // Duplicate packages that fill be de-duplicated upon merge + // The name of the final jar + @Getter @Setter + String jarVersion; + + // Duplicate packages that will be de-duplicated upon merge @Getter List duplicateRelocations; // The output directory for the merged jar @Getter @Setter - String outputDir = "fused"; + String outputDirectory; // Forge Project Configuration @Getter @Setter - ForgeConfiguration forgeConfiguration; + FusionerExtension.ForgeConfiguration forgeConfiguration; // Fabric Project Configuration @Getter @Setter - FabricConfiguration fabricConfiguration; + FusionerExtension.FabricConfiguration fabricConfiguration; // Quilt Project Configuration @Getter @Setter - QuiltConfiguration quiltConfiguration; + FusionerExtension.QuiltConfiguration quiltConfiguration; // Custom Project Configurations @Getter - List customConfigurations = new ArrayList<>(); + List customConfigurations = new ArrayList<>(); /** * Main extension entry point */ - public ModFusionerExtension() { - if (group == null || group.isEmpty()) { + public FusionerExtension() { + if (packageGroup == null || packageGroup.isEmpty()) { if (ModFusionerPlugin.rootProject.hasProperty("group") && ModFusionerPlugin.rootProject.property("group") != null) { - group = ModFusionerPlugin.rootProject.property("group").toString(); + packageGroup = ModFusionerPlugin.rootProject.property("group").toString(); } else { ModFusionerPlugin.logger.error("\"group\" is not defined and cannot be set automatically"); } } + + if (mergedJarName == null || mergedJarName.isEmpty()) { + mergedJarName = "MergedJar"; + } + + if (jarVersion == null || jarVersion.isEmpty()) { + if (ModFusionerPlugin.rootProject.hasProperty("version") && ModFusionerPlugin.rootProject.property("version") != null) { + jarVersion = ModFusionerPlugin.rootProject.property("version").toString(); + } else { + jarVersion = "1.0"; + } + } + + if (outputDirectory == null || outputDirectory.isEmpty()) + outputDirectory = "artifacts/fused"; } /** @@ -78,8 +94,8 @@ public class ModFusionerExtension { /** * Set up the forge project configurations */ - public ForgeConfiguration forge(Closure closure) { - forgeConfiguration = new ForgeConfiguration(); + public FusionerExtension.ForgeConfiguration forge(Closure closure) { + forgeConfiguration = new FusionerExtension.ForgeConfiguration(); ModFusionerPlugin.rootProject.configure(forgeConfiguration, closure); return forgeConfiguration; } @@ -87,8 +103,8 @@ public class ModFusionerExtension { /** * Set up the fabric project configurations */ - public FabricConfiguration fabric(Closure closure) { - fabricConfiguration = new FabricConfiguration(); + public FusionerExtension.FabricConfiguration fabric(Closure closure) { + fabricConfiguration = new FusionerExtension.FabricConfiguration(); ModFusionerPlugin.rootProject.configure(fabricConfiguration, closure); return fabricConfiguration; } @@ -96,8 +112,8 @@ public class ModFusionerExtension { /** * Set up the quilt project configurations */ - public QuiltConfiguration quilt(Closure closure) { - quiltConfiguration = new QuiltConfiguration(); + public FusionerExtension.QuiltConfiguration quilt(Closure closure) { + quiltConfiguration = new FusionerExtension.QuiltConfiguration(); ModFusionerPlugin.rootProject.configure(quiltConfiguration, closure); return quiltConfiguration; } @@ -105,8 +121,8 @@ public class ModFusionerExtension { /** * Set up custom project configurations */ - public CustomConfiguration custom(Closure closure) { - CustomConfiguration customConfiguration = new CustomConfiguration(); + public FusionerExtension.CustomConfiguration custom(Closure closure) { + FusionerExtension.CustomConfiguration customConfiguration = new FusionerExtension.CustomConfiguration(); ModFusionerPlugin.rootProject.configure(customConfiguration, closure); if (customConfiguration.getProjectName() == null || customConfiguration.getProjectName().isEmpty()) { @@ -127,7 +143,11 @@ public class ModFusionerExtension { // The file that will be used as the input @Getter @Setter - String jarLocation; + String inputFile; + + // The name of the task to run to get the input file + @Getter @Setter + String inputTaskName; // Packages that should be relocated, instead of duplicated @Getter @@ -166,7 +186,11 @@ public class ModFusionerExtension { // The file that will be used as the input @Getter @Setter - String jarLocation; + String inputFile; + + // The name of the task to run to get the input file + @Getter @Setter + String inputTaskName; // Packages that should be relocated, instead of duplicated @Getter @@ -193,7 +217,11 @@ public class ModFusionerExtension { // The file that will be used as the input @Getter @Setter - String jarLocation; + String inputFile; + + // The name of the task to run to get the input file + @Getter @Setter + String inputTaskName; // Packages that should be relocated, instead of duplicated @Getter @@ -220,7 +248,11 @@ public class ModFusionerExtension { // The file that will be used as the input @Getter @Setter - String jarLocation; + String inputFile; + + // The name of the task to run to get the input file + @Getter @Setter + String inputTaskName; // Packages that should be relocated, instead of duplicated @Getter @@ -235,4 +267,5 @@ public class ModFusionerExtension { this.relocations.put(from, to); } } + } diff --git a/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerPlugin.java b/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerPlugin.java index 1ce4abf..10c078d 100644 --- a/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerPlugin.java +++ b/src/main/java/com/hypherionmc/modfusioner/plugin/ModFusionerPlugin.java @@ -1,10 +1,13 @@ package com.hypherionmc.modfusioner.plugin; import com.hypherionmc.modfusioner.Constants; -import com.hypherionmc.modfusioner.task.FuseJarsTask; +import com.hypherionmc.modfusioner.task.JarFuseTask; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.logging.Logger; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.bundling.AbstractArchiveTask; /** * @author HypherionSA @@ -14,18 +17,101 @@ public class ModFusionerPlugin implements Plugin { public static Project rootProject; public static Logger logger; - public static ModFusionerExtension modFusionerExtension; + public static FusionerExtension modFusionerExtension; @Override public void apply(Project project) { - rootProject = project; + // We only want to apply the project to the Root project + if (project != project.getRootProject()) + return; + + rootProject = project.getRootProject(); logger = project.getLogger(); - modFusionerExtension = rootProject.getExtensions().create(Constants.EXTENSION_NAME, ModFusionerExtension.class); + // Register the extension + modFusionerExtension = rootProject.getExtensions().create(Constants.EXTENSION_NAME, FusionerExtension.class); - rootProject.getTasks().register(Constants.TASK_NAME, FuseJarsTask.class).configure(fusioner -> { + // Register the task + TaskProvider task = rootProject.getTasks().register(Constants.TASK_NAME, JarFuseTask.class); + task.configure(fusioner -> { fusioner.setGroup(Constants.TASK_GROUP); fusioner.setDescription("Merge multiple jars into a single jar, for multi mod loader projects"); }); + + // Check for task dependencies and register them on the main task + project.subprojects(cc -> cc.afterEvaluate(ccc -> { + if (modFusionerExtension.getForgeConfiguration() != null + && modFusionerExtension.getForgeConfiguration().inputTaskName != null + && !modFusionerExtension.getForgeConfiguration().inputTaskName.isEmpty()) { + if (ccc.getName().equals(modFusionerExtension.getForgeConfiguration().getProjectName())) + resolveInputTasks( + ccc, + modFusionerExtension.getForgeConfiguration().getInputTaskName(), + modFusionerExtension.getForgeConfiguration().getProjectName(), + task + ); + } + + if (modFusionerExtension.getFabricConfiguration() != null + && modFusionerExtension.getFabricConfiguration().inputTaskName != null + && !modFusionerExtension.getFabricConfiguration().inputTaskName.isEmpty()) { + if (ccc.getName().equals(modFusionerExtension.getFabricConfiguration().getProjectName())) + resolveInputTasks( + ccc, + modFusionerExtension.getFabricConfiguration().getInputTaskName(), + modFusionerExtension.getFabricConfiguration().getProjectName(), + task + ); + } + + if (modFusionerExtension.getQuiltConfiguration() != null + && modFusionerExtension.getQuiltConfiguration().inputTaskName != null + && !modFusionerExtension.getQuiltConfiguration().inputTaskName.isEmpty()) { + if (ccc.getName().equals(modFusionerExtension.getQuiltConfiguration().getProjectName())) + resolveInputTasks( + ccc, + modFusionerExtension.getQuiltConfiguration().getInputTaskName(), + modFusionerExtension.getQuiltConfiguration().getProjectName(), + task + ); + } + + if (modFusionerExtension.getCustomConfigurations() != null && !modFusionerExtension.getCustomConfigurations().isEmpty()) { + modFusionerExtension.getCustomConfigurations().forEach(c -> { + if (ccc.getName().equals(c.getProjectName()) && c.getInputTaskName() != null && !c.getInputTaskName().isEmpty()) + resolveInputTasks(ccc, c.getInputTaskName(), c.getProjectName(), task); + }); + } + })); + } + + /** + * Try to locate the correct task to run on the subproject + * @param project - Sub project being processed + * @param inTask - The name of the task that will be run + * @param inProject - The name of the project the task is on + * @param mainTask - The FuseJars task + */ + private void resolveInputTasks(Project project, Object inTask, String inProject, TaskProvider mainTask) { + if (inTask == null) + return; + + Task task = null; + + if (inProject == null || inProject.isEmpty()) + return; + + if (project == null) + return; + + if (inTask instanceof String) { + task = project.getTasks().getByName((String) inTask); + } + + if (!(task instanceof AbstractArchiveTask)) + return; + + rootProject.task("prepareFuseTask" + project.getName()).dependsOn(":" + project.getName() + ":" + task.getName()); + mainTask.get().dependsOn("prepareFuseTask" + project.getName()); } } diff --git a/src/main/java/com/hypherionmc/modfusioner/task/FuseJarsTask.java b/src/main/java/com/hypherionmc/modfusioner/task/JarFuseTask.java similarity index 62% rename from src/main/java/com/hypherionmc/modfusioner/task/FuseJarsTask.java rename to src/main/java/com/hypherionmc/modfusioner/task/JarFuseTask.java index 53b9d78..dec6700 100644 --- a/src/main/java/com/hypherionmc/modfusioner/task/FuseJarsTask.java +++ b/src/main/java/com/hypherionmc/modfusioner/task/JarFuseTask.java @@ -2,13 +2,16 @@ package com.hypherionmc.modfusioner.task; import com.hypherionmc.modfusioner.Constants; import com.hypherionmc.modfusioner.actions.JarMergeAction; -import com.hypherionmc.modfusioner.plugin.ModFusionerExtension; +import com.hypherionmc.modfusioner.plugin.FusionerExtension; import com.hypherionmc.modfusioner.plugin.ModFusionerPlugin; import com.hypherionmc.modfusioner.utils.FileChecks; +import com.hypherionmc.modfusioner.utils.FileTools; import org.apache.commons.io.FileUtils; -import org.gradle.api.DefaultTask; import org.gradle.api.Project; -import org.gradle.api.tasks.TaskAction; +import org.gradle.api.internal.file.copy.CopyAction; +import org.gradle.api.tasks.WorkResults; +import org.gradle.jvm.tasks.Jar; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; @@ -17,6 +20,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; import java.util.*; +import java.util.concurrent.atomic.AtomicBoolean; import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.modFusionerExtension; import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.rootProject; @@ -25,32 +29,50 @@ import static com.hypherionmc.modfusioner.plugin.ModFusionerPlugin.rootProject; * @author HypherionSA * The main task of the plugin */ -public class FuseJarsTask extends DefaultTask { +public class JarFuseTask extends Jar { - @TaskAction - void meldJars() throws IOException { + // Fixed values + private final File mergedJar; + private static final AtomicBoolean hasRun = new AtomicBoolean(false); + + public JarFuseTask() { + // Set task default values from extension + getArchiveBaseName().set(modFusionerExtension.getMergedJarName()); + getArchiveVersion().set(modFusionerExtension.getJarVersion()); + getDestinationDirectory().set(getProject().file(modFusionerExtension.getOutputDirectory())); + + // We don't allow custom input files, when the user defines their own task + getInputs().files(); + + // Only allow the task to run once per cycle + getOutputs().upToDateWhen(spec -> hasRun.get()); + + // Set output file + mergedJar = new File(getDestinationDirectory().get().getAsFile(), getArchiveFileName().get()); + getOutputs().file(mergedJar); + } + + /** + * Main task logic + * @throws IOException - Thrown when an IO error occurs + */ + void fuseJars() throws IOException { long time = System.currentTimeMillis(); - // Check that all required values are set - if (modFusionerExtension.getOutJarName() == null || modFusionerExtension.getGroup() == null) { - ModFusionerPlugin.logger.error("Please configure \"group\" and \"outJarName\" manually!"); - return; - } - ModFusionerPlugin.logger.lifecycle("Start Fusing Jars"); // Get settings from extension - ModFusionerExtension.ForgeConfiguration forgeConfiguration = modFusionerExtension.getForgeConfiguration(); - ModFusionerExtension.FabricConfiguration fabricConfiguration = modFusionerExtension.getFabricConfiguration(); - ModFusionerExtension.QuiltConfiguration quiltConfiguration = modFusionerExtension.getQuiltConfiguration(); + FusionerExtension.ForgeConfiguration forgeConfiguration = modFusionerExtension.getForgeConfiguration(); + FusionerExtension.FabricConfiguration fabricConfiguration = modFusionerExtension.getFabricConfiguration(); + FusionerExtension.QuiltConfiguration quiltConfiguration = modFusionerExtension.getQuiltConfiguration(); - List customConfigurations = modFusionerExtension.getCustomConfigurations(); + List customConfigurations = modFusionerExtension.getCustomConfigurations(); // Try to resolve the projects specific in the extension config Project forgeProject = null; Project fabricProject = null; Project quiltProject = null; - Map customProjects = new HashMap<>(); + Map customProjects = new HashMap<>(); List validation = new ArrayList<>(); if (forgeConfiguration != null) { @@ -75,7 +97,7 @@ public class FuseJarsTask extends DefaultTask { } if (customConfigurations != null) { - for (ModFusionerExtension.CustomConfiguration customSettings : customConfigurations) { + for (FusionerExtension.CustomConfiguration customSettings : customConfigurations) { try { customProjects.put(rootProject.getAllprojects().stream().filter(p -> !p.getName().equals(rootProject.getName())).filter(p -> p.getName().equals(customSettings.getProjectName())).findFirst().get(), customSettings); validation.add(true); @@ -95,28 +117,27 @@ public class FuseJarsTask extends DefaultTask { File forgeJar = null; File fabricJar = null; File quiltJar = null; - Map customJars = new HashMap<>(); + Map customJars = new HashMap<>(); if (forgeProject != null && forgeConfiguration != null) { - forgeJar = getInputFile(forgeConfiguration.getJarLocation(), forgeProject); + forgeJar = getInputFile(forgeConfiguration.getInputFile(), forgeConfiguration.getInputTaskName(), forgeProject); } if (fabricProject != null && fabricConfiguration != null) { - fabricJar = getInputFile(fabricConfiguration.getJarLocation(), fabricProject); + fabricJar = getInputFile(fabricConfiguration.getInputFile(), fabricConfiguration.getInputTaskName(), fabricProject); } if (quiltProject != null && quiltConfiguration != null) { - quiltJar = getInputFile(quiltConfiguration.getJarLocation(), quiltProject); + quiltJar = getInputFile(quiltConfiguration.getInputFile(), quiltConfiguration.getInputTaskName(), quiltProject); } - for (Map.Entry entry : customProjects.entrySet()) { - File f = getInputFile(entry.getValue().getJarLocation(), entry.getKey()); + for (Map.Entry entry : customProjects.entrySet()) { + File f = getInputFile(entry.getValue().getInputFile(), entry.getValue().getInputTaskName(), entry.getKey()); if (f != null) customJars.put(entry.getValue(), f); } // Set up the final output jar - File mergedJar = new File(rootProject.getRootDir(), modFusionerExtension.getOutputDir() + File.separator + modFusionerExtension.getOutJarName()); if (mergedJar.exists()) FileUtils.forceDelete(mergedJar); if (!mergedJar.getParentFile().exists()) mergedJar.getParentFile().mkdirs(); @@ -124,9 +145,9 @@ public class FuseJarsTask extends DefaultTask { JarMergeAction mergeAction = JarMergeAction.of( customJars, modFusionerExtension.getDuplicateRelocations(), - modFusionerExtension.getGroup(), + modFusionerExtension.getPackageGroup(), new File(rootProject.getRootDir(), ".gradle" + File.separator + "fusioner"), - modFusionerExtension.getOutJarName() + getArchiveFileName().get() ); // Forge @@ -155,6 +176,27 @@ public class FuseJarsTask extends DefaultTask { mergeAction.clean(); ModFusionerPlugin.logger.lifecycle("Fused jar created in " + (System.currentTimeMillis() - time) / 1000.0 + " seconds."); + hasRun.set(true); + } + + /** + * Run the main task logic and copy the files to the correct locations + * @return - Just returns true to say the task executed + */ + @Override + protected @NotNull CopyAction createCopyAction() { + return copyActionProcessingStream -> { + copyActionProcessingStream.process(fileCopyDetailsInternal -> { + if (!hasRun.get()) + try { + fuseJars(); + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + return WorkResults.didWork(true); + }; } /** @@ -164,9 +206,11 @@ public class FuseJarsTask extends DefaultTask { * @return - The jar file or null */ @Nullable - private File getInputFile(@Nullable String jarLocation, Project inProject) { + private File getInputFile(@Nullable String jarLocation, String inputTaskName, Project inProject) { if (jarLocation != null && !jarLocation.isEmpty()) { return new File(inProject.getProjectDir(), jarLocation); + } else if (inputTaskName != null && !inputTaskName.isEmpty()) { + return FileTools.resolveFile(inProject, inputTaskName); } else { int i = 0; for (File file : new File(inProject.getBuildDir(), "libs").listFiles()) { diff --git a/src/main/java/com/hypherionmc/modfusioner/utils/FileChecks.java b/src/main/java/com/hypherionmc/modfusioner/utils/FileChecks.java index 7d28017..49ee1d4 100644 --- a/src/main/java/com/hypherionmc/modfusioner/utils/FileChecks.java +++ b/src/main/java/com/hypherionmc/modfusioner/utils/FileChecks.java @@ -3,7 +3,6 @@ package com.hypherionmc.modfusioner.utils; import org.apache.tika.Tika; import org.jetbrains.annotations.NotNull; -import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; diff --git a/src/main/java/com/hypherionmc/modfusioner/utils/FileTools.java b/src/main/java/com/hypherionmc/modfusioner/utils/FileTools.java index 5b41b9b..87ee967 100644 --- a/src/main/java/com/hypherionmc/modfusioner/utils/FileTools.java +++ b/src/main/java/com/hypherionmc/modfusioner/utils/FileTools.java @@ -2,6 +2,9 @@ package com.hypherionmc.modfusioner.utils; import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; +import org.gradle.api.Project; +import org.gradle.api.Task; +import org.gradle.api.tasks.bundling.AbstractArchiveTask; import org.jetbrains.annotations.NotNull; import java.io.File; @@ -10,11 +13,11 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.Charset; import java.nio.file.CopyOption; -import java.nio.file.Files; -import java.nio.file.Path; import java.nio.file.StandardCopyOption; -import java.util.*; -import java.util.stream.Stream; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.Scanner; import static org.apache.commons.io.FileUtils.*; @@ -399,4 +402,25 @@ public class FileTools { return dir; } + + public static File resolveFile(Project project, Object obj) { + if (obj == null) { + throw new NullPointerException("Null Path"); + } + + if (obj instanceof String) { + Task t = project.getTasks().getByName((String) obj); + if (t instanceof AbstractArchiveTask) + return ((AbstractArchiveTask)t).getArchiveFile().get().getAsFile(); + } + + if (obj instanceof File) { + return (File) obj; + } + + if (obj instanceof AbstractArchiveTask) { + return ((AbstractArchiveTask)obj).getArchiveFile().get().getAsFile(); + } + return project.file(obj); + } }