Files
HeroFFA/build.gradle.kts
T
2026-05-01 19:42:33 +02:00

251 lines
7.1 KiB
Kotlin

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
alias(libs.plugins.spotless)
alias(libs.plugins.nexusPublish)
alias(libs.plugins.fabricLoom)
alias(libs.plugins.kotlin)
alias(libs.plugins.kotlin.serialization)
`maven-publish`
}
defaultTasks("clean", "build")
allprojects {
group = "gg.norisk"
description = "Heroes Project"
apply(plugin = "fabric-loom")
dependencies {
"minecraft"(rootProject.libs.minecraft)
"mappings"(variantOf(rootProject.libs.yarn.mappings) { classifier("v2") })
}
loom {
runConfigs.configureEach {
this.ideConfigGenerated(true)
}
}
repositories {
mavenCentral()
maven("https://maven.kosmx.dev/")
maven("https://maven.enginehub.org/repo/")
maven(uri("https://maven.wispforest.io"))
maven("https://repo.papermc.io/repository/maven-public/")
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
maven("https://repo.cloudnetservice.eu/repository/releases/")
maven {
name = "GeckoLib"
url = uri("https://dl.cloudsmith.io/public/geckolib3/geckolib/maven/")
content {
includeGroup("software.bernie.geckolib")
}
}
maven {
url = uri("https://maven.norisk.gg/repository/norisk-production/")
}
maven {
url = uri("https://maven.norisk.gg/repository/maven-releases/")
}
// more stable replacement for jitpack
maven("https://repository.derklaro.dev/releases/") {
mavenContent {
releasesOnly()
}
}
maven("https://repository.derklaro.dev/snapshots/") {
mavenContent {
snapshotsOnly()
}
}
exclusiveContent {
forRepository {
maven("https://api.modrinth.com/maven")
}
filter {
includeGroup("maven.modrinth")
}
}
// packetevents
maven("https://repo.codemc.io/repository/maven-releases/") {
mavenContent {
includeGroup("com.github.retrooper")
}
}
}
}
subprojects {
// apply all plugins only to subprojects
apply(plugin = "signing")
//apply(plugin = "checkstyle")
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "com.diffplug.spotless")
apply(plugin = "kotlin")
apply(plugin = "org.jetbrains.kotlin.plugin.serialization")
//ich weiß das ist kriminell aber
version = rootProject.libs.versions.minecraft.get() + "-" + when (name) {
"hero-api" -> "1.3.1"
"katara" -> "1.1.0"
"aang" -> "1.1.0"
"toph" -> "1.1.0"
"ffa-server" -> "1.3.17"
"datatracker" -> "1.0.17"
else -> version
} //+ "-SNAPSHOT"
dependencies {
"compileOnly"(rootProject.libs.annotations)
"implementation"(rootProject.libs.serialization)
}
configurations.all {
// unsure why but every project loves them, and they literally have an import for every letter I type - beware
exclude("org.checkerframework", "checker-qual")
}
tasks.withType<Jar> {
from(rootProject.file("license.txt"))
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
freeCompilerArgs = listOf("-Xcontext-receivers", "-Xjvm-default=all", "-Xopt-in=kotlin.RequiresOptIn")
}
}
tasks.withType<JavaCompile>().configureEach {
// options
options.release.set(21)
options.encoding = "UTF-8"
options.isIncremental = true
// we are aware that those are there, but we only do that if there is no other way we can use - so please keep the terminal clean!
options.compilerArgs = mutableListOf("-Xlint:-deprecation,-unchecked")
}
extensions.configure<JavaPluginExtension> {
disableAutoTargetJvm()
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
}
/*tasks.withType<Checkstyle> {
maxErrors = 0
maxWarnings = 0
configFile = rootProject.file("checkstyle.xml")
}
extensions.configure<CheckstyleExtension> {
toolVersion = rootProject.libs.versions.checkstyleTools.get()
}
extensions.configure<SpotlessExtension> {
java {
licenseHeaderFile(rootProject.file("license_header.txt"))
}
}*/
tasks.withType<Javadoc> {
val options = options as? StandardJavadocDocletOptions ?: return@withType
// options
options.encoding = "UTF-8"
options.memberLevel = JavadocMemberLevel.PRIVATE
options.addStringOption("-html5")
options.addBooleanOption("Xdoclint:-missing", true)
}
tasks.register<org.gradle.jvm.tasks.Jar>("javadocJar") {
archiveClassifier.set("javadoc")
from(tasks.getByName("javadoc"))
}
val sourceJar = tasks.register<org.gradle.jvm.tasks.Jar>("sourcesJar") {
archiveClassifier.set("sources")
from(project.the<SourceSetContainer>()["main"].allJava)
}
tasks.processResources {
val properties = mapOf("version" to project.version)
inputs.properties(properties)
filesMatching("fabric.mod.json") { expand(properties) }
}
tasks.withType<PublishToMavenRepository>().configureEach {
val predicate = provider {
(repository == publishing.repositories["production"] &&
publication == publishing.publications["binary"]) ||
(repository == publishing.repositories["dev"] &&
publication == publishing.publications["binaryAndSources"])
}
onlyIf("publishing binary to the production repository, or binary and sources to the internal dev one") {
predicate.get()
}
}
tasks.withType<PublishToMavenLocal>().configureEach {
val predicate = provider {
publication == publishing.publications["binaryAndSources"]
}
onlyIf("publishing binary and sources") {
predicate.get()
}
}
extensions.configure<PublishingExtension> {
publications {
create<MavenPublication>("binary") {
groupId = project.group.toString()
artifactId = project.name
version = project.version.toString()
from(components["java"])
}
create<MavenPublication>("binaryAndSources") {
groupId = project.group.toString()
artifactId = project.name
version = project.version.toString()
from(components["java"])
artifact(sourceJar)
}
}
repositories {
fun MavenArtifactRepository.applyCredentials() = credentials {
username =
(System.getenv("NORISK_NEXUS_USERNAME") ?: project.findProperty("noriskMavenUsername")).toString()
password =
(System.getenv("NORISK_NEXUS_PASSWORD") ?: project.findProperty("noriskMavenPassword")).toString()
}
maven {
name = "production"
url = if (version.toString().endsWith("SNAPSHOT")) {
uri("https://maven.norisk.gg/repository/norisk-snapshots/")
} else {
uri("https://maven.norisk.gg/repository/norisk-production/")
}
applyCredentials()
}
maven {
name = "dev"
// this could also be a maven repo on the dev server
// e.g. maven-staging.norisk.gg
url = if (version.toString().endsWith("SNAPSHOT")) {
uri("https://maven.norisk.gg/repository/maven-snapshots/")
} else {
uri("https://maven.norisk.gg/repository/maven-releases/")
}
applyCredentials()
}
}
}
}