Step 6 of #8, into stonecutter. The last two versions: all eight (1.21.4–1.21.11) now build from src/, and versions/*/src is gone. Two commits, one per version; the second also removes what the old layout needed.
1.21.5: the 1.21.6 GUI rewrite
1.21.6 moved GUI drawing from vertex consumers and a MatrixStack to render states and a 2D Matrix3x2fStack.
Two whole implementations.RenderScopeImpl and EntityDrawerImpl each have one per side of 1.21.6, as a single >=1.21.6 / else split, instead of conditionals scattered through ~400 lines.
No version comments at the callers. They use new RenderScopeImpl(context) everywhere; 1.21.5's did the same thing through its (matrices, vertexConsumers) constructor.
MatrixStackMixin (MatrixStack as a MatrixStackRef) is real before 1.21.6 and empty from it, registered everywhere like NametagsMixin.
DrawContextAccessor exposes the vertex consumers before 1.21.6 and the GUI render state from it.
Smaller changes: fog (BackgroundRenderer vs FogRenderer), the end-portal texture arguments, the status effect sprite manager, and getIconId only from 1.21.6.
Kept on 1.21.5, TODO for 1.21.6+: the title panorama behind Saturn screens and the background blur (screen.backgroundBlur, see #23).
1.21.4
Render pipelines: there are none before 1.21.5, so ShaderUtils' pipeline field only exists from 1.21.5, and its end-gateway layer is a four-way else if chain.
Smaller changes:
hat head rotation
the NativeImageBackedTexture constructor
armor slots (inventory.armor vs getEquippedStack)
MatrixStackMixin's Quaternionf
Inside the pre-1.21.6 implementations:prevHeadYaw, GUI lighting, ModelTransformationMode, item depth, setShaderTexture and the blur uniform call. These are all one-line version comments, because those blocks are already inside /* */ on newer versions.
drawItem: 1.21.5's wrapped its body in a second isEmpty check after already returning early for empty stacks. The redundant check is gone, so 1.21.4 and 1.21.5 share the body.
Behaviour change on 1.21.5–1.21.11
Freelook's zoom-out works again.GameRendererMixin called FreelookMod.shouldZoomOut() only on 1.21.4. The call doesn't depend on the Minecraft version, so it's back on every version. It's easy to take out if it was dropped on purpose.
Clean-up
With no old copies left:
the mc-<v> fallback in settings.gradle.kts is gone
scripts/port.sh is gone (nothing to port between)
README and VERSION_GUIDE.md describe the single layout
Moving the versions' gradle.properties into one stonecutter.properties.toml is left for a follow-up.
Checks
1.21.4 and 1.21.5 jars vs their old :mc-* jars: identical fabric.mod.json and mixin configs.
Files: the empty SaturnRenderState and unused Matrix3x2fStackRef added, and the dead NameTagMixin removed. It was never registered on either version.
Bytecode differs only in the helpers from earlier steps (ShaderUtils, ObjRenderer, the cloak's buffer call) and the RenderScopeImpl(context) calls.
1.21.4's RenderScopeImpl compiles to the same bytecode as before.
1.21.6–1.21.11: the empty MatrixStackMixin and its impl.mixins.json entry, and GameRendererMixin (the zoom-out). 1.21.5's RenderScopeImpl also changed (the isEmpty clean-up).
Switching versions: switching to 1.21.4 and 1.21.5 compiles, and a reset leaves src/ unchanged.
Builds: a cold buildAll --no-build-cache builds all 8 jars in 96 s, and compileJava passes.
In game::1.21.4, :1.21.5 and :1.21.11:runClient start. The first two run offline, since there's no DevAuth or run folder there before now.
Needs an in-game check on 1.21.4 and 1.21.5: Saturn screens (panorama and blur), the HUD, items in the UI, entity previews, cloak/hat, fog (NoFog), the status effect HUD and armor HUD, and Freelook's zoom-out on any version.
Step 6 of #8, into `stonecutter`. The last two versions: **all eight (1.21.4–1.21.11) now build from `src/`**, and `versions/*/src` is gone. Two commits, one per version; the second also removes what the old layout needed.
## 1.21.5: the 1.21.6 GUI rewrite
1.21.6 moved GUI drawing from vertex consumers and a `MatrixStack` to render states and a 2D `Matrix3x2fStack`.
- **Two whole implementations.** `RenderScopeImpl` and `EntityDrawerImpl` each have one per side of 1.21.6, as a single `>=1.21.6` / `else` split, instead of conditionals scattered through ~400 lines.
- **No version comments at the callers.** They use `new RenderScopeImpl(context)` everywhere; 1.21.5's did the same thing through its `(matrices, vertexConsumers)` constructor.
- **`MatrixStackMixin`** (MatrixStack as a `MatrixStackRef`) is real before 1.21.6 and empty from it, registered everywhere like `NametagsMixin`.
- **`DrawContextAccessor`** exposes the vertex consumers before 1.21.6 and the GUI render state from it.
- **Smaller changes:** fog (`BackgroundRenderer` vs `FogRenderer`), the end-portal texture arguments, the status effect sprite manager, and `getIconId` only from 1.21.6.
- **Kept on 1.21.5, `TODO` for 1.21.6+:** the title panorama behind Saturn screens and the background blur (`screen.backgroundBlur`, see #23).
## 1.21.4
- **Render pipelines:** there are none before 1.21.5, so `ShaderUtils`' pipeline field only exists from 1.21.5, and its end-gateway layer is a four-way `else if` chain.
- **Smaller changes:**
- hat head rotation
- the `NativeImageBackedTexture` constructor
- armor slots (`inventory.armor` vs `getEquippedStack`)
- `MatrixStackMixin`'s `Quaternionf`
- **Inside the pre-1.21.6 implementations:** `prevHeadYaw`, GUI lighting, `ModelTransformationMode`, item depth, `setShaderTexture` and the blur uniform call. These are all one-line version comments, because those blocks are already inside `/* */` on newer versions.
- **`drawItem`:** 1.21.5's wrapped its body in a second `isEmpty` check after already returning early for empty stacks. The redundant check is gone, so 1.21.4 and 1.21.5 share the body.
## Behaviour change on 1.21.5–1.21.11
**Freelook's zoom-out works again.** `GameRendererMixin` called `FreelookMod.shouldZoomOut()` only on 1.21.4. The call doesn't depend on the Minecraft version, so it's back on every version. It's easy to take out if it was dropped on purpose.
## Clean-up
With no old copies left:
- the `mc-<v>` fallback in `settings.gradle.kts` is gone
- `scripts/port.sh` is gone (nothing to port between)
- README and `VERSION_GUIDE.md` describe the single layout
Moving the versions' `gradle.properties` into one `stonecutter.properties.toml` is left for a follow-up.
## Checks
- **1.21.4 and 1.21.5 jars vs their old `:mc-*` jars:** identical `fabric.mod.json` and mixin configs.
- Files: the empty `SaturnRenderState` and unused `Matrix3x2fStackRef` added, and the dead `NameTagMixin` removed. It was never registered on either version.
- Bytecode differs only in the helpers from earlier steps (`ShaderUtils`, `ObjRenderer`, the cloak's buffer call) and the `RenderScopeImpl(context)` calls.
- 1.21.4's `RenderScopeImpl` compiles to the same bytecode as before.
- **1.21.6–1.21.11:** the empty `MatrixStackMixin` and its `impl.mixins.json` entry, and `GameRendererMixin` (the zoom-out). 1.21.5's `RenderScopeImpl` also changed (the `isEmpty` clean-up).
- **Switching versions:** switching to 1.21.4 and 1.21.5 compiles, and a reset leaves `src/` unchanged.
- **Builds:** a cold `buildAll --no-build-cache` builds all 8 jars in 96 s, and `compileJava` passes.
- **In game:** `:1.21.4`, `:1.21.5` and `:1.21.11:runClient` start. The first two run offline, since there's no DevAuth or run folder there before now.
**Needs an in-game check on 1.21.4 and 1.21.5:** Saturn screens (panorama and blur), the HUD, items in the UI, entity previews, cloak/hat, fog (NoFog), the status effect HUD and armor HUD, and Freelook's zoom-out on any version.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
1.21.5 is the first version before the 1.21.6 GUI rewrite, which moved
GUI drawing from vertex consumers and a MatrixStack to render states and
a 2D Matrix3x2fStack.
- RenderScopeImpl and EntityDrawerImpl have two whole implementations,
one per side of 1.21.6 (a single >=1.21.6 / else split), instead of
conditionals scattered through them. Callers use RenderScopeImpl(context)
in every version; 1.21.5's did the same thing through its
(matrices, vertexConsumers) constructor.
- MatrixStackMixin (MatrixStack as a MatrixStackRef) is real before 1.21.6
and empty from 1.21.6, registered everywhere like NametagsMixin.
- DrawContextAccessor exposes the vertex consumers before 1.21.6 and the
GUI render state from it.
- Smaller changes: fog (BackgroundRenderer vs FogRenderer), the end
portal texture arguments (ShaderUtils, now a flat three-way chain), the
status effect sprite manager, and getIconId only from 1.21.6.
Features 1.21.6+ lacks stay on 1.21.5, with a TODO: the title panorama
behind Saturn screens and the background blur (screen.backgroundBlur,
see #23).
The 1.21.5 jar differs from the old one only in the helpers from earlier
steps, the RenderScopeImpl(context) calls, the empty SaturnRenderState
and unused Matrix3x2fStackRef, and 1.21.5's dead NameTagMixin (never
registered) being gone. 1.21.6-1.21.11 only gain the empty
MatrixStackMixin and its impl.mixins.json entry.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Step 6 of #8. versions/1.21.4/src is gone, so all eight versions (1.21.4 to
1.21.11) build from src/.
1.21.4's differences from 1.21.5 are behind version comments:
- The end gateway render layer has no render pipeline before 1.21.5
(ShaderUtils: the pipeline field only exists from 1.21.5, and the layer
is a four-way chain).
- Hat head rotation, the NativeImageBackedTexture constructor, armor slots
(inventory.armor vs getEquippedStack), MatrixStackMixin's Quaternionf,
and inside the pre-1.21.6 implementations: prevHeadYaw, GUI lighting,
ModelTransformationMode, item depth, setShaderTexture and the blur
uniform call. Those are one-line version comments, since the pre-1.21.6
blocks are already inside /* */ on newer versions.
1.21.5's drawItem wrapped its body in a second isEmpty check after already
returning early for empty stacks; the redundant check is gone, so 1.21.4
and 1.21.5 share the body.
Freelook's zoom-out (FreelookMod.shouldZoomOut in GameRendererMixin) only
existed on 1.21.4. It doesn't depend on the Minecraft version, so it's
back on every version.
With no old copies left, the mc-<v> fallback in settings.gradle.kts and
scripts/port.sh are removed, and README and VERSION_GUIDE describe the
single layout.
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 6 of #8, into
stonecutter. The last two versions: all eight (1.21.4–1.21.11) now build fromsrc/, andversions/*/srcis gone. Two commits, one per version; the second also removes what the old layout needed.1.21.5: the 1.21.6 GUI rewrite
1.21.6 moved GUI drawing from vertex consumers and a
MatrixStackto render states and a 2DMatrix3x2fStack.RenderScopeImplandEntityDrawerImpleach have one per side of 1.21.6, as a single>=1.21.6/elsesplit, instead of conditionals scattered through ~400 lines.new RenderScopeImpl(context)everywhere; 1.21.5's did the same thing through its(matrices, vertexConsumers)constructor.MatrixStackMixin(MatrixStack as aMatrixStackRef) is real before 1.21.6 and empty from it, registered everywhere likeNametagsMixin.DrawContextAccessorexposes the vertex consumers before 1.21.6 and the GUI render state from it.BackgroundRenderervsFogRenderer), the end-portal texture arguments, the status effect sprite manager, andgetIconIdonly from 1.21.6.TODOfor 1.21.6+: the title panorama behind Saturn screens and the background blur (screen.backgroundBlur, see #23).1.21.4
ShaderUtils' pipeline field only exists from 1.21.5, and its end-gateway layer is a four-wayelse ifchain.NativeImageBackedTextureconstructorinventory.armorvsgetEquippedStack)MatrixStackMixin'sQuaternionfprevHeadYaw, GUI lighting,ModelTransformationMode, item depth,setShaderTextureand the blur uniform call. These are all one-line version comments, because those blocks are already inside/* */on newer versions.drawItem: 1.21.5's wrapped its body in a secondisEmptycheck after already returning early for empty stacks. The redundant check is gone, so 1.21.4 and 1.21.5 share the body.Behaviour change on 1.21.5–1.21.11
Freelook's zoom-out works again.
GameRendererMixincalledFreelookMod.shouldZoomOut()only on 1.21.4. The call doesn't depend on the Minecraft version, so it's back on every version. It's easy to take out if it was dropped on purpose.Clean-up
With no old copies left:
mc-<v>fallback insettings.gradle.ktsis gonescripts/port.shis gone (nothing to port between)VERSION_GUIDE.mddescribe the single layoutMoving the versions'
gradle.propertiesinto onestonecutter.properties.tomlis left for a follow-up.Checks
:mc-*jars: identicalfabric.mod.jsonand mixin configs.SaturnRenderStateand unusedMatrix3x2fStackRefadded, and the deadNameTagMixinremoved. It was never registered on either version.ShaderUtils,ObjRenderer, the cloak's buffer call) and theRenderScopeImpl(context)calls.RenderScopeImplcompiles to the same bytecode as before.MatrixStackMixinand itsimpl.mixins.jsonentry, andGameRendererMixin(the zoom-out). 1.21.5'sRenderScopeImplalso changed (theisEmptyclean-up).src/unchanged.buildAll --no-build-cachebuilds all 8 jars in 96 s, andcompileJavapasses.:1.21.4,:1.21.5and:1.21.11:runClientstart. The first two run offline, since there's no DevAuth or run folder there before now.Needs an in-game check on 1.21.4 and 1.21.5: Saturn screens (panorama and blur), the HUD, items in the UI, entity previews, cloak/hat, fog (NoFog), the status effect HUD and armor HUD, and Freelook's zoom-out on any version.
🤖 Generated with Claude Code