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" 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") } }