feat: 1.1.1.4 GUI bootstrap-Inno installer + standalone offline

- Installer.java: Swing dark Bootstrap (bg 0c0c12, accent e94560) Inno wizard (sidebar steps, Welcome->Dir->Progress->Finish), JRE + meta download via /launcher/file, offline via embedded /offline.zip + appended ZIP + adjacent fallback, shortcut/uninstall
- pom: hotfix 4, launch4j 2 exe ZernMC-Online/Offline-Setup-1.1.1.4.exe (icon, versionInfo, header gui, jar shaded), offline.zip resource
- server/main.py: Content-Disposition attachment filename for online/offline, BUILDS_DIR absolute
- Builds: Online 6.3M (downloads), Offline 103M (standalone embedded 98M zip), both signed, site headers fixed
This commit is contained in:
SashegDev
2026-09-01 14:14:30 +00:00
parent 1900db3caf
commit b864e17921
4 changed files with 518 additions and 4 deletions
+9 -3
View File
@@ -1835,7 +1835,9 @@ async def download_online_setup(request: Request):
"""Download online Go installer (5.8M, STANDALONE EXE without bundled JRE)"""
p = _find_latest_setup("ZernMC-Online-Setup-*.exe")
if p and p.exists():
return await send_file_async(p, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp = await send_file_async(p, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp.headers["Content-Disposition"] = f'attachment; filename="{p.name}"'
return resp
raise HTTPException(404, "Online installer not found")
@app.get("/launcher/download/offline-setup")
@@ -1843,11 +1845,15 @@ async def download_offline_setup(request: Request):
"""Download offline Go installer (STANDALONE EXE with embedded build, ~100M)"""
p = _find_latest_setup("ZernMC-Offline-Setup-*.exe")
if p and p.exists():
return await send_file_async(p, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp = await send_file_async(p, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp.headers["Content-Disposition"] = f'attachment; filename="{p.name}"'
return resp
# fallback: try legacy offline zip embed name without -Setup
p2 = _find_latest_setup("ZernMC-Offline-*.exe")
if p2 and p2.exists():
return await send_file_async(p2, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp = await send_file_async(p2, request, content_type="application/vnd.microsoft.portable-executable", cache=True)
resp.headers["Content-Disposition"] = f'attachment; filename="{p2.name}"'
return resp
raise HTTPException(404, "Offline installer not found")
@app.get("/launcher/download/zip/{filename}")