From 327ad9b906d8d69987bfb87432d816e007a63198 Mon Sep 17 00:00:00 2001 From: loki5512344 Date: Mon, 1 Jun 2026 22:26:18 +0200 Subject: [PATCH] Add ProGuard obfuscation build task Configures a JavaExec ProGuard task that runs after jar, keeping all plugin entry points and command/listener classes while repackaging into the mdbd package. --- build.gradle.kts | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 2aabf3f..bd264ce 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,15 +9,49 @@ repositories { maven("https://repo.dmulloy2.net/repository/public/") } +val proguardConfig by configurations.creating + dependencies { compileOnly("io.papermc.paper:paper-api:1.21.1-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) } +val obfuscateTask = tasks.register("obfuscate") { + description = "Obfuscate the plugin jar using ProGuard" + mainClass.set("proguard.ProGuard") + classpath = proguardConfig + + val inJar = tasks.named("jar").get().archiveFile.get().asFile.path + val outJar = layout.buildDirectory.file("libs/${project.name}-${version}-obf.jar").get().asFile.path + + args( + "-injars", inJar, + "-outjars", outJar, + "-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.**", + "-keepclassmembers", "class * { @org.bukkit.event.EventHandler *; }", + "-keepnames", "class dev.loki.**", + + "-dontoptimize", + "-allowaccessmodification", + "-repackageclasses", "mdbd", + "-keepattributes", "Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,EnclosingMethod" + ) + + dependsOn(tasks.named("jar")) +} + tasks { runServer { minecraftVersion("1.21.1") @@ -26,11 +60,12 @@ tasks { processResources { val props = mapOf("version" to version) - filesMatching("paper-plugin.yml") { - expand(props) - } filesMatching("*.yml") { expand(props) } } + + named("build") { + dependsOn(obfuscateTask) + } }