BREAKING CHANGE: New release assets use purpur-base-<version>.jar. Runtime SpigotBase identity, data folders, permissions and persistent item keys remain unchanged. Replace the old JAR rather than loading both distributions.
106 lines
4.0 KiB
Kotlin
106 lines
4.0 KiB
Kotlin
import java.net.URI
|
|
import java.security.MessageDigest
|
|
|
|
plugins {
|
|
java
|
|
}
|
|
|
|
group = "games.dmg"
|
|
version = providers.gradleProperty("releaseVersion")
|
|
.orElse("0.1.0-SNAPSHOT")
|
|
.get()
|
|
|
|
repositories {
|
|
mavenCentral()
|
|
maven("https://repo.purpurmc.org/snapshots/")
|
|
}
|
|
|
|
java {
|
|
toolchain {
|
|
languageVersion = JavaLanguageVersion.of(25)
|
|
}
|
|
}
|
|
|
|
tasks.withType<JavaCompile>().configureEach {
|
|
options.compilerArgs.addAll(listOf("-Xlint:all,-deprecation,-removal", "-Werror"))
|
|
}
|
|
|
|
dependencies {
|
|
compileOnly("org.purpurmc.purpur:purpur-api:26.2.build.2618-stable")
|
|
|
|
testImplementation("org.purpurmc.purpur:purpur-api:26.2.build.2618-stable")
|
|
testImplementation(platform("org.junit:junit-bom:5.13.4"))
|
|
testImplementation("org.junit.jupiter:junit-jupiter")
|
|
testImplementation("org.mockito:mockito-core:5.18.0")
|
|
testImplementation("org.yaml:snakeyaml:2.4")
|
|
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
|
|
}
|
|
|
|
tasks.test {
|
|
useJUnitPlatform()
|
|
dependsOn(tasks.jar)
|
|
systemProperty("distribution.jar", tasks.jar.get().archiveFile.get().asFile.absolutePath)
|
|
systemProperty("distribution.version", project.version.toString())
|
|
}
|
|
|
|
// Verify client-only label packets against the declared runtime, without starting a server.
|
|
val labelRuntime = layout.buildDirectory.dir("label-runtime")
|
|
val downloadLabelRuntime = tasks.register("downloadLabelRuntime") {
|
|
val launcher = labelRuntime.map { it.file("purpur-26.2-2618.jar") }
|
|
outputs.file(launcher)
|
|
doLast {
|
|
val file = launcher.get().asFile
|
|
file.parentFile.mkdirs()
|
|
val connection = URI("https://api.purpurmc.org/v2/purpur/26.2/2618/download").toURL().openConnection()
|
|
connection.connectTimeout = 30_000
|
|
connection.readTimeout = 120_000
|
|
val bytes = connection.getInputStream().use { it.readBytes() }
|
|
val digest = MessageDigest.getInstance("SHA-256").digest(bytes).joinToString("") { "%02x".format(it) }
|
|
check(digest == "4a32d046a118804d89ca74ba89b798c98f6d8d1f310c18077ac573597049de31") {
|
|
"Purpur 2618 checksum mismatch"
|
|
}
|
|
file.writeBytes(bytes)
|
|
}
|
|
}
|
|
val prepareLabelRuntime = tasks.register<JavaExec>("prepareLabelRuntime") {
|
|
dependsOn(downloadLabelRuntime)
|
|
javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(25) }
|
|
classpath = files(labelRuntime.map { it.file("purpur-26.2-2618.jar") })
|
|
mainClass = "io.papermc.paperclip.Main"
|
|
jvmArgs("-Dpaperclip.patchonly=true")
|
|
workingDir(labelRuntime)
|
|
outputs.dir(labelRuntime.map { it.dir("versions") })
|
|
outputs.dir(labelRuntime.map { it.dir("libraries") })
|
|
}
|
|
val nativeTest = sourceSets.create("nativeTest")
|
|
dependencies {
|
|
add(nativeTest.implementationConfigurationName, platform("org.junit:junit-bom:5.13.4"))
|
|
add(nativeTest.implementationConfigurationName, "org.junit.jupiter:junit-jupiter")
|
|
add(nativeTest.implementationConfigurationName, "org.mockito:mockito-core:5.18.0")
|
|
add(nativeTest.compileOnlyConfigurationName, "org.jetbrains:annotations:26.0.2")
|
|
add(nativeTest.compileOnlyConfigurationName, "org.checkerframework:checker-qual:3.49.2")
|
|
add(nativeTest.runtimeOnlyConfigurationName, "org.junit.platform:junit-platform-launcher")
|
|
}
|
|
val nativeRuntimeJars = files(fileTree(labelRuntime) {
|
|
include("versions/**/*.jar", "libraries/**/*.jar")
|
|
}).builtBy(prepareLabelRuntime)
|
|
nativeTest.compileClasspath += sourceSets.main.get().output + nativeRuntimeJars
|
|
nativeTest.runtimeClasspath += sourceSets.main.get().output + nativeRuntimeJars
|
|
val nativeLabelTest = tasks.register<Test>("nativeLabelTest") {
|
|
description = "Tests native label packet encoding without a listening server"
|
|
testClassesDirs = nativeTest.output.classesDirs
|
|
classpath = nativeTest.runtimeClasspath
|
|
useJUnitPlatform()
|
|
maxHeapSize = "1G"
|
|
workingDir(labelRuntime)
|
|
}
|
|
tasks.check { dependsOn(nativeLabelTest) }
|
|
|
|
val pluginVersion = version
|
|
|
|
tasks.processResources {
|
|
filesMatching("plugin.yml") {
|
|
expand("version" to pluginVersion)
|
|
}
|
|
}
|