Skip to content

Launcher overhaul: FlatLaf UI, managed runtimes, per-instance settings, and package installer#548

Draft
Magi1053 wants to merge 22 commits into
SKCraft:masterfrom
Magi1053:feature/launcher-overhaul
Draft

Launcher overhaul: FlatLaf UI, managed runtimes, per-instance settings, and package installer#548
Magi1053 wants to merge 22 commits into
SKCraft:masterfrom
Magi1053:feature/launcher-overhaul

Conversation

@Magi1053

@Magi1053 Magi1053 commented Jun 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Major launcher refresh on feature/launcher-overhaul — modern FlatLaf UI, per-instance JVM/runtime config, managed Java runtimes, native embedded news, improved auth/accounts, and cross-platform packaging.

  • UI overhaul — Drop launcher-fancy/Substance; integrate FlatLaf with light/dark/system themes (live switch). MigLayout main window, primary launch button, Enter-to-launch. Instance list shows pack icons, status rows, and shared table chrome; remember last launched instance.
  • Game console — Deferred show until client window ready (or launch fails), bounded ring buffer + batched Document updates, level-colored output, optional maximize-on-ready.
  • Per-instance JVM settings — Memory, JVM args, and Java runtime selection move from global config to each instance/modpack.
  • Managed Game Runtime — Download/cache required Java runtimes from Mojang manifest before launch. Creator tools can pin a managed runtime. Closes Add automatic download & setup of Java runtimes  #539.
  • Accounts — Microsoft device-code sign-in, refreshed account picker, offline play profiles with stable UUIDs, and an account switcher / manage-accounts UI that persists the active account.
  • News panel — Platform-native embedded browser (SWT/WebView2 on Windows/Linux, WKWebView on macOS) replacing OpenJFX; browser runtime resolved outside the fat jar. Per-instance newsUrl override in manifests and creator tools; theme sync via preferred color scheme.
  • Launch / download hardening — Enforce system RAM limits, verify modpack updates before launch, share HTTP client/download threads, and harden runtime discovery across creator and launcher.
  • Modpack/install improvements — Memory requirement warnings; feature exclude patterns control install conditions; preserve creator-defined optional feature order; ProcessorEntry respects cache before queueing processor tasks; reload instances when game key changes on save.
  • Cross-platform packaging — jlink/jpackage app images via InstallerPackager: Windows NSIS Setup.exe (+ WebView2), Linux AppImage/tar/deb (Docker-based Linux packaging from any host), macOS dmg. Bootstrap resolves install-dir data, migrates legacy Documents data, logs to disk, checks updates before launch.
  • Build upgrade — Java 17 toolchain, Gradle 8.14, GradleUp shadow plugin. Fixes Insubstantial not available #546.
  • Misc — Ignore missing official-launcher registry key on Windows (no spurious stack traces); Windows AppUserModelID handoff to the launcher JVM.

Scope: 22 commits, 212 files, ~+15.6k / −2.2k lines.

Test plan

  • Build on Java 17: gradlew.bat build
  • Launch launcher — verify FlatLaf themes (light/dark/system), dialog consistency, instance icons/status rows
  • Launch / re-open — last launched instance is selected; Enter launches from the list
  • Create/edit instance — confirm memory, JVM args, and runtime are per-instance, not global
  • Launch modpack needing non-system Java — managed runtime downloads and caches correctly
  • Launch modpack with memory requirement above available RAM — insufficient-memory warning shown
  • Sign in via Microsoft device-code; switch/manage accounts including offline profiles
  • Open news panel — default URL and per-instance newsUrl override render in native browser; theme follows launcher
  • Launch game — console stays hidden until client ready (or shows on failure); log levels colored; buffer stays bounded
  • Save instance options with changed game key — instance list reloads
  • Creator tools — optional feature reordering preserved; managed runtime and newsUrl fields work in manifest editor
  • Feature exclude patterns — install conditions behave as expected
  • Package on each host OS (or Docker for Linux): Windows Setup.exe, Linux AppImage/deb, macOS dmg install and run
  • Windows without official Minecraft launcher installed — no registry warning spam
  • Upgrade path from older launcher config — existing instances/settings migrate cleanly

@Magi1053
Magi1053 force-pushed the feature/launcher-overhaul branch 2 times, most recently from 8315c99 to a2e3c15 Compare June 10, 2026 03:24
@Magi1053
Magi1053 marked this pull request as ready for review June 10, 2026 03:25
@Magi1053
Magi1053 marked this pull request as draft June 10, 2026 03:26
Magi1053 added 2 commits June 10, 2026 10:42
Migrate to Gradle 8.14 and the GradleUp shadow plugin. Raise the Java
toolchain to 17 and resolve the fancy launcher Substance dependency via
the CottonMC fork mirror.

Fixes SKCraft#546
Per-instance settings now own JVM args, memory limits, and runtime
selection so each modpack can be tuned independently.
@Magi1053
Magi1053 force-pushed the feature/launcher-overhaul branch from a2e3c15 to 588c270 Compare June 10, 2026 20:44
Magi1053 added 12 commits June 10, 2026 15:48
Download and cache required Java runtimes per instance before launch.
Creator tools can pin a managed runtime in the modpack builder.

Closes SKCraft#539
…artup

Introduce jlink/jpackage-based app images and platform package tasks
(Windows NSIS Setup.exe, Linux AppImage/tar/deb, macOS dmg) driven by
InstallerPackager, with a root `package` task that delegates to the host OS.
Bootstrap now resolves data from the install directory on Windows, migrates
legacy Documents data, logs to disk, checks for updates before launch, and
drops portable mode in favor of a single configured data directory.
Read newsUrl from each manifest entry so modpacks can override the launcher default news page.
Creator tools expose the field in the manifest entry editor.
Skip optional registry lookup instead of logging a warning stack trace when the official launcher is not installed.
@Magi1053
Magi1053 force-pushed the feature/launcher-overhaul branch from 588c270 to 0ce8e57 Compare June 10, 2026 20:49
Remove the launcher-fancy module and its custom skin/L&F stack in favor of FlatLaf (FlatMacLight/FlatMacDark) integrated into the main launcher.
- Add persisted themeMode (light, dark, system) with migration from the legacy darkTheme flag
- Expose theme picker in Configuration > Advanced and apply changes live
- Restyle dialogs with FlatLaf button classes and drop manual opaqueness hacks
- Rework main window layout: MigLayout side-by-side panels instead of JSplitPane, primary launch button, Enter-to-launch on instance list
- Sync news WebView with launcher theme via preferred color scheme
- Theme-aware link colors and panel borders
@Magi1053
Magi1053 force-pushed the feature/launcher-overhaul branch from 0ce8e57 to a72da99 Compare June 10, 2026 20:58
Magi1053 added 7 commits July 10, 2026 18:55
Drop JavaFX WebView and embed news via SWT/WebView2 on Windows/Linux
and WKWebView on macOS. Browser runtime resolves outside the fat jar via
BrowserBootstrap and SwtRuntimeResolver.
Bundle WebView2 on Windows, SWT natives, and per-OS data directories in
the bootstrap installer. Add Docker-based Linux packaging from any host,
hand off Windows AppUserModelID to the launcher JVM, and extend
InstallerPackager for platform-specific naming and runtime assembly.
…lors

Stream process output through a ring buffer and batched Document updates.
Delay the game log until the client window is ready (or launch fails),
optionally maximize on ready, and keep launcher console history in a LogBuffer.
Show pack icons and status text in larger rows, wrap the list and news
pane in shared table borders, and clarify instance menu actions.
Support offline play profiles with stable UUIDs, persist the active
account, and let users switch or manage accounts from the main frame.
Enforce system RAM limits, verify modpack updates before launch, share HTTP client/download threads, and harden runtime discovery across creator and launcher.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Insubstantial not available

1 participant