aboutsummaryrefslogtreecommitdiff
path: root/build.gradle.kts
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle.kts')
-rw-r--r--build.gradle.kts308
1 files changed, 17 insertions, 291 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index 269f000..8377205 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,29 +1,17 @@
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 {
+ val kotlinVersion = "2.0.20"
+ kotlin("jvm") version kotlinVersion apply false
+ kotlin("plugin.serialization") version kotlinVersion apply false
+ id("com.github.gmazzo.buildconfig") version "5.5.0" apply false
+ id("ledger-globals")
+ id("com.github.johnrengelman.shadow") version "8.1.1" apply false
}
-plugins {
- idea
- java
- id("gg.essential.loom") version "0.10.0.+"
- id("dev.architectury.architectury-pack200") version "0.1.3"
- id("com.github.johnrengelman.shadow") version "8.1.1"
- id("com.github.gmazzo.buildconfig") version "5.5.0"
- kotlin("jvm") version "2.0.20"
+allprojects {
+ apply(plugin = "ledger-globals")
}
fun cmd(vararg args: String): String {
@@ -35,278 +23,16 @@ fun cmd(vararg args: String): String {
return baos.toByteArray().decodeToString().trim()
}
-
-val baseGroup: String by project
-val mcVersion: String by project
val gitVersion = cmd("git", "rev-parse", "--short", "HEAD")
val fullVersion = project.property("mod_version").toString()
-val version: String = "$fullVersion-$gitVersion"
-val mixinGroup = "$baseGroup.mixin"
-project.version = version
-val modid: String by project
-
-// Toolchains:
-java {
- toolchain.languageVersion.set(JavaLanguageVersion.of(8))
-}
-
-// Minecraft configuration:
-loom {
- log4jConfigs.from(file("log4j2.xml"))
- launchConfigs {
- "client" {
- property("mixin.debug", "true")
- arg("--tweakClass", "org.spongepowered.asm.launch.MixinTweaker")
- arg("--tweakClass", "io.github.notenoughupdates.moulconfig.tweaker.DevelopmentResourceTweaker")
- }
- }
- runConfigs {
- "client" {
- if (SystemUtils.IS_OS_MAC_OSX) {
- // This argument causes a crash on macOS
- vmArgs.remove("-XstartOnFirstThread")
- }
- }
- remove(getByName("server"))
- }
- forge {
- pack200Provider.set(dev.architectury.pack200.java.Pack200Adapter())
- mixinConfig("mixins.$modid.json")
- }
- mixin {
- defaultRefmapName.set("mixins.$modid.refmap.json")
- }
-}
-
-tasks.compileJava {
- dependsOn(tasks.processResources)
-}
-
-sourceSets.main {
- output.setResourcesDir(sourceSets.main.flatMap { it.java.classesDirectory })
- java.srcDir(layout.projectDirectory.dir("src/main/kotlin"))
- kotlin.destinationDirectory.set(java.destinationDirectory)
-}
-
-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")
-}
-
-val shadowImpl: Configuration by configurations.creating {
- configurations.implementation.get().extendsFrom(this)
-}
-
-dependencies {
- minecraft("com.mojang:minecraft:1.8.9")
- mappings("de.oceanlabs.mcp:mcp_stable:22-1.8.9")
- forge("net.minecraftforge:forge:1.8.9-11.15.1.2318-1.8.9")
-
- shadowImpl(kotlin("stdlib-jdk8"))
-
- shadowImpl("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
- isTransitive = false
- }
- annotationProcessor("org.spongepowered:mixin:0.8.5-SNAPSHOT")
-
- 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()
-}
-
-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))
+val versionName: String = "$fullVersion-$gitVersion"
+allprojects {
+ version = versionName
+ afterEvaluate {
+ configureIf<BuildConfigExtension> {
+ buildConfigField<String>("VERSION", versionName)
+ buildConfigField<String>("FULL_VERSION", fullVersion)
+ buildConfigField<String>("GIT_COMMIT", gitVersion)
}
- 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("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 {
- this["FMLCorePluginContainsFMLMod"] = "true"
- this["ForceLoadAsMod"] = "true"
-
- // If you don't want mixins, remove these lines
- this["TweakClass"] = "org.spongepowered.asm.launch.MixinTweaker"
- this["MixinConfigs"] = "mixins.$modid.json"
- }
-}
-
-tasks.processResources {
- inputs.property("version", project.version)
- inputs.property("mcversion", mcVersion)
- inputs.property("modid", modid)
- inputs.property("basePackage", baseGroup)
-
- filesMatching(listOf("mcmod.info", "mixins.$modid.json")) {
- expand(inputs.properties)
}
-
- rename("(.+_at.cfg)", "META-INF/$1")
-}
-
-
-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(shadowJar2)
- input.set(shadowJar2.get().archiveFile)
-}
-
-tasks.jar {
- archiveClassifier.set("without-deps")
- destinationDirectory.set(layout.buildDirectory.dir("badjars"))
-}
-
-
-tasks.assemble.get().dependsOn(tasks.remapJar)
-
-configure<BuildConfigExtension> {
- packageName("moe.nea.ledger.gen")
- buildConfigField<String>("VERSION", version)
- buildConfigField<String>("FULL_VERSION", fullVersion)
- buildConfigField<String>("GIT_COMMIT", gitVersion)
-}
-