Commit Graph
5 Commits
  • Security page, admin quick controls, and whitelist reload self-healing
    - 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>
  • Whitelist by offline UUID: write whitelist.json directly, not 'whitelist add'
    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>
  • Fix blank TPS: read tick timing from vanilla 'tick query' instead of spark
    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>
  • Allow beta-typed Modrinth builds for EasyAuth (easyauth:beta)
    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>
  • Minecraft 26.2 Fabric server stack with CraftDeck management panel
    - docker-compose: itzg/minecraft-server (Fabric, offline mode, whitelist
      enforced, Modrinth-managed mods), itzg/mc-backup sidecar, custom dashboard
    - Gated auth for offline mode: approve username -> whitelisted with a short
      registration window -> EasyAuth /register + /login; auto-revoke on expiry
    - CraftDeck panel (Next.js 16, zero native deps): live console (SSE), players
      & stats, lag diagnostics (server TPS vs player ping via spark), performance
      graphs, Modrinth mod search/manager, backups & restore, sandboxed file
      browser/editor, .env config editor with compose apply, cron schedules,
      Discord alerts, scrypt-hashed panel login
    - scripts/setup.sh generates secrets; docs/ covers auth, mods, updating,
      backups, networking (Tailscale), troubleshooting
    
    Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>