aboutsummaryrefslogtreecommitdiff
path: root/build.gradle.kts
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle.kts')
-rw-r--r--build.gradle.kts163
1 files changed, 154 insertions, 9 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index d911121..440e815 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,6 +1,20 @@
import com.github.gmazzo.buildconfig.BuildConfigExtension
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import com.google.gson.Gson
import org.apache.commons.lang3.SystemUtils
+import proguard.gradle.ProGuardTask
import java.io.ByteArrayOutputStream
+import java.net.URI
+import java.util.zip.ZipInputStream
+
+buildscript {
+ repositories {
+ mavenCentral()
+ }
+ dependencies {
+ classpath("com.guardsquare:proguard-gradle:7.6.1")
+ }
+}
plugins {
idea
@@ -18,7 +32,7 @@ fun cmd(vararg args: String): String {
standardOutput = baos
commandLine(*args)
}
- return baos.toByteArray().decodeToString().trim()
+ return baos.toByteArray().decodeToString().trim()
}
@@ -76,6 +90,7 @@ sourceSets.main {
repositories {
mavenCentral()
+ maven("https://repo.nea.moe/releases/")
maven("https://repo.spongepowered.org/maven/")
maven("https://maven.notenoughupdates.org/releases")
maven("https://pkgs.dev.azure.com/djtheredstoner/DevAuth/_packaging/public/maven/v1")
@@ -91,6 +106,7 @@ dependencies {
forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9")
shadowImpl(kotlin("stdlib-jdk8"))
+ implementation("org.jspecify:jspecify:1.0.0")
shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
isTransitive = false
@@ -100,12 +116,18 @@ dependencies {
shadowImpl("org.xerial:sqlite-jdbc:3.45.3.0")
shadowImpl("org.notenoughupdates.moulconfig:legacy:3.0.0-beta.9")
shadowImpl("io.azam.ulidj:ulidj:1.0.4")
+ shadowImpl("moe.nea:libautoupdate:1.3.1")
runtimeOnly("me.djtheredstoner:DevAuth-forge-legacy:1.1.2")
testImplementation("org.junit.jupiter:junit-jupiter:5.9.2")
}
// Tasks:
+// Delete default shadow configuration
+tasks.shadowJar {
+ doFirst { error("Incorrect shadow JAR built!") }
+}
+
tasks.test {
useJUnitPlatform()
}
@@ -114,6 +136,111 @@ tasks.withType(JavaCompile::class) {
options.encoding = "UTF-8"
}
+abstract class GenerateItemIds : DefaultTask() {
+ @get: OutputDirectory
+ abstract val outputDirectory: DirectoryProperty
+
+ @get: InputDirectory
+ abstract val repoFiles: DirectoryProperty
+
+ @get: Input
+ abstract val repoHash: Property<String>
+
+ @get: Input
+ abstract val packageName: Property<String>
+
+ @get:Internal
+ val outputFile get() = outputDirectory.asFile.get().resolve(packageName.get().replace(".", "/") + "/ItemIds.java")
+
+ @TaskAction
+ fun generateItemIds() {
+ val nonIdName = "[^A-Z0-9_]".toRegex()
+
+ data class Item(val id: String) {
+ val javaName get() = id.replace(nonIdName, { "__" + it.value.single().code })
+ }
+
+ val items = mutableListOf<Item>()
+ for (listFile in repoFiles.asFile.get().resolve("items").listFiles() ?: emptyArray()) {
+ listFile ?: continue
+ if (listFile.extension != "json") {
+ error("Unknown file $listFile")
+ }
+ items.add(Item(listFile.nameWithoutExtension))
+ }
+ items.sortedBy { it.id }
+ outputFile.parentFile.mkdirs()
+ val writer = outputFile.writer().buffered()
+ writer.appendLine("// @generated from " + repoHash.get())
+ writer.appendLine("package " + packageName.get() + ";")
+ writer.appendLine()
+ writer.appendLine("import moe.nea.ledger.ItemId;")
+ writer.appendLine()
+ writer.appendLine("/**")
+ writer.appendLine(" * Automatically generated {@link ItemId} list.")
+ writer.appendLine(" */")
+ writer.appendLine("@org.jspecify.annotations.NullMarked")
+ writer.appendLine("public class ItemIds {")
+ val gson = Gson()
+ for (item in items) {
+ writer.appendLine("\t/**")
+ writer.appendLine("\t * @see <a href=${gson.toJson("https://github.com/NotEnoughUpdates/NotEnoughUpdates-REPO/blob/${repoHash.get()}/items/${item.id}.json")}>JSON definition</a>")
+ writer.appendLine("\t */")
+ writer.appendLine("\tpublic static final ItemId ${item.javaName} =" +
+ " ItemId.forName(${gson.toJson(item.id)});")
+ }
+ writer.appendLine("}")
+ writer.close()
+ }
+}
+
+abstract class RepoDownload : DefaultTask() {
+ @get:Input
+ abstract val hash: Property<String>
+
+ @get:OutputDirectory
+ abstract val outputDirectory: DirectoryProperty
+
+ init {
+ outputDirectory.convention(project.layout.buildDirectory.dir("extracted-test-repo"))
+ }
+
+ @TaskAction
+ fun performDownload() {
+ val outputDir = outputDirectory.asFile.get().absoluteFile
+ outputDir.mkdirs()
+ URI("https://github.com/notEnoughUpdates/notEnoughUpdates-rEPO/archive/${hash.get()}.zip").toURL().openStream()
+ .let(::ZipInputStream)
+ .use { zipInput ->
+ while (true) {
+ val entry = zipInput.nextEntry ?: break
+ val destination = outputDir.resolve(
+ entry.name.substringAfter('/')).absoluteFile
+ require(outputDir in generateSequence(destination) { it.parentFile })
+ if (entry.isDirectory) continue
+ destination.parentFile.mkdirs()
+ destination.outputStream().use { output ->
+ zipInput.copyTo(output)
+ }
+ }
+ }
+ }
+}
+
+val downloadRepo by tasks.register("downloadRepo", RepoDownload::class) {
+ hash.set("725ddb8")
+}
+
+val generateItemIds by tasks.register("generateItemIds", GenerateItemIds::class) {
+ repoHash.set(downloadRepo.hash)
+ packageName.set("moe.nea.ledger.gen")
+ outputDirectory.set(layout.buildDirectory.dir("generated/sources/itemIds"))
+ repoFiles.set(downloadRepo.outputDirectory)
+}
+sourceSets.main {
+ java.srcDir(generateItemIds)
+}
+
tasks.withType(Jar::class) {
archiveBaseName.set(modid)
manifest.attributes.run {
@@ -140,10 +267,34 @@ tasks.processResources {
}
+val proguardOutJar = project.layout.buildDirectory.file("badjars/stripped.jar")
+val proguard = tasks.register("proguard", ProGuardTask::class) {
+ dependsOn(tasks.jar)
+ injars(tasks.jar.map { it.archiveFile })
+ outjars(proguardOutJar)
+ configuration(file("ledger-rules.pro"))
+ verbose()
+ val libJava = javaToolchains.launcherFor(java.toolchain)
+ .get()
+ .metadata.installationPath.file("jre/lib/rt.jar")
+ println(libJava)
+ libraryjars(libJava)
+ libraryjars(configurations.compileClasspath)
+}
+
+val shadowJar2 = tasks.register("shadowJar2", ShadowJar::class) {
+ destinationDirectory.set(layout.buildDirectory.dir("badjars"))
+ archiveClassifier.set("all-dev")
+ from(proguardOutJar)
+ dependsOn(proguard)
+ configurations = listOf(shadowImpl)
+ relocate("moe.nea.libautoupdate", "moe.nea.ledger.deps.libautoupdate")
+ mergeServiceFiles()
+}
val remapJar by tasks.named<net.fabricmc.loom.task.RemapJarTask>("remapJar") {
archiveClassifier.set("")
- from(tasks.shadowJar)
- input.set(tasks.shadowJar.get().archiveFile)
+ from(shadowJar2)
+ input.set(shadowJar2.get().archiveFile)
}
tasks.jar {
@@ -151,12 +302,6 @@ tasks.jar {
destinationDirectory.set(layout.buildDirectory.dir("badjars"))
}
-tasks.shadowJar {
- destinationDirectory.set(layout.buildDirectory.dir("badjars"))
- archiveClassifier.set("all-dev")
- configurations = listOf(shadowImpl)
- mergeServiceFiles()
-}
tasks.assemble.get().dependsOn(tasks.remapJar)