Stonecutter step 6: build 1.21.4 and 1.21.5 from the shared src/ #29

Merged
selimaj-dev merged 2 commits from stonecutter-1.21.5 into stonecutter 2026-09-27 04:36:09 +00:00
Owner

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

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)
selimaj-dev added 2 commits 2026-09-27 04:34:33 +00:00
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]>
Build 1.21.4 with Stonecutter; every version now shares src/
Check / compile (pull_request) Successful in 7m44s
25a19d7951
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]>
selimaj-dev added the area/buildarea/versions
type
refactor
labels 2026-09-27 04:34:41 +00:00
selimaj-dev merged commit 84270c023a into stonecutter 2026-09-27 04:36:09 +00:00
selimaj-dev deleted branch stonecutter-1.21.5 2026-09-27 04:36:14 +00:00
Sign in to join this conversation.