Maps now sync across servers
New Config Key:
maps: true
This Feature Is in Beta. Report any Bugs in the Discord!
- All player facing messages are now editable (console exluded)
- Fixed Bug with opening Inventorys/Enderchests from another Server
- Cross Server Invsee/endersee now blocked due to Plugin Architecture.
- On Same Server and Offline Still Possible
- /invsee now opens the target's live inventory for online players — edits apply instantly, no snapshot copy
- /invsee on offline players opens an editable view that saves back to the database on close, protected by an atomic lock check
- /enderchestsee now opens the target's live ender chest (vanilla or extended) for online players
- /enderchestsee on offline players works the same as offline InvSee — editable, saves on close
- Added /wipeplayer <player> [confirm] — permanently deletes all synced data for a player; online wipe clears live state and prevents re-save on quit, offline wipe is atomic and race-safe
- Offline edits and wipes are fully protected against the player joining mid-operation: all database writes use a single transaction with SELECT FOR UPDATE, so concurrent joins are serialized and never produce split-brain state
- Stale locks from crashed servers no longer block offline edits — the lock check now uses a 3-state model (free / expired / owned) so staff can edit players whose previous server crashed before releasing its lock
Added exhaustion sync — Player food exhaustion (the hidden value that drains hunger) now syncs across servers, keeping hunger depletion consistent after transfers
Added fire ticks sync — Players who are on fire when switching servers will remain on fire on the destination server; immunity cooldown ticks are also preserved
Added remaining air sync — Players underwater when switching servers keep their current air level, including the drowning damage timer; value is clamped to the destination server's max air so modded servers with different max-air settings are handled safely
All three options are enabled by default and fully backward compatible — existing player data in the database is untouched
Note: Update your config.yml when upgrading — add the following under the sync: section, or delete your config and let the plugin regenerate it:
exhaustion: true
fire-ticks: true
remaining-air: true
- Fixed items being lost on Folia server restart — Player data now saves correctly when server shuts down
- Added configurable shutdown timeout — New setting shutdown-save-timeout-ms in config.yml lets you adjust how long the server waits for saves to finish before closing (increase on servers with many players or slow database)
- Fixed race condition during shutdown — Players who quit right before shutdown could lose data; now handled correctly
- Note: Update your config.yml when upgrading (old version won't have the new setting)
• Fixed stale entity callback prematurely releasing active session locks on rapid same-server rejoin — was kicking players within 10s
• Fixed fail-open behavior during DB outages — renewal query failure now kicks all players after 2 consecutive failures (prevents silent lock theft)
• Fixed shutdown save race where quit-saves dispatched 0-100ms before disable could be lost — now waits up to 3s for in-flight saves to complete
• Fixed cross-server transfer lock holdout — quit-before-apply now releases lock immediately instead of deferring to stale callback (players no longer kicked when proxy-transferred within 250ms)
• Improved lock-release guards across all async paths with generation checks (prevents same-server lock conflicts)
• Better handling of renewal query timeouts and connection failures in renewal cycle
v7.0.0 - Major Bug Fixes & Stability Release
• Fixed orphaned player locks on rapid reconnect (Folia/Paper) — was kicking players permanently
• Fixed non-atomic stale-lock removal race condition — two servers could acquire same lock
• Fixed Folia shutdown data corruption — unsafe entity API calls off-thread
• Fixed thread pool starvation during burst logins — replaced spin-wait with CompletableFuture
• Player statistics now zero correctly across server switches (stats no longer accumulate)
• GameMode serialization now version-safe (name-based, with legacy ordinal fallback)
• Fixed InvseeCommand showing detached inventory if target disconnects mid-load
• Removed ineffective stopSound call (ender chest open sound plays once, not twice)
• Improved isolation level handling in database transactions
• Database port now validated on startup
• ItemStack per-slot limit reduced 10MB → 100KB (OOM prevention)
• Default SSL enabled in config (security best-practice)
• server-id validation warning for shared IDs
• deletePlayerData() now returns success status
- Fixed multiple race conditions in player session handling
- Improved session generation tracking to prevent stale async tasks from modifying active sessions
- Hardened lock ownership logic to prevent incorrect lock release during concurrent reconnects
- Improved safety of join, quit, and crash recovery flows
- Prevented data loss scenarios caused by overlapping async save operations
- Refactored session lifecycle validation using generation-based consistency checks
- Improved lock safety across all asynchronous execution paths
- Hardened cache and loading state management under concurrency
