Adds 26.1 as a Stonecutter version (step 3 of #39). Its jar also loads on the 26.1.1 and 26.1.2 hotfixes. Most of 26.1's changes are renames: the GUI's render methods became extract methods and GuiGraphics became GuiGraphicsExtractor, which Stonecutter replacements cover along with the moved render state package and GuiRenderState's add methods. The rest are version comments: - The menu panorama is drawn by GuiRenderer from vanilla's cube map; the new GuiRendererMixin swaps in Saturn's while a Saturn screen is open (empty on older versions). - The camera works out the FOV and aligns with its entity in alignWithEntity, so the zoom and freelook hooks move to CameraMixin. - Gamma and the menu blur are read while extracting render state. - The glass blur's post chain takes a Projection and its buffer. - The dragon's alpha render type is gone; capes use entityCutout. - Fabric API renamed KeyBindingHelper to KeyMappingHelper. The docs describe the 26.x build and Java 25. Co-Authored-By: Claude Opus 5.5 <[email protected]>
98 lines
3.7 KiB
Kotlin
98 lines
3.7 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 1.21.11's Mojang names (the active version). These names changed in the versions given,
|
|
// so Stonecutter swaps in each version's name when it processes it.
|
|
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"),
|
|
Triple("26.1", "GuiGraphics", "GuiGraphicsExtractor"),
|
|
Triple("26.1", "net.minecraft.client.gui.render.state", "net.minecraft.client.renderer.state.gui"),
|
|
// GuiRenderState's methods
|
|
Triple("26.1", "submitGuiElement", "addGuiElement"),
|
|
Triple("26.1", "submitText", "addText"),
|
|
Triple("26.1", "submitItem", "addItem"),
|
|
Triple("26.1", "submitPicturesInPictureState", "addPicturesInPictureState"),
|
|
)) {
|
|
replacements.regex(eval(current.version, ">=$since")) {
|
|
replace("\\b${Regex.escape(old)}\\b", new, "\\b${Regex.escape(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")
|
|
}
|
|
}
|