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().configureEach { options.compilerArgs.addAll(listOf("-Xlint:all,-deprecation,-removal", "-Werror")) } dependencies { compileOnly("org.purpurmc.purpur:purpur-api:26.3.build.2651-stable") compileOnly("net.dmulloy2:ProtocolLib:5.4.0") testImplementation("net.dmulloy2:ProtocolLib:5.4.0") testImplementation("org.purpurmc.purpur:purpur-api:26.3.build.2651-stable") testImplementation(platform("org.junit:junit-bom:5.13.4")) testImplementation("org.junit.jupiter:junit-jupiter") testImplementation("org.mockito:mockito-core:5.18.0") 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()) } // Native API/event/delivery regressions run without starting a listening server. val ignisRuntime = layout.buildDirectory.dir("ignis-runtime") val downloadIgnisRuntime = tasks.register("downloadIgnisRuntime") { val launcher = ignisRuntime.map { it.file("purpur-26.3-2651.jar") } outputs.file(launcher) doLast { val file = launcher.get().asFile file.parentFile.mkdirs() val connection = URI("https://api.purpurmc.org/v2/purpur/26.3/2651/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 == "0677c1febecfbc2e5b0a7f76abd647b70a1f38d3cbdf3dd6a82e401b4262a598") { "Purpur 2651 checksum mismatch" } file.writeBytes(bytes) } } val prepareIgnisRuntime = tasks.register("prepareIgnisRuntime") { dependsOn(downloadIgnisRuntime) javaLauncher = javaToolchains.launcherFor { languageVersion = JavaLanguageVersion.of(25) } classpath = files(ignisRuntime.map { it.file("purpur-26.3-2651.jar") }) mainClass = "io.papermc.paperclip.Main" jvmArgs("-Dpaperclip.patchonly=true") workingDir(ignisRuntime) outputs.dir(ignisRuntime.map { it.dir("versions") }) outputs.dir(ignisRuntime.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.implementationConfigurationName, "net.dmulloy2:ProtocolLib:5.4.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(ignisRuntime) { include("versions/**/*.jar", "libraries/**/*.jar") }).builtBy(prepareIgnisRuntime) nativeTest.compileClasspath += sourceSets.main.get().output + nativeRuntimeJars nativeTest.runtimeClasspath += sourceSets.main.get().output + nativeRuntimeJars val nativeIgnisTest = tasks.register("nativeIgnisTest") { description = "Runs native Purpur regressions without starting a server" testClassesDirs = nativeTest.output.classesDirs classpath = nativeTest.runtimeClasspath useJUnitPlatform() maxHeapSize = "1G" workingDir(ignisRuntime) } tasks.check { dependsOn(nativeIgnisTest) } val pluginVersion = version tasks.processResources { filesMatching("plugin.yml") { expand("version" to pluginVersion) } }