Tags
Creators
Details
Licensed ARR
Published 9 months ago
Updated 5 days ago
All versions
26.9-Release
Release
PlayerDataSync 26.9-Release5 days ago 58
Uploaded by
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.x
1.20.x
Platforms
Bukkit
Fabric
Folia
Forge
Paper
Purpur
Spigot
Velocity
Supported environments
Dedicated servers only
Changes
[26.9-Release] - 2026-09-10
Fixed
- Old armor / inventory coming back after a server switch: Three ordering races in
SyncManagercould apply a stale record over the player's real state. (1) The join event, the Velocityload:message and the Redis notify each started their own DB load; two loads ran concurrently and whichever finished last won, even if it had read the record from before the previous server's save landed. Loads are now serialized per player: a load requested while one is in flight is queued and runs afterwards, so the newest record is always the one applied last. (2) Autosave, the proxysave:message and quit could all save while the join load was still pending, writing the server's local playerdata (the player's state from their last visit) over the record the previous server had just written. Saves are now refused until the stored record has been applied. (3) A late Redis reload re-applied a record the player already had, rolling back anything done since (e.g. newly equipped boots). Records now carrysavedAt; re-applying the same record within a session is skipped unless forced via/pds loadorPlayerDataSyncAPI#forceReload. - Failed SQL saves were reported as successful:
SqlStorage#saveswallowedSQLException, soSyncManagercached the inventory hash (skipping the next save as "unchanged") and told other servers to reload. The future now fails, the error is counted, and the next save retries.
Added
- Unit tests for the
SyncManagerjoin/quit ordering (common/src/test), run viagradlew :common:test.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:xIV08o16:XCyLFlBS"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:xIV08o16:XCyLFlBS"
}

