2026-07-21 SHIPPED

Latest Release – 2026-07-21

### ๐Ÿ” Authentication & Accounts (New)<br />
WordPress login required to play – Hosting or joining a game now requires signing in with a WordPress account (JWT auth against terravox.servegame.com); players without an account are directed to sign up on the site<br />
"Stay logged in" option – Optional session persistence so returning players skip the login screen<br />
Account-tied display names – In-game name is always the player's real WordPress username, resolved server-side from the validated token and never taken from the client, preserving the account's actual capitalization. Closes a real impersonation hole: the previous register_remote_player RPC accepted any_peer, so a modified client could previously rename/impersonate any connected player by calling it directly – it's now authority-only<br />
Server-side token validation – Switched to WordPress's own wp/v2/users/me endpoint after discovering the JWT plugin's own /validate route 404s on this install; this also doubles as the source of truth for the account's real username/email<br />
Auth diagnostics logging – Dedicated server now logs each join's validation outcome (token present, WordPress result, kick reason) instead of failing silently<br />
Fix: signal-leak "already connected" error – Rejoining after a disconnect could fail validation with an engine error because a one-shot signal connection from the previous attempt was never cleaned up when it didn't fire

### ๐Ÿง Linux Export Fixes (Round 2)<br />
Fix: custom skins broken again on Linux – An earlier fix for a scene parse-error crash had accidentally deleted the [editable path="PlayerModel"] marker instead of correcting its (already-invalid) syntax, silently reintroducing the original Linux skin-dropping bug<br />
Fix: recipe book empty / nothing craftable on LinuxDirAccess directory scanning of resources/recipes/ returned zero entries on the exported Linux build; recipes now load by an explicit deterministic filename list, the same working pattern ItemData already used for items<br />
Fix: hard parse-error crash in player.tscn / remote_player.tscn – A stray invalid editable token was breaking scene parsing on every platform, not just Linux

### โšก Performance<br />
Cut a hot-path allocation in get_block()/set_block()chunk_manager.gd's block lookup (the single most-called function in the game – every collision sweep, raycast step, and mob AI check) was allocating a throwaway Dictionary on every single call; now allocation-free on the miss path

### ๐ŸŽฎ UI & Quality of Life<br />
GUI Scale slider – Added to the pause menu (75%-200%), applies live like Minecraft's GUI Scale option, persists to settings.cfg

### ๐Ÿ“ฆ Build & Release<br />
GitHub Actions export pipeline – Windows Desktop, Linux Desktop, and Linux Dedicated Server now build automatically on every push to main (or on demand), replacing manual local exports<br />
Tag-triggered GitHub Releases – Pushing a vX.Y.Z tag cuts a proper Release with raw, runnable binaries attached (not zipped) and auto-generated release notes<br />
Fix: release step failing on tag re-runsalready_exists errors when re-triggering a release for the same tag are now handled by updating the existing release in place

### Commits in this release<br />
1. Attach raw binaries to releases instead of zip archives (b48940d)<br />
2. Fix release step failing with "tag already exists" on re-run (c9b70ec)<br />
3. Add GitHub Actions workflow to auto-export Windows/Linux builds (bcc2ad1)<br />
4. Fix "already connected" error on peer_id reuse during auth validation (e1f4201)<br />
5. Add GUI scale slider to the pause menu (bcc0c84)<br />
6. Fix recipe book empty on Linux: stop scanning res:// dir at runtime (f40d64c)<br />
7. Restore Linux editable-children marker; cut a per-call alloc in get_block (ca5556d)<br />
8. Fix token validation endpoint: use wp/v2/users/me, not plugin's /validate (3c23350)<br />
9. Add server-side logging for WordPress auth validation (f15c77d)<br />
10. Add WordPress-based login gating for host/join (af0b5f7)<br />
11. Fix custom player skins not showing on Linux builds (bab913c)