Commit Graph

177 Commits

Author SHA1 Message Date
SashegDev 7068558137 launcher: fix CDN Connection Reset — geo-proxy fallback + atomic downloads, v1.1.0.0
- downloadFileWithSmartProxy/getWithSmartProxy now rotate the proxy request
  across api.zern.cc -> api.zernmc.ru -> api.zernmc.online -> api.pl.zern.cc
  -> api.swe.zern.cc instead of retrying the same single proxy base, so a
  region-specific CDN connection reset no longer burns every retry.
- DomainSelector registers every candidate/mirror domain as a fallback proxy
  base at startup; mirrors list stays in sync with LAUNCHER_MIRRORS.
- Downloads write to <target>.part and are moved into place atomically on
  success, so an interrupted transfer can no longer leave a corrupt partial
  file that later 'file exists' checks treat as installed.
- Bump version to 1.1.0.0 (revision 1.1.0, hotfix 0).
2026-08-20 10:07:37 +00:00
SashegDev 9cfd743e36 site: add launcher showcase — auto-rotating non-interactive UI tour 2026-08-20 09:41:38 +00:00
SashegDev 3755411954 site: add RU/EN language toggle with full i18n on landing 2026-08-20 09:31:16 +00:00
SashegDev aaecf7e395 site: add server section, highlights carousel, OBT/Season content
- server status cards (online/players/version) via /api/status mcstatus ping
- highlights carousel ported from old site (/highlights/ static media)
- OBT (war in Zarya, open beta event server) + Season (Prologue, Create:
  Aeronautics, year-long) sections
- nav updated, sections renumbered 01-06
2026-08-20 09:15:14 +00:00
SashegDev 1aefca32f2 site: dawn.gg-style landing at root + port /skin/* for TG bot
- serve new launcher landing site (zern.cc root -> launcher server 1582)
- static assets mounted at /css /js /img
- port GET/HEAD /skin/{filename} from old site with identical headers
- exempt /skin/* + site assets from rate-limit and cache middleware
- Caddy: root domains -> 1582, old site preserved at legacy.zernmc.*
2026-08-20 08:26:00 +00:00
SashegDev 661411553c crash dialog: auto-close 1.2s after successful send to server 2026-08-19 21:21:49 +00:00
SashegDev 96bb8629d3 v1.0.16.21 — prefetch Forge/NeoForge libraries through smart proxy; UI polish (no text selection, log viewer copy/open, locale in settings, window icon, adaptive pack list) 2026-08-19 19:54:52 +00:00
SashegDev 1561320c4e v1.0.16.18 — accordion sidebar pack lists, versionInfo copyright/trademarks 2026-08-19 17:57:36 +00:00
SashegDev 53c00a6414 v1.0.16.17 — re-embed bootstrap jar, switch exe signing to jsign 2026-08-19 14:49:55 +00:00
SashegDev ee7f3812b6 v1.0.16.16 — exe в корне, иконка для GUI, чистка bin 2026-08-19 12:47:56 +00:00
SashegDev 20bb8233b9 v1.0.16.15 — codesign: self-signed Zern.cc exe signature (osslsigncode, digicert ts) + cli in bin layout + cli-jfx variant 2026-08-19 12:15:27 +00:00
SashegDev c86f24bc5b v1.0.16.14 — rotatsionny log: latest.log + .log.gz arkhiv (Minecraft-style), no limit, legacy launcher.log removal 2026-08-18 22:32:14 +00:00
SashegDev a2073044e9 v1.0.16.13 — TSPU/SNI-obkhod: domain selection at login + dynamic mirrors
- add DomainSelector: probe every API candidate at launcher startup, pick
  fastest reachable (primary api.zern.cc, legacy .ru/.online, geo pl/swe);
  integrate into CLI start and JFX network init
- Config.setServerUrl() + persist chosen domain in launcher.properties
- ZHttpClient: default BASE_URL and ZERN_SERVER health-check follow the
  selected domain (runtime failover instead of hardcoded api.zernmc.ru)
- server: LAUNCHER_MIRRORS main=api.zern.cc (primary), legacy .ru/.online,
  geo-pl api.pl.zern.cc, geo-swe api.swe.zern.cc; /launcher/mirrors exposes them
- diag: check all TLD+geo API hosts (api.{pl,ru,swe}.zern.cc, .ru, .online)
  for DNS/TCP/HTTP, known server IPs for all 4 geo nodes
- reverse-proxy geo boxes (pl, swe) -> main:1582 so clients bypass TSPU via
  an unblocked SNI; ru left as-is (VLESS VPN box, not proxying API)
2026-08-18 22:19:55 +00:00
SashegDev ecb49e1eb7 v1.0.16.3 — fix install hang at 0% (JDK request timeout not enforced on stalled body, cancel via sendAsync; proxy fallback on timeout), verify client.jar integrity, mod install via smart proxy 2026-08-15 09:31:23 +00:00
SashegDev a815d685d3 v1.0.16.2 — fix NeoForge/Forge install (bundled JRE for installers, visible progress in JFX UI, skip existing vanilla files), hide zernmc-cli.exe from users 2026-08-15 07:29:43 +00:00
SashegDev 21cd30c1c3 v1.0.16.0 — fix Zern-OBT asset index (1.20.1->5), JavaFX 23->23.0.1 (WebKit WebSocket fix), drop embedded JavaFX from jar (scope=provided), deliver JavaFX 23.0.1 via incremental update, JFXBridge for safe CLI fallback 2026-08-14 07:29:23 +00:00
SashegDev 77fd97ad24 v1.0.15.3 — non-blocking logger (fix install freeze), URL-encode pack file paths, news ordering by mtime 2026-08-13 19:56:42 +00:00
SashegDev 2f78acf526 v1.0.15.2 — fix launcher 'no packs available' (NPE uri is null in sendBounded) 2026-08-13 14:09:22 +00:00
SashegDev f857d91e4d v1.0.15.1 — fix server re-extract of launcher zips; correct Forge launch command (-cp per version.json) 2026-08-13 09:33:44 +00:00
SashegDev b6dccd67ac v1.0.15.0 — fix launcher hang on close/launch and restore Forge classpath
Hang on close (JFX freezes on exit):
- LaunchService: replace process.onExit().thenRun() — it completes on the common
  ForkJoinPool whose non-daemon workers keep the JVM alive (the v1.0.14.2 regression
  re-introduced in v1.0.14.3's sendBounded) — with a daemon watcher thread that blocks
  on process.waitFor(). Removes ForkJoinPool pinning.
- JFXLauncher: HttpServer executor now uses daemon thread factory; installThread is daemon.
- ZHttpClient: drop the non-daemon CachedThreadPool executor and restore synchronous
  client.send() with request-level timeout, undoing the v1.0.14.3 sendAsync().get() that
  submitted work to a non-daemon pool.

Hang / no game launch (Forge/NeoForge):
- LaunchCommandBuilder: remove the self-invented -DlegacyClassPath injection. Modern
  Forge derives the MC-BOOTSTRAP layer from the module path / the ${classpath}
  substitution that AstralRinth and the 1.0.13 launcher use; a redundant -DlegacyClassPath
  duplicated every library and broke the bootstrap. Now relies solely on ${classpath}
  substitution from version.json (only built when referenced by the version.json).
- update LaunchCommandBuilderTest to assert the corrected contract (no -DlegacyClassPath,
  ${classpath} substituted into -p).

Version bump to new revision (hotfix=0): revision 1.0.14 -> 1.0.15.
Build: mvn -pl launcher package -> ZernMC-win-1.0.15.0.zip, build.version=1.0.15.0.

Signed-off-by: SashegDev <gdsasheg@gmail.com>
2026-08-12 12:04:01 +00:00
SashegDev 5e9ed7ec42 v1.0.14.5 — instant proxy fallback for all downloads, server proxy retries, loader library repair
- ZHttpClient: single direct attempt per resource, then immediate retry via /proxy/download (getWithSmartProxy, downloadFileWithSmartProxy)
- getRetry() for server proxy endpoints incl. transient 502/5xx; isRetryableError classification
- MAX_FAILS_BEFORE_PROXY 1 -> service switches to proxy-first after first failure
- detectService: files.minecraftforge.net routed through proxy
- repairMissingLibraries/repairLibrariesFromJson: re-download missing libs (incl. maven-coordinates format with -v2 fallback)
- JFX: force Mojang service check synchronously before install if network init not finished
- Forge/NeoForge: installer + downloads via ZHttpClient (no more bare HttpClient without request timeout), NeoForge subprocess 10-min timeout
- Fabric: pre-download loader libs via proxy, repair after install
2026-08-01 11:52:23 +00:00
SashegDev be41928378 v1.0.14.4 — enable adaptive proxy health monitoring in JFX, show per-service direct/proxy status in settings UI 2026-07-31 12:04:08 +00:00
SashegDev 1685b74389 v1.0.14.3 — route Mojang version data via server proxy, hard-bounded HTTP sends, Forge process timeout 2026-07-31 11:51:21 +00:00
SashegDev e89b37190b v1.0.14.2 — fix JFX hang (ForkJoinPool), retry logic for connection reset, library logging 2026-07-30 16:09:44 +00:00
SashegDev 8888e9d977 v1.0.14.1 — bump hotfix, proxy allows all Mojang CDN domains 2026-07-30 15:37:43 +00:00
SashegDev 7881ee64b0 fix: add missing Mojang CDN domains (piston-data, libraries.minecraft.net, maven repos) to proxy allow list, increase proxy timeout to 300s 2026-07-30 15:36:06 +00:00
SashegDev fd47fa2b0b fix: inject real version into UI, add timeout to FabricInstaller process 2026-07-30 15:30:32 +00:00
SashegDev f4edf5962b v1.0.14 — bridge release for older launchers 2026-07-30 15:17:38 +00:00
SashegDev f180663cef v1.0.13.1 — pack download stability, proxy for MC/Forge downloads, build.version priority 2026-07-30 14:31:13 +00:00
SashegDev 48fd1d2d82 fix: preserve username case in register/login validators 2026-07-30 13:03:48 +00:00
SashegDev 5d82bfda4f feat: include hotfix in manifest and build.version (1.0.13.0) 2026-07-30 11:52:40 +00:00
SashegDev 3c6c12554e chore: ignore todo.txt 2026-07-30 11:29:48 +00:00
SashegDev cebe90d5f6 feat: auto-detect new ZIP archives in builds/ + fix exe download path 2026-07-30 11:29:45 +00:00
SashegDev a86189b67e chore: remove accidental todo.txt 2026-07-30 11:28:33 +00:00
SashegDev 07da727ee6 feat: robust update with .update suffix + bootstrap self-update 2026-07-30 11:28:30 +00:00
SashegDev 7b5eac2b02 chore: remove accidental todo.txt 2026-07-30 11:12:11 +00:00
SashegDev de0dbab4c8 fix: support 4-part Windows version in version comparison 2026-07-30 11:12:08 +00:00
SashegDev b00f38d226 chore: bump hotfix to 1 2026-07-30 11:06:49 +00:00
SashegDev b29bc376a9 feat: add hotfix property for Windows 4-part version 2026-07-30 11:05:10 +00:00
SashegDev bf503d8b62 feat: login/register mode toggle with wave background animation 2026-07-30 10:25:26 +00:00
SashegDev 52386312f0 bump: version 1.0.11 → 1.0.12 2026-07-30 10:07:35 +00:00
SashegDev 0046c546df feat: Discord-style login page redesign 2026-07-30 10:05:53 +00:00
SashegDev 23b2236d7d chore: add .flattened-pom.xml to .gitignore 2026-07-29 06:16:46 +00:00
SashegDev 576425ede9 refactor: use ${revision} for CI-friendly version management 2026-07-29 06:16:32 +00:00
SashegDev 109f379abc bump: version 1.0.10 → 1.0.11, fix Forge/NeoForge launch 2026-07-29 06:15:26 +00:00
SashegDev 511c0a332d debug: print classpath entries to identify _1._20._1.forge module source 2026-07-14 11:02:28 +00:00
SashegDev b1812e270a fix: ensure version jar exists for Forge to prevent _1._20._1 module name
findVersionJar() falls back to versions/1.20.1/1.20.1.jar when the Forge
version jar doesnt exist. Filename 1.20.1.jar produces automatic module _1._20._1
which conflicts with module minecraft (split-package on net.minecraft.server).

Fix: ensureVersionJarForForge() copies vanilla jar to versions/<versionId>/
<versionId>.jar before findVersionJar() is called. Vanilla jar has
Automatic-Module-Name: minecraft so it becomes module minecraft, not _1._20._1.
2026-07-14 10:49:54 +00:00
SashegDev 2465484d18 fix: remove duplicate --width/--height for Forge - version.json already includes them via resolution_width/resolution_height placeholders 2026-07-14 10:43:43 +00:00
SashegDev 95fa3143c5 fix: rewrite Forge launch to pass version.json args directly (AstralRinth approach)
Root cause: our launcher was fighting with version.json by manually constructing
-p, -cp, --add-modules, --add-opens, -DignoreList, and -DlibraryDirectory.
AstralRinth passes version.json JVM args through with placeholder substitution,
then appends memory/GC/custom args.

Changes:
- VersionManifest: add getAllJvmArguments() and getAllGameArguments() that merge
  parent (vanilla) args with child (forge) args
- LaunchCommandBuilder.build(): rewrite Forge/NeoForge branch to parse ALL
  version.json JVM args and game args with placeholder substitution
- Removed: ensureVersionJarForForge(), findSrgClientJar(),
  filterClasspathAgainstModulePath(), manual -Djava.library.path for Forge
- Classpath: built from version.json libraries + client jar (first position)
- Memory/GC args appended AFTER version.json args (like AstralRinth)
- Fallback to manual args if version.json has no JVM/game args
2026-07-14 10:30:55 +00:00
SashegDev aa5fd1fa74 bump: version 1.0.9 → 1.0.10 2026-07-14 07:50:54 +00:00