diff --git a/build.gradle.kts b/build.gradle.kts index 8cbbb92..06c756b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -135,7 +135,7 @@ subprojects { } } -tasks.setupPaperServer { - minecraftServerPath = "server" - paperVersionGroup = "1.18" +foundation { + minecraftServerPath.set("server") + paperVersionGroup.set("1.18") } diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationExtension.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationExtension.kt new file mode 100644 index 0000000..d4de2c8 --- /dev/null +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationExtension.kt @@ -0,0 +1,8 @@ +package cloud.kubelet.foundation.gradle + +import org.gradle.api.provider.Property + +interface FoundationExtension { + val paperVersionGroup: Property + val minecraftServerPath: Property +} diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt index d7977cc..f2cb0c5 100644 --- a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/FoundationGradlePlugin.kt @@ -2,9 +2,13 @@ package cloud.kubelet.foundation.gradle import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.kotlin.dsl.create class FoundationGradlePlugin : Plugin { override fun apply(project: Project) { - project.tasks.create("setupPaperServer", SetupPaperServer::class.java) + project.extensions.create("foundation") + val setupPaperServer = project.tasks.create("setupPaperServer") + val runPaperServer = project.tasks.create("runPaperServer") + runPaperServer.dependsOn(setupPaperServer) } } diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/RunPaperServer.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/RunPaperServer.kt new file mode 100644 index 0000000..81f3c4c --- /dev/null +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/RunPaperServer.kt @@ -0,0 +1,25 @@ +package cloud.kubelet.foundation.gradle + +import org.gradle.api.DefaultTask +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.getByType + +open class RunPaperServer : DefaultTask() { + init { + outputs.upToDateWhen { false } + } + + @TaskAction + fun runPaperServer() { + val foundation = project.extensions.getByType() + + val minecraftServerDirectory = project.file(foundation.minecraftServerPath.get()) + val paperJarFile = minecraftServerDirectory.resolve("paper.jar") + project.javaexec { + classpath(paperJarFile.absolutePath) + workingDir(minecraftServerDirectory) + args("nogui") + mainClass.set("io.papermc.paperclip.Main") + } + } +} diff --git a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/SetupPaperServer.kt b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/SetupPaperServer.kt index 316a971..4ff9650 100644 --- a/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/SetupPaperServer.kt +++ b/buildSrc/src/main/kotlin/cloud/kubelet/foundation/gradle/SetupPaperServer.kt @@ -3,34 +3,35 @@ package cloud.kubelet.foundation.gradle import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.options.Option +import org.gradle.kotlin.dsl.getByType +import java.io.File import java.nio.file.Files open class SetupPaperServer : DefaultTask() { - @get:Input - lateinit var paperVersionGroup: String + init { + outputs.upToDateWhen { false } + } @get:Input - lateinit var minecraftServerPath: String + @set:Option(option = "update", description = "Update Paper Server") + var shouldUpdatePaperServer = false + + private val paperVersionClient = PaperVersionClient() @TaskAction fun downloadPaperTask() { - val minecraftServerDirectory = project.file(minecraftServerPath) - val client = PaperVersionClient() - val builds = client.getVersionBuilds(paperVersionGroup) - val build = builds.last() - val download = build.downloads["application"]!! - val url = client.resolveDownloadUrl(build, download) + val foundation = project.extensions.getByType() + val minecraftServerDirectory = project.file(foundation.minecraftServerPath.get()) if (!minecraftServerDirectory.exists()) { minecraftServerDirectory.mkdirs() } - ant.invokeMethod( - "get", mapOf( - "src" to url.toString(), - "dest" to project.file("${minecraftServerPath}/paper.jar").absolutePath - ) - ) + val paperJarFile = project.file("${foundation.minecraftServerPath.get()}/paper.jar") + if (!paperJarFile.exists() || shouldUpdatePaperServer) { + downloadLatestBuild(foundation.paperVersionGroup.get(), paperJarFile) + } val paperPluginsDirectory = minecraftServerDirectory.resolve("plugins") @@ -52,4 +53,20 @@ open class SetupPaperServer : DefaultTask() { Files.createSymbolicLink(pluginLinkFile.toPath(), pluginJarFile.toPath()) } } + + private fun downloadLatestBuild(paperVersionGroup: String, paperJarFile: File) { + val builds = paperVersionClient.getVersionBuilds(paperVersionGroup) + val build = builds.last() + val download = build.downloads["application"]!! + val url = paperVersionClient.resolveDownloadUrl(build, download) + + ant.invokeMethod( + "get", mapOf( + "src" to url.toString(), + "dest" to paperJarFile.absolutePath + ) + ) + + logger.lifecycle("Installed Paper Server ${build.version} build ${build.build}") + } }