From 169b0ef1222077ce61937502a00d596524dbc9bf Mon Sep 17 00:00:00 2001 From: Sebastian Hartte Date: Tue, 12 Dec 2023 03:43:44 +0100 Subject: [PATCH] Add the ability to the runtime builder to customize individual tasks in addition to manipulating the task tree. --- .../extensions/CommonRuntimeExtension.java | 7 +++- .../CommonRuntimeSpecification.java | 32 ++++++++++++++- .../common/runtime/spec/Specification.groovy | 19 +++++++++ .../runtime/tasks/tree/TaskCustomizer.java | 41 +++++++++++++++++++ .../NeoFormRuntimeSpecification.java | 27 +++++++++--- .../RuntimeDevRuntimeSpecification.java | 16 +++++++- .../UserDevRuntimeSpecification.java | 27 ++++++++++-- .../extensions/VanillaRuntimeExtension.java | 17 +++++++- .../spec/VanillaRuntimeSpecification.java | 29 +++++++++++-- 9 files changed, 197 insertions(+), 18 deletions(-) create mode 100644 dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/tasks/tree/TaskCustomizer.java diff --git a/common/src/main/java/net/neoforged/gradle/common/runtime/extensions/CommonRuntimeExtension.java b/common/src/main/java/net/neoforged/gradle/common/runtime/extensions/CommonRuntimeExtension.java index 5f29eecf5..c58953fb4 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runtime/extensions/CommonRuntimeExtension.java +++ b/common/src/main/java/net/neoforged/gradle/common/runtime/extensions/CommonRuntimeExtension.java @@ -11,6 +11,7 @@ import net.neoforged.gradle.dsl.common.runtime.extensions.CommonRuntimes; import net.neoforged.gradle.dsl.common.runtime.spec.Specification; import net.neoforged.gradle.dsl.common.runtime.tasks.Runtime; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.tasks.WithOutput; import net.neoforged.gradle.dsl.common.util.CacheableMinecraftVersion; import net.neoforged.gradle.dsl.common.util.CommonRuntimeUtils; @@ -18,8 +19,8 @@ import net.neoforged.gradle.dsl.common.util.GameArtifact; import org.gradle.api.Action; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; -import org.gradle.api.file.Directory; import org.gradle.api.plugins.JavaPluginExtension; import org.gradle.api.provider.Provider; import org.gradle.api.tasks.TaskProvider; @@ -52,6 +53,10 @@ public static void configureCommonRuntimeTaskParameters(Runtime runtimeTask, Map runtimeTask.getRuntimeDirectory().set(runtimeDirectory); runtimeTask.getRuntimeName().set(spec.getVersionedName()); runtimeTask.getJavaVersion().convention(spec.getProject().getExtensions().getByType(JavaPluginExtension.class).getToolchain().getLanguageVersion()); + + for (TaskCustomizer taskCustomizer : spec.getTaskCustomizers().get(step)) { + taskCustomizer.apply(runtimeTask); + } } public static void configureCommonRuntimeTaskParameters(Runtime mcpRuntimeTask, Map dataFiles, Map dataDirectories, String step, DistributionType distributionType, String minecraftVersion, Project project, File runtimeDirectory) { diff --git a/common/src/main/java/net/neoforged/gradle/common/runtime/specification/CommonRuntimeSpecification.java b/common/src/main/java/net/neoforged/gradle/common/runtime/specification/CommonRuntimeSpecification.java index e31a412b7..66af2527a 100644 --- a/common/src/main/java/net/neoforged/gradle/common/runtime/specification/CommonRuntimeSpecification.java +++ b/common/src/main/java/net/neoforged/gradle/common/runtime/specification/CommonRuntimeSpecification.java @@ -6,14 +6,17 @@ import net.neoforged.gradle.common.runtime.definition.CommonRuntimeDefinition; import net.neoforged.gradle.common.runtime.extensions.CommonRuntimeExtension; import net.neoforged.gradle.dsl.common.runtime.spec.Specification; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter; import net.neoforged.gradle.dsl.common.util.DistributionType; import org.apache.commons.lang3.StringUtils; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.provider.Provider; import org.jetbrains.annotations.NotNull; import java.util.Map; +import java.util.function.Consumer; /** * Defines a runtime specification. @@ -25,14 +28,23 @@ public abstract class CommonRuntimeSpecification implements Specification { @NotNull private final DistributionType distribution; @NotNull private final Multimap preTaskTypeAdapters; @NotNull private final Multimap postTypeAdapters; + @NotNull private final Multimap> taskCustomizers; @NotNull private final CommonRuntimeExtension runtimeExtension; - protected CommonRuntimeSpecification(Project project, @NotNull String name, @NotNull String version, DistributionType distribution, Multimap preTaskTypeAdapters, Multimap postTypeAdapters, @NotNull Class> runtimeExtensionClass) { + protected CommonRuntimeSpecification(Project project, + @NotNull String name, + @NotNull String version, + DistributionType distribution, + Multimap preTaskTypeAdapters, + Multimap postTypeAdapters, + Multimap> taskCustomizers, + @NotNull Class> runtimeExtensionClass) { this.project = project; this.name = name; this.version = version; this.distribution = distribution; this.preTaskTypeAdapters = ImmutableMultimap.copyOf(preTaskTypeAdapters); this.postTypeAdapters = ImmutableMultimap.copyOf(postTypeAdapters); + this.taskCustomizers = ImmutableMultimap.copyOf(taskCustomizers); this.runtimeExtension = project.getExtensions().getByType(runtimeExtensionClass); } @@ -92,6 +104,12 @@ public Multimap getPostTypeAdapters() { return postTypeAdapters; } + @NotNull + @Override + public Multimap> getTaskCustomizers() { + return taskCustomizers; + } + @Override public boolean equals(Object o) { if (this == o) return true; @@ -103,6 +121,7 @@ public boolean equals(Object o) { if (!getIdentifier().equals(that.getIdentifier())) return false; if (getDistribution() != that.getDistribution()) return false; if (!getPreTaskTypeAdapters().equals(that.getPreTaskTypeAdapters())) return false; + if (!getTaskCustomizers().equals(that.getTaskCustomizers())) return false; return getPostTypeAdapters().equals(that.getPostTypeAdapters()); } @@ -113,6 +132,7 @@ public int hashCode() { result = 31 * result + getDistribution().hashCode(); result = 31 * result + getPreTaskTypeAdapters().hashCode(); result = 31 * result + getPostTypeAdapters().hashCode(); + result = 31 * result + getTaskCustomizers().hashCode(); return result; } @@ -124,6 +144,7 @@ public String toString() { ", distribution=" + distribution + ", preTaskTypeAdapters=" + preTaskTypeAdapters + ", postTypeAdapters=" + postTypeAdapters + + ", taskCustomizers=" + taskCustomizers + '}'; } @@ -140,6 +161,7 @@ public abstract static class Builder preTaskAdapters = LinkedListMultimap.create(); protected final Multimap postTaskAdapters = LinkedListMultimap.create(); + protected final Multimap> taskCustomizers = LinkedListMultimap.create(); /** * Creates a new builder. @@ -202,6 +224,14 @@ public final B withPostTaskAdapter(final String taskTypeName, final TaskTreeAdap return getThis(); } + + @Override + @NotNull + public final B withTaskCustomizer(final String taskTypeName, Class taskType, Consumer customizer) { + this.taskCustomizers.put(taskTypeName, new TaskCustomizer<>(taskType, customizer)); + return getThis(); + } + /** * Builds the specification. * diff --git a/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/spec/Specification.groovy b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/spec/Specification.groovy index 366b37cea..56d61af4a 100644 --- a/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/spec/Specification.groovy +++ b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/spec/Specification.groovy @@ -2,12 +2,16 @@ package net.neoforged.gradle.dsl.common.runtime.spec import com.google.common.collect.Multimap import groovy.transform.CompileStatic +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer import net.neoforged.gradle.dsl.common.util.DistributionType import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter import org.gradle.api.Project +import org.gradle.api.Task import org.gradle.api.provider.Provider import org.jetbrains.annotations.NotNull +import java.util.function.Consumer + @CompileStatic interface Specification { /** @@ -77,6 +81,11 @@ interface Specification { */ @NotNull Multimap getPostTypeAdapters(); + /** + * The customizers that are allowed to change the configuration of Neoform tasks. + */ + @NotNull Multimap> getTaskCustomizers(); + /** * Determines the specifications minecraft version. * @@ -126,5 +135,15 @@ interface Specification { * @return The builder instance. */ B withPostTaskAdapter(String taskTypeName, TaskTreeAdapter adapter); + + /** + * Adds a task customizer to the specification which is about to be build. + * + * @param taskTypeName The name of the task type or specification step to which the customization should be applied. + * @param taskType The expected Gradle task type of the task. + * @param customizer The function to apply to the task via {@link Task#configure}. + * @return The builder instance. + */ + B withTaskCustomizer(final String taskTypeName, Class taskType, Consumer customizer); } } diff --git a/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/tasks/tree/TaskCustomizer.java b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/tasks/tree/TaskCustomizer.java new file mode 100644 index 000000000..15a9a5d9b --- /dev/null +++ b/dsl/common/src/main/groovy/net/neoforged/gradle/dsl/common/runtime/tasks/tree/TaskCustomizer.java @@ -0,0 +1,41 @@ +package net.neoforged.gradle.dsl.common.runtime.tasks.tree; + +import net.neoforged.gradle.dsl.common.runtime.tasks.Runtime; +import org.gradle.api.Task; + +import java.util.function.Consumer; + +/** + * Encapsulates a task customizer that changes the configuration of a Gradle Task encapsulating a Neoform step. + */ +public final class TaskCustomizer { + private final Class taskClass; + private final Consumer taskCustomizer; + + public TaskCustomizer(Class taskClass, Consumer taskCustomizer) { + this.taskClass = taskClass; + this.taskCustomizer = taskCustomizer; + } + + /** + * @return The expected task type. This will be validated to avoid unchecked casts. + */ + public Class getTaskClass() { + return taskClass; + } + + /** + * @return The function that will be applied to the task using {@link Task#configure}. + */ + public Consumer getTaskCustomizer() { + return taskCustomizer; + } + + public void apply(Runtime task) { + if (!taskClass.isInstance(task)) { + throw new IllegalArgumentException("Customization for step " + task.getStepName() + + " requires task type " + taskClass + " but actual task is " + task.getClass()); + } + taskCustomizer.accept(taskClass.cast(task)); + } +} diff --git a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/specification/NeoFormRuntimeSpecification.java b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/specification/NeoFormRuntimeSpecification.java index 8c47388a6..63d5b06f7 100644 --- a/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/specification/NeoFormRuntimeSpecification.java +++ b/neoform/src/main/java/net/neoforged/gradle/neoform/runtime/specification/NeoFormRuntimeSpecification.java @@ -2,21 +2,20 @@ import com.google.common.collect.Multimap; import net.neoforged.gradle.common.runtime.specification.CommonRuntimeSpecification; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.util.ConfigurationUtils; -import net.neoforged.gradle.dsl.common.extensions.MinecraftArtifactCache; import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter; import net.neoforged.gradle.dsl.common.util.Artifact; import net.neoforged.gradle.dsl.common.util.DistributionType; import net.neoforged.gradle.dsl.neoform.runtime.specification.NeoFormSpecification; import net.neoforged.gradle.neoform.runtime.extensions.NeoFormRuntimeExtension; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; -import org.gradle.api.artifacts.ResolvedArtifact; import org.gradle.api.file.FileCollection; import org.gradle.api.provider.Provider; import java.util.Objects; -import java.util.Optional; /** * Defines a specification for an MCP runtime. @@ -25,8 +24,15 @@ public class NeoFormRuntimeSpecification extends CommonRuntimeSpecification impl private final Artifact neoFormArtifact; private final FileCollection additionalRecompileDependencies; - public NeoFormRuntimeSpecification(Project project, String version, Artifact neoFormArtifact, DistributionType side, Multimap preTaskTypeAdapters, Multimap postTypeAdapters, FileCollection additionalRecompileDependencies) { - super(project, "neoForm", version, side, preTaskTypeAdapters, postTypeAdapters, NeoFormRuntimeExtension.class); + public NeoFormRuntimeSpecification(Project project, + String version, + Artifact neoFormArtifact, + DistributionType side, + Multimap preTaskTypeAdapters, + Multimap postTypeAdapters, + Multimap> taskCustomizers, + FileCollection additionalRecompileDependencies) { + super(project, "neoForm", version, side, preTaskTypeAdapters, postTypeAdapters, taskCustomizers, NeoFormRuntimeExtension.class); this.neoFormArtifact = neoFormArtifact; this.additionalRecompileDependencies = additionalRecompileDependencies; } @@ -168,7 +174,16 @@ public NeoFormRuntimeSpecification build() { final Provider resolvedArtifact = neoFormArtifact.map(a -> resolveNeoFormVersion(project, a)); final Provider resolvedVersion = resolvedArtifact.map(Artifact::getVersion).map(v -> v.equals("+") ? "" : v); - return new NeoFormRuntimeSpecification(project, resolvedVersion.get(), resolvedArtifact.get(), distributionType.get(), preTaskAdapters, postTaskAdapters, additionalDependencies); + return new NeoFormRuntimeSpecification( + project, + resolvedVersion.get(), + resolvedArtifact.get(), + distributionType.get(), + preTaskAdapters, + postTaskAdapters, + taskCustomizers, + additionalDependencies + ); } private static Artifact resolveNeoFormVersion(final Project project, final Artifact current) { diff --git a/platform/src/main/java/net/neoforged/gradle/platform/runtime/runtime/specification/RuntimeDevRuntimeSpecification.java b/platform/src/main/java/net/neoforged/gradle/platform/runtime/runtime/specification/RuntimeDevRuntimeSpecification.java index 60a675cf0..4b92940ce 100644 --- a/platform/src/main/java/net/neoforged/gradle/platform/runtime/runtime/specification/RuntimeDevRuntimeSpecification.java +++ b/platform/src/main/java/net/neoforged/gradle/platform/runtime/runtime/specification/RuntimeDevRuntimeSpecification.java @@ -2,12 +2,14 @@ import com.google.common.collect.Multimap; import net.neoforged.gradle.common.runtime.specification.CommonRuntimeSpecification; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.util.ConfigurationUtils; import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter; import net.neoforged.gradle.dsl.common.util.Artifact; import net.neoforged.gradle.dsl.common.util.DistributionType; import net.neoforged.gradle.platform.runtime.runtime.extension.RuntimeDevRuntimeExtension; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.file.Directory; import org.gradle.api.file.FileCollection; @@ -28,8 +30,17 @@ public final class RuntimeDevRuntimeSpecification extends CommonRuntimeSpecifica private final Directory rejectsDirectory; private final boolean isUpdating; - public RuntimeDevRuntimeSpecification(Project project, DistributionType distribution, Multimap preTaskTypeAdapters, Multimap postTypeAdapters, Artifact neoFormArtifact, FileCollection additionalDependencies, Directory patchesDirectory, Directory rejectsDirectory, boolean isUpdating) { - super(project, "platform", neoFormArtifact.getVersion(), distribution, preTaskTypeAdapters, postTypeAdapters, RuntimeDevRuntimeExtension.class); + public RuntimeDevRuntimeSpecification(Project project, + DistributionType distribution, + Multimap preTaskTypeAdapters, + Multimap postTypeAdapters, + Multimap> taskCustomizers, + Artifact neoFormArtifact, + FileCollection additionalDependencies, + Directory patchesDirectory, + Directory rejectsDirectory, + boolean isUpdating) { + super(project, "platform", neoFormArtifact.getVersion(), distribution, preTaskTypeAdapters, postTypeAdapters, taskCustomizers, RuntimeDevRuntimeExtension.class); this.minecraftVersion = neoFormArtifact.getVersion().substring(0, neoFormArtifact.getVersion().lastIndexOf("-")); this.neoFormArtifact = neoFormArtifact; this.additionalDependencies = additionalDependencies; @@ -216,6 +227,7 @@ public Builder withAdditionalDependencies(final FileCollection files) { distributionType.get(), preTaskAdapters, postTaskAdapters, + taskCustomizers, resolvedArtifact.get(), additionalDependencies, patchesDirectory.get(), diff --git a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/specification/UserDevRuntimeSpecification.java b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/specification/UserDevRuntimeSpecification.java index 7b68aea77..b91fc1d98 100644 --- a/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/specification/UserDevRuntimeSpecification.java +++ b/userdev/src/main/java/net/neoforged/gradle/userdev/runtime/specification/UserDevRuntimeSpecification.java @@ -2,6 +2,7 @@ import com.google.common.collect.Multimap; import net.neoforged.gradle.common.runtime.specification.CommonRuntimeSpecification; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.util.ConfigurationUtils; import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter; import net.neoforged.gradle.dsl.common.util.Artifact; @@ -10,13 +11,13 @@ import net.neoforged.gradle.dsl.userdev.runtime.specification.UserDevSpecification; import net.neoforged.gradle.userdev.runtime.extension.UserDevRuntimeExtension; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.artifacts.Configuration; import org.gradle.api.provider.Provider; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Objects; -import java.util.Optional; /** * Defines a specification for a ForgeUserDev runtime. @@ -29,8 +30,16 @@ public final class UserDevRuntimeSpecification extends CommonRuntimeSpecificatio @Nullable private String minecraftVersion = null; - public UserDevRuntimeSpecification(Project project, String version, DistributionType distribution, Multimap preTaskTypeAdapters, Multimap postTypeAdapters, String forgeGroup, String forgeName, String forgeVersion) { - super(project, "neoForge", version, distribution, preTaskTypeAdapters, postTypeAdapters, UserDevRuntimeExtension.class); + public UserDevRuntimeSpecification(Project project, + String version, + DistributionType distribution, + Multimap preTaskTypeAdapters, + Multimap postTypeAdapters, + Multimap> taskCustomizers, + String forgeGroup, + String forgeName, + String forgeVersion) { + super(project, "neoForge", version, distribution, preTaskTypeAdapters, postTypeAdapters, taskCustomizers, UserDevRuntimeExtension.class); this.forgeGroup = forgeGroup; this.forgeName = forgeName; this.forgeVersion = forgeVersion; @@ -166,7 +175,17 @@ public UserDevRuntimeSpecification build() { final Artifact universalArtifact = new Artifact(group, name, version, "userdev", "jar"); final Artifact resolvedArtifact = resolveUserDevVersion(project, universalArtifact); - return new UserDevRuntimeSpecification(project, resolvedArtifact.getVersion(), distributionType.get(), preTaskAdapters, postTaskAdapters, resolvedArtifact.getGroup(), resolvedArtifact.getName(), resolvedArtifact.getVersion()); + return new UserDevRuntimeSpecification( + project, + resolvedArtifact.getVersion(), + distributionType.get(), + preTaskAdapters, + postTaskAdapters, + taskCustomizers, + resolvedArtifact.getGroup(), + resolvedArtifact.getName(), + resolvedArtifact.getVersion() + ); } private static Artifact resolveUserDevVersion(final Project project, final Artifact current) { diff --git a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/extensions/VanillaRuntimeExtension.java b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/extensions/VanillaRuntimeExtension.java index d1e86cbef..5d0aec083 100644 --- a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/extensions/VanillaRuntimeExtension.java +++ b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/extensions/VanillaRuntimeExtension.java @@ -168,7 +168,22 @@ protected void bakeDefinition(VanillaRuntimeDefinition definition) { } AtomicInteger additionalTaskIndex = new AtomicInteger(0); - TaskProvider task = step.buildTask(definition, currentInput, minecraftCache, vanillaDirectory, definition.getTasks(), definition.getGameArtifactProvidingTasks(), taskProvider -> taskProvider.configure(additionalTask -> configureCommonRuntimeTaskParameters(additionalTask, Collections.emptyMap(), Collections.emptyMap(), step.getName() + "Additional" + additionalTaskIndex.getAndIncrement(), spec, runtimeWorkingDirectory))); + TaskProvider task = step.buildTask( + definition, + currentInput, + minecraftCache, + vanillaDirectory, + definition.getTasks(), + definition.getGameArtifactProvidingTasks(), + taskProvider -> taskProvider.configure(additionalTask -> configureCommonRuntimeTaskParameters( + additionalTask, + Collections.emptyMap(), + Collections.emptyMap(), + step.getName() + "Additional" + additionalTaskIndex.getAndIncrement(), + spec, + runtimeWorkingDirectory) + ) + ); task.configure((Runtime mcpRuntimeTask) -> configureCommonRuntimeTaskParameters(mcpRuntimeTask, Collections.emptyMap(), Collections.emptyMap(), step.getName(), spec, runtimeWorkingDirectory)); diff --git a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/spec/VanillaRuntimeSpecification.java b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/spec/VanillaRuntimeSpecification.java index 11a4040a4..28684585e 100644 --- a/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/spec/VanillaRuntimeSpecification.java +++ b/vanilla/src/main/java/net/neoforged/gradle/vanilla/runtime/spec/VanillaRuntimeSpecification.java @@ -2,11 +2,13 @@ import com.google.common.collect.Multimap; import net.neoforged.gradle.common.runtime.specification.CommonRuntimeSpecification; +import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskCustomizer; import net.neoforged.gradle.dsl.common.runtime.tasks.tree.TaskTreeAdapter; import net.neoforged.gradle.dsl.common.util.DistributionType; import net.neoforged.gradle.dsl.vanilla.runtime.spec.VanillaSpecification; import net.neoforged.gradle.vanilla.runtime.extensions.VanillaRuntimeExtension; import org.gradle.api.Project; +import org.gradle.api.Task; import org.gradle.api.provider.Provider; import java.util.Optional; @@ -20,8 +22,18 @@ public final class VanillaRuntimeSpecification extends CommonRuntimeSpecificatio private final String forgeFlowerVersion; private final String accessTransformerApplierVersion; - public VanillaRuntimeSpecification(Project project, String name, String version, DistributionType side, Multimap preTaskTypeAdapters, Multimap postTypeAdapters, String minecraftVersion, String fartVersion, String forgeFlowerVersion, String accessTransformerApplierVersion) { - super(project, name, version, side, preTaskTypeAdapters, postTypeAdapters, VanillaRuntimeExtension.class); + public VanillaRuntimeSpecification(Project project, + String name, + String version, + DistributionType side, + Multimap preTaskTypeAdapters, + Multimap postTypeAdapters, + Multimap> taskCustomizers, + String minecraftVersion, + String fartVersion, + String forgeFlowerVersion, + String accessTransformerApplierVersion) { + super(project, name, version, side, preTaskTypeAdapters, postTypeAdapters, taskCustomizers, VanillaRuntimeExtension.class); this.minecraftVersion = minecraftVersion; this.fartVersion = fartVersion; this.forgeFlowerVersion = forgeFlowerVersion; @@ -195,7 +207,18 @@ public Builder withAccessTransformerApplierVersion(final String accessTransforme @Override public VanillaRuntimeSpecification build() { - return new VanillaRuntimeSpecification(project, minecraftArtifact.get(), Optional.of(minecraftVersion.get()).map(v -> v.equals("+") ? "" : v).get(), distributionType.get(), preTaskAdapters, postTaskAdapters, minecraftVersion.get(), fartVersion.get(), forgeFlowerVersion.get(), accessTransformerApplierVersion.get()); + return new VanillaRuntimeSpecification( + project, + minecraftArtifact.get(), + Optional.of(minecraftVersion.get()).map(v -> v.equals("+") ? "" : v).get(), + distributionType.get(), + preTaskAdapters, + postTaskAdapters, + taskCustomizers, + minecraftVersion.get(), + fartVersion.get(), + forgeFlowerVersion.get(), + accessTransformerApplierVersion.get()); } } }