From cd14488a78e48043206335aa24cd05d6b41f452d Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 26 Apr 2023 14:39:27 +0100 Subject: [PATCH 1/5] Get a decomp workspace working without forge being loaded --- .../retrofuturagradle/mcp/MCPTasks.java | 42 +++++++++++-------- .../retrofuturagradle/mcp/SharedMCPTasks.java | 4 +- settings.gradle.kts | 1 + testnoforgeenv/build.gradle.kts | 25 +++++++++++ 4 files changed, 53 insertions(+), 19 deletions(-) create mode 100644 testnoforgeenv/build.gradle.kts 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..199f7cbb 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java @@ -887,14 +887,19 @@ 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))); + if (mcExt.getUsesForge().get()) { + deps.addProvider( + forgeUserdevConfiguration.getName(), + mcExt.getForgeVersion() + .map(forgeVer -> String.format("net.minecraftforge:forge:%s:userdev", forgeVer))); + } + + if (mcExt.getUsesForge().get()) { + 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, @@ -985,21 +990,24 @@ 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 (!"1.12.2".equals(mcExt.getMcVersion().get()) || mcExt.getUsesForge().get()) { + 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..6bf609c7 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java @@ -143,7 +143,7 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) taskExtractForgeUserdev = project.getTasks().register("extractForgeUserdev", Copy.class, task -> { 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(); @@ -153,7 +153,7 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) task.from( project.provider( () -> project.zipTree( - forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL).getSingleFile()))); + forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL)))); task.into(userdevExtractRoot); task.doFirst("mkdir", new MkdirAction(userdevExtractRoot)); task.doLast("extractFg2DataIfNeeded", tsk -> { diff --git a/settings.gradle.kts b/settings.gradle.kts index 68a72fee..d7c76b0b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,3 +21,4 @@ plugins { include("testmod") include("testmod1.12") include("testdepmod") +include("testnoforgeenv") diff --git a/testnoforgeenv/build.gradle.kts b/testnoforgeenv/build.gradle.kts new file mode 100644 index 00000000..5ebcdbdf --- /dev/null +++ b/testnoforgeenv/build.gradle.kts @@ -0,0 +1,25 @@ +plugins { + id("com.gtnewhorizons.retrofuturagradle") +} + +repositories { + mavenCentral() + mavenLocal() +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(8)) + vendor.set(JvmVendorSpec.AZUL) + } + withSourcesJar() + withJavadocJar() +} + +minecraft { + mcVersion.set("1.12.2") + usesForge.set(false) +} + +group = "testnoforgeenv" +version = "1.0" \ No newline at end of file From 13659c200c5b0c4defef67b95794f912ee959981 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 26 Apr 2023 15:45:05 +0100 Subject: [PATCH 2/5] Check against mc minor version instead of whole version --- .../java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 199f7cbb..a3ef3335 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/MCPTasks.java @@ -997,7 +997,7 @@ private void afterEvaluate() { deobfuscationATs.from(userdevFile(Constants.PATH_USERDEV_FML_ACCESS_TRANFORMER)); } - if (!"1.12.2".equals(mcExt.getMcVersion().get()) || mcExt.getUsesForge().get()) { + if (mcMinor <= 8 || mcExt.getUsesForge().get()) { taskPatchDecompiledJar.configure(task -> { task.getPatches().builtBy(taskExtractForgeUserdev); task.getInjectionDirectories().builtBy(taskExtractForgeUserdev); From 7b96ffbc93cf83a22734dd72657c6edbb0fd525b Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 26 Apr 2023 19:46:29 +0100 Subject: [PATCH 3/5] Convert testmod to a simple functional test --- .../UserDevPluginFunctionalTest.java | 48 +++++++++++++++++++ settings.gradle.kts | 1 - testnoforgeenv/build.gradle.kts | 25 ---------- 3 files changed, 48 insertions(+), 26 deletions(-) delete mode 100644 testnoforgeenv/build.gradle.kts diff --git a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java index ae6fabd8..9016edc7 100644 --- a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java +++ b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java @@ -7,6 +7,11 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; import org.gradle.testkit.runner.BuildResult; import org.gradle.testkit.runner.BuildTask; @@ -47,6 +52,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 +168,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/settings.gradle.kts b/settings.gradle.kts index d7c76b0b..68a72fee 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -21,4 +21,3 @@ plugins { include("testmod") include("testmod1.12") include("testdepmod") -include("testnoforgeenv") diff --git a/testnoforgeenv/build.gradle.kts b/testnoforgeenv/build.gradle.kts deleted file mode 100644 index 5ebcdbdf..00000000 --- a/testnoforgeenv/build.gradle.kts +++ /dev/null @@ -1,25 +0,0 @@ -plugins { - id("com.gtnewhorizons.retrofuturagradle") -} - -repositories { - mavenCentral() - mavenLocal() -} - -java { - toolchain { - languageVersion.set(JavaLanguageVersion.of(8)) - vendor.set(JvmVendorSpec.AZUL) - } - withSourcesJar() - withJavadocJar() -} - -minecraft { - mcVersion.set("1.12.2") - usesForge.set(false) -} - -group = "testnoforgeenv" -version = "1.0" \ No newline at end of file From 13b61923ad854b1730204c329a2f26cb90c74c43 Mon Sep 17 00:00:00 2001 From: Rongmario Date: Wed, 26 Apr 2023 19:57:52 +0100 Subject: [PATCH 4/5] Apply Spotless --- .../UserDevPluginFunctionalTest.java | 28 ++++++++----------- .../retrofuturagradle/mcp/SharedMCPTasks.java | 6 ++-- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java index 9016edc7..56f76dc2 100644 --- a/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java +++ b/plugin/src/functionalTest/java/com/gtnewhorizons/retrofuturagradle/UserDevPluginFunctionalTest.java @@ -7,10 +7,6 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; -import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; -import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.gradle.testkit.runner.BuildResult; @@ -172,14 +168,14 @@ void canRecompile() throws IOException { void canSetupWithoutForge() throws IOException { writeString(getSettingsFile(), SIMPLE_SETTINGS); String buildscript = """ - plugins { - id('com.gtnewhorizons.retrofuturagradle') - } - minecraft { - mcVersion = '1.12.2' - usesForge = false - } - """; + plugins { + id('com.gtnewhorizons.retrofuturagradle') + } + minecraft { + mcVersion = '1.12.2' + usesForge = false + } + """; writeString(getBuildFile(), buildscript); // Run the build @@ -196,10 +192,10 @@ void canSetupWithoutForge() throws IOException { // 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()); + Assertions.assertEquals( + 0, + jar.stream().filter(ze -> ze.getName().startsWith("net/minecraftforge")) + .filter(ze -> !ze.getName().startsWith("net/minecraftforge/fml/relauncher")).count()); } } 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 6bf609c7..154d365c 100644 --- a/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java +++ b/plugin/src/main/java/com/gtnewhorizons/retrofuturagradle/mcp/SharedMCPTasks.java @@ -143,7 +143,8 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) taskExtractForgeUserdev = project.getTasks().register("extractForgeUserdev", Copy.class, task -> { task.onlyIf(t -> { final File root = userdevExtractRoot.get().getAsFile(); - return !forgeUserdevConfiguration.isEmpty() && !(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 +153,7 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks) task.setGroup(TASK_GROUP_INTERNAL); task.from( project.provider( - () -> project.zipTree( - forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL)))); + () -> project.zipTree(forgeUserdevConfiguration.fileCollection(Specs.SATISFIES_ALL)))); task.into(userdevExtractRoot); task.doFirst("mkdir", new MkdirAction(userdevExtractRoot)); task.doLast("extractFg2DataIfNeeded", tsk -> { From a602f4af31876545467071413eb2ff385c3c3188 Mon Sep 17 00:00:00 2001 From: Raven Szewczyk Date: Thu, 27 Apr 2023 11:01:15 +0100 Subject: [PATCH 5/5] Fix task dependency resolution failing when userdev config is empty --- .../retrofuturagradle/mcp/MCPTasks.java | 26 +++++++++---------- .../retrofuturagradle/mcp/SharedMCPTasks.java | 6 ++++- 2 files changed, 17 insertions(+), 15 deletions(-) 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 a3ef3335..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,20 +887,6 @@ private void afterEvaluate() { .configure(t -> t.onlyIf("skipping slow task", p -> !t.getOutputJar().get().getAsFile().exists())); } - if (mcExt.getUsesForge().get()) { - deps.addProvider( - forgeUserdevConfiguration.getName(), - mcExt.getForgeVersion() - .map(forgeVer -> String.format("net.minecraftforge:forge:%s:userdev", forgeVer))); - } - - if (mcExt.getUsesForge().get()) { - 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, @@ -998,6 +984,18 @@ private void afterEvaluate() { } 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); 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 154d365c..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,6 +141,7 @@ 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 !forgeUserdevConfiguration.isEmpty() @@ -153,7 +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)))); + () -> 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 -> {