diff --git a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java index ae6fabd8..56f76dc2 100644 --- a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java +++ b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java @@ -7,6 +7,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.util.zip.ZipFile; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.BuildTask; @@ -47,6 +48,14 @@ private File getSettingsFile() { return new File(projectDir, "settings.gradle"); } + private File getBuildDir() { + return new File(projectDir, "build"); + } + + private File getLocalCacheDir() { + return new File(getBuildDir(), "rfg"); + } + @Test void canFetchManifests() throws IOException { writeString(getSettingsFile(), SIMPLE_SETTINGS); @@ -155,6 +164,41 @@ void canRecompile() throws IOException { new BuildTask[] {}); } + @Test + void canSetupWithoutForge() throws IOException { + writeString(getSettingsFile(), SIMPLE_SETTINGS); + String buildscript = """ + plugins { + id('com.gtnewhorizons.retrofuturagradle') + } + minecraft { + mcVersion = '1.12.2' + usesForge = false + } + """; + writeString(getBuildFile(), buildscript); + + // Run the build + GradleRunner runner = GradleRunner.create(); + runner.forwardOutput(); + runner.withPluginClasspath(); + runner.withArguments("--stacktrace", "--", "packagePatchedMc"); + runner.withProjectDir(projectDir); + BuildResult result = runner.build(); + BuildResult secondResult = runner.build(); + Assertions.assertArrayEquals( + secondResult.tasks(TaskOutcome.SUCCESS).toArray(new BuildTask[0]), + new BuildTask[] {}); + + // Check for the absence of net.minecraftforge packages except net.minecraftforge.fml.relauncher + try (final ZipFile jar = new ZipFile(new File(getLocalCacheDir(), "mcp_patched_minecraft-sources.jar"))) { + Assertions.assertEquals( + 0, + jar.stream().filter(ze -> ze.getName().startsWith("net/minecraftforge")) + .filter(ze -> !ze.getName().startsWith("net/minecraftforge/fml/relauncher")).count()); + } + } + private void writeString(File file, String string) throws IOException { try (Writer writer = new FileWriter(file)) { writer.write(string); diff --git a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java index 2f55e417..45b1352f 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java @@ -887,15 +887,6 @@ private void afterEvaluate() { .configure(t -> t.onlyIf("skipping slow task", p -> !t.getOutputJar().get().getAsFile().exists())); } - deps.addProvider( - forgeUserdevConfiguration.getName(), - mcExt.getForgeVersion() - .map(forgeVer -> String.format("net.minecraftforge:forge:%s:userdev", forgeVer))); - deps.addProvider( - forgeUniversalConfiguration.getName(), - mcExt.getForgeVersion() - .map(forgeVer -> String.format("net.minecraftforge:forge:%s:universal", forgeVer))); - // Workaround https://github.com/gradle/gradle/issues/10861 to avoid publishing these dependencies for (String configName : new String[] { JavaPlugin.COMPILE_CLASSPATH_CONFIGURATION_NAME, JavaPlugin.RUNTIME_CLASSPATH_CONFIGURATION_NAME, JavaPlugin.TEST_COMPILE_CLASSPATH_CONFIGURATION_NAME, @@ -985,21 +976,36 @@ private void afterEvaluate() { }); } } + if (mcExt.getUsesFml().get()) { deobfuscationATs.builtBy(taskExtractForgeUserdev); if (mcMinor <= 8) { deobfuscationATs.from(userdevFile(Constants.PATH_USERDEV_FML_ACCESS_TRANFORMER)); } - taskPatchDecompiledJar.configure(task -> { - task.getPatches().builtBy(taskExtractForgeUserdev); - task.getInjectionDirectories().builtBy(taskExtractForgeUserdev); - if (mcMinor <= 8) { - task.getPatches().from(userdevFile("fmlpatches.zip")); - } - task.getInjectionDirectories().from(userdevDir("src/main/java")); - task.getInjectionDirectories().from(userdevDir("src/main/resources")); - }); + if (mcMinor <= 8 || mcExt.getUsesForge().get()) { + taskExtractForgeUserdev.configure(t -> t.setEnabled(true)); + + deps.addProvider( + forgeUserdevConfiguration.getName(), + mcExt.getForgeVersion() + .map(forgeVer -> String.format("net.minecraftforge:forge:%s:userdev", forgeVer))); + + deps.addProvider( + forgeUniversalConfiguration.getName(), + mcExt.getForgeVersion() + .map(forgeVer -> String.format("net.minecraftforge:forge:%s:universal", forgeVer))); + + taskPatchDecompiledJar.configure(task -> { + task.getPatches().builtBy(taskExtractForgeUserdev); + task.getInjectionDirectories().builtBy(taskExtractForgeUserdev); + if (mcMinor <= 8) { + task.getPatches().from(userdevFile("fmlpatches.zip")); + } + task.getInjectionDirectories().from(userdevDir("src/main/java")); + task.getInjectionDirectories().from(userdevDir("src/main/resources")); + }); + } final String mcVer = mcExt.getMcVersion().get(); final String PATCHED_MC_CFG = patchedConfiguration.getName(); diff --git a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java index d17eb94d..0d4c0e16 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java @@ -141,9 +141,11 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) })); final Provider userdevExtractRoot = userdevRootProvider.map(root -> root.dir("unpacked")); taskExtractForgeUserdev = project.getTasks().register("extractForgeUserdev", Copy.class, task -> { + task.setEnabled(false); // Enabled as needed in MCPTasks task.onlyIf(t -> { final File root = userdevExtractRoot.get().getAsFile(); - return !(root.isDirectory() && new File(root, "dev.json").isFile()); + return !forgeUserdevConfiguration.isEmpty() + && !(root.isDirectory() && new File(root, "dev.json").isFile()); }); task.getOutputs().upToDateWhen(t -> { final File root = userdevExtractRoot.get().getAsFile(); @@ -152,8 +154,10 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) task.setGroup(TASK_GROUP_INTERNAL); task.from( project.provider( - () -> project.zipTree( - forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL).getSingleFile()))); + () -> forgeUserdevConfiguration.isEmpty() ? project.files() + : project.zipTree( + forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL) + .getSingleFile()))); task.into(userdevExtractRoot); task.doFirst("mkdir", new MkdirAction(userdevExtractRoot)); task.doLast("extractFg2DataIfNeeded", tsk -> {