plugins { id("dev.kikugie.stonecutter") } // The version whose code is uncommented in src/. Switch with "Set active project to ", and run // "Reset active project" before committing. stonecutter active "1.21.11" // src/ uses the newest Mojang names. These classes were renamed in the versions given, so Stonecutter // swaps in the older names when it processes an older version. stonecutter parameters { for ((since, old, new) in listOf( Triple("1.21.11", "ResourceLocation", "Identifier"), Triple("1.21.9", "PlayerRenderer", "AvatarRenderer"), Triple("1.21.9", "PlayerRenderState", "AvatarRenderState"), )) { replacements.regex(eval(current.version, ">=$since")) { replace("\\b$old\\b", new, "\\b$new\\b", old) } } } subprojects { apply(plugin = "java") repositories { maven("https://maven.fabricmc.net/") maven("https://git.selimaj.dev/api/packages/selimaj-dev/maven") maven("https://git.selimaj.dev/api/packages/saturnclientmc/maven") mavenCentral() } dependencies { "implementation"("de.javagl:obj:0.4.0") "implementation"("com.formdev:svgSalamander:1.1.4") "implementation"("com.fasterxml.jackson.core:jackson-databind:2.17.0") "implementation"("com.fasterxml.jackson.core:jackson-annotations:2.17.0") "implementation"("com.fasterxml.jackson.core:jackson-core:2.17.0") } } // Every Minecraft version builds on common and ships its resources. configure(subprojects.filter { it.name != "common" }) { dependencies { "implementation"(project(":common")) } extensions.configure { named("main") { resources.srcDir(project(":common").file("src/main/resources")) } } } // remapJar loads a whole Minecraft classpath and remaps a ~50 MB jar. Eight at once don't fit in the // daemon's heap (org.gradle.jvmargs) and the build stalls in garbage collection, so only two run // together. Everything else still builds in parallel. abstract class RemapLimit : BuildService val remapLimit = gradle.sharedServices.registerIfAbsent("remapLimit", RemapLimit::class) { maxParallelUsages = 2 } subprojects { tasks.matching { it.name == "remapJar" }.configureEach { usesService(remapLimit) } } tasks.register("buildAll") { group = "build" description = "Builds every Minecraft version's remapped jar and collects them in build/allJars" val remapJars = subprojects.flatMap { it.tasks.matching { task -> task.name == "remapJar" } } dependsOn(remapJars) doLast { val outputDir = layout.buildDirectory.dir("allJars").get().asFile outputDir.mkdirs() remapJars.map { (it as AbstractArchiveTask).archiveFile.get().asFile } .filter { it.exists() && !it.name.contains("sources") } .forEach { it.copyTo(outputDir.resolve(it.name), overwrite = true) } println("All remapped jars collected in: $outputDir") } }