aboutsummaryrefslogtreecommitdiff
path: root/build.gradle.kts
diff options
context:
space:
mode:
Diffstat (limited to 'build.gradle.kts')
-rw-r--r--build.gradle.kts257
1 files changed, 257 insertions, 0 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
new file mode 100644
index 0000000..a6a59db
--- /dev/null
+++ b/build.gradle.kts
@@ -0,0 +1,257 @@
+import gg.essential.gradle.util.noServerRunConfigs
+import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
+import gg.essential.gradle.util.RelocationTransform.Companion.registerRelocationAttribute
+import gg.essential.gradle.util.prebundle
+
+plugins {
+ id("gg.essential.multi-version")
+ id("gg.essential.defaults.repo")
+ id("gg.essential.defaults.java")
+ id("gg.essential.defaults.loom")
+ id("com.github.johnrengelman.shadow")
+ id("net.kyori.blossom") version "1.3.0"
+ id("io.github.juuxel.loom-quiltflower-mini")
+ java
+}
+
+java {
+ withJavadocJar()
+ withSourcesJar()
+}
+
+val mod_name: String by project
+val mod_version: String by project
+val mod_id: String by project
+
+preprocess {
+ vars.put("MODERN", if (project.platform.mcMinor >= 16) 1 else 0)
+}
+
+blossom {
+ replaceToken("@VER@", mod_version)
+ replaceToken("@NAME@", mod_name)
+ replaceToken("@ID@", mod_id)
+}
+
+version = mod_version
+group = "cc.polyfrost"
+base {
+ archivesName.set(mod_name)
+}
+
+loom.noServerRunConfigs()
+loom {
+ if (project.platform.isLegacyForge) {
+ launchConfigs.named("client") {
+ property("fml.coreMods.load", "cc.polyfrost.oneconfig.plugin.LoadingPlugin")
+ property("mixin.debug.export", "true")
+ }
+ }
+ if (project.platform.isForge) {
+ forge {
+ mixinConfig("mixins.${mod_id}.json")
+ }
+ }
+ mixin.defaultRefmapName.set("mixins.${mod_id}.refmap.json")
+}
+
+repositories {
+ maven("https://repo.woverflow.cc/")
+}
+
+val relocated = registerRelocationAttribute("relocate") {
+ relocate("gg.essential", "cc.polyfrost.oneconfig.libs")
+}
+
+val shadeRelocated: Configuration by configurations.creating {
+ attributes { attribute(relocated, true) }
+}
+
+val shade: Configuration by configurations.creating {
+ configurations.implementation.get().extendsFrom(this)
+}
+
+val lwjgl: Configuration by configurations.creating
+
+val lwjglNative: Configuration by configurations.creating {
+ isTransitive = false
+}
+
+val dummyImpl: Configuration by configurations.creating {
+ configurations.implementation.get().extendsFrom(this)
+}
+
+sourceSets {
+ val dummy by creating {
+ compileClasspath += dummyImpl
+ }
+ main {
+ compileClasspath += dummy.output
+ runtimeClasspath += lwjglNative
+ output.setResourcesDir(java.classesDirectory)
+ }
+}
+
+val lwjglJar by tasks.registering(ShadowJar::class) {
+ group = "shadow"
+ archiveClassifier.set("lwjgl")
+ configurations = listOf(lwjgl)
+ exclude ("META-INF/versions/**")
+ exclude ("**/module-info.class")
+ exclude ("**/package-info.class")
+ relocate("org.lwjgl", "org.lwjgl3") {
+ include ("org.lwjgl.PointerBuffer")
+ include ("org.lwjgl.BufferUtils")
+ }
+}
+
+dependencies {
+ dummyImpl("gg.essential:vigilance-1.8.9-forge:222") {
+ isTransitive = false
+ }
+
+ shadeRelocated("gg.essential:universalcraft-1.8.9-forge:209") {
+ isTransitive = false
+ }
+
+ // for other mods and universalcraft
+ shade("org.jetbrains.kotlin:kotlin-stdlib:1.6.21")
+ shade("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.21")
+ shade("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21")
+ shade("org.jetbrains.kotlin:kotlin-reflect:1.6.21")
+ shade("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1")
+ shade("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1")
+ shade("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:1.6.1")
+ shade("org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.3.3")
+ shade("org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.3.3")
+ shade("org.jetbrains.kotlinx:kotlinx-serialization-cbor-jvm:1.3.3")
+
+ shade("org.spongepowered:mixin:0.7.11-SNAPSHOT") {
+ isTransitive = false
+ }
+
+ lwjgl ("org.lwjgl:lwjgl:3.3.1")
+ lwjgl ("org.lwjgl:lwjgl-stb:3.3.1")
+ lwjgl ("org.lwjgl:lwjgl-tinyfd:3.3.1")
+ lwjgl ("org.lwjgl:lwjgl-nanovg:3.3.1")
+ lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-windows")
+ lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-windows")
+ lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-windows")
+ lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-windows")
+ lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-linux")
+ lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-linux")
+ lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-linux")
+ lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-linux")
+ lwjglNative ("org.lwjgl:lwjgl:3.3.1:natives-macos")
+ lwjglNative ("org.lwjgl:lwjgl-stb:3.3.1:natives-macos")
+ lwjglNative ("org.lwjgl:lwjgl-tinyfd:3.3.1:natives-macos")
+ lwjglNative ("org.lwjgl:lwjgl-nanovg:3.3.1:natives-macos")
+ shade(lwjglJar.get().outputs.files)
+ shade(prebundle(shadeRelocated))
+}
+
+tasks.processResources {
+ inputs.property("id", mod_id)
+ inputs.property("name", mod_name)
+ val java = if (project.platform.mcMinor >= 18) {
+ 17
+ } else {
+ if (project.platform.mcMinor == 17) 16 else 8
+ }
+ val compatLevel = "JAVA_${java}"
+ inputs.property("java", java)
+ inputs.property("java_level", compatLevel)
+ inputs.property("version", mod_version)
+ inputs.property("mcVersionStr", project.platform.mcVersionStr)
+ filesMatching(listOf("mcmod.info", "mixins.${mod_id}.json", "mods.toml")) {
+ expand(
+ mapOf(
+ "id" to mod_id,
+ "name" to mod_name,
+ "java" to java,
+ "java_level" to compatLevel,
+ "version" to mod_version,
+ "mcVersionStr" to project.platform.mcVersionStr
+ )
+ )
+ }
+ filesMatching("fabric.mod.json") {
+ expand(
+ mapOf(
+ "id" to mod_id,
+ "name" to mod_name,
+ "java" to java,
+ "java_level" to compatLevel,
+ "version" to mod_version,
+ "mcVersionStr" to project.platform.mcVersionStr.substringBeforeLast(".") + ".x"
+ )
+ )
+ }
+}
+
+tasks {
+ withType(Jar::class.java) {
+ if (project.platform.isFabric) {
+ exclude("mcmod.info", "mods.toml")
+ } else {
+ exclude("fabric.mod.json")
+ if (project.platform.isLegacyForge) {
+ exclude("mods.toml")
+ } else {
+ exclude("mcmod.info")
+ }
+ }
+ }
+ named<ShadowJar>("shadowJar") {
+ archiveClassifier.set("dev")
+ configurations = listOf(shade, lwjglNative)
+ duplicatesStrategy = DuplicatesStrategy.EXCLUDE
+ }
+ remapJar {
+ input.set(shadowJar.get().archiveFile)
+ archiveClassifier.set("")
+ }
+ jar {
+ manifest {
+ attributes(
+ mapOf(
+ "ModSide" to "CLIENT",
+ "ForceLoadAsMod" to true,
+ "TweakOrder" to "0",
+ "MixinConfigs" to "mixins.oneconfig.json",
+ "FMLCorePlugin" to "cc.polyfrost.oneconfig.plugin.LoadingPlugin",
+ "TweakClass" to "org.spongepowered.asm.launch.MixinTweaker",
+ "FMLCorePluginContainsFMLMod" to "lol"
+ )
+ )
+ }
+ dependsOn(shadowJar)
+ archiveClassifier.set("")
+ enabled = false
+ }
+}
+
+afterEvaluate {
+ val checkFile = file(".gradle/loom-cache/SETUP")
+ val lwjglJarDelayed by tasks.creating {
+ dependsOn(lwjglJar)
+ }
+
+ @Suppress("UNUSED_VARIABLE")
+ val setupGradle by tasks.creating {
+ dependsOn(lwjglJarDelayed)
+ val genSourcesWithQuiltflower = tasks.named("genSourcesWithQuiltflower").get()
+ dependsOn(genSourcesWithQuiltflower)
+ genSourcesWithQuiltflower.mustRunAfter(lwjglJarDelayed)
+ doLast {
+ checkFile.parentFile.mkdirs()
+ checkFile.createNewFile()
+ }
+ }
+
+ if (!checkFile.exists()) {
+ logger.error("--------------")
+ logger.error("PLEASE RUN THE `setupGradle` TASK, OR ELSE UNEXPECTED THING MAY HAPPEN!")
+ logger.error("--------------")
+ }
+} \ No newline at end of file