- RCON client retries once on a fresh connection after stale-socket
timeouts (panel idle overnight held dead sockets, so 'whitelist
reload' silently failed and approvals needed a server restart)
- Auth watcher verifies pending players against the LIVE whitelist every
5s and re-writes/reloads if the server missed it, refunding lost
window time
- Log watcher records blocked join attempts (name + IP) with rate-
limited notifications — scanner bots are now visible in the panel
- New Security page: blocked-attempt log with one-click IP ban, banned
players/IPs management, kick-everyone lockdown
- Player detail modal: ban, op/deop, gamemode switching
- Overview quick controls: time/weather/difficulty, gamerule toggles
(keepInventory, mobGriefing, PvP...), broadcast box
- Settings toggles for blocked-attempt notifications (panel + Discord)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The vanilla command resolves never-seen names through Mojang's API, so a
premium account's UUID gets whitelisted instead of the offline UUID the
player actually connects with — the exact 'You are not white-listed'
loop hit on first join. The panel now computes the offline UUID
(md5 OfflinePlayer:<name>, UUID v3 — verified against known vectors),
writes whitelist.json itself, and issues 'whitelist reload'.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
spark sends command output asynchronously, so its RCON responses are
empty and the sampler recorded null TPS/MSPT. Use the synchronous
vanilla 'tick query' as the primary source (treating paused/frozen idle
servers as healthy), keep spark as fallback, and route spark ping /
healthreport through the server console (mc-send-to-console) with the
log watcher capturing ping lines. Lag endpoint now falls back to the
freshest recorded ping sample.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
EasyAuth publishes its 26.x builds as beta on Modrinth, and the itzg
resolver only accepts release-typed versions by default, so the mc
container failed to start. Pin easyauth:beta in the default mod list and
teach the panel's mod manager to compare entries by base slug so version
qualifiers don't break protected/duplicate checks.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>