Feature Versions Page - bh679/dungeon-train-mc GitHub Wiki

Versions page β€” see what you're missing, on your launcher

Since: v0.858.0 β€” PR #1381

Click the Dungeon Train v… label in the top-left of the title screen (or the pause menu) to open the Versions page. It answers three questions the old label couldn't: how far behind am I, is the version my launcher offers actually the newest, and what changed. It also opens by itself at the title screen, once per session, when the launcher's listing says the build is behind.

The page

Element Behaviour
Header The Dungeon Train wordmark at 60 % of the menu size, with the newest version present on the page in the main menu's yellow splash slot (tilted, pulsing, 1.6Γ— splash size).
Row 1 β€” installed One line: You are on v0.800.0 β€” 54 versions behind (25 releases). The headline number is the MINOR-version gap (the number players see in version strings); the bracket is how many listed uploads sit between the two. Other states: up to date, ahead of every published release (dev builds), checking the latest release….
Row 2 β€” your launcher (60 %) CurseForge latest is v0.828.0 / CurseForge is 26 versions behind Modrinth (8 releases) β€” CurseForge is delaying Dungeon Train releases. On a launcher that is up to date the detail reads The newest release on your launcher.
Row 2 β€” companion mods (40 %) Companion mods / All 5 up to date or N updates available β€” AIN, AIS, PMOB, ECP, TE checked against their newest Modrinth build. Selecting it lists each mod's installed vs newest version with the notes a lagging one is missing.
Row 3 β€” other launcher Shown only when it is ahead: Modrinth latest is v0.854.0 / Not yet available on CurseForge.
Notes box The selected row's release notes. For a newer release it is cumulative β€” every version between the installed build and it, newest first, each under a v… heading. A β€’ button in the box's top-right opens the notes fullscreen with a tab per version (arrows scroll the tab strip when there are more than fit).
Tag chips (v0.861.0) One row above the notes box: All, then a chip per tag that has at least one change in the notes shown β€” Editor (5), New Feature (4) … β€” most to least, with < > arrows paging the row when they overflow. Click chips to filter (any selected tag matches; All clears); versions with nothing matching fold away. In fullscreen the chips describe only the selected tab's version, and a version the filter empties keeps its tab with Nothing with those tags in this version.
Get update on … Opens the launcher's Dungeon Train page (from LauncherDetector).

The newest version present is selected on open, so the page answers "what did I miss" before a click. Rows that could not be read say Listing unavailable β€” click to retry.

Where the data comes from

  • Modrinth β€” the modpack's version list (/v2/project/bEFyz3ji/version, newest 200) and each companion mod's list, keyless. Modrinth receives every release including the auto-release cascade ticks, so it is the yardstick every count is measured against; its curated changelog field is the release-notes text for every version on the page.
  • CurseForge β€” the keyless api.cfwidget.com mirror of the modpack project (the official API needs a key that can't ship in a client jar). It lags the real listing by up to ~30 min, well inside CurseForge's own review lag, which is the thing the page reports. No changelog β€” CurseForge rows borrow Modrinth's text for the same version.
  • Installed β€” the build-baked VersionInfo.VERSION; companion versions from ModList.
  • Changelog ledger (v0.861.0) β€” .github/release-notes/changelog.json from raw main, once per session (~180 KB gzipped). It is the source the release notes are rendered from and the only place the tags live; for every release it knows, the notes are built from it (title, tag line, summary, bullets) rather than from Modrinth's markdown. Auto-release cascade ticks have no curated entry and keep their Modrinth text (hidden while a filter is on β€” nothing to match). If the fetch fails the page behaves exactly as before: Modrinth text, no chips.

All fetches are anonymous GETs on a daemon thread, fired once per session from the title screen and retried on the next open after a failure. They run regardless of the network-consent toggle, the same precedent as the official-links overlay.

Launcher detection

LauncherDetector (path components, then minecraftinstance.json β†’ CurseForge / modrinth.index.json β†’ Modrinth; anything else counts as Modrinth). The page compares against the modpack listings whichever way the mod was installed β€” pack versions share the mod's numbering.

Dev seam

./gradlew runClient -PmockInstalledVersion=0.800.0

fakes only the installed version (nothing else in the mod reads it), so the behind state, counts, cumulative notes, boot prompt and header can be seen against real listings on a dev build that is otherwise ahead of everything published. Drop a minecraftinstance.json into run/ to see the CurseForge layout.

./gradlew runClient -PchangelogUrl=https://raw.githubusercontent.com/bh679/dungeon-train-mc/<branch>/.github/release-notes/changelog.json

points the ledger fetch at an unmerged branch β€” needed to see a ledger change (new tags, new entries) on the page before it lands on main.

Code

client/version/compare/ β€” VersionCompareScreen (page), VersionRowButton, ChangelogFullscreenScreen, NotesSection, VersionCompareBootPrompt (auto-open), VersionCompareState (session cache), PackVersionFetcher, VersionCatalogParser (unit-tested), PlatformVersions / ReleaseEntry / FullSemver (counting), SiblingMod, ChangelogLines (markdown β†’ coloured lines), InstalledVersion (mock seam). The old VersionStatusButton now opens the page instead of a bare launcher link.

⚠️ **GitHub.com Fallback** ⚠️