text render state without the extra flag, TextureSetup.withoutGlTexture
extra flag, TextureSetup.of(view, sampler)
SplashOverlayMixin
Screen.init(client, w, h)
Screen.init(w, h)
SaturnRenderState
no jspecify
@NonNull
Logic: nothing lost, one fix
Features 1.21.11 leaves out stay on 1.21.10. Each has a TODO on the 1.21.11 side:
WorldFeatureImpl.getWorldAge (returns 0 on 1.21.11)
SaturnScreenFabric.resize (not hooked on 1.21.11)
EntityDrawerImpl clearing the hitbox
Hats now render on 1.21.10.
Before: its HatFeatureRenderer overrode the render-queue render(…) with an empty body, and the working code sat in an old VertexConsumerProvider method that nothing called.
Now: 1.21.10 uses 1.21.11's render-queue implementation (HatFeatureRenderer, ObjModel, ObjRenderer), which compiles unchanged on 1.21.10.
1.21.10 also gets 1.21.11's null check on the player's display name in PlayerEntityRendererMixin.
Checks
1.21.10 jar vs the old :mc-1.21.10 jar: same 415 entries, identical fabric.mod.json and mixin configs. Comparing bytecode (ignoring line numbers), only these classes differ: the three hat classes, PlayerEntityRendererMixin (the null check) and ShaderUtils (a new entityAlpha helper). Everything else compiles to the same bytecode.
1.21.11 jar: only ShaderUtils differs (the same helper).
Switching versions:Set active project to 1.21.10 compiles, and Reset active project leaves src/ unchanged. The version comments are already in Stonecutter's own layout.
Builds: a cold buildAll --no-build-cache builds all 8 jars in 85 s, and compileJava passes.
In game::1.21.10:runClient starts. Only 1.21.11's run folder has DevAuth, so the 1.21.10 dev client plays offline and can't log in to the Saturn server.
Needs an in-game check: hats on 1.21.10, with a logged-in account that owns one.
Step 2 of #8, into the `stonecutter` integration branch. 1.21.10 now builds from `src/` as `:1.21.10`, and `versions/1.21.10/src` is gone.
## Version comments (API differences)
| File | 1.21.10 | 1.21.11 |
|---|---|---|
| `ShaderUtils` | `RenderLayer.of(…, MultiPhaseParameters)`, `RenderLayer.getEntityAlpha` | `RenderSetup`, `RenderLayers.entityAlpha` |
| `CameraMixin` | `Camera.update(BlockView, …)` | `Camera.update(World, …)` |
| `RenderScopeImpl` | text render state without the extra flag, `TextureSetup.withoutGlTexture` | extra flag, `TextureSetup.of(view, sampler)` |
| `SplashOverlayMixin` | `Screen.init(client, w, h)` | `Screen.init(w, h)` |
| `SaturnRenderState` | no jspecify | `@NonNull` |
## Logic: nothing lost, one fix
- **Features 1.21.11 leaves out stay on 1.21.10.** Each has a `TODO` on the 1.21.11 side:
- `WorldFeatureImpl.getWorldAge` (returns 0 on 1.21.11)
- `SaturnScreenFabric.resize` (not hooked on 1.21.11)
- `EntityDrawerImpl` clearing the hitbox
- **Hats now render on 1.21.10.**
- Before: its `HatFeatureRenderer` overrode the render-queue `render(…)` with an empty body, and the working code sat in an old `VertexConsumerProvider` method that nothing called.
- Now: 1.21.10 uses 1.21.11's render-queue implementation (`HatFeatureRenderer`, `ObjModel`, `ObjRenderer`), which compiles unchanged on 1.21.10.
- **1.21.10 also gets 1.21.11's null check** on the player's display name in `PlayerEntityRendererMixin`.
## Checks
- **1.21.10 jar vs the old `:mc-1.21.10` jar:** same 415 entries, identical `fabric.mod.json` and mixin configs. Comparing bytecode (ignoring line numbers), only these classes differ: the three hat classes, `PlayerEntityRendererMixin` (the null check) and `ShaderUtils` (a new `entityAlpha` helper). Everything else compiles to the same bytecode.
- **1.21.11 jar:** only `ShaderUtils` differs (the same helper).
- **Switching versions:** `Set active project to 1.21.10` compiles, and `Reset active project` leaves `src/` unchanged. The version comments are already in Stonecutter's own layout.
- **Builds:** a cold `buildAll --no-build-cache` builds all 8 jars in 85 s, and `compileJava` passes.
- **In game:** `:1.21.10:runClient` starts. Only 1.21.11's run folder has DevAuth, so the 1.21.10 dev client plays offline and can't log in to the Saturn server.
**Needs an in-game check:** hats on 1.21.10, with a logged-in account that owns one.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Step 2 of #8. versions/1.21.10/src is gone; 1.21.10 builds from src/ as
:1.21.10, with versions/1.21.10 keeping only gradle.properties and run/.
API differences go behind version comments: render layers (ShaderUtils),
Camera.update's World vs BlockView (CameraMixin), the text and textured-quad
render states (RenderScopeImpl), Screen.init (SplashOverlayMixin) and
jspecify's @NonNull (SaturnRenderState).
Features 1.21.11 leaves out stay on 1.21.10, with a TODO for 1.21.11:
WorldFeatureImpl.getWorldAge, SaturnScreenFabric.resize and
EntityDrawerImpl clearing the hitbox.
Hats now render on 1.21.10: its HatFeatureRenderer overrode the
render-queue method with an empty body, and the working code sat in an old
VertexConsumerProvider method nothing called. 1.21.10 now uses 1.21.11's
render-queue implementation (HatFeatureRenderer, ObjModel, ObjRenderer),
and also gets 1.21.11's null check on the player's display name.
The 1.21.10 jar has the same entries, fabric.mod.json and mixin configs as
before; only those four classes and ShaderUtils (a helper method for
entityAlpha) have different bytecode. The 1.21.11 jar only differs in
ShaderUtils.
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 2 of #8, into the
stonecutterintegration branch. 1.21.10 now builds fromsrc/as:1.21.10, andversions/1.21.10/srcis gone.Version comments (API differences)
ShaderUtilsRenderLayer.of(…, MultiPhaseParameters),RenderLayer.getEntityAlphaRenderSetup,RenderLayers.entityAlphaCameraMixinCamera.update(BlockView, …)Camera.update(World, …)RenderScopeImplTextureSetup.withoutGlTextureTextureSetup.of(view, sampler)SplashOverlayMixinScreen.init(client, w, h)Screen.init(w, h)SaturnRenderState@NonNullLogic: nothing lost, one fix
TODOon the 1.21.11 side:WorldFeatureImpl.getWorldAge(returns 0 on 1.21.11)SaturnScreenFabric.resize(not hooked on 1.21.11)EntityDrawerImplclearing the hitboxHatFeatureRendereroverrode the render-queuerender(…)with an empty body, and the working code sat in an oldVertexConsumerProvidermethod that nothing called.HatFeatureRenderer,ObjModel,ObjRenderer), which compiles unchanged on 1.21.10.PlayerEntityRendererMixin.Checks
:mc-1.21.10jar: same 415 entries, identicalfabric.mod.jsonand mixin configs. Comparing bytecode (ignoring line numbers), only these classes differ: the three hat classes,PlayerEntityRendererMixin(the null check) andShaderUtils(a newentityAlphahelper). Everything else compiles to the same bytecode.ShaderUtilsdiffers (the same helper).Set active project to 1.21.10compiles, andReset active projectleavessrc/unchanged. The version comments are already in Stonecutter's own layout.buildAll --no-build-cachebuilds all 8 jars in 85 s, andcompileJavapasses.:1.21.10:runClientstarts. Only 1.21.11's run folder has DevAuth, so the 1.21.10 dev client plays offline and can't log in to the Saturn server.Needs an in-game check: hats on 1.21.10, with a logged-in account that owns one.
🤖 Generated with Claude Code