Discord server was DMCA'd. All Discord links replaced with:
- Community Chat (Stoat): chat.sanhost.net
- Telegram Channel: @hf2p_og
- Telegram Group: @sanhostnet
Launcher UI: added community links on main screen, renamed
Discord nav to Community Chat, updated popup modal.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the raw textarea script editor with a structured form for Java
wrapper configuration. Users now manage two lists (JVM flags to strip,
args to inject with server/always condition) instead of editing bash/batch
scripts directly. Scripts are generated at launch time from the structured
config. Includes collapsible script preview for power users.
- Add Send Logs button for one-click log submission to support
- Fix Intel Arc Graphics (Meteor Lake/Lunar Lake) on bus 00 being
classified as discrete GPU instead of integrated
Collects launcher logs, game client logs, and config snapshot into a ZIP
file and uploads to auth server. Shows submission ID for sharing with
support. Includes i18n for all 11 locales.
- Auto-kill stalled HytaleClient/java processes before launch and repair
(cross-platform: Windows taskkill+PowerShell, macOS/Linux pkill)
- Remove HytaleServer.aot before launch to prevent incompatible AOT cache
causing fastutil ClassNotFoundException on singleplayer
- safeRemoveDirectory auto-kills processes on EPERM/EBUSY before retry
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Added detailed steps to set up a free Hytale server via play.hosting in both README files. Updated outdated URLs for the F2P Launcher to the new repository location. Improved clarity in self-hosted setup sections.
- server/start.sh: Linux/macOS starter with auto-download, auto-update,
F2P launcher detection (game files + bundled JRE), and token fetch
- server/start.bat: Windows equivalent using PowerShell for JSON/UUID
- server/README.md: Beginner-friendly guide with playit.gg networking
- Remove obsolete server_scripts_2.zip
Scripts auto-detect F2P launcher install (including custom installPath
from config.json), copy game files locally if available, download
missing files (HytaleServer.jar, Assets.zip, dualauth-agent.jar),
and check for updates on every launch via ETag/GitHub releases API.
- Rename ar-AR to ar-SA (valid BCP 47 code for Saudi Arabia)
- Fix missing dot in CSS selector: .news-section .news-header
- Add trailing newline to ar-SA.json
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Agent auto-update: check GitHub releases API for new versions, download
only when update available, track version in .version file
- Add dl1.htdwnldsan.top as backup-2 mirror in patches config sources
- Add dl1.htdwnldsan.top as primary non-Cloudflare mirror
- Graceful fallback: use existing agent if update check or download fails
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Users in Russia/Ukraine where Cloudflare IPs are blocked can now
download game files via htdwnldsan.top (direct VPS → MEGA redirect).
Both manifest fetch and archive downloads try mirrors automatically
on ETIMEDOUT/ECONNREFUSED errors.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Players were losing character data (inventory, armor, backpack) after
each launcher update because config.json corruption wiped the UUID
mapping. Same username, new UUID = server treats as new player.
Fix: UUIDs now stored in separate uuid-store.json that saveConfig()
can never touch. Added safety check to refuse destructive writes
when config file exists but loads empty. Includes 28 regression tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
6-step fallback: auth.sanasol.ws → htdwnldsan.top → DNS TXT via DoH → disk cache → hardcoded URL. Practically unkillable by DMCA.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GitHub repo amiayweb/Hytale-F2P was DMCA'd. Updated Discord RPC link,
download page URL, and homepage to point to Forgejo instance.
Auto-update already pointed to git.sanhost.net (no change needed).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Launcher now fetches patches base URL from /api/patches-config endpoint
instead of using hardcoded domain. URL cached for 5 minutes, no fallback
to hardcoded domain - requires auth server connection or cached URL.
Enables instant CDN switching without launcher updates.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
JAVA_TOOL_OPTIONS -javaagent path was not quoted, causing JVM to
truncate at first space. Affects all users with spaces in install
path (e.g. "Hytale F2P Launcher").
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fix pre-release downloads failing with "unexpected EOF" by validating
cached PWR file sizes against manifest expected sizes. Previously only
checked > 1MB which accepted truncated files. Also update Discord
invite link to new server across all files.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The actual update URL is resolved dynamically via Forgejo API
in _resolveUpdateUrl() before each update check.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Switch auto-update from GitHub to Forgejo (generic provider)
- Dynamically resolve latest release URL via Forgejo API
- Add pacman target to Linux builds
- Hide direct upload URL in repository secret
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add pacman target to electron-builder Linux build
- Upload .pacman packages to release
- FORGEJO_UPLOAD now uses repository secret
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move FORGEJO_UPLOAD URL from hardcoded value to ${{ secrets.FORGEJO_UPLOAD_URL }}
to avoid exposing server IP when repo goes public.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- FORGEJO_UPLOAD now uses http://208.69.78.130:3001 (plain HTTP direct to Forgejo)
- Removed -sk flags and Host headers (not needed for plain HTTP)
- Added --max-time 600 for large file uploads
- Cloudflare 100MB limit and Traefik HTTP/2 stream errors both bypassed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without Host header, Traefik routes direct IP requests to the
default backend (hytale-auth) instead of Forgejo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
ELECTRON_BUILDER_SKIP_NATIVE_REBUILD env var not recognized by
electron-builder 26.6.0. Use --config.npmRebuild=false CLI flag
to skip register-scheme native module rebuild.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Cloudflare runners can't reach direct IP. Split into two env vars:
- FORGEJO_API (domain) for release creation and ID lookups
- FORGEJO_UPLOAD (direct IP) for large file uploads >100MB
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use direct server IP for Forgejo API calls to avoid Cloudflare
proxy rejecting large file uploads (413 Payload Too Large).
macOS DMG/ZIP artifacts are ~350MB each.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Skip native module rebuild for Windows (register-scheme can't cross-compile)
- ELECTRON_BUILDER_SKIP_NATIVE_REBUILD=true for Windows builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove upload-artifact/download-artifact (not supported on Forgejo)
- Each build job uploads directly to release via API
- Add `rpm` package to Linux build dependencies
- Remove separate release job, replaced by create-release + per-job upload
- Remove arch build job entirely
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Windows build cross-compiles from ubuntu-latest using Wine
- Arch build disabled (commented out)
- Release action switched to actions/forgejo-release@v2
- Removed arch artifacts from release
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>