import java.util.* plugins { kotlin("jvm") version "2.3.20" id("dev.architectury.loom") id("architectury-plugin") id("me.modmuss50.mod-publish-plugin") id("com.gradleup.shadow") } val minecraft = stonecutter.current.version val loader = loom.platform.get().name.lowercase() version = "${mod.version}+$minecraft" group = mod.group base { archivesName.set("${mod.id}-$loader") } architectury.common(stonecutter.tree.branches.mapNotNull { if (stonecutter.current.project !in it) null else it.prop("loom.platform") }) repositories { maven("https://maven.neoforged.net/releases/") //modmenu maven("https://maven.terraformersmc.com/") //placeholder api (modmenu depencency) maven("https://maven.nucleoid.xyz/") maven { name = "Kotlin for Forge" setUrl("https://thedarkcolour.github.io/KotlinForForge/") } } dependencies { minecraft("com.mojang:minecraft:$minecraft") mappings(loom.officialMojangMappings()) var archversion = "idk" println(minecraft) when(minecraft) { // NOTE: add more entries if you want to add more versions "1.20.1" -> archversion = "9.2.14" "1.20.4" -> archversion = "11.1.17" "1.21.9" -> archversion = "18.0.5" else -> archversion = "19.0.1" } // modImplementation("dev.architectury:architectury:$rootProject.architectury_api_version") // modImplementation("dev.architectury:architectury:${archversion}") modImplementation("dev.architectury:architectury:${archversion}") if (loader == "fabric") { modImplementation("net.fabricmc:fabric-loader:${mod.dep("fabric_loader")}") // mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") modImplementation("com.terraformersmc:modmenu:${mod.dep("modmenu_version")}") //some features (like automatic resource loading from non vanilla namespaces) work only with fabric API installed //for example translations from assets/modid/lang/en_us.json won't be working, same stuff with textures //but we keep runtime only to not accidentally depend on fabric's api, because it doesn't exist in neo/forge println(archversion) modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:${mod.dep("fabric_version")}") modImplementation("net.fabricmc:fabric-language-kotlin:1.13.10+kotlin.2.3.20") modApi("dev.architectury:architectury-fabric:${archversion}") } if (loader == "forge") { "forge"("net.minecraftforge:forge:${minecraft}-${mod.dep("forge_loader")}") //implementation("thedarkcolour:kotlinforforge:1.16.0") // mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") modApi("dev.architectury:architectury-forge:${archversion}") "io.github.llamalad7:mixinextras-forge:${mod.dep("mixin_extras")}".let { implementation(it) include(it) } } if (loader == "neoforge") { "neoForge"("net.neoforged:neoforge:${mod.dep("neoforge_loader")}") // mappings(loom.layered { // mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") // mod.dep("neoforge_patch").takeUnless { it.startsWith('[') }?.let { // mappings("dev.architectury:yarn-mappings-patch-neoforge:$it") // } // }) if (minecraft=="1.21.9" || minecraft=="1.21.11") modApi("dev.architectury:architectury-neoforge:${archversion}") else modApi("dev.architectury:architectury-forge:${archversion}") // NOTE: this could be wrong implementation("thedarkcolour:kotlinforforge-neoforge:6.0.0") } } buildscript { dependencies { classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0") } } loom { accessWidenerPath = rootProject.file("src/main/resources/neocomputers.accesswidener") decompilers { get("vineflower").apply { // Adds names to lambdas - useful for mixins options.put("mark-corresponding-synthetics", "1") } } if (loader == "forge") { forge.mixinConfigs( "neocomputers-common.mixins.json", "neocomputers-forge.mixins.json", ) } } val localProperties = Properties() val localPropertiesFile = rootProject.file("local.properties") if (localPropertiesFile.exists()) { localProperties.load(localPropertiesFile.inputStream()) } publishMods { val modrinthToken = localProperties.getProperty("publish.modrinthToken", "") val curseforgeToken = localProperties.getProperty("publish.curseforgeToken", "") file = project.tasks.remapJar.get().archiveFile dryRun = modrinthToken == null || curseforgeToken == null displayName = "${mod.name} ${loader.replaceFirstChar { it.uppercase() }} ${property("mod.mc_title")}-${mod.version}" version = mod.version changelog = rootProject.file("CHANGELOG.md").readText() type = BETA modLoaders.add(loader) val targets = property("mod.mc_targets").toString().split(' ') modrinth { projectId = property("publish.modrinth").toString() accessToken = modrinthToken targets.forEach(minecraftVersions::add) if (loader == "fabric") { requires("fabric-api") requires("fabric-language-kotlin") optional("modmenu") } if (loader == "neoforge") { requires("kotlinforforge-neoforge") } } curseforge { projectId = property("publish.curseforge").toString() accessToken = curseforgeToken.toString() targets.forEach(minecraftVersions::add) if (loader == "fabric") { requires("fabric-api") requires("fabric-language-kotlin") optional("modmenu") } if (loader == "neoforge") { requires("kotlinforforge-neoforge") } } } java { withSourcesJar() val java = if (stonecutter.eval(minecraft, ">=1.20.5")) JavaVersion.VERSION_21 else JavaVersion.VERSION_17 targetCompatibility = java sourceCompatibility = java } kotlin { val java = if (stonecutter.eval(minecraft, ">=1.20.5")) 21 else 17 jvmToolchain(java) } val shadowBundle: Configuration by configurations.creating { isCanBeConsumed = false isCanBeResolved = true } tasks.shadowJar { configurations = listOf(shadowBundle) archiveClassifier = "dev-shadow" } tasks.remapJar { injectAccessWidener = true input = tasks.shadowJar.get().archiveFile archiveClassifier = null dependsOn(tasks.shadowJar) } tasks.jar { archiveClassifier = "dev" } val buildAndCollect = tasks.register("buildAndCollect") { group = "versioned" description = "Must run through 'chiseledBuild'" from(tasks.remapJar.get().archiveFile, tasks.remapSourcesJar.get().archiveFile) into(rootProject.layout.buildDirectory.file("libs/${mod.version}/$loader")) dependsOn("build") } if (stonecutter.current.isActive) { rootProject.tasks.register("buildActive") { group = "project" dependsOn(buildAndCollect) } rootProject.tasks.register("runActive") { group = "project" dependsOn(tasks.named("runClient")) } } tasks.processResources { properties( listOf("fabric.mod.json"), "id" to mod.id, "name" to mod.name, "version" to mod.version, "minecraft" to mod.prop("mc_dep_fabric") ) properties( listOf("META-INF/mods.toml", "pack.mcmeta"), "id" to mod.id, "name" to mod.name, "version" to mod.version, "minecraft" to mod.prop("mc_dep_forgelike") ) properties( listOf("META-INF/neoforge.mods.toml", "pack.mcmeta"), "id" to mod.id, "name" to mod.name, "version" to mod.version, "minecraft" to mod.prop("mc_dep_forgelike") ) } tasks.build { group = "versioned" description = "Must run through 'chiseledBuild'" } //import java.util.* // //plugins { // id("dev.architectury.loom") // id("architectury-plugin") // id("me.modmuss50.mod-publish-plugin") // id("com.gradleup.shadow") //} // //val minecraft = stonecutter.current.version //val loader = loom.platform.get().name.lowercase() // //version = "${mod.version}+$minecraft" //group = mod.group //base { // archivesName.set("${mod.id}-$loader") //} // //architectury.common(stonecutter.tree.branches.mapNotNull { // if (stonecutter.current.project !in it) null // else it.prop("loom.platform") //}) //repositories { // maven("https://maven.neoforged.net/releases/") // // //modmenu // maven("https://maven.terraformersmc.com/") // //placeholder api (modmenu depencency) // maven("https://maven.nucleoid.xyz/") //} //dependencies { // minecraft("com.mojang:minecraft:$minecraft") // mappings(loom.officialMojangMappings()) // // if (loader == "fabric") { // modImplementation("net.fabricmc:fabric-loader:${mod.dep("fabric_loader")}") //// mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") // modImplementation("com.terraformersmc:modmenu:${mod.dep("modmenu_version")}") // // //some features (like automatic resource loading from non vanilla namespaces) work only with fabric API installed // //for example translations from assets/modid/lang/en_us.json won't be working, same stuff with textures // //but we keep runtime only to not accidentally depend on fabric's api, because it doesn't exist in neo/forge // modRuntimeOnly("net.fabricmc.fabric-api:fabric-api:${mod.dep("fabric_version")}") // // } // if (loader == "forge") { // "forge"("net.minecraftforge:forge:${minecraft}-${mod.dep("forge_loader")}") //// mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") // // "io.github.llamalad7:mixinextras-forge:${mod.dep("mixin_extras")}".let { // implementation(it) // include(it) // } // } // if (loader == "neoforge") { // "neoForge"("net.neoforged:neoforge:${mod.dep("neoforge_loader")}") //// mappings(loom.layered { //// mappings("net.fabricmc:yarn:$minecraft+build.${mod.dep("yarn_build")}:v2") //// mod.dep("neoforge_patch").takeUnless { it.startsWith('[') }?.let { //// mappings("dev.architectury:yarn-mappings-patch-neoforge:$it") //// } //// }) // // } //} // //loom { //// accessWidenerPath = rootProject.file("src/main/resources/template.accesswidener") // // decompilers { // get("vineflower").apply { // Adds names to lambdas - useful for mixins // options.put("mark-corresponding-synthetics", "1") // } // } // if (loader == "forge") { // forge.mixinConfigs( // "template-common.mixins.json", // "template-forge.mixins.json", // ) // } //} // // //val localProperties = Properties() //val localPropertiesFile = rootProject.file("local.properties") //if (localPropertiesFile.exists()) { // localProperties.load(localPropertiesFile.inputStream()) //} //publishMods { // val modrinthToken = localProperties.getProperty("publish.modrinthToken", "") // val curseforgeToken = localProperties.getProperty("publish.curseforgeToken", "") // // // file = project.tasks.remapJar.get().archiveFile // dryRun = modrinthToken == null || curseforgeToken == null // // displayName = "${mod.name} ${loader.replaceFirstChar { it.uppercase() }} ${property("mod.mc_title")}-${mod.version}" // version = mod.version // changelog = rootProject.file("CHANGELOG.md").readText() // type = BETA // // modLoaders.add(loader) // // val targets = property("mod.mc_targets").toString().split(' ') // modrinth { // projectId = property("publish.modrinth").toString() // accessToken = modrinthToken // targets.forEach(minecraftVersions::add) // if (loader == "fabric") { // requires("fabric-api") // optional("modmenu") // } // } // // curseforge { // projectId = property("publish.curseforge").toString() // accessToken = curseforgeToken.toString() // targets.forEach(minecraftVersions::add) // if (loader == "fabric") { // requires("fabric-api") // optional("modmenu") // } // } //} // //java { // withSourcesJar() // val java = if (stonecutter.eval(minecraft, ">=1.20.5")) JavaVersion.VERSION_21 else JavaVersion.VERSION_17 // targetCompatibility = java // sourceCompatibility = java //} // //val shadowBundle: Configuration by configurations.creating { // isCanBeConsumed = false // isCanBeResolved = true //} // //tasks.shadowJar { // configurations = listOf(shadowBundle) // archiveClassifier = "dev-shadow" //} // //tasks.remapJar { // injectAccessWidener = true // input = tasks.shadowJar.get().archiveFile // archiveClassifier = null // dependsOn(tasks.shadowJar) //} // //tasks.jar { // archiveClassifier = "dev" //} // //val buildAndCollect = tasks.register("buildAndCollect") { // group = "versioned" // description = "Must run through 'chiseledBuild'" // from(tasks.remapJar.get().archiveFile, tasks.remapSourcesJar.get().archiveFile) // into(rootProject.layout.buildDirectory.file("libs/${mod.version}/$loader")) // dependsOn("build") //} // //if (stonecutter.current.isActive) { // rootProject.tasks.register("buildActive") { // group = "project" // dependsOn(buildAndCollect) // } // // rootProject.tasks.register("runActive") { // group = "project" // dependsOn(tasks.named("runClient")) // } //} // //tasks.processResources { // properties( // listOf("fabric.mod.json"), // "id" to mod.id, // "name" to mod.name, // "version" to mod.version, // "minecraft" to mod.prop("mc_dep_fabric") // ) // properties( // listOf("META-INF/mods.toml", "pack.mcmeta"), // "id" to mod.id, // "name" to mod.name, // "version" to mod.version, // "minecraft" to mod.prop("mc_dep_forgelike") // ) // properties( // listOf("META-INF/neoforge.mods.toml", "pack.mcmeta"), // "id" to mod.id, // "name" to mod.name, // "version" to mod.version, // "minecraft" to mod.prop("mc_dep_forgelike") // ) //} // //tasks.build { // group = "versioned" // description = "Must run through 'chiseledBuild'" //}