import org.gradle.api.component.AdhocComponentWithVariants import org.gradle.jvm.tasks.Jar import org.gradle.kotlin.dsl.get import org.gradle.kotlin.dsl.libs plugins { alias(libs.plugins.architectury.loom) alias(libs.plugins.shadow) alias(libs.plugins.minotaur) alias(libs.plugins.cursegradle) } architectury { platformSetupLoomIde() forge() } loom { silentMojangMappingsLicense() accessWidenerPath.set(project(":common").loom.accessWidenerPath) forge { mixinConfig("yacl.mixins.json") convertAccessWideners.set(true) extraAccessWideners.add(loom.accessWidenerPath.get().asFile.name) } } val common by configurations.registering val shadowCommon by configurations.registering configurations.compileClasspath.get().extendsFrom(common.get()) configurations["developmentForge"].extendsFrom(common.get()) val minecraftVersion: String = libs.versions.minecraft.get() dependencies { minecraft(libs.minecraft) mappings(loom.layered { val qm = libs.versions.quilt.mappings.get() if (qm != "0") mappings("org.quiltmc:quilt-mappings:${libs.versions.minecraft.get()}+build.${libs.versions.quilt.mappings.get()}:intermediary-v2") officialMojangMappings() }) forge(libs.forge) libs.bundles.twelvemonkeys.imageio.let { implementation(it) include(it) forgeRuntimeLibrary(it) } libs.bundles.quilt.parsers.let { implementation(it) include(it) forgeRuntimeLibrary(it) } "common"(project(path = ":common", configuration = "namedElements")) { isTransitive = false } "shadowCommon"(project(path = ":common", configuration = "transformProductionForge")) { isTransitive = false } } java { withSourcesJar() } tasks { processResources { val modId: String by rootProject val modName: String by rootProject val modDescription: String by rootProject val githubProject: String by rootProject val majorForge = libs.versions.forge.get().substringAfter('-').split('.').first() inputs.property("id", modId) inputs.property("group", project.group) inputs.property("name", modName) inputs.property("description", modDescription) inputs.property("version", project.version) inputs.property("github", githubProject) inputs.property("major_forge", majorForge) filesMatching(listOf("META-INF/mods.toml", "pack.mcmeta")) { expand( "id" to modId, "group" to project.group, "name" to modName, "description" to modDescription, "version" to project.version, "github" to githubProject, "major_forge" to majorForge, ) } } shadowJar { exclude("fabric.mod.json") exclude("architectury.common.json") configurations = listOf(shadowCommon.get()) archiveClassifier.set("dev-shadow") } remapJar { injectAccessWidener.set(true) inputFile.set(shadowJar.get().archiveFile) dependsOn(shadowJar) archiveClassifier.set(null as String?) from(rootProject.file("LICENSE")) } named("sourcesJar") { archiveClassifier.set("dev-sources") val commonSources = project(":common").tasks.named("sourcesJar") dependsOn(commonSources) from(commonSources.get().archiveFile.map { zipTree(it) }) } remapSourcesJar { archiveClassifier.set("sources") } jar { archiveClassifier.set("dev") } } components["java"].run { if (this is AdhocComponentWithVariants) { withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) { skip() } } } val changelogText: String by ext val isBeta: Boolean by ext val modrinthId: String by project if (modrinthId.isNotEmpty()) { modrinth { token.set(findProperty("modrinth.token")?.toString()) projectId.set(modrinthId) versionName.set("${project.version} (Forge)") versionNumber.set("${project.version}-forge") versionType.set(if (isBeta) "beta" else "release") uploadFile.set(tasks["remapJar"]) gameVersions.set(listOf("1.20.2")) loaders.set(listOf("forge", "neoforge")) changelog.set(changelogText) syncBodyFrom.set(rootProject.file("README.md").readText()) } } rootProject.tasks["releaseMod"].dependsOn(tasks["modrinth"]) val curseforgeId: String by project if (hasProperty("curseforge.token") && curseforgeId.isNotEmpty()) { curseforge { apiKey = findProperty("curseforge.token") project(closureOf { mainArtifact(tasks["remapJar"], closureOf { displayName = "[Forge] ${project.version}" }) id = curseforgeId releaseType = if (isBeta) "beta" else "release" addGameVersion("1.20.2") addGameVersion("Forge") addGameVersion("NeoForge") addGameVersion("Java 17") changelog = changelogText changelogType = "markdown" }) options(closureOf { forgeGradleIntegration = false fabricIntegration = false }) } } rootProject.tasks["releaseMod"].dependsOn(tasks["curseforge"]) publishing { publications { create("forge") { groupId = "dev.isxander.yacl" artifactId = "yet-another-config-lib-forge" from(components["java"]) } } } tasks.findByPath("publishForgePublicationToReleasesRepository")?.let { rootProject.tasks["releaseMod"].dependsOn(it) }