Minecraft ships unobfuscated from 26.1, and 1.21.11 has the last Yarn release, so the shared src/ has to use Mojang's names before newer versions can be added (#39). Each version's sources were migrated with Loom's migrateMappings and merged back into src/, so code that is only active on other versions is migrated too. Where Mojang's names differ between 1.21.x versions, src/ uses the newest ones: Stonecutter replacements swap in the older Identifier/ResourceLocation and Avatar/Player renderer names, and version comments cover the few package moves and renamed methods. The fog mixin now targets setupFog on every version. Yarn's applyFog named two methods from 1.21.6 on, so it also applied to updateBuffer. Co-Authored-By: Claude Opus 5.5 <[email protected]>
86 lines
3.0 KiB
Kotlin
86 lines
3.0 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 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")
|
|
}
|
|
}
|