Перейти к содержимому
Mineforgian

PlayerDataSync

Seamless Cross-Server Player Data Synchronization​

Загрузки
3K
Подписчики
18
Обновлён
30 июля 2026 г.
Лицензия
All-Rights-Reserved

Опубликован 17 декабря 2025 г.

🧩 PlayerDataSync

Seamless Cross-Server Player Data Synchronization
Keep inventories, Ender Chests, XP, health, attributes and more synchronized across every server in your network.

Servers & Players


🚀 Overview

PlayerDataSync keeps player data synchronized across every server in your Minecraft network.

Whether players move between Survival, Lobby, Creative, SkyBlock, Minigames or anything else, their progress follows them automatically.

No manual file transfers. No duplicated inventories. No lost progress.

Player data lives in one shared database. With Redis enabled, changes propagate between servers the moment they happen — your network behaves like a single world.


✨ What Gets Synchronized

Every entry is an individual toggle, so you decide exactly what travels with your players.

Category Included
Items Inventory, Ender Chest, selected hotbar slot
Progression Experience, levels, advancements, statistics
Vitals Health, absorption, hunger, saturation, exhaustion, air, fire ticks, freeze ticks, arrows in body
State Game mode, flight, walk & fly speed, fall distance, player time, player weather
Advanced Attributes, Persistent Data Container, Vault economy balance
Optional Location (disabled by default — see below)

📍 About location sync

Location sync teleports players to their stored position on join. It ships disabled (sync.location: false), because it only makes sense when the destination server has a world of the same name. If that world is missing, the restore is skipped with a log warning instead of dropping the player somewhere wrong.


🧰 More Than Just Sync

  • 🔴 Redis live sync — propagate changes between servers instantly instead of waiting for the next join
  • 🔐 AES encryption — encrypt stored profiles with your own key
  • 💾 Automatic backups — compressed snapshots before data is overwritten
  • 🔁 Storage migration — move between MySQL, MariaDB, PostgreSQL and MongoDB with one command
  • ⬆️ Legacy import — bring profiles over from the original PlayerDataSync
  • 📤 Import / export — move individual player profiles in and out
  • 💬 Discord webhooks — notifications for sync successes and failures
  • ⏱️ Autosave — periodic saves as a crash safeguard
  • 🚫 Exclusions — skip specific worlds or specific item types
  • 📊 bStats & FastStats metrics
  • 🧩 Developer API — events and Persistent Data Container hooks for your own plugins

🌟 Why PlayerDataSync?

Running player data across multiple servers without proper synchronization leads to:

  • Lost inventories
  • Item duplication
  • Missing experience
  • Inconsistent progress

PlayerDataSync removes those failure modes by synchronizing automatically whenever data changes.

Benefits

  • ✅ One shared player profile across your whole network
  • ✅ Instant propagation with Redis
  • ✅ Four database backends to choose from
  • ✅ Asynchronous — the main thread stays free
  • ✅ Skips redundant saves when nothing changed
  • ✅ Open source (MIT) and actively maintained

🧱 Supported Platforms

Component Supported
Minecraft 1.20 – 26.2
Server software Paper, Spigot, Fabric, Velocity (proxy bridge)
Java 21+ — Minecraft 26.x servers require Java 25
Database MySQL, MariaDB, PostgreSQL, MongoDB

The download is the Paper/Spigot plugin. The Fabric and Velocity builds are bundled inside it under bundled/ — extract whichever you need.

Please note:

  • Fabric is not yet at feature parity. Advancements and statistics are not synchronized on Fabric. The 1.20 and 1.21 Fabric builds additionally lack Ender Chest, potion effects and attributes; the 26.x builds have those.
  • Forge is currently unavailable while its build tooling catches up with the Minecraft 26.x toolchain.
  • On Fabric, use MariaDB, PostgreSQL or MongoDB. The MySQL driver is not bundled and mod loaders do not supply one. The MariaDB driver connects to MySQL servers just fine. Paper and Spigot are unaffected.
  • SQLite is not supported.

⚙️ Configuration

Full documentation: 👉 https://pds.devvoxel.de/config

  • Paper / Spigot: plugins/PlayerDataSyncReloaded/config.yml
  • Fabric: config/playerdatasync.properties, created on first start
storage:
  type: "mariadb"   # mysql, mariadb, postgres, mongodb
  host: "localhost"
  port: 3306
  database: "minecraft"
  username: "root"
  password: ""

redis:
  enabled: true     # strongly recommended for multi-server setups
  host: "localhost"
  port: 6379

sync:
  inventory: true
  ender_chest: true
  economy: true     # requires Vault + an economy plugin
  location: false   # teleports players on join

💬 Commands & Permissions

Everyday operation is fully automatic — players never touch a command. For administrators, everything lives under /playerdatasync (aliases /pds, /pdasync) behind the playerdatasync.admin permission.

Command Description
/pds status Sync statistics, error counters, excluded worlds
/pds save <player> Force-save a player
/pds saveall Force-save everyone online
/pds load <player> Reload a player from storage
/pds list List stored profiles
/pds backup Create a backup
/pds export / /pds import Move profiles in and out
/pds migrate Migrate between storage backends
/pds toggle Toggle syncing at runtime
/pds debug on|off Toggle verbose logging
/pds reload Reload the configuration

📈 Performance

  • ⚡ Asynchronous database operations — the main thread is never blocked
  • 🔄 Redundant saves are skipped when the inventory has not changed
  • ⏳ Configurable minimum interval between saves
  • 💾 Compressed backups
  • 📉 Low CPU and memory footprint

Suitable for small communities and large networks alike.


📋 Requirements

  • ☕ Java 21+ (Java 25 for Minecraft 26.x servers)
  • 🗄️ MySQL, MariaDB, PostgreSQL or MongoDB
  • 🧱 Paper, Spigot or Fabric server
  • 🌐 Multiple servers pointed at the same database
  • 🔴 Redis (optional, recommended) — instant cross-server propagation
  • 💰 Vault + an economy plugin (optional) — required for economy sync

🛠️ Support

  • 💬 Join our Discord server
  • 🐛 Report bugs on GitHub
  • 📚 Read the documentation
  • 💡 Share feature requests and suggestions

❤️ Credits

Developed with ❤️ by DerGamer09

If PlayerDataSync helps your network, consider leaving a review on SpigotMC, Modrinth, Hangar or BuiltByBit. Your feedback shapes what gets built next.

Ченджлог

26.8-ALPHAАльфа26.1.1, 26.1.2, 26.2 · 30 июля 2026 г.

⚠️ Alpha. Everything below compiles and is code-reviewed, but the economy fix, the new location teleport and the Redis live sync have not been exercised against a running server with Vault, Redis or a real multi-server setup. Test on staging before production.

Fixed

  • Dead config toggles: sync.attributes, sync.pdc and sync.flight were declared in config.yml but never evaluated — switching them off did nothing. Same bug class as the economy fix in 26.7.
  • Item exclusions on Fabric: exclusions.items was stored and never read, so excluded items synced anyway. Both minecraft:diamond and the Bukkit-style DIAMOND spelling are accepted.

Added

  • Location sync now actually works. The position was previously captured and written to storage but never restored — no teleport existed anywhere in the plugin. Joining players are now teleported to their stored position.
    • Guarded by sync.location, which defaults to false. It only works when the destination server has a world of the same name, and turning it on by default would have started teleporting players on upgrade.
    • If the world is missing, the restore is skipped with a warning instead of dropping the player somewhere wrong.
  • Redis live sync completed. The subscribe handler parsed the incoming UUID and then did nothing — publishing worked, but no server ever acted on it. Receiving servers now reload that player if they are online locally. Messages carry a per-server node ID so a server ignores its own publishes rather than reloading over the save it just made.
  • Config support for Fabric. Fabric previously returned hardcoded defaults for every config lookup, so no sync.* toggle worked at all. A playerdatasync.properties file is now generated in the Fabric config directory, using the same keys as the Bukkit config. Storage settings are read from it too, instead of the previously hardcoded (and non-functional) SQLite database.
  • More data synced on Fabric (MC 26.x): Ender Chest, potion effects and attributes.

Known issues

  • Fabric is not at parity with Paper. Advancements and statistics are not synced on any Fabric version. The 1.20 and 1.21 modules also still lack Ender Chest, potion effects and attributes — only 26.x gained those. Planned for 26.8-BETA.
  • On Fabric, use MariaDB, PostgreSQL or MongoDB. The MySQL driver is not bundled and mod loaders do not provide one. SQLite is not supported on any platform.
  • Forge is not built — ForgeGradle does not support Gradle 9, which the MC 26.x toolchain requires.
26.7-ReleaseРелиз26.1.1, 26.1.2, 26.2 · 30 июля 2026 г.

Fixed

  • Economy sync (Vault): Balances were never actually synchronized. SyncManager#setEconomy discarded the Vault provider, and PlayerData.balance was neither read on quit nor applied on join — the sync.economy config toggle had no effect. Balances now transfer across servers, and sync.economy: false genuinely disables it.

Added

  • Paper 26.2 support: New v26_2_R1 version handler built against paper-api 26.2; server version detection recognizes 26.2 automatically.
  • Fabric 26.1 / 26.2 modules: New adapter modules targeting Minecraft 26.1 and 26.2.

Changed

  • Paper 26.1.2: Updated to the latest stable build (26.1.2.build.72-stable).
  • Build toolchain: Gradle 9.6.0; Fabric Loom 1.15.5 (1.20/1.21 lines) and 1.17.12 (26.x lines).
  • Fabric mappings: MC 26.x builds use Yarn 1.21.11+build.6, since Mojang no longer publishes official mappings for 26.x. Fabric has aligned these names with Mojang's, so 26.x adapter code uses ServerPlayer, CompoundTag, StreamCodec, and net.minecraft.resources.Identifier.

Known issues

  • Forge is not built in this release. ForgeGradle 6.0.x refuses to run on Gradle 9+, and no compatible release exists yet. The Forge modules remain in the repository and can be re-enabled with -Ppds.enableForge=true once ForgeGradle supports Gradle 9.
26.5.5.1-ALPHAАльфа26.1.1, 26.1.2, 26.2 · 20 мая 2026 г.

[26.5.5.1-ALPHA] - 2026-05-20

Added

  • Fabric: fabric-api (0.92.2+1.20.1) so lifecycle and server-play networking APIs resolve at compile time; fabric.mod.json declares a fabric-api dependency.
  • Velocity: Gradle task generatePluginBuildInfo emits PluginBuildInfo.VERSION so the @Plugin version always matches the Gradle project version.
  • Modrinth / Fabric: Guide pds-docs/modrinth-upload.md (Paper vs Fabric JAR); Gradle task checkFabricModMetadata asserts fabric.mod.json exists in the remapped Fabric JAR; Fabric archive base name playerdatasync-fabric so it is not confused with the Paper plugin artifact.
  • Unified distribution JAR: The Paper PlayerDataSyncReloaded-*.jar (also copied to build/libs/) embeds bundled/playerdatasync-velocity.jar, bundled/playerdatasync-fabric.jar, and bundled/playerdatasync-forge.jar plus bundled/README.txt — one download; extract sibling JARs for Velocity/Fabric/Forge (classes are not merged to avoid mapping clashes).

Changed

  • Gradle / bytecode targets: api and common use Java 17 (Fabric/Forge); plugin and Velocity use Java 21 so Paper 1.21.x can remap the shaded plugin (ASM does not accept class file 69). Nested :versions:* modules are set to 21 in versions/build.gradle.kts (they are not root subprojects, so they previously picked up the toolchain default and emitted 69).
  • Velocity: velocity-api updated to 3.5.0-SNAPSHOT; Velocity→backend plugin messages use UTF-8 (StandardCharsets.UTF_8); ServerConnectedEvent log line uses event.getServer().getServerInfo() (Velocity 3 API).
  • Shadow plugin: Replaced com.github.johnrengelman.shadow 8.1.1 with com.gradleup.shadow 8.3.10 so shadowJar can process modern class files when relocating (e.g. bundled jars).
  • Forge: META-INF/mods.toml version is expanded from Gradle (mod_version); Forge build.gradle.kts no longer overrides root version / group.
  • Fabric: build.gradle.kts no longer overrides root version / group (single version from gradle.properties).
  • Gradle runtime: Configuration cache disabled in gradle.properties (ForgeGradle, Fabric Loom, and Shadow-related flows are not reliable with CC enabled); parallel and build caching remain enabled.
  • CI: Workflow runs ./gradlew :plugin:build and uploads the unified build/libs/PlayerDataSyncReloaded-*.jar (includes bundled/ platform JARs).

Fixed

  • Bukkit version handlers: v1_20_R1 and v26_1_R1 VersionHandlerImpl now extend BukkitBaseVersionHandler and implement capture / apply with PDSPlayer (restores compatibility after removal of BaseVersionHandler).
  • Fabric PlayerDataSyncFabric: ServerPlayNetworking global receiver is registered in SERVER_STARTING after storage/SyncManager setup; SLF4J error logging for storage init; guards when syncManager is not ready yet.
  • Forge PlayerDataSyncForge: storage init failures use Log4j instead of printStackTrace; packet and login handlers guard syncManager == null.
  • Multi-platform build: Resolved Gradle dependency variant mismatches (Fabric vs api/common JVM level). v26_1_R1: compileClasspath requests JVM 25 so Paper 26 paper-api resolves while sources still compile with --release 21.

Notes

  • One JAR download: build/libs/PlayerDataSyncReloaded-*.jar contains Paper + bundled/ Velocity/Fabric/Forge JARs; Modrinth still needs the extracted platform files per loader (see pds-docs/modrinth-upload.md).
  • Modrinth: Use bundled/playerdatasync-fabric.jar (extracted from the distribution JAR) for the Fabric loader file — not the outer archive root (that is the Paper plugin with plugin.yml only).
  • Paper 1.21.x: The main plugin classes are built as Java 21 bytecode so the server’s PluginRemapper can read them. Run the server on Java 21+ as required by Paper 1.21. Deploy the JAR whose name matches gradle.properties version (e.g. PlayerDataSyncReloaded-26.5.5.1-ALPHA.jar); delete any older file such as PlayerDataSyncReloaded-26.5.5-SNAPSHOT.jar from plugins/ so Paper does not remap a stale build. The shaded jar excludes META-INF/versions/** so multi-release dependency layers (class file 69) are not shipped to the remapper.
26.5.4-ReleaseРелиз26.1.1, 26.1.2, 26.2 · 5 мая 2026 г.

[26.5.4-Release] - 2026-05-05

Fixed

  • Build Process: Redirected final shaded JAR output to the root build directory for easier access.
  • Database Migration: Added automatic schema migration for SQL storage to fix "Unknown column" errors when upgrading from older versions.
  • Legacy Fallback: Implemented automatic fallback to the legacy data format if the new JSON format is missing in SQL storage.
26.5.3-ReleaseРелиз26.1, 26.1.1, 26.1.2 · 5 мая 2026 г.

[26.5.3-Release] - 2026-05-05

Added

  • Database Migration: Added automatic schema migration for SQL storage to fix "Unknown column" errors when upgrading from older versions.
  • Legacy Fallback: Implemented automatic fallback to the legacy data format if the new JSON format is missing in SQL storage.

Changed

  • Paper Compatibility: Updated NMS support for the stable Paper 26.1.2 release.
  • Dependency Management: Updated internal version modules to target the latest stable API builds.
26.5.2-ReleaseРелиз26.1, 26.1.1, 26.1.2 · 3 мая 2026 г.

[26.5.2-Release] - 2026-05-03

Changed

  • Paper Compatibility: Updated NMS support for the stable Paper 26.1.2 release.
  • Dependency Management: Updated internal version modules to target the latest stable API builds.
26.5.1-ReleaseРелиз26.1, 26.1.1, 26.1.2 · 1 мая 2026 г.

[26.5.1-Release] - 2026-05-01

Fixed

  • Thread Safety: Resolved IllegalStateException on Paper/Purpur servers where PlayerDataSaveEvent was incorrectly triggered on the main thread while marked as an asynchronous event. Both Save and Load events are now synchronous to ensure full compatibility with the Bukkit threading model.
26.5-ReleaseРелиз26.1, 26.1.1, 26.1.2 · 27 апреля 2026 г.

[26.5-Release] - 2026-04-27

Added

  • API Extensibility: Added extraData map to PlayerData for third-party plugin data synchronization.
  • Save Cancellation: PlayerDataSaveEvent now implements Cancellable, allowing plugins to prevent data from being saved under specific conditions.
  • Granular Sync Controls: Added new configuration options to disable syncing for Potion Effects, Food, GameMode, Advancements, and Statistics.
  • Improved Version Detection: Better handling for Minecraft 1.21.1 and future sub-versions.

Changed

  • Banner Update: Refreshed the startup banner with new colors and "Expansion Update" subtitle.
  • Performance: Minor internal optimizations for event handling.

Fixed

  • Potential edge case where data might save during an invalid state.

Комментарии

Загружаем…