Stonecutter step 5: build 1.21.6 and 1.21.7 from the shared src/ #28

Merged
selimaj-dev merged 2 commits from stonecutter-1.21.7 into stonecutter 2026-09-27 04:16:33 +00:00
Owner

Step 5 of #8, into stonecutter. 1.21.6 and 1.21.7 now build from src/ as :1.21.6 and :1.21.7, and their versions/*/src folders are gone. That leaves 1.21.4 and 1.21.5. Two commits, one per version.

1.21.7: the player render state

Fabric API's RenderStateDataKey only exists from 1.21.8. It's in fabric-rendering-v1 12.6.0, and 1.21.6 and 1.21.7 have 12.4.0. So 1.21.7 had no updateRenderState hook and no SaturnRenderState, and it looked players up by name. That behaviour stays:

  • Cloak and hat: getData on >=1.21.8, SaturnPlayer.get(name) before that.
  • PlayerEntityRendererMixin: its render-state hook exists only on >=1.21.8. It's written as flat ranges (>=1.21.9, then else if >=1.21.8) calling one shared saturn$applyPlayer helper, because nested multi-line blocks would nest /* */ comments.
  • SaturnRenderState: its key only exists on >=1.21.8, and the class is empty before that.
  • TODO: 1.21.6 and 1.21.7 still don't show the role icon in player names.
  • Dropped dead code: 1.21.7's NameTagMixin wasn't registered in any mixin config, so it never ran.

1.21.6: one rename

RenderScopeImpl renders items with ItemRenderState, which 1.21.7 renamed to KeyedItemRenderState. Two version comments.

Checks

  • 1.21.6 and 1.21.7 jars vs the old :mc-* jars: identical configs. Files: the empty SaturnRenderState added and the dead NameTagMixin removed. Bytecode differs (ignoring line numbers) only in the ways 1.21.8's did in step 4:
    • ShaderUtils and ObjRenderer: the helpers
    • StatusEffectMixin: gains getIconId
    • CloakFeatureRenderer: gets its buffer at the draw call instead of before push()
  • 1.21.8–1.21.11: only PlayerEntityRendererMixin (the helper) changed. Each jar has exactly the same files as before.
  • Switching versions: switching to 1.21.6 and 1.21.7 compiles, and a reset leaves src/ unchanged.
  • Builds: a cold buildAll --no-build-cache builds all 8 jars in 104 s, and compileJava passes.
  • In game: :1.21.6:runClient and :1.21.7:runClient start (offline; no DevAuth in those run folders).

Found on the way

Moving a version over leaves the old mc-<v> project's compiled classes in the shared build/ folder. A class whose source was removed (1.21.6's NameTagMixin) still got packaged until a clean. CI builds from a fresh checkout, so it isn't affected. VERSION_GUIDE.md now says to run :<v>:clean once after moving a version.

Needs an in-game check on 1.21.6 and 1.21.7: cloak, hat, and item rendering in the UI.

🤖 Generated with Claude Code

Step 5 of #8, into `stonecutter`. 1.21.6 and 1.21.7 now build from `src/` as `:1.21.6` and `:1.21.7`, and their `versions/*/src` folders are gone. That leaves 1.21.4 and 1.21.5. Two commits, one per version. ## 1.21.7: the player render state Fabric API's `RenderStateDataKey` only exists from 1.21.8. It's in `fabric-rendering-v1` 12.6.0, and 1.21.6 and 1.21.7 have 12.4.0. So 1.21.7 had no `updateRenderState` hook and no `SaturnRenderState`, and it looked players up by name. That behaviour stays: - **Cloak and hat:** `getData` on `>=1.21.8`, `SaturnPlayer.get(name)` before that. - **`PlayerEntityRendererMixin`:** its render-state hook exists only on `>=1.21.8`. It's written as flat ranges (`>=1.21.9`, then `else if >=1.21.8`) calling one shared `saturn$applyPlayer` helper, because nested multi-line blocks would nest `/* */` comments. - **`SaturnRenderState`:** its key only exists on `>=1.21.8`, and the class is empty before that. - **`TODO`:** 1.21.6 and 1.21.7 still don't show the role icon in player names. - **Dropped dead code:** 1.21.7's `NameTagMixin` wasn't registered in any mixin config, so it never ran. ## 1.21.6: one rename `RenderScopeImpl` renders items with `ItemRenderState`, which 1.21.7 renamed to `KeyedItemRenderState`. Two version comments. ## Checks - **1.21.6 and 1.21.7 jars vs the old `:mc-*` jars:** identical configs. Files: the empty `SaturnRenderState` added and the dead `NameTagMixin` removed. Bytecode differs (ignoring line numbers) only in the ways 1.21.8's did in step 4: - `ShaderUtils` and `ObjRenderer`: the helpers - `StatusEffectMixin`: gains `getIconId` - `CloakFeatureRenderer`: gets its buffer at the draw call instead of before `push()` - **1.21.8–1.21.11:** only `PlayerEntityRendererMixin` (the helper) changed. Each jar has exactly the same files as before. - **Switching versions:** switching to 1.21.6 and 1.21.7 compiles, and a reset leaves `src/` unchanged. - **Builds:** a cold `buildAll --no-build-cache` builds all 8 jars in 104 s, and `compileJava` passes. - **In game:** `:1.21.6:runClient` and `:1.21.7:runClient` start (offline; no DevAuth in those run folders). ## Found on the way Moving a version over leaves the old `mc-<v>` project's compiled classes in the shared `build/` folder. A class whose source was removed (1.21.6's `NameTagMixin`) still got packaged until a `clean`. CI builds from a fresh checkout, so it isn't affected. `VERSION_GUIDE.md` now says to run `:<v>:clean` once after moving a version. **Needs an in-game check on 1.21.6 and 1.21.7:** cloak, hat, and item rendering in the UI. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
selimaj-dev added 2 commits 2026-09-27 04:10:33 +00:00
Step 5 of #8. versions/1.21.7/src is gone; 1.21.7 builds from src/ as
:1.21.7.

1.21.7's copy differed from 1.21.8's in the player render state: Fabric
API's RenderStateDataKey only exists from 1.21.8 (fabric-rendering-v1
12.6.0), so 1.21.7 had no updateRenderState hook, no SaturnRenderState,
and looked players up by name for the cloak and hat. That stays the case:
- The cloak and hat use getData on >=1.21.8 and SaturnPlayer.get(name)
  before that.
- PlayerEntityRendererMixin's updateRenderState exists only on >=1.21.8,
  as flat ranges (>=1.21.9, else if >=1.21.8) calling a shared
  saturn$applyPlayer helper, instead of nested version blocks.
- SaturnRenderState's key only exists on >=1.21.8; the class is empty
  before.
- TODO: 1.21.6 and 1.21.7 still don't show the role icon in names.

1.21.7's NameTagMixin isn't carried over: it wasn't registered in any
mixin config, so it never ran.

The 1.21.7 jar differs from the old one only as 1.21.8's did in step 4
(entityAlpha and drawGroup helpers, getIconId, and the cloak getting its
buffer at the draw call), plus the empty SaturnRenderState and the
missing dead NameTagMixin. 1.21.8-1.21.11 only differ in
PlayerEntityRendererMixin (the helper).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Build 1.21.6 with Stonecutter from the shared src/
Check / compile (pull_request) Successful in 8m3s
a949c18ec1
1.21.6's copy only differed from 1.21.7's in RenderScopeImpl: item
rendering uses ItemRenderState, which 1.21.7 renamed to
KeyedItemRenderState. That's behind a version comment; 1.21.6 keeps its
older loader_version (0.18.5) in its gradle.properties.

Moving a version over leaves the old mc-<v> project's compiled classes in
the shared build/ folder, so a removed class (1.21.6's dead NameTagMixin)
still got packaged until a clean. VERSION_GUIDE now says to run
:<v>:clean once after moving a version.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
selimaj-dev added the area/buildarea/versions
type
refactor
labels 2026-09-27 04:10:38 +00:00
selimaj-dev merged commit 22142be7b5 into stonecutter 2026-09-27 04:16:33 +00:00
selimaj-dev deleted branch stonecutter-1.21.7 2026-09-27 04:16:37 +00:00
Sign in to join this conversation.