SnowyGUI/build.gradle.kts

282 lines
13 KiB
Plaintext
Raw Normal View History

import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import com.modrinth.minotaur.ModrinthExtension
import com.modrinth.minotaur.request.VersionType
import com.modrinth.minotaur.dependencies.DependencyType
import net.fabricmc.loom.LoomGradleExtension
import net.fabricmc.loom.LoomGradlePlugin
buildscript {
dependencies {
classpath("com.guardsquare:proguard-gradle:[7.3.1, 7.4[") {
exclude("com.android.tools.build")
}
}
}
2021-04-08 10:18:46 +02:00
plugins {
kotlin("jvm") version "1.8.21"
kotlin("plugin.serialization") version "1.8.21"
id("com.github.johnrengelman.shadow") version "7.1.2" apply false
id("architectury-plugin") version "[3.4.124, 3.5["
id("dev.architectury.loom") version (
JavaVersion.current().let { version ->
if (version >= JavaVersion.VERSION_16)
"[0.10.0, ${if (version.isCompatibleWith(JavaVersion.VERSION_17)) "0.12.1" else "0.10.1"}["
else "[0.7.4, 0.7.4.200["
}
) apply false
id("com.github.ben-manes.versions") version "0.42.0"
id("net.kyori.indra.git") version "3.0.1"
id("org.cqfn.diktat.diktat-gradle-plugin") version "1.2.5"
id("com.modrinth.minotaur") version "2.7.5" apply false
2021-04-08 10:18:46 +02:00
}
group = "fr.username404"
version = "0.3.4"
2021-04-08 10:18:46 +02:00
val groupAndName = "${rootProject.group}.${rootProject.name.toLowerCase()}"
val javaVer: String = "8"
val kotlinVer: String by rootProject
val kotlinSplitVersion = kotlinVer.split('.')
val serializationVer: String by rootProject
val mcBase: String = (rootProject.property("minecraft") as String).also {
architectury { minecraft = it }
}.substring(0..3)
val kotlinX: String = "org.jetbrains.kotlinx"
2021-04-08 10:18:46 +02:00
subprojects {
group = rootProject.group.toString()
apply(plugin = "org.cqfn.diktat.diktat-gradle-plugin")
diktat {
inputs { include("src/**/*.kt") }
diktatConfigFile = file("$rootDir/Formatting.yml")
ignoreFailures = true
}
lateinit var mappingsDep: Dependency
2021-05-04 22:07:06 +02:00
apply(plugin = "dev.architectury.loom")
apply(plugin = "org.jetbrains.kotlin.plugin.serialization")
extensions.configure<LoomGradleExtension>("loom") {
mappingsDep = layered {
officialMojangMappings().parchment("org.parchmentmc.data:parchment-${rootProject.architectury.minecraft}:2021.10.24")
}
silentMojangMappingsLicense()
val refmap = "snowygui-${project.name}-refmap.json"
// The following is used to make this buildscript compatible with architectury-loom 0.7.3, 0.9.X, 0.10.X and higher versions
with(javaClass) {
val loomMajorRelease = LoomGradlePlugin.LOOM_VERSION.run {
val numberPos = indexOf('.') + 1
substring(numberPos, indexOf('.', numberPos))
}.toShort()
if (loomMajorRelease < 10) {
if (loomMajorRelease < 9) getField("refmapName").set(this@configure, refmap)
else getMethod("setRefmapName", String::class.java).invoke(this@configure, refmap)
getMethod("mixinConfig", Array<String>::class.java).invoke(this@configure, arrayOf("snowygui-${project.name}.mixins.json"))
} else {
getDeclaredMethod("getMixin").invoke(this@configure).run {
javaClass.getDeclaredMethod("getDefaultRefmapName").invoke(this).let { refmapProperty ->
refmapProperty.javaClass.getDeclaredMethod("set", Any::class.java).invoke(refmapProperty, refmap)
}
if (isForge) {
this@with.getDeclaredMethod("getForge").invoke(this@configure).let { forgeObject ->
forgeObject.javaClass.getMethod("mixinConfigs", Array<String>::class.java).invoke(forgeObject, arrayOf("snowygui-common.mixins.json", "snowygui-forge.mixins.json"))
}
}
}
}
}
}
2021-04-08 10:18:46 +02:00
apply(plugin = "com.github.johnrengelman.shadow")
val shadowC by configurations.creating
repositories {
maven(url = "https://jitpack.io"); mavenCentral()
maven(url = "https://maven.parchmentmc.org")
}
dependencies {
implementation("$kotlinX:kotlinx-coroutines-jdk8:${rootProject.property("kotlin_coroutines_version")}")
implementation("$kotlinX:kotlinx-serialization-core:$serializationVer")
implementation("$kotlinX:kotlinx-serialization-json:$serializationVer")
listOf(
"com.typesafe:config:1.4.2",
"io.github.config4k:config4k:0.4.2",
2021-05-27 20:00:35 +02:00
"com.github.Vatuu:discord-rpc:1.6.2"
).forEach { implementation(it); shadowC(it) { isTransitive = false; exclude("com.sun.jna") } }
"minecraft"("com.mojang:minecraft:${rootProject.property("minecraft")}")
"mappings"(mappingsDep)
}
apply(plugin = "com.modrinth.minotaur")
extensions.configure<ModrinthExtension>("modrinth") {
projectId.set("OuGyGg6A")
syncBodyFrom.set("$rootDir/README.md")
gameVersions.add(mcBase)
if (project.name == "forge") dependencies.add(com.modrinth.minotaur.dependencies.VersionDependency("Bxm9xbNJ", DependencyType.REQUIRED)) // Kotlinforforge dependency
versionNumber.set(rootProject.version.toString() + "-${project.name}")
versionType.set(VersionType.ALPHA.name)
detectLoaders.set(false)
loaders.add(project.name)
versionName.set("${rootProject.name} ${rootProject.version}")
uploadFile.set(fileTree("$rootDir/remappedJars/").files.find { it.name.contains(project.name) })
}
tasks {
apply(plugin = "net.kyori.indra.git")
withType(Jar::class) {
from("$rootDir/LICENSE.txt")
indraGit.applyVcsInformationToManifest(manifest)
archiveBaseName.set(rootProject.name)
}
withType(ShadowJar::class) {
this.configurations = listOf(shadowC)
relocate("com.typesafe.config", "${rootProject.group}.typesafe.config")
relocate("io.github.config4k", "${rootProject.group}.config4k")
relocate("net.arikia.dev.drpc", "${rootProject.group}.drpc")
2021-05-27 20:00:35 +02:00
exclude("com/sun/jna/**/*") // The shadowed JNA from discord-rpc isn't needed since it is already available at runtime
exclude("**/*.kotlin_metadata")
exclude("**/*.kotlin_builtins")
exclude("META-INF/maven/**/*")
archiveClassifier.set("shadow-${this@subprojects.name}")
}
val shadowJar = getByName("shadowJar") as ShadowJar
val shrinkJar = register("shrinkJar", proguard.gradle.ProGuardTask::class) { group = this@subprojects.group as String
2021-04-14 20:36:05 +02:00
val dictionariesDir = "$rootDir/obfuscation"
dependsOn(shadowJar)
injars(shadowJar)
outjars("$buildDir/shrinkedJar/${shadowJar.outputs.files.singleFile.name}")
keep("class $group.snowygui.mixins.* { * ; }")
keep("class $group.snowygui.fabric.FabricInit")
keep("class $group.snowygui.fabric.ModMenuConf")
keep("class $group.snowygui.forge.ForgeInit")
2021-04-27 20:40:12 +02:00
keepnames("class $group.snowygui.Snowy")
2021-05-20 17:46:28 +02:00
keepnames("class $group.snowygui.gui.feature.Macro { <fields>; }")
2021-05-18 22:14:35 +02:00
keep("class $group.snowygui.gui.feature.* { public static *** INSTANCE; }")
keepclassmembers("class $group.snowygui.** { public protected <methods>; }")
keepattributes("*Annotation*, Signature, InnerClasses, EnclosingMethod, MethodParameters, Synthetic, Exceptions")
2021-04-14 20:36:05 +02:00
obfuscationdictionary("$dictionariesDir/dictionary.txt")
classobfuscationdictionary("$dictionariesDir/classdictionary.txt")
packageobfuscationdictionary("$dictionariesDir/packagesdictionary.txt")
flattenpackagehierarchy("$group.snowygui")
2021-04-27 20:40:12 +02:00
allowaccessmodification()
adaptclassstrings()
2021-05-18 22:14:35 +02:00
"$group.**".also { dontnote(it); dontwarn(it) }
// kotlinx-serialization related configuration:
keep(mapOf("includedescriptorclasses" to true), "class $group.snowygui.**$\$serializer { * ; }")
keepclassmembers("class $group.snowygui.** { *** Companion; }")
keepclasseswithmembers("class $group.snowygui.** { kotlinx.serialization.KSerializer serializer(...); }")
2021-05-27 20:00:35 +02:00
// Required for discord-rpc
keepclassmembers("class $group.drpc.** { public * ; }")
2021-05-27 20:00:35 +02:00
doFirst {
libraryjars(configurations.compileClasspath.get().filterNot { file ->
shadowC.contains(file)
})
}
val homeDir = System.getProperty("java.home") as String
if (JavaVersion.current().isJava9Compatible) {
val jmodsLocations = setOf(
"$homeDir/jmods/java.base.jmod",
"$homeDir/jmods/java.desktop.jmod",
"$homeDir/jmods/java.instrument.jmod"
)
if (jmodsLocations.all { !file(it).exists() }) throw GradleException("Jmods appear to be missing, please make sure that jmods are installed.")
else jmodsLocations.forEach {
libraryjars(it)
}
} else libraryjars("$homeDir/lib/rt.jar")
// Note: dontpreverify() should NOT be used, it will cause errors at runtime
useuniqueclassmembernames()
optimizationpasses(4)
overloadaggressively()
mergeinterfacesaggressively()
}
withType(net.fabricmc.loom.task.PrepareJarRemapTask::class) {
dependsOn(shrinkJar)
}
withType(net.fabricmc.loom.task.RemapJarTask::class) {
val shrinkedJar = shrinkJar.get().outJarFileCollection.singleFile
archiveBaseName.set(shadowJar.archiveBaseName)
archiveVersion.set("[${rootProject.version}+$mcBase]")
archiveClassifier.set(this@subprojects.name)
input.set(shrinkedJar)
if (!archiveFileName.get().contains("common")) destinationDirectory.set(file("$rootDir/remappedJars"))
}
getByName("modrinth").dependsOn(build)
2021-04-08 10:18:46 +02:00
}
}
allprojects {
/** configurations.all {
resolutionStrategy {
eachDependency {
if (requested.group == "org.jetbrains.kotlin" && requested.name.contains("stdlib") && (requested.version != kotlinVer)) {
useVersion(kotlinVer)
}
}
}
}
**/
2021-04-08 10:18:46 +02:00
apply(plugin = "java")
2021-05-18 22:14:35 +02:00
apply(plugin = "org.jetbrains.kotlin.jvm")
2021-04-08 10:18:46 +02:00
apply(plugin = "architectury-plugin")
2021-04-20 15:03:40 +02:00
dependencies {
2021-05-03 14:34:49 +02:00
implementation(kotlin("stdlib-jdk8", kotlinVer))
implementation(kotlin("reflect", kotlinVer))
2021-12-10 19:56:15 +01:00
annotationProcessor("com.github.bsideup.jabel:jabel-javac-plugin:0.4.2")
2021-04-20 15:03:40 +02:00
}
2021-04-08 10:18:46 +02:00
tasks {
withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile::class) {
with(kotlinOptions) {
2021-06-29 16:42:08 +02:00
// https://github.com/JetBrains/kotlin/blob/master/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt
2021-06-26 11:09:43 +02:00
freeCompilerArgs = listOf(
"-Xjvm-default=all", "-Xlambdas=indy", "-Xtype-enhancement-improvements-strict-mode",
2021-06-29 16:42:08 +02:00
"-Xmultifile-parts-inherit",
"-Xbackend-threads=0", "-Xno-param-assertions", "-Xno-call-assertions",
"-opt-in=kotlin.RequiresOptIn", "-Xextended-compiler-checks", "-Xassertions=jvm", "-progressive"
2021-06-26 11:09:43 +02:00
)
jvmTarget = if (javaVer.toInt() < 9) "1.$javaVer" else javaVer
languageVersion = (kotlinSplitVersion[0] + '.' + (kotlinSplitVersion[1].toShort() + 1).toString())
apiVersion = "${kotlinSplitVersion[0]}.${kotlinSplitVersion[1]}"
2021-04-08 10:18:46 +02:00
}
}
withType(JavaCompile::class) {
with(options) {
encoding = "UTF-8"
isFork = true
release.set(javaVer.toInt())
sourceCompatibility = "11"
targetCompatibility = javaVer
compilerArgs.add("-Xplugin:jabel")
2021-04-08 10:18:46 +02:00
}
}
withType(ProcessResources::class) {
with(project(":common").sourceSets.main.get().resources.srcDirs) {
if (!sourceSets.main.get().resources.srcDirs.containsAll(this)) {
from(this)
}
}
2021-04-21 16:31:32 +02:00
val modProperties = mapOf(
"mod_version" to (rootProject.version as String),
"minecraft_version" to mcBase,
2021-05-12 17:10:14 +02:00
"java_version" to javaVer,
2021-05-07 10:33:35 +02:00
"mod_group" to this@allprojects.group,
"fabric_kotlin" to rootProject.property("fabric_language_kotlin"),
2021-05-29 22:11:05 +02:00
"kotlinforforge" to rootProject.property("kotlinforforge"),
"clothconfig" to rootProject.property("clothconfig_version")
)
2021-04-21 16:31:32 +02:00
inputs.properties(modProperties)
filesNotMatching(listOf("*.png")) {
2021-04-21 16:31:32 +02:00
expand(modProperties)
}
2021-04-08 10:18:46 +02:00
}
check {
setDependsOn(
dependsOn.minus(test)
)
}
2021-04-08 10:18:46 +02:00
}
}
2021-12-10 19:56:15 +01:00
repositories {
mavenCentral()
}
file("remappedJars").let { if (it.exists()) tasks.clean.get().delete.add(it) }