Commit Graph

173 Commits

Author SHA1 Message Date
SashegDev b4bd76ed35 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 943211314e crash dialog: auto-close 1.2s after successful send to server 2026-08-19 21:21:49 +00:00
SashegDev 566559d639 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 2d6355ea57 v1.0.16.18 — accordion sidebar pack lists, versionInfo copyright/trademarks 2026-08-19 17:57:36 +00:00
SashegDev 3a16e56000 v1.0.16.17 — re-embed bootstrap jar, switch exe signing to jsign 2026-08-19 14:49:55 +00:00
sasheg ce61b111e9 v1.0.16.16 — exe в корне, иконка для GUI, чистка bin 2026-08-19 12:47:56 +00:00
SashegDev 46d5211150 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 fdd4e24e3c 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 cdc81e4e8d 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 4f5bd5387a 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 dcd5e91ebe 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 553aad41f9 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 f706e8393c 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 26e0280d84 v1.0.15.2 — fix launcher 'no packs available' (NPE uri is null in sendBounded) 2026-08-13 14:09:22 +00:00
SashegDev 421fb04ab5 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 7d30caba74 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 a87a871e43 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 c51d441743 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 7235017493 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 4acbdedf70 v1.0.14.2 — fix JFX hang (ForkJoinPool), retry logic for connection reset, library logging 2026-07-30 16:09:44 +00:00
SashegDev e962adbb58 v1.0.14.1 — bump hotfix, proxy allows all Mojang CDN domains 2026-07-30 15:37:43 +00:00
SashegDev 22b056614b 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 6024df5093 fix: inject real version into UI, add timeout to FabricInstaller process 2026-07-30 15:30:32 +00:00
SashegDev 1307d10e81 v1.0.14 — bridge release for older launchers 2026-07-30 15:17:38 +00:00
SashegDev cffa6519ca v1.0.13.1 — pack download stability, proxy for MC/Forge downloads, build.version priority 2026-07-30 14:31:13 +00:00
SashegDev ce8cf32ddd fix: preserve username case in register/login validators 2026-07-30 13:03:48 +00:00
SashegDev 72c58aced3 feat: include hotfix in manifest and build.version (1.0.13.0) 2026-07-30 11:52:40 +00:00
SashegDev ffc491c333 chore: ignore todo.txt 2026-07-30 11:29:48 +00:00
SashegDev 2846e3edd1 feat: auto-detect new ZIP archives in builds/ + fix exe download path 2026-07-30 11:29:45 +00:00
SashegDev 7ae81b3c91 chore: remove accidental todo.txt 2026-07-30 11:28:33 +00:00
SashegDev 375b98586d feat: robust update with .update suffix + bootstrap self-update 2026-07-30 11:28:30 +00:00
SashegDev 348969e79c chore: remove accidental todo.txt 2026-07-30 11:12:11 +00:00
SashegDev 15532bf341 fix: support 4-part Windows version in version comparison 2026-07-30 11:12:08 +00:00
SashegDev 424cf9bc25 chore: bump hotfix to 1 2026-07-30 11:06:49 +00:00
SashegDev ef7d5edef3 feat: add hotfix property for Windows 4-part version 2026-07-30 11:05:10 +00:00
SashegDev d9c527b8db feat: login/register mode toggle with wave background animation 2026-07-30 10:25:26 +00:00
SashegDev f32ac1ef98 bump: version 1.0.11 → 1.0.12 2026-07-30 10:07:35 +00:00
SashegDev 6763d0144a feat: Discord-style login page redesign 2026-07-30 10:05:53 +00:00
SashegDev 37ec2bc342 chore: add .flattened-pom.xml to .gitignore 2026-07-29 06:16:46 +00:00
SashegDev 6a0c59f032 refactor: use ${revision} for CI-friendly version management 2026-07-29 06:16:32 +00:00
SashegDev 599e9d5e67 bump: version 1.0.10 → 1.0.11, fix Forge/NeoForge launch 2026-07-29 06:15:26 +00:00
SashegDev 929d5a4ad6 debug: print classpath entries to identify _1._20._1.forge module source 2026-07-14 11:02:28 +00:00
SashegDev 9a853a6134 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 6368c32a83 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 d7ba06f24c 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 dcb3412a58 bump: version 1.0.9 → 1.0.10 2026-07-14 07:50:54 +00:00
SashegDev c2150aa7d2 fix: check version jar manifest before assuming correct module - force overwrite vanilla jar with SRG jar if missing Automatic-Module-Name: minecraft - broaden SRG client jar search to multiple paths 2026-07-14 07:46:37 +00:00
SashegDev 03a1a1533e fix: use SRG client jar for securejarhandler minecraft module
ensureVersionJarForForge() was copying the vanilla Mojang jar
(obfuscated class names) to versions/<forgeId>/<forgeId>.jar.
securejarhandler creates the minecraft module from this jar, but
obfuscated names dont match SRG names like PreparableReloadListener.
The package is claimed by the module but class is not found → crash.

Now prioritizes the SRG-mapped client jar from Forge libraries
(client-*-srg.jar) which has Automatic-Module-Name: minecraft and
correct SRG class names. Falls back to vanilla jar only if SRG jar
is not found.

Also removed redundant -DlibraryDirectory already in manifest args.
2026-07-14 07:27:48 +00:00
SashegDev 03c908c80c fix: Forge split-package ResolutionException - remove ignoreList manipulation and call ensureVersionJarForForge 2026-07-13 22:07:31 +00:00
SashegDev b9bd642605 refactor: deduplicate classpath, improve forge jar detection, clean up comments 2026-07-13 20:29:53 +00:00