From 8ea770690875fcc41f681041b350df0c292f6f54 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:08:22 +0000 Subject: [PATCH 1/4] Initial plan From 9a86ddeb05d09e40a9f4fdb3869d961a1e8a646e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:23:07 +0000 Subject: [PATCH 2/4] Add canvas-plugin Gradle plugin module Co-authored-by: TheBjoRedCraft <143264463+TheBjoRedCraft@users.noreply.github.com> --- gradle/libs.versions.toml | 6 ++ surf-api-gradle-plugin/README.md | 8 ++ surf-api-gradle-plugin/build.gradle.kts | 8 ++ .../platform/canvas/CanvasPluginSurfPlugin.kt | 35 ++++++ .../platform/canvas/CanvasSurfExtension.kt | 8 ++ .../plugin/AbstractPaperPluginSurfPlugin.kt | 102 ++++++++++++++++++ .../paper/plugin/PaperPluginSurfPlugin.kt | 99 +---------------- .../surfapi/gradle/util/repo-extensions.kt | 6 ++ 8 files changed, 174 insertions(+), 98 deletions(-) create mode 100644 surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasPluginSurfPlugin.kt create mode 100644 surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt create mode 100644 surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/AbstractPaperPluginSurfPlugin.kt diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fab525b34..9aa5a8460 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -2,6 +2,9 @@ # Paper paper-api = "1.21.11-R0.1-SNAPSHOT" +# Canvas +canvas-api = "1.21.11-R0.1-SNAPSHOT" + # Hytale hytale-server = "1.0.0" @@ -78,6 +81,9 @@ dokka = "2.1.0" # Paper paper-api = { module = "io.papermc.paper:paper-api", version.ref = "paper-api" } +# Canvas +canvas-api = { module = "io.canvasmc.canvas:canvas-api", version.ref = "canvas-api" } + # Hytale hytale-server = { module = "dev.hypixel:hytale-server", version.ref = "hytale-server" } diff --git a/surf-api-gradle-plugin/README.md b/surf-api-gradle-plugin/README.md index d36690746..376e1cd14 100644 --- a/surf-api-gradle-plugin/README.md +++ b/surf-api-gradle-plugin/README.md @@ -48,6 +48,7 @@ surfPaperPluginApi { // name changes depending on the plugin type - `dev.slne.surf.surfapi.gradle.core` for core modules (applies kotlin and other plugins, adds surf-core-api compileOnly dependency) - `dev.slne.surf.surfapi.gradle.paper-plugin` for paper plugin modules (all core features, adds paper-api dependency, generation of paper-plugin.yml and runServer configuration) - `dev.slne.surf.surfapi.gradle.paper-raw` for paper plugin modules (all core features, adds paper-api dependency, **NO** generation of paper-plugin.yml nor runServer configuration) +- `dev.slne.surf.surfapi.gradle.canvas-plugin` for canvas plugin modules (all paper-plugin features, adds canvas-api dependency and Canvas maven repository) - `dev.slne.surf.surfapi.gradle.standalone` for standalone modules (all core features, adds surf-core-api dependency, shades surf-api-standalone) - `dev.slne.surf.surfapi.gradle.velocity` for velocity modules (all core features, adds velocity-api dependency) @@ -86,3 +87,10 @@ plugins { id("dev.slne.surf.surfapi.gradle.velocity") } ``` + +#### Canvas Plugin +```kotlin +plugins { + id("dev.slne.surf.surfapi.gradle.canvas-plugin") +} +``` diff --git a/surf-api-gradle-plugin/build.gradle.kts b/surf-api-gradle-plugin/build.gradle.kts index a6d02b560..593cd8853 100644 --- a/surf-api-gradle-plugin/build.gradle.kts +++ b/surf-api-gradle-plugin/build.gradle.kts @@ -72,6 +72,12 @@ gradlePlugin { "dev.slne.surf.surfapi.gradle.platform.paper.raw.RawPaperSurfPlugin" } + create("canvas-plugin") { + id = "dev.slne.surf.surfapi.gradle.canvas-plugin" + implementationClass = + "dev.slne.surf.surfapi.gradle.platform.canvas.CanvasPluginSurfPlugin" + } + create("standalone") { id = "dev.slne.surf.surfapi.gradle.standalone" implementationClass = @@ -109,6 +115,7 @@ val generateConstants by tasks.registering { inputs.property("javaVersion", javaVersion) inputs.property("mcVersion", mcVersion) inputs.property("libs.paper.api", libs.paper.api.get().toString()) + inputs.property("libs.canvas.api", libs.canvas.api.get().toString()) inputs.property("libs.velocity.api", libs.velocity.api.get().toString()) inputs.property("libs.auto.service.annotations", libs.auto.service.annotations.get().toString()) inputs.property("libs.versions.commandapi", libs.versions.commandapi.get().toString()) @@ -134,6 +141,7 @@ val generateConstants by tasks.registering { | const val SNAPSHOT_REPO_ID = "maven-releases" | const val SNAPSHOT_REPO = "https://repo.slne.dev/repository/maven-releases" | const val PAPER_API = "${libs.paper.api.get()}" + | const val CANVAS_API = "${libs.canvas.api.get()}" | const val VELOCITY_API = "${libs.velocity.api.get()}" | const val AUTO_SERVICE_ANNOTATIONS = "${libs.auto.service.annotations.get()}" | const val AUTO_SERVICE = "${generator.group}:${generator.name}:${generator.version}" diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasPluginSurfPlugin.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasPluginSurfPlugin.kt new file mode 100644 index 000000000..f2c5ef31c --- /dev/null +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasPluginSurfPlugin.kt @@ -0,0 +1,35 @@ +package dev.slne.surf.surfapi.gradle.platform.canvas + +import dev.slne.surf.surfapi.gradle.generated.Constants +import dev.slne.surf.surfapi.gradle.platform.paper.plugin.AbstractPaperPluginSurfPlugin +import dev.slne.surf.surfapi.gradle.util.canvasMaven +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.repositories +import org.jetbrains.kotlin.gradle.utils.COMPILE_ONLY + +internal class CanvasPluginSurfPlugin : + AbstractPaperPluginSurfPlugin("canvasPlugin") { + + override val extensionClass = CanvasSurfExtension::class.java + + override fun Project.applyRepositories0() { + repositories { + canvasMaven() + } + } + + override fun Project.configure0() { + dependencies { + add(COMPILE_ONLY, Constants.CANVAS_API) + } + + // Canvas provides the org.bukkit:bukkit capability (as a Paper fork), so we resolve + // any capability conflict in favour of canvas-api over paper-api or plain bukkit. + configurations.all { + resolutionStrategy.capabilitiesResolution.withCapability("org.bukkit:bukkit") { + select(Constants.CANVAS_API) + } + } + } +} diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt new file mode 100644 index 000000000..e9ef8b8fc --- /dev/null +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt @@ -0,0 +1,8 @@ +package dev.slne.surf.surfapi.gradle.platform.canvas + +import dev.slne.surf.surfapi.gradle.platform.paper.plugin.PaperPluginSurfExtension +import org.gradle.api.model.ObjectFactory +import javax.inject.Inject + +open class CanvasSurfExtension @Inject constructor(objects: ObjectFactory) : + PaperPluginSurfExtension(objects) diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/AbstractPaperPluginSurfPlugin.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/AbstractPaperPluginSurfPlugin.kt new file mode 100644 index 000000000..67d520fec --- /dev/null +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/AbstractPaperPluginSurfPlugin.kt @@ -0,0 +1,102 @@ +package dev.slne.surf.surfapi.gradle.platform.paper.plugin + +import dev.slne.surf.surfapi.gradle.generated.Constants +import dev.slne.surf.surfapi.gradle.generators.LibrariesLoaderGenerator.generateLibrariesLoaderTask +import dev.slne.surf.surfapi.gradle.platform.paper.AbstractPaperSurfPlugin +import dev.slne.surf.surfapi.gradle.util.registerRequired +import net.minecrell.pluginyml.GeneratePluginDescription +import net.minecrell.pluginyml.paper.PaperPluginDescription +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPlugin +import org.gradle.api.tasks.SourceSet +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.invoke +import org.gradle.kotlin.dsl.withType +import xyz.jpenilla.runpaper.task.RunServer + +internal abstract class AbstractPaperPluginSurfPlugin(platformName: String) : + AbstractPaperSurfPlugin(platformName) { + + init { + addRelocationsForDependency( + "surf-data-api", + "com.fasterxml.jackson" to "dev.slne.data.libs.jackson" + ) + } + + private val paperPlugins = listOf( + "xyz.jpenilla.run-paper", + "de.eldoria.plugin-yml.paper" + ) + + override fun Project.afterEvaluated1(extension: E) { + val generateLoaderTask = generateLibrariesLoaderTask( + extension.mainClass.get().substringBeforeLast('.') + ) + + configure { + authors = extension.authors.get() + main = extension.mainClass.get() + bootstrapper = extension.bootstrapper.orNull + apiVersion = Constants.MINECRAFT_VERSION + foliaSupported = extension.foliaSupported.get() + + if (extension.generateLibraryLoader.get()) { + generateLibrariesJson = true + loader = generateLoaderTask.get().loaderLocation() + } + + bootstrapDependencies { + registerRequired("surf-bukkit-api") + + if (extension.withSurfRedis.get() && !extension.surfRedisRelocation.isPresent) { + registerRequired("surf-redis-paper") + } + + extension.bootstrapDependencies.orNull?.execute(this) + } + + serverDependencies { + registerRequired("surf-bukkit-api") + if (extension.coreModule.isPresent) { + registerRequired("surf-core-paper") + } + + if (extension.withSurfRedis.get() && !extension.surfRedisRelocation.isPresent) { + registerRequired("surf-redis-paper") + } + + extension.serverDependencies.orNull?.execute(this) + } + } + + if (extension.generateLibraryLoader.get()) { + plugins.withType { + extensions.getByType().named(SourceSet.MAIN_SOURCE_SET_NAME) { + java.srcDir(generateLoaderTask.map { it.outputDirectory.get() }) + } + } + } + + + tasks { + withType { + useDefaultCentralProxy() + } + + withType { + minecraftVersion(Constants.MINECRAFT_VERSION) + + extension.runServer.orNull?.execute(this) + } + } + } + + override fun Project.applyPlugins0() { + paperPlugins.forEach { plugin -> + applyPlugin(plugin) + } + } +} diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/PaperPluginSurfPlugin.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/PaperPluginSurfPlugin.kt index d64fcd519..051fc3110 100644 --- a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/PaperPluginSurfPlugin.kt +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/paper/plugin/PaperPluginSurfPlugin.kt @@ -1,104 +1,7 @@ package dev.slne.surf.surfapi.gradle.platform.paper.plugin -import dev.slne.surf.surfapi.gradle.generated.Constants -import dev.slne.surf.surfapi.gradle.generators.LibrariesLoaderGenerator.generateLibrariesLoaderTask -import dev.slne.surf.surfapi.gradle.platform.paper.AbstractPaperSurfPlugin -import dev.slne.surf.surfapi.gradle.util.registerRequired -import net.minecrell.pluginyml.GeneratePluginDescription -import net.minecrell.pluginyml.paper.PaperPluginDescription -import org.gradle.api.Project -import org.gradle.api.plugins.JavaPlugin -import org.gradle.api.tasks.SourceSet -import org.gradle.api.tasks.SourceSetContainer -import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.getByType -import org.gradle.kotlin.dsl.invoke -import org.gradle.kotlin.dsl.withType -import xyz.jpenilla.runpaper.task.RunServer - internal class PaperPluginSurfPlugin : - AbstractPaperSurfPlugin("paperPlugin") { + AbstractPaperPluginSurfPlugin("paperPlugin") { override val extensionClass = PaperPluginSurfExtension::class.java - - init { - addRelocationsForDependency( - "surf-data-api", - "com.fasterxml.jackson" to "dev.slne.data.libs.jackson" - ) - } - - private val paperPlugins = listOf( - "xyz.jpenilla.run-paper", - "de.eldoria.plugin-yml.paper" - ) - - override fun Project.afterEvaluated1(extension: PaperPluginSurfExtension) { - val generateLoaderTask = generateLibrariesLoaderTask( - extension.mainClass.get().substringBeforeLast('.') - ) - - configure { - authors = extension.authors.get() - main = extension.mainClass.get() - bootstrapper = extension.bootstrapper.orNull - apiVersion = Constants.MINECRAFT_VERSION - foliaSupported = extension.foliaSupported.get() - - if (extension.generateLibraryLoader.get()) { - generateLibrariesJson = true - loader = generateLoaderTask.get().loaderLocation() - } - - bootstrapDependencies { - registerRequired("surf-bukkit-api") - - if (extension.withSurfRedis.get() && !extension.surfRedisRelocation.isPresent) { - registerRequired("surf-redis-paper") - } - - extension.bootstrapDependencies.orNull?.execute(this) - } - - serverDependencies { - registerRequired("surf-bukkit-api") - if (extension.coreModule.isPresent) { - registerRequired("surf-core-paper") - } - - if (extension.withSurfRedis.get() && !extension.surfRedisRelocation.isPresent) { - registerRequired("surf-redis-paper") - } - - extension.serverDependencies.orNull?.execute(this) - } - } - - if (extension.generateLibraryLoader.get()) { - plugins.withType { - extensions.getByType().named(SourceSet.MAIN_SOURCE_SET_NAME) { - java.srcDir(generateLoaderTask.map { it.outputDirectory.get() }) - } - } - } - - - tasks { - withType { - useDefaultCentralProxy() - } - - withType { - minecraftVersion(Constants.MINECRAFT_VERSION) - - extension.runServer.orNull?.execute(this) - } - } - } - - override fun Project.applyPlugins0() { - paperPlugins.forEach { plugin -> - applyPlugin(plugin) - } - } } \ No newline at end of file diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/util/repo-extensions.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/util/repo-extensions.kt index 0c4978bd4..715d6b55c 100644 --- a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/util/repo-extensions.kt +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/util/repo-extensions.kt @@ -16,6 +16,12 @@ inline fun RepositoryHandler.slnePublic(crossinline block: MavenArtifactReposito block() } +inline fun RepositoryHandler.canvasMaven(crossinline block: MavenArtifactRepository.() -> Unit = {}) = + maven("https://maven.canvasmc.io/snapshots") { + name = "Canvas" + block() + } + inline fun RepositoryHandler.slneReleases(crossinline block: MavenArtifactRepository.() -> Unit = {}) = maven("https://repo.slne.dev/repository/maven-releases/") { name = "maven-releases" From 1c7e8af2eab8e8b9f67088dcba873c0737fa511e Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Mar 2026 17:28:44 +0000 Subject: [PATCH 3/4] Set foliaSupported=true by default for canvas plugin Co-authored-by: TheBjoRedCraft <143264463+TheBjoRedCraft@users.noreply.github.com> --- .../surfapi/gradle/platform/canvas/CanvasSurfExtension.kt | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt index e9ef8b8fc..f43334cf3 100644 --- a/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt +++ b/surf-api-gradle-plugin/src/main/kotlin/dev/slne/surf/surfapi/gradle/platform/canvas/CanvasSurfExtension.kt @@ -5,4 +5,9 @@ import org.gradle.api.model.ObjectFactory import javax.inject.Inject open class CanvasSurfExtension @Inject constructor(objects: ObjectFactory) : - PaperPluginSurfExtension(objects) + PaperPluginSurfExtension(objects) { + + init { + foliaSupported.convention(true) + } +} From b26414b18564e2853f31596cd0f5c4b5349ab961 Mon Sep 17 00:00:00 2001 From: TheBjoRedCraft <143264463+TheBjoRedCraft@users.noreply.github.com> Date: Tue, 10 Mar 2026 18:30:16 +0100 Subject: [PATCH 4/4] Update version from 1.12.3 to 1.12.4 --- surf-api-gradle-plugin/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/surf-api-gradle-plugin/build.gradle.kts b/surf-api-gradle-plugin/build.gradle.kts index 593cd8853..64f55a52e 100644 --- a/surf-api-gradle-plugin/build.gradle.kts +++ b/surf-api-gradle-plugin/build.gradle.kts @@ -21,7 +21,7 @@ plugins { group = groupId version = buildString { append(mcVersion) - append("-1.12.3") + append("-1.12.4") if (snapshot) append("-SNAPSHOT") }