Prepares the build for 26.x, which ships unobfuscated and needs Java 25 (#39): - loom-back-compat applies the remapping Loom to 1.21.x and would apply the plain one to 26.x. loom_version becomes loomx.loom_version. - Each version compiles with its Java toolchain (21 for 1.21.x, 25 for 26.x), and the mixin configs take their compatibility level from it. The foojay resolver downloads a missing JDK; CI installs 21 and 25. - buildAll collects remapJar's output, or jar's where there's nothing to remap. - fabric.mod.json depends on fabric-api, Fabric API's mod id; 26.x's jar no longer provides the old "fabric" alias. Nothing changes for the 1.21.x jars. Co-Authored-By: Claude Opus 5.5 <[email protected]>
91 lines
3.2 KiB
Kotlin
91 lines
3.2 KiB
Kotlin
plugins {
|
|
id("dev.kikugie.stonecutter")
|
|
}
|
|
|
|
// The version whose code is uncommented in src/. Switch with "Set active project to <v>", 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<SourceSetContainer> {
|
|
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<BuildServiceParameters.None>
|
|
|
|
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 mod jar and collects them in build/allJars"
|
|
|
|
// The mod jar is remapJar's output for 1.21.x, and jar's for 26.1+, which isn't obfuscated.
|
|
val modJars = subprojects.filter { it.name != "common" }.flatMap { project ->
|
|
val unobfuscated = project.name.substringBefore('.').toInt() >= 26
|
|
val task = if (unobfuscated) "jar" else "remapJar"
|
|
project.tasks.matching { it.name == task }
|
|
}
|
|
dependsOn(modJars)
|
|
|
|
doLast {
|
|
val outputDir = layout.buildDirectory.dir("allJars").get().asFile
|
|
outputDir.mkdirs()
|
|
modJars.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 mod jars collected in: $outputDir")
|
|
}
|
|
}
|