Feature Shaders Menu - bh679/dungeon-train-mc GitHub Wiki

Shaders menu โ€” pick, download and apply a shader pack in-game

Since: v0.795.0 โ€” PR #1298

A Shaders page reachable from the title screen (between Mods and Options) and from the Esc menu (beside Mods). It lists the nine officially supported Iris shader packs, shows each as a screenshot of the same scene, and downloads + applies one in a click.

Why it exists

The nine packs are the ones measured to load and to render Dungeon Train's bands and dimensional carriages correctly โ€” see Compatibility and docs/shaders/compat-matrix.md in the repo. Before this page a player had no way to learn that: running a pack meant knowing Iris exists, finding a pack site, guessing at a build, and locating the game directory โ€” on top of a modpack that already ships Iris and Sodium.

The page

Element Behaviour
Pack list "Shaders off" pinned first, then the nine packs. The running pack has a green edge and wash; one already downloaded has a fainter blue one. A download in flight shows a percentage.
Preview One screenshot per pack โ€” plus a vanilla control frame for "Shaders off".
Details A scrolling window: version ยท author ยท size, the performance tier, what that tier needs, and the download status.
Action button Download & Activate when the zip is absent, Activate when it is already in shaderpacks/, Shader Settings once the pack is running (opens Iris' own options for it). Plus Turn Shaders Off.
Sort Cycles Author Rec (the default view) โ†’ Default (Aโ€“Z) โ†’ Performance โ†’ Most vanilla โ†’ Mood.

Without Iris installed the page still lists and previews everything, with the actions disabled and a line saying Iris and Sodium are required.

Where the downloads come from

Nothing is mirrored or bundled. Most of these packs are all-rights-reserved or custom-licensed, so the shipped manifest (assets/dungeontrain/shader_menu/packs.json) carries the author's own Modrinth CDN link, fetched only on an explicit click โ€” the way a launcher does it โ€” with the pack's project page one button away.

Three guards, because the result is a file the game will later load:

  • Host allowlist โ€” https and cdn.modrinth.com only, checked at manifest load and at download time, including across redirects.
  • Size cap โ€” anything materially larger than the manifest says is abandoned rather than written.
  • SHA-512 โ€” computed while streaming and compared to the manifest; a mismatch deletes the file.

The zip lands as <name>.part and is moved into place only once it verifies, so an interrupted download can never leave Iris a half-written pack.

The manifest is generated, not hand-typed โ€” scripts/shaders/fetch-packs.py resolves each pinned build against the Modrinth API. It is read off the classpath rather than through the resource manager, because a resource pack able to override it could point the download button anywhere.

The previews

Ten frames โ€” nine packs and the vanilla control โ€” all of the same carriage at the same coordinates, the same camera angle and the same hour, so the column compares shader packs rather than comparing screenshots. They are captured by a -PshaderPreview mode on the existing shader-compat sweep harness; the pipeline and its traps are written up in docs/shaders/menu-previews.md.

Performance tiers and ordering are curated

The performance tier shown for each pack, and the Most-vanilla / Mood / Author-Rec orderings, are editorial judgements, not benchmarks. Measuring performance from the capture run does not work: that client is frame-capped, so all nine packs render within ten frames of each other. A real figure needs an uncapped frame-time harness, which does not exist yet. All four rankings live in one table in scripts/shaders/fetch-packs.py.

Related

โš ๏ธ **GitHub.com Fallback** โš ๏ธ