diff --git a/src/main/java/net/fabricmc/loom/task/LoomTasks.java b/src/main/java/net/fabricmc/loom/task/LoomTasks.java index 312d558d..c39023f2 100644 --- a/src/main/java/net/fabricmc/loom/task/LoomTasks.java +++ b/src/main/java/net/fabricmc/loom/task/LoomTasks.java @@ -25,6 +25,7 @@ package net.fabricmc.loom.task; import java.io.File; +import java.util.Objects; import javax.inject.Inject; @@ -36,6 +37,7 @@ import org.gradle.api.tasks.Sync; import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskOutputs; import org.gradle.api.tasks.TaskProvider; +import org.jetbrains.annotations.Nullable; import net.fabricmc.loom.LoomGradleExtension; import net.fabricmc.loom.configuration.ide.RunConfigSettings; @@ -60,6 +62,82 @@ public abstract class LoomTasks implements Runnable { @Override public void run() { + LoomGradleExtension extension = LoomGradleExtension.get(getProject()); + + if (!extension.disableObfuscation()) { + registerMigrateMappingsTasks(); + } + + var generateLog4jConfig = getTasks().register("generateLog4jConfig", GenerateLog4jConfigTask.class, t -> { + t.setDescription("Generate the log4j config file"); + }); + + @Nullable TaskProvider generateRemapClasspath = null; + + if (!extension.disableObfuscation()) { + generateRemapClasspath = getTasks().register("generateRemapClasspath", GenerateRemapClasspathTask.class, t -> { + t.setDescription("Generate the remap classpath file"); + }); + } + + // Make the lambda happy + final @Nullable TaskProvider generateRemapClasspathTask = generateRemapClasspath; + + getTasks().register("generateDLIConfig", GenerateDLIConfigTask.class, t -> { + t.setDescription("Generate the DevLaunchInjector config file"); + + // Must allow these IDE files to be generated first + t.mustRunAfter("eclipse"); + + t.dependsOn(generateLog4jConfig); + + if (!extension.disableObfuscation()) { + GenerateRemapClasspathTask remapClasspath = Objects.requireNonNull(generateRemapClasspathTask.get()); + t.getRemapClasspathFile().set(remapClasspath.getRemapClasspathFile()); + } + }); + + getTasks().register("configureLaunch", task -> { + task.dependsOn(getTasks().named("generateDLIConfig")); + task.dependsOn(getTasks().named("generateLog4jConfig")); + + if (!extension.disableObfuscation()) { + task.dependsOn(getTasks().named("generateRemapClasspath")); + } + + task.setDescription("Setup the required files to launch Minecraft"); + task.setGroup(Constants.TaskGroup.FABRIC); + }); + + TaskProvider validateAccessWidener = getTasks().register("validateAccessWidener", ValidateAccessWidenerTask.class, t -> { + t.setDescription("Validate all the rules in the access widener against the Minecraft jar"); + t.setGroup("verification"); + }); + + getTasks().named("check").configure(task -> task.dependsOn(validateAccessWidener)); + + registerIDETasks(); + registerRunTasks(); + + // Must be done in afterEvaluate to allow time for the build script to configure the jar config. + GradleUtils.afterSuccessfulEvaluation(getProject(), () -> { + if (extension.getMinecraftJarConfiguration().get() == MinecraftJarConfiguration.SERVER_ONLY) { + // Server only, nothing more to do. + return; + } + + final MinecraftVersionMeta versionInfo = extension.getMinecraftProvider().getVersionInfo(); + + if (versionInfo == null) { + // Something has gone wrong, don't register the task. + return; + } + + registerClientSetupTasks(getTasks(), versionInfo.hasNativesToExtract()); + }); + } + + private void registerMigrateMappingsTasks() { SourceSetHelper.getSourceSets(getProject()).all(sourceSet -> { if (SourceSetHelper.isMainSourceSet(sourceSet)) { getTasks().register("migrateMappings", MigrateMappingsTask.class, t -> { @@ -83,60 +161,6 @@ public abstract class LoomTasks implements Runnable { getTasks().register("migrateClassTweakerMappings", MigrateClassTweakerMappingsTask.class, t -> { t.setDescription("Migrates access widener and class tweaker mappings to a new version."); }); - - var generateLog4jConfig = getTasks().register("generateLog4jConfig", GenerateLog4jConfigTask.class, t -> { - t.setDescription("Generate the log4j config file"); - }); - var generateRemapClasspath = getTasks().register("generateRemapClasspath", GenerateRemapClasspathTask.class, t -> { - t.setDescription("Generate the remap classpath file"); - }); - getTasks().register("generateDLIConfig", GenerateDLIConfigTask.class, t -> { - t.setDescription("Generate the DevLaunchInjector config file"); - - // Must allow these IDE files to be generated first - t.mustRunAfter("eclipse"); - - t.dependsOn(generateLog4jConfig); - t.getRemapClasspathFile().set(generateRemapClasspath.get().getRemapClasspathFile()); - }); - - getTasks().register("configureLaunch", task -> { - task.dependsOn(getTasks().named("generateDLIConfig")); - task.dependsOn(getTasks().named("generateLog4jConfig")); - task.dependsOn(getTasks().named("generateRemapClasspath")); - - task.setDescription("Setup the required files to launch Minecraft"); - task.setGroup(Constants.TaskGroup.FABRIC); - }); - - TaskProvider validateAccessWidener = getTasks().register("validateAccessWidener", ValidateAccessWidenerTask.class, t -> { - t.setDescription("Validate all the rules in the access widener against the Minecraft jar"); - t.setGroup("verification"); - }); - - getTasks().named("check").configure(task -> task.dependsOn(validateAccessWidener)); - - registerIDETasks(); - registerRunTasks(); - - // Must be done in afterEvaluate to allow time for the build script to configure the jar config. - GradleUtils.afterSuccessfulEvaluation(getProject(), () -> { - LoomGradleExtension extension = LoomGradleExtension.get(getProject()); - - if (extension.getMinecraftJarConfiguration().get() == MinecraftJarConfiguration.SERVER_ONLY) { - // Server only, nothing more to do. - return; - } - - final MinecraftVersionMeta versionInfo = extension.getMinecraftProvider().getVersionInfo(); - - if (versionInfo == null) { - // Something has gone wrong, don't register the task. - return; - } - - registerClientSetupTasks(getTasks(), versionInfo.hasNativesToExtract()); - }); } private void registerIDETasks() { diff --git a/src/main/java/net/fabricmc/loom/task/launch/GenerateDLIConfigTask.java b/src/main/java/net/fabricmc/loom/task/launch/GenerateDLIConfigTask.java index a6ab0b26..8e04873a 100644 --- a/src/main/java/net/fabricmc/loom/task/launch/GenerateDLIConfigTask.java +++ b/src/main/java/net/fabricmc/loom/task/launch/GenerateDLIConfigTask.java @@ -89,6 +89,7 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask { protected abstract Property getNativesDirectoryPath(); @InputFile + @Optional public abstract RegularFileProperty getRemapClasspathFile(); @OutputFile @@ -128,7 +129,6 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask { final LaunchConfig launchConfig = new LaunchConfig() .property("fabric.development", "true") - .property("fabric.remapClasspathFile", getRemapClasspathFile().get().getAsFile().getAbsolutePath()) .property("log4j.configurationFile", getLog4jConfigPaths().get()) .property("log4j2.formatMsgNoLookups", "true") @@ -137,6 +137,10 @@ public abstract class GenerateDLIConfigTask extends AbstractLoomTask { .argument("client", "--assetsDir") .argument("client", assetsDirectory.getAbsolutePath()); + if (getRemapClasspathFile().isPresent()) { + launchConfig.property("fabric.remapClasspathFile", getRemapClasspathFile().get().getAsFile().getAbsolutePath()); + } + if (versionInfo.hasNativesToExtract()) { String nativesPath = getNativesDirectoryPath().get(); diff --git a/src/test/groovy/net/fabricmc/loom/test/integration/noRemap/SimpleDebofTest.groovy b/src/test/groovy/net/fabricmc/loom/test/integration/noRemap/SimpleDebofTest.groovy index 0574e411..55e21070 100644 --- a/src/test/groovy/net/fabricmc/loom/test/integration/noRemap/SimpleDebofTest.groovy +++ b/src/test/groovy/net/fabricmc/loom/test/integration/noRemap/SimpleDebofTest.groovy @@ -62,9 +62,13 @@ class SimpleDebofTest extends Specification implements GradleProjectTestTrait { sourceFile.text = src when: - def result = gradle.run(task: "build") + def result = gradle.run(tasks: [ + "build", + "configureClientLaunch" + ]) then: result.task(":build").outcome == SUCCESS + result.task(":configureClientLaunch").outcome == SUCCESS } }