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.
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)
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]>
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]>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Step 5 of #8, into
stonecutter. 1.21.6 and 1.21.7 now build fromsrc/as:1.21.6and:1.21.7, and theirversions/*/srcfolders 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
RenderStateDataKeyonly exists from 1.21.8. It's infabric-rendering-v112.6.0, and 1.21.6 and 1.21.7 have 12.4.0. So 1.21.7 had noupdateRenderStatehook and noSaturnRenderState, and it looked players up by name. That behaviour stays:getDataon>=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, thenelse if >=1.21.8) calling one sharedsaturn$applyPlayerhelper, 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.NameTagMixinwasn't registered in any mixin config, so it never ran.1.21.6: one rename
RenderScopeImplrenders items withItemRenderState, which 1.21.7 renamed toKeyedItemRenderState. Two version comments.Checks
:mc-*jars: identical configs. Files: the emptySaturnRenderStateadded and the deadNameTagMixinremoved. Bytecode differs (ignoring line numbers) only in the ways 1.21.8's did in step 4:ShaderUtilsandObjRenderer: the helpersStatusEffectMixin: gainsgetIconIdCloakFeatureRenderer: gets its buffer at the draw call instead of beforepush()PlayerEntityRendererMixin(the helper) changed. Each jar has exactly the same files as before.src/unchanged.buildAll --no-build-cachebuilds all 8 jars in 104 s, andcompileJavapasses.:1.21.6:runClientand:1.21.7:runClientstart (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 sharedbuild/folder. A class whose source was removed (1.21.6'sNameTagMixin) still got packaged until aclean. CI builds from a fresh checkout, so it isn't affected.VERSION_GUIDE.mdnow says to run:<v>:cleanonce 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