Skip to content

Commit

Permalink
Get a decomp workspace working without forge being loaded (#24)
Browse files Browse the repository at this point in the history
* Get a decomp workspace working without forge being loaded

* Check against mc minor version instead of whole version

* Convert testmod to a simple functional test

* Apply Spotless

* Fix task dependency resolution failing when userdev config is empty

---------

Co-authored-by: Raven Szewczyk <git@eigenraven.me>
  • Loading branch information
Rongmario and eigenraven authored Apr 27, 2023
1 parent 4f36c8e commit cb88a15
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -141,9 +141,11 @@ public SharedMCPTasks(Project project, McExtType mcExt, MinecraftTasks mcTasks)
}));
final Provider<Directory> 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();
Expand All @@ -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 -> {
Expand Down

0 comments on commit cb88a15

Please sign in to comment.