Support latest versions #39

Open
opened 2026-09-27 18:36:38 +00:00 by selimaj-dev · 1 comment
Owner

26 through 26.4

26 through 26.4
selimaj-dev added the
priority
high
area/versions
type
enhancement
labels 2026-09-27 18:36:38 +00:00
selimaj-dev added this to the Saturn Client project 2026-09-27 18:36:38 +00:00
selimaj-dev moved this to To Do in Saturn Client on 2026-09-29 15:50:13 +00:00
Author
Owner

What supporting 26.x involves

Assessed 2026-09-29, at 0.1.4-beta. Short version: it's not a quick refactor, but it splits into steps, and the first can be done before any 26.x work.

1. Mappings: Yarn → Mojang (the biggest change, can be done now)

  • 26.1 and later ship unobfuscated, so mods use Mojang's names. 1.21.11 has the last Yarn mappings, and Fabric no longer supports Yarn.
  • Our 1.21.4–1.21.11 builds use Yarn. For one shared src/, every version has to be on Mojang mappings, which Loom also supports on 1.21.x (the emotes library already works this way).
  • Scope: only the version modules change, 50 files (about 4,900 lines) with 129 distinct Minecraft imports and 24 mixins. The 132 common files have no Minecraft dependency and don't change.
  • Tools: Loom's migrateMappings (./gradlew migrateMappings --mappings "net.minecraft:mappings:1.21.11" --overrideInputsIHaveABackup) or the Ravel IntelliJ plugin. Mixins still need checking by hand.
  • Stonecutter catch: code for versions other than the active one is inside /* */ comments, which the tools can't see. The migration has to run with each version active in turn, and each version-specific block needs checking afterwards.

2. Build: a second buildscript for 26.x

  • 26.x needs the net.fabricmc.fabric-loom plugin (no remapping) and no mappings line, while 1.21.x keeps net.fabricmc.fabric-loom-remap. A plugins {} block can't choose per version, so other Stonecutter projects use two buildscripts over the same src/.
  • For 26.x: modImplementation → implementation, remapJar → jar, and a Java 25 toolchain. It also needs Loom 1.15+ and Gradle 9.4+, which we already have (Loom 1.17, Gradle 9.8).
  • The release workflow sets up Java 21, so it needs Java 25 for the 26.x jars.

3. Fabric API renames

Fabric API renamed its classes to Mojang's names, and the renames aren't backwards compatible. We only use four:

  • ClientTickEvents: the world tick events are now level tick events.
  • ClientLifecycleEvents.
  • RenderStateDataKey.
  • KeyBindingHelper, which looks to be KeyMappingHelper now.

These go behind //? if conditions.

4. The emotes library comes first

Saturn uses emotes-fabric built for each Minecraft version. The library needs the same two-buildscript setup and a 26.x release before Saturn can build for 26.x. It's already on Mojang mappings, so for the library this is mostly build work.

5. Rendering changes per drop

Every drop changes rendering, as 1.21.5, 1.21.6 and 1.21.9 did. The compiler will show where for 26.1–26.3. Raw OpenGL is only in GlassRenderer's framebuffer copy on the 1.21.4 path; from 1.21.5 up we already use Blaze3D (render pipelines, GpuTexture, CommandEncoder), which Fabric requires on 26.x.

6. 26.4 isn't out yet

Its first snapshot (22 September 2026) makes Vulkan the default renderer, and the release is expected around December. Our glass, rounded-corner and cloak shaders go through Blaze3D, so they may carry over, but they need testing on Vulkan.

Suggested order

  1. Move the 1.21.x builds to Mojang mappings with no behaviour change, in one PR with commits by area (build, refs, mixins, rendering), checked on versions we already play.
  2. Give the emotes library 26.1–26.3 builds and publish.
  3. Add the 26.x buildscript and versions to Saturn, and fix what doesn't compile.
  4. Do 26.4 once it's released, with a Vulkan test pass.

Sources: Fabric for Minecraft 26.1, Migrating Mappings, Porting to Fabric API 26.1, Stonecutter with 1.21.11 and 26.1 (emf-compat #33), Java Edition 26.4 Snapshot 1

## What supporting 26.x involves Assessed 2026-09-29, at 0.1.4-beta. Short version: it's not a quick refactor, but it splits into steps, and the first can be done before any 26.x work. ### 1. Mappings: Yarn → Mojang (the biggest change, can be done now) - 26.1 and later ship unobfuscated, so mods use Mojang's names. 1.21.11 has the last Yarn mappings, and Fabric no longer supports Yarn. - Our 1.21.4–1.21.11 builds use Yarn. For one shared `src/`, every version has to be on Mojang mappings, which Loom also supports on 1.21.x (the emotes library already works this way). - Scope: only the version modules change, 50 files (about 4,900 lines) with 129 distinct Minecraft imports and 24 mixins. The 132 `common` files have no Minecraft dependency and don't change. - Tools: Loom's `migrateMappings` (`./gradlew migrateMappings --mappings "net.minecraft:mappings:1.21.11" --overrideInputsIHaveABackup`) or the Ravel IntelliJ plugin. Mixins still need checking by hand. - **Stonecutter catch:** code for versions other than the active one is inside `/* */` comments, which the tools can't see. The migration has to run with each version active in turn, and each version-specific block needs checking afterwards. ### 2. Build: a second buildscript for 26.x - 26.x needs the `net.fabricmc.fabric-loom` plugin (no remapping) and no mappings line, while 1.21.x keeps `net.fabricmc.fabric-loom-remap`. A `plugins {}` block can't choose per version, so other Stonecutter projects use two buildscripts over the same `src/`. - For 26.x: `modImplementation` → `implementation`, `remapJar` → `jar`, and a **Java 25** toolchain. It also needs Loom 1.15+ and Gradle 9.4+, which we already have (Loom 1.17, Gradle 9.8). - The release workflow sets up Java 21, so it needs Java 25 for the 26.x jars. ### 3. Fabric API renames Fabric API renamed its classes to Mojang's names, and the renames aren't backwards compatible. We only use four: - `ClientTickEvents`: the world tick events are now level tick events. - `ClientLifecycleEvents`. - `RenderStateDataKey`. - `KeyBindingHelper`, which looks to be `KeyMappingHelper` now. These go behind `//? if` conditions. ### 4. The emotes library comes first Saturn uses `emotes-fabric` built for each Minecraft version. The library needs the same two-buildscript setup and a 26.x release before Saturn can build for 26.x. It's already on Mojang mappings, so for the library this is mostly build work. ### 5. Rendering changes per drop Every drop changes rendering, as 1.21.5, 1.21.6 and 1.21.9 did. The compiler will show where for 26.1–26.3. Raw OpenGL is only in `GlassRenderer`'s framebuffer copy on the 1.21.4 path; from 1.21.5 up we already use Blaze3D (render pipelines, `GpuTexture`, `CommandEncoder`), which Fabric requires on 26.x. ### 6. 26.4 isn't out yet Its first snapshot (22 September 2026) makes **Vulkan** the default renderer, and the release is expected around December. Our glass, rounded-corner and cloak shaders go through Blaze3D, so they may carry over, but they need testing on Vulkan. ### Suggested order 1. Move the 1.21.x builds to Mojang mappings with no behaviour change, in one PR with commits by area (build, refs, mixins, rendering), checked on versions we already play. 2. Give the emotes library 26.1–26.3 builds and publish. 3. Add the 26.x buildscript and versions to Saturn, and fix what doesn't compile. 4. Do 26.4 once it's released, with a Vulkan test pass. Sources: [Fabric for Minecraft 26.1](https://fabricmc.net/2026/03/14/261.html), [Migrating Mappings](https://docs.fabricmc.net/develop/porting/mappings/), [Porting to Fabric API 26.1](https://docs.fabricmc.net/develop/porting/fabric-api), [Stonecutter with 1.21.11 and 26.1 (emf-compat #33)](https://github.com/victorkozhokin/emf-compat/pull/33), [Java Edition 26.4 Snapshot 1](https://minecraft.wiki/w/Java_Edition_26.4_Snapshot_1)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: saturnclientmc/saturnclient#39