Skip to content

Commit

Permalink
send help
Browse files Browse the repository at this point in the history
my entire day has been wasted on this
  • Loading branch information
rhysdh540 committed Apr 27, 2024
1 parent d1cceb2 commit c3408af
Show file tree
Hide file tree
Showing 4 changed files with 77 additions and 69 deletions.
37 changes: 18 additions & 19 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ plugins {
id("me.modmuss50.mod-publish-plugin")
id("xyz.wagyourtail.unimined")
id("org.ajoberstar.grgit")
// id("dev.nolij.zume-proguard")
id("dev.nolij.zume-proguard")
}

operator fun String.invoke(): String = rootProject.properties[this] as? String ?: error("Property $this not found")
Expand Down Expand Up @@ -223,17 +223,18 @@ subprojects {
apply(plugin = "xyz.wagyourtail.unimined")
apply(plugin = "com.github.johnrengelman.shadow")

configurations {
val shade = create("shade")

compileClasspath.get().extendsFrom(shade)
runtimeClasspath.get().extendsFrom(shade)
val shade: Configuration by configurations.creating {
configurations.compileClasspath.get().extendsFrom(this)
configurations.runtimeClasspath.get().extendsFrom(this)
}

tasks.jar {
destinationDirectory = subProject.layout.buildDirectory.dir("devlibs")
}

dependencies {
"shade"("blue.endless:jankson:${"jankson_version"()}") { isTransitive = false }

"shade"(project(":api")) { isTransitive = false }
shade("blue.endless:jankson:${"jankson_version"()}") { isTransitive = false }
shade(project(":api")) { isTransitive = false }
}

afterEvaluate {
Expand All @@ -244,11 +245,11 @@ subprojects {
rename { "${it}_${"mod_id"()}" }
}

val remapJar = tasks.withType<RemapJarTask>()
val remapJar = tasks.withType<RemapJarTask>()["remapJar"]
dependsOn(remapJar)
from(remapJar)

configurations = immutableListOf(project.configurations["shade"])
configurations = immutableListOf(shade)
archiveBaseName = rootProject.name
archiveClassifier = implName
isPreserveFileTimestamps = false
Expand Down Expand Up @@ -308,22 +309,20 @@ unimined.minecraft {
defaultRemapJar = false
}

configurations {
val shade = create("shade")

compileClasspath.get().extendsFrom(shade)
runtimeClasspath.get().extendsFrom(shade)
val shade: Configuration by configurations.creating {
configurations.compileClasspath.get().extendsFrom(this)
configurations.runtimeClasspath.get().extendsFrom(this)
}

dependencies {
"shade"("blue.endless:jankson:${"jankson_version"()}")
shade("blue.endless:jankson:${"jankson_version"()}")

compileOnly("org.apache.logging.log4j:log4j-core:${"log4j_version"()}")

compileOnly(project(":stubs"))

implementation(project(":api"))
"shade"(project(":api")) { isTransitive = false }
shade(project(":api")) { isTransitive = false }

uniminedImpls.forEach {
implementation(project(":${it}")) { isTransitive = false }
Expand All @@ -348,7 +347,7 @@ tasks.shadowJar {

exclude("*.xcf")

configurations = immutableListOf(project.configurations["shade"])
configurations = immutableListOf(shade)
archiveClassifier = null
isPreserveFileTimestamps = false
isReproducibleFileOrder = true
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ dependencies {

implementation("org.apache.ant:ant:1.10.13")
plugin(id = "com.github.johnrengelman.shadow", version = "8.1.1")
plugin(id = "xyz.wagyourtail.unimined", version = "1.2.3")
plugin(id = "xyz.wagyourtail.unimined", version = "1.2.4-SNAPSHOT")
plugin(id = "com.github.gmazzo.buildconfig", version = "5.2.0")
plugin(id = "org.ajoberstar.grgit", version = "5.2.2")
plugin(id = "me.modmuss50.mod-publish-plugin", version = "0.4.5")
Expand Down
89 changes: 58 additions & 31 deletions buildSrc/src/main/kotlin/dev/nolij/zumegradle/ZumeProGuard.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,73 @@ package dev.nolij.zumegradle
import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.InputFile
import org.gradle.jvm.tasks.Jar
import org.gradle.kotlin.dsl.*
import proguard.gradle.ProGuardTask
import xyz.wagyourtail.unimined.api.minecraft.MinecraftConfig
import xyz.wagyourtail.unimined.api.minecraft.task.RemapJarTask
import xyz.wagyourtail.unimined.api.unimined
import xyz.wagyourtail.unimined.util.sourceSets
import java.io.File

class ZumeProGuard : Plugin<Project> {
override fun apply(project: Project) {
if(project.rootProject != project) {
if(project != project.rootProject)
throw IllegalStateException("This plugin must be applied to the root project")
}

project.tasks.register<ProGuardTask>("proguard") {
configuration("proguard.pro")
group = "build"
outputs.upToDateWhen { false }
val compressJar = project.tasks.withType<CompressJarTask>().single()
dependsOn(compressJar)

injars(compressJar.outputJar)
val outFile = project.tasks.withType<ShadowJar>()["shadowJar"].destinationDirectory.get()
.asFile.resolve("${project.extra["mod_id"]}-${project.version}-proguard.jar")
outjars(outFile)

project.subprojects.forEach { subproject ->
subproject.configurations["compileClasspath"].forEach {
if(it.name.endsWith(".jar")) {
this@register.libraryjars(
mapOf("jarfilter" to "!**.jar",
"filter" to "!module-info.class"),
it.absolutePath
)
project.afterEvaluate {
tasks.register<ProGuardTask>("proguard") {
group = "build"
outputs.upToDateWhen { false }

val jar = tasks.withType<RemapJarTask>()["remapJar"]
val jarchive = jar.archiveFile.get().asFile
dependsOn(jar)

injars(jarchive)
val outFile = jar.destinationDirectory.get().asFile
.resolve("${jarchive.nameWithoutExtension}-proguard.jar")
outjars(outFile)

val filter = mapOf(
"jarfilter" to "!**.jar",
"filter" to "!module-info.class"
)

val javaHome = System.getProperty("java.home")
libraryjars(filter, arrayOf("$javaHome/jmods/java.base.jmod", "$javaHome/jmods/java.desktop.jmod"))
libraryjars(filter, getUnmappedMinecraftJar().absolutePath)
listOf("compileClasspath", "minecraftLibraries").forEach {
configurations[it].forEach fe@ {
if (!it.name.endsWith(".jar")) return@fe
libraryjars(filter, it.absolutePath)
}
}
}

val javaHome = System.getProperty("java.home")
libraryjars(
// filters must be specified first, as a map
mapOf("jarfilter" to "!**.jar",
"filter" to "!module-info.class"),
"$javaHome/jmods/java.base.jmod"
)

dontwarn("java.lang.invoke.MethodHandle")
keep("class dev.nolij.zume.api.** { *; }")
keep("class dev.nolij.zume.mixin.** { @org.spongepowered.asm.mixin.** <methods>; }")
keepattributes("RuntimeVisibleAnnotations")

optimizationpasses(10) // 10 is a lot but if nothing happens after a pass, it will stop
dontusemixedcaseclassnames()

overloadaggressively()
printmapping(layout.buildDirectory.dir("proguard").get().file("mapping.txt").asFile.apply {
parentFile.mkdirs()
if(exists()) delete()
createNewFile()
})
repackageclasses("dev.nolij.zume")
allowaccessmodification()
}.get()
}
}

private fun Project.getUnmappedMinecraftJar(): File {
val mcc = unimined.minecrafts[sourceSets["main"]]
return mcc.getMinecraft(mcc.mcPatcher.prodNamespace, mcc.mcPatcher.prodNamespace).toFile()
}
}
18 changes: 0 additions & 18 deletions proguard.pro

This file was deleted.

0 comments on commit c3408af

Please sign in to comment.