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 { from(rootProject.file("license.txt")) duplicatesStrategy = DuplicatesStrategy.INCLUDE } tasks.withType().configureEach { compilerOptions { freeCompilerArgs = listOf("-Xcontext-receivers", "-Xjvm-default=all", "-Xopt-in=kotlin.RequiresOptIn") } } tasks.withType().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 { disableAutoTargetJvm() toolchain.languageVersion.set(JavaLanguageVersion.of(21)) } /*tasks.withType { maxErrors = 0 maxWarnings = 0 configFile = rootProject.file("checkstyle.xml") } extensions.configure { toolVersion = rootProject.libs.versions.checkstyleTools.get() } extensions.configure { java { licenseHeaderFile(rootProject.file("license_header.txt")) } }*/ tasks.withType { 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("javadocJar") { archiveClassifier.set("javadoc") from(tasks.getByName("javadoc")) } val sourceJar = tasks.register("sourcesJar") { archiveClassifier.set("sources") from(project.the()["main"].allJava) } tasks.processResources { val properties = mapOf("version" to project.version) inputs.properties(properties) filesMatching("fabric.mod.json") { expand(properties) } } tasks.withType().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().configureEach { val predicate = provider { publication == publishing.publications["binaryAndSources"] } onlyIf("publishing binary and sources") { predicate.get() } } extensions.configure { publications { create("binary") { groupId = project.group.toString() artifactId = project.name version = project.version.toString() from(components["java"]) } create("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() } } } }