plugins { id("java-library") id("xyz.jpenilla.run-paper") version "3.0.2" } repositories { mavenCentral() maven("https://repo.papermc.io/repository/maven-public/") maven("https://repo.dmulloy2.net/repository/public/") } val proguardConfig by configurations.creating dependencies { compileOnly("io.papermc.paper:paper-api:1.21.5-R0.1-SNAPSHOT") compileOnly("com.comphenix.protocol:ProtocolLib:5.3.0") proguardConfig("com.guardsquare:proguard-base:7.4.2") } java { toolchain.languageVersion = JavaLanguageVersion.of(21) } tasks.withType { options.encoding = "UTF-8" } tasks.withType { filteringCharset = "UTF-8" } val obfuscateTask = tasks.register("obfuscate") { description = "Obfuscate the plugin jar using ProGuard" mainClass.set("proguard.ProGuard") classpath = proguardConfig val jarFile = tasks.named("jar").get().archiveFile.get().asFile // Write to separate dir — avoids conflicts with jar task output on Windows val obfJar = layout.buildDirectory.file("obfuscated/${project.name}-${version}.jar").get().asFile args( "-injars", jarFile.path, "-outjars", obfJar.path, "-dontwarn", "-ignorewarnings", "-keep", "class dev.loki.mdbd", "-keep", "class dev.loki.mdbdBootstrap", "-keep", "class dev.loki.mdbdLoader", "-keep", "class dev.loki.command.** { *; }", "-keep", "class dev.loki.listener.** { *; }", "-keep", "class dev.loki.chest.** { *; }", "-keep", "class dev.loki.hook.** { *; }", "-keep", "class dev.loki.gate.** { *; }", "-keep", "class dev.loki.killer.** { *; }", "-keep", "class dev.loki.survivor.** { *; }", "-keep", "class dev.loki.damage.** { *; }", "-keep", "class dev.loki.item.** { *; }", "-keep", "class dev.loki.phase.** { *; }", "-keep", "class dev.loki.ui.** { *; }", "-keep", "class dev.loki.role.** { *; }", "-keep", "class dev.loki.player.** { *; }", "-keep", "class dev.loki.sound.** { *; }", "-keep", "class dev.loki.state.** { *; }", "-keep", "class dev.loki.hatch.** { *; }", "-keep", "class dev.loki.util.** { *; }", "-keep", "class dev.loki.data.** { *; }", "-keep", "class dev.loki.world.** { *; }", "-keep", "class dev.loki.objective.** { *; }", "-keep", "class dev.loki.map.** { *; }", "-keep", "class dev.loki.core.** { *; }", "-keep", "class dev.loki.config.** { *; }", "-dontoptimize", "-allowaccessmodification", "-repackageclasses", "mdbd", "-keepattributes", "Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod" ) inputs.file(jarFile) outputs.file(obfJar) dependsOn(tasks.named("jar")) } // Save original jar as -orig, then replace with obfuscated val jarName = "${project.name}-${version}" tasks.register("saveOriginalJar") { val jarSrc = layout.buildDirectory.file("libs/$jarName.jar") val jarDst = layout.buildDirectory.file("libs/$jarName-orig.jar") dependsOn(tasks.named("jar")) inputs.file(jarSrc) outputs.file(jarDst) doLast { jarSrc.get().asFile.copyTo(jarDst.get().asFile, overwrite = true) } } tasks.register("replaceWithObfuscated") { dependsOn(obfuscateTask, "saveOriginalJar") from(layout.buildDirectory.dir("obfuscated")) include("$jarName.jar") into(layout.buildDirectory.dir("libs")) outputs.upToDateWhen { false } } tasks { runServer { minecraftVersion("1.21.5") jvmArgs("-Xms2G", "-Xmx2G") } processResources { val props = mapOf("version" to version) filesMatching("*.yml") { expand(props) } } named("build") { dependsOn("replaceWithObfuscated") } }