BREAKING CHANGE: New release assets use purpur-heights-<version>.jar. Runtime SpigotHeights identity, saved player data, permissions and potion keys remain unchanged. Replace the old JAR instead of loading both distributions.
104 lines
4.2 KiB
Kotlin
104 lines
4.2 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.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())
|
|
}
|
|
|
|
// Exercise the declared runtime's native brewing engine, not a recipe-registry double.
|
|
// Paperclip only extracts/patches dependencies: no server, world, port or EULA acceptance.
|
|
val brewingRuntime = layout.buildDirectory.dir("brewing-runtime")
|
|
val downloadBrewingRuntime = tasks.register("downloadBrewingRuntime") {
|
|
val launcher = brewingRuntime.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 prepareBrewingRuntime = tasks.register<JavaExec>("prepareBrewingRuntime") {
|
|
dependsOn(downloadBrewingRuntime)
|
|
javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(25) }
|
|
classpath = files(brewingRuntime.map { it.file("purpur-26.2-2618.jar") })
|
|
mainClass = "io.papermc.paperclip.Main"
|
|
jvmArgs("-Dpaperclip.patchonly=true")
|
|
workingDir(brewingRuntime)
|
|
outputs.dir(brewingRuntime.map { it.dir("versions") })
|
|
outputs.dir(brewingRuntime.map { it.dir("libraries") })
|
|
}
|
|
val nativeTest = sourceSets.create("nativeTest")
|
|
dependencies {
|
|
// Use the runtime's bundled API/dependencies, not the API POM's older transitive versions.
|
|
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(brewingRuntime) {
|
|
include("versions/**/*.jar", "libraries/**/*.jar")
|
|
}).builtBy(prepareBrewingRuntime)
|
|
nativeTest.compileClasspath += sourceSets.main.get().output + nativeRuntimeJars
|
|
nativeTest.runtimeClasspath += sourceSets.main.get().output + nativeRuntimeJars
|
|
val nativeBrewingTest = tasks.register<Test>("nativeBrewingTest") {
|
|
description = "Runs native Purpur brewing regressions without starting a server"
|
|
testClassesDirs = nativeTest.output.classesDirs
|
|
classpath = nativeTest.runtimeClasspath
|
|
useJUnitPlatform()
|
|
maxHeapSize = "1G"
|
|
workingDir(brewingRuntime)
|
|
}
|
|
tasks.check { dependsOn(nativeBrewingTest) }
|
|
|
|
val pluginVersion = version
|
|
tasks.processResources {
|
|
filesMatching("plugin.yml") {
|
|
expand("version" to pluginVersion)
|
|
}
|
|
}
|