From 20a6684dc4abdf7409d7d19b78db6fe389481f10 Mon Sep 17 00:00:00 2001 From: aromaa Date: Sun, 16 Mar 2025 16:36:20 +0200 Subject: [PATCH] plugin-development: Require specifying minecraftVersion for runServer --- .../gradle/plugin/SpongePluginExtension.java | 10 +++++++++ .../gradle/plugin/SpongePluginGradle.java | 22 +++++++++++++++---- 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginExtension.java b/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginExtension.java index 4189c9d..1864ecf 100644 --- a/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginExtension.java +++ b/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginExtension.java @@ -46,6 +46,7 @@ public class SpongePluginExtension implements MetadataContainerConfiguration { // Dependency management private final Property platform; + private final Property minecraftVersion; private final Property apiVersion; private final Property injectRepositories; @@ -58,6 +59,7 @@ public SpongePluginExtension(final ObjectFactory factory) { this.plugins = factory.domainObjectContainer(PluginConfiguration.class); this.platform = factory.property(SpongePlatform.class).convention(SpongePlatform.VANILLA); + this.minecraftVersion = factory.property(String.class); this.apiVersion = factory.property(String.class); this.injectRepositories = factory.property(Boolean.class); } @@ -95,6 +97,14 @@ public void platform(final SpongePlatform platform) { this.platform.set(platform); } + protected Property minecraftVersion() { + return this.minecraftVersion; + } + + public void minecraftVersion(final String minecraftVersion) { + this.minecraftVersion.set(minecraftVersion); + } + protected Property apiVersion() { return this.apiVersion; } diff --git a/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginGradle.java b/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginGradle.java index 6dac2b4..760768e 100644 --- a/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginGradle.java +++ b/plugin-development/src/main/java/org/spongepowered/gradle/plugin/SpongePluginGradle.java @@ -98,22 +98,35 @@ public void applyToProject( final TaskProvider runServer = this.createRunTask(spongeRuntime, sponge); project.afterEvaluate(a -> { - if (sponge.apiVersion().isPresent()) { + if (sponge.minecraftVersion().isPresent() && sponge.apiVersion().isPresent()) { // TODO: client run task /*project.getLogger().lifecycle("SpongeAPI '{}' has been set within the 'spongeApi' configuration. 'runClient' and 'runServer'" + " tasks will be available. You may use these to test your plugin.", sponge.version().get());*/ spongeRuntime.configure(config -> { + final String minecraftVersion = sponge.minecraftVersion().get(); final String apiVersion = sponge.apiVersion().get(); + config.getAttributes().attribute( + SpongeVersioningMetadataRule.MINECRAFT_TARGET, + minecraftVersion + ); + config.getAttributes().attribute( SpongeVersioningMetadataRule.API_TARGET, generateApiReleasedVersion(apiVersion) ); }); } else { - project.getLogger().info("SpongeAPI version has not been set within the 'sponge' configuration via the 'version' task. No " - + "tasks will be available to run a client or server session for debugging."); + if (!sponge.minecraftVersion().isPresent()) { + project.getLogger().info("Minecraft version has not been set within the 'sponge' configuration via the 'minecraftVersion' task. No " + + "tasks will be available to run a client or server session for debugging."); + } + + if (!sponge.apiVersion().isPresent()) { + project.getLogger().info("SpongeAPI version has not been set within the 'sponge' configuration via the 'version' task. No " + + "tasks will be available to run a client or server session for debugging."); + } runServer.configure(t -> t.setEnabled(false)); } if (sponge.injectRepositories().get()) { @@ -184,13 +197,14 @@ private void addApiDependency(final SpongePluginExtension sponge) { private NamedDomainObjectProvider addRuntimeDependency(final SpongePluginExtension sponge) { this.project.getDependencies().getComponents().withModule("org.spongepowered:spongevanilla", SpongeVersioningMetadataRule.class); + this.project.getDependencies().getAttributesSchema().attribute(SpongeVersioningMetadataRule.MINECRAFT_TARGET).getCompatibilityRules().add(ApiVersionCompatibilityRule.class); this.project.getDependencies().getAttributesSchema().attribute(SpongeVersioningMetadataRule.API_TARGET).getCompatibilityRules().add(ApiVersionCompatibilityRule.class); return this.project.getConfigurations().register("spongeRuntime", conf -> { conf.defaultDependencies(a -> { final Dependency dep = this.project.getDependencies().create( Constants.Dependencies.SPONGE_GROUP + ":" + sponge.platform().get().artifactId() - + ":+:universal"); + + ":" + sponge.minecraftVersion().getOrElse("") + "+:universal"); a.add(dep); });