Title panorama on 1.21.6+, and Fabric Loader 0.19.5 everywhere #34

Merged
selimaj-dev merged 2 commits from panorama-1.21.6 into master 2026-09-27 05:34:33 +00:00
Owner

Part of #30: the panorama behind Saturn screens on 1.21.6+. The background blur stays as it is (1.21.5-only, TODO); that belongs with #23. Two commits.

1. Panorama on 1.21.6+

Why it was commented out: from 1.21.6, CubeMapRenderer draws from one cube-map texture instead of six face textures, and it crashes (Texture view does not exist) if that texture isn't loaded. Two things stopped it loading:

  • Saturn's preload registered the six faces, not a cube map.
  • Vanilla's registerTextures only stores the cube map for the next resource reload, which has already run by the time preload does.

I reproduced the crash on 1.21.11: the splash overlay draws Saturn's title menu on its first frames.

Fix:

  • On 1.21.6+, preload registers a CubemapTexture for the panorama through TextureManager.registerTexture(Identifier, ReloadableTexture), which loads it immediately. Before 1.21.6 it registers the six faces exactly as before.
  • The panorama is only drawn once preload has run (panoramaReady).
  • 1.21.6+'s RotatingCubeMapRenderer.render(context, w, h, rotate) has no opacity, so the panorama is fully opaque there. screen.backgroundOpacity only fades it on 1.21.4–1.21.5.

2. Fabric Loader 0.19.5 for every version

What was wrong: 1.21.4–1.21.6 declared loader_version 0.18.x and the others 0.19.0. But the bundled emotes-fabric pulls in loader 0.19.5, and its nested mod already requires fabricloader >=0.19. So the declared version was never the one that ran.

The symptom: in dev, Loom took its loader libraries from the declared version. 1.21.4 and 1.21.6 sometimes started with sponge-mixin 0.17.0 and crashed before Minecraft loaded (NoClassDefFoundError: org/spongepowered/asm/service/IAdviceProvider). The same launch had worked an hour earlier with 0.17.4, depending on classpath order.

The fix: declare 0.19.5 everywhere, so dev matches what runs and fabric.mod.json's fabricloader requirement (>=0.19.5) is honest. Players on these versions needed loader 0.19+ already because of the emotes mod.

Checks

  • Builds: compileJava passes for all 8 versions.
  • Switching: the round trip on 1.21.4 leaves src/ unchanged.
  • In game: 1.21.4, 1.21.6 and 1.21.11 start with Mixin 0.17.4 and stay on Saturn's title menu without a crash. 1.21.11 used to crash there with the panorama enabled.

Needs an in-game check:

  • the panorama behind Saturn's title and menus on 1.21.6+ (e.g. 1.21.6 and 1.21.11)
  • 1.21.4 still fading it in as before

🤖 Generated with Claude Code

Part of #30: the panorama behind Saturn screens on 1.21.6+. The background blur stays as it is (1.21.5-only, `TODO`); that belongs with #23. Two commits. ## 1. Panorama on 1.21.6+ **Why it was commented out:** from 1.21.6, `CubeMapRenderer` draws from one cube-map texture instead of six face textures, and it crashes (`Texture view does not exist`) if that texture isn't loaded. Two things stopped it loading: - Saturn's `preload` registered the six faces, not a cube map. - Vanilla's `registerTextures` only *stores* the cube map for the next resource reload, which has already run by the time `preload` does. I reproduced the crash on 1.21.11: the splash overlay draws Saturn's title menu on its first frames. **Fix:** - On 1.21.6+, `preload` registers a `CubemapTexture` for the panorama through `TextureManager.registerTexture(Identifier, ReloadableTexture)`, which loads it immediately. Before 1.21.6 it registers the six faces exactly as before. - The panorama is only drawn once `preload` has run (`panoramaReady`). - 1.21.6+'s `RotatingCubeMapRenderer.render(context, w, h, rotate)` has no opacity, so the panorama is fully opaque there. `screen.backgroundOpacity` only fades it on 1.21.4–1.21.5. ## 2. Fabric Loader 0.19.5 for every version **What was wrong:** 1.21.4–1.21.6 declared `loader_version` 0.18.x and the others 0.19.0. But the bundled `emotes-fabric` pulls in loader 0.19.5, and its nested mod already requires `fabricloader >=0.19`. So the declared version was never the one that ran. **The symptom:** in dev, Loom took its loader libraries from the declared version. 1.21.4 and 1.21.6 sometimes started with `sponge-mixin 0.17.0` and crashed before Minecraft loaded (`NoClassDefFoundError: org/spongepowered/asm/service/IAdviceProvider`). The same launch had worked an hour earlier with 0.17.4, depending on classpath order. **The fix:** declare 0.19.5 everywhere, so dev matches what runs and `fabric.mod.json`'s `fabricloader` requirement (`>=0.19.5`) is honest. Players on these versions needed loader 0.19+ already because of the emotes mod. ## Checks - **Builds:** `compileJava` passes for all 8 versions. - **Switching:** the round trip on 1.21.4 leaves `src/` unchanged. - **In game:** 1.21.4, 1.21.6 and 1.21.11 start with Mixin 0.17.4 and stay on Saturn's title menu without a crash. 1.21.11 used to crash there with the panorama enabled. **Needs an in-game check:** - the panorama behind Saturn's title and menus on 1.21.6+ (e.g. 1.21.6 and 1.21.11) - 1.21.4 still fading it in as before 🤖 Generated with [Claude Code](https://claude.com/claude-code)
selimaj-dev added 2 commits 2026-09-27 05:26:31 +00:00
The call was commented out on 1.21.6+ (#30). From 1.21.6 CubeMapRenderer
draws from one cube map texture instead of six face textures, and it
crashes ("Texture view does not exist") if that texture isn't loaded.
Saturn's preload registered the six faces, and the vanilla
registerTextures only stores the cube map for the next resource reload,
which has already run by the time preload does.

- preload registers a CubemapTexture for the panorama through the
  TextureManager overload that loads it immediately, on 1.21.6+. Before
  1.21.6 it registers the six faces as before.
- The panorama is only drawn once preload has run, which also covers the
  splash overlay drawing the title menu on its first frames.
- 1.21.6+'s RotatingCubeMapRenderer.render has no opacity, so the
  panorama is fully opaque there. The background blur stays 1.21.5-only
  (TODO, #23).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Use Fabric Loader 0.19.5 for every version
Check / compile (pull_request) Successful in 2m42s
8dbb1d84c1
1.21.4-1.21.6 declared loader 0.18.x and the others 0.19.0, but the
bundled emotes-fabric pulls in loader 0.19.5, and its nested mod already
requires loader >=0.19. So the declared version was never what ran: in
dev, Loom's loader libraries came from the declared version while the
loader itself was 0.19.5, and 1.21.4/1.21.6 sometimes started with
sponge-mixin 0.17.0 and crashed (NoClassDefFoundError:
IAdviceProvider). Declaring 0.19.5 makes dev match what runs, and makes
fabric.mod.json's fabricloader requirement (>=0.19.5) honest.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
selimaj-dev added the area/buildarea/uiarea/versions
type
bug
labels 2026-09-27 05:26:32 +00:00
selimaj-dev merged commit fbd0e23fb3 into master 2026-09-27 05:34:33 +00:00
selimaj-dev deleted branch panorama-1.21.6 2026-09-27 05:34:36 +00:00
Sign in to join this conversation.