COWMODSКаталог модов

PlayerDataSync

Seamless Cross-Server Player Data Synchronization​

Автор: FrediFret4,5 тыс.20обновлён 10 сент. 2026 г.
УправлениеОптимизацияХранение

Описание

🧩 PlayerDataSync

One player profile for your whole network.
Inventories, Ender Chests, XP, health, effects, attributes and economy follow your players to every server — automatically, safely, in the right order.

Servers & Players


🚀 Overview

Players on a network expect one thing: what they had on Survival is still there on SkyBlock, and what they earned on SkyBlock is waiting for them back on Survival.

PlayerDataSync makes that happen. Every server writes to one shared database, every server reads from it on join, and Redis tells the others the moment something changed. Your network behaves like a single world.

No manual file transfers. No duplicated inventories. No lost progress. No "my boots are gone".


✨ What Gets Synchronized

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

CategoryIncluded
ItemsInventory (incl. armor and off-hand), Ender Chest, selected hotbar slot
ProgressionExperience, levels, advancements, statistics
VitalsHealth, absorption, hunger, saturation, exhaustion, air, fire ticks, freeze ticks, arrows in body
Effects & statePotion effects, game mode, flight, walk & fly speed, fall distance, player time, player weather
AdvancedAttributes, Persistent Data Container, Vault economy balance
OptionalLocation (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.


🛡️ Built to Never Roll Back

Most sync plugins work fine until two things happen at once. PlayerDataSync is designed around exactly those moments:

  • Proxy handshake. With the Velocity bridge, a server switch waits until the old server confirms its save. The new server never reads the database before the write has landed.
  • Ordered loads. Join event, proxy notification and Redis notification all trigger loads — they are queued per player, so the newest record is always the one applied last.
  • No premature saves. Autosave, quit and proxy saves are refused until the stored profile has been applied. The stale local player file can never overwrite the database.
  • No redundant re-applies. A late notification for a record the player already has is ignored. Gear equipped in the meantime stays equipped.
  • Save on shutdown. /stop and /pds reload save every online player and wait for the writes. Paper kicks players after disabling plugins — we save before that happens.
  • Honest failures. A failed database write is counted, logged and retried on the next save instead of being silently marked as "unchanged".
  • Encrypted means encrypted. If encryption is enabled and fails, the save fails. Plaintext never reaches the database by accident.

🧰 More Than Just Sync

  • 🔴 Redis live sync — other servers reload a profile the moment it was saved; the subscriber reconnects automatically if Redis drops
  • 🔐 AES encryption — encrypt stored profiles with your own key
  • 💾 Backups — export the whole database to a compressed snapshot, import it back with one command
  • 🔁 Storage migration — move between MySQL, MariaDB, PostgreSQL and MongoDB in place
  • ⬆️ Legacy import — profiles from the original PlayerDataSync are read automatically
  • 💬 Discord webhooks — notifications for sync successes and failures
  • ⏱️ Autosave — periodic saves as a crash safeguard, with an optional minimum interval
  • 🚫 Exclusions — skip specific worlds or specific item types
  • 🔍 Diagnostics — /pds status for counters and the last error, /pds info <player> for one player's exact sync state
  • 📊 bStats & FastStats metrics
  • 🧩 Developer API — force-save, force-reload and direct access to stored profiles from your own plugins

🌟 Why PlayerDataSync?

Running a network without proper synchronization leads to lost inventories, duplicated items, missing experience and players who stop trusting your server.

PlayerDataSync removes those failure modes — including the rare ones that only show up under load.

  • ✅ 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 saves when nothing changed
  • ✅ Race conditions covered by unit tests, not by hope
  • ✅ Open source (MIT) and actively maintained

🧱 Supported Platforms

ComponentSupported
Minecraft1.20 – 26.2
Server softwarePaper, Spigot, Purpur, Folia, Fabric, Velocity (proxy bridge)
Java21+ — Minecraft 26.x servers require Java 25
DatabaseMySQL, MariaDB, PostgreSQL, MongoDB

Every platform is a separate download:

FileGoes to
PlayerDataSyncReloaded-<version>.jarPaper / Spigot plugins/
PlayerDataSyncReloaded-Velocity-<version>.jarVelocity plugins/
PlayerDataSyncReloaded-Fabric-<mc>-<version>.jarFabric mods/ — pick the jar for your Minecraft line (1.20, 1.21, 26.1, 26.2)

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. Fabric does not answer the proxy save handshake yet.
  • 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 for networks — data must live in a database every server can reach.

⚙️ Configuration

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

  • Paper / Spigot: plugins/PlayerDataSyncReloaded/config.yml
  • Fabric: config/playerdatasync.properties, created on first start
  • Velocity: plugins/playerdatasync/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

autosave:
  enabled: true
  interval: 300     # seconds

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

Velocity bridge (playerdatasync.properties):

# How long a server switch waits for the old server to confirm its save. 0 = don't wait.
save_ack_timeout_ms=2000

💬 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.

CommandDescription
/pds statusLoad/save counters, skips, last durations, last error, excluded worlds
/pds info <player>One player's sync state: data applied, load in flight, applied record and last save timestamps
/pds save <player>Force-save a player
/pds saveallForce-save everyone online
/pds load <player>Reload a player from storage (overrides what they have now)
/pds backup listList available backups
/pds backup export <name>Export the whole database to a backup
/pds backup import <name>Restore a backup into the database
/pds migrateMigrate to the storage backend configured under migration
/pds debug on|off|toggleToggle verbose logging at runtime
/pds reloadReload configuration and reconnect storage, Redis and Discord

📈 Performance

  • ⚡ Asynchronous database operations on a dedicated pool — the main thread is never blocked
  • 🔄 Saves are skipped when the inventory has not changed since the last write
  • ⏳ Configurable minimum interval between saves
  • 💾 Compressed, Base64-encoded item data; 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
  • 🌉 Velocity bridge (optional, recommended) — save handshake on server switches
  • 💰 Vault + an economy plugin (optional) — required for economy sync

🛠️ Support

  • 💬 Join our Discord server
  • 🐛 Report bugs on GitHub — /pds info <player> output and the server log make reports actionable
  • 📚 Read the documentation
  • 💡 Share feature requests and suggestions

❤️ Credits

Developed with ❤️ by DerGamer09

Последние версии

Все версии →
alpha

PlayerDataSync 26.10-ALPHA.001

26.10-ALPHA.001
10 сент. 2026 г.149Minecraft: 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2fabric
Скачать
Что нового
# PlayerDataSyncReloaded 26.10-ALPHA.001 — Fabric 1.20.1 – 26.2 > **Alpha build.** Compiles and passes the unit tests; not yet exercised on a live network. Test on a staging server first. ### File **`PlayerDataSyncReloaded-Fabric-26.10-ALPHA.001.jar`** — one jar for every supported line. On start the mod reads the Minecraft version from Fabric Loader and activates the matching adapter: | Minecraft | Fabric Loader | Fabric API | Java | |-----------|---------------|------------|------| | 1.20.1 | 0.15.11+ | 0.92.2+1.20.1 | 17+ | | 1.21.4 | 0.16.14+ | 0.119.2+1.21.4 | 21+ | | 26.1 | 0.19.3+ | 0.153.0+26.1.2 | 25+ | | 26.2 | 0.19.3+ | 0.153.0+26.2 | 25+ | Config: `config/playerdatasync.properties`, created on first start. Use MariaDB, PostgreSQL or MongoDB — the MySQL driver is not bundled; the MariaDB driver connects to MySQL servers. ### Distribution - Now a separate download covering all Minecraft lines. Previously a single-line Fabric jar shipped inside the Paper jar as `bundled/playerdatasync-fabric.jar`. ### Fixed (all lines) - **Mod jar was not standalone**: it contained only the adapter classes and failed on load with `NoClassDefFoundError`. `:api`, `:common` and the runtime libraries (HikariCP, MariaDB/PostgreSQL drivers, Mongo driver, Jedis) are now shaded in. Gson and SLF4J are left out because Minecraft ships them. - **Health 0 killed the player on the next server**: quitting on the death screen saved `health = 0`, which was applied on join. Health is only applied when it is above 0. ### Added (all lines) - **Save on shutdown**: `SERVER_STOPPING` saves every online player; `SERVER_STOPPED` closes storage after the writes have finished. Storage was never closed before. - Disconnect now clears the player's per-session sync state, like the other platforms. ### Sync core (shared by all platforms) - **Redis auto-reconnect**: the subscriber ran on a common-pool thread and died silently when the connection dropped, so other servers stopped receiving reload notifications. It now runs on its own thread and reconnects every 5 s. - **Encryption failure no longer writes plaintext**: if `CryptoUtil.encrypt` throws, the save fails instead of storing unencrypted JSON (SQL and Mongo). - **Exact unchanged-check**: skipping a save because "nothing changed" now compares the full serialized inventory instead of `String#hashCode`, so a hash collision can no longer drop a changed inventory. - `SyncManager#handleQuit` returns a `CompletableFuture` that completes when the write is done; new `saveAll` and `markLoaded` for shutdown/reload handling. - Includes the 26.9 ordering fixes: loads are serialized per player, saves are refused until the stored profile has been applied, a record that is already applied is not re-applied, and failed SQL writes are counted and retried instead of being cached as "unchanged". ### Known issues - **Feature parity per line** - 1.20.1 and 1.21.4: no Ender Chest, potion effects, attributes, advancements, statistics. - 26.1 and 26.2: no advancements, statistics. - Fabric does not answer the Velocity save handshake yet. The proxy waits the full timeout once per Fabric server and then stops waiting on it.
alpha

PlayerDataSync 26.10-ALPHA.001

26.10-ALPHA.001
10 сент. 2026 г.58Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2velocity
Скачать
Что нового
# PlayerDataSyncReloaded 26.10-ALPHA.001 — Velocity > **Alpha build.** Compiles and passes the unit tests; not yet exercised on a live network. Test on a staging server first. ### Distribution - Now a separate download. Previously shipped inside the Paper jar as `bundled/playerdatasync-velocity.jar`. ### Added - **Save handshake**: `ServerPreConnectEvent` sends `save:` to the current server and holds the switch until it answers `saved:<uuid>`. The destination server can no longer read storage before the previous server's save committed — the cause of "old armor came back" after a switch. - **Config file** `plugins/playerdatasync/playerdatasync.properties`, created on first start: - `save_ack_timeout_ms` (default `2000`): how long to wait for the confirmation; `0` = never wait. - A backend that never answers (older plugin, Fabric, Forge) is only waited on once; afterwards switches from it proceed immediately until it answers again. - Control messages from backends on `pds:sync` are consumed by the proxy and no longer forwarded to the client. ### Requirements - Velocity 3.x - Backends running PlayerDataSyncReloaded 26.10-ALPHA.001 (Paper) for the handshake; older backends still work, just without the wait.
alpha

PlayerDataSync 26.10-ALPHA.001

26.10-ALPHA.001
10 сент. 2026 г.172Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
# PlayerDataSyncReloaded 26.10-ALPHA.001 — Paper / Spigot > **Alpha build.** Compiles and passes the unit tests; not yet exercised on a live network. Test on a staging server first. ### Distribution - The Paper jar no longer embeds `bundled/*.jar`. Velocity and Fabric are separate downloads (`PlayerDataSyncReloaded-Velocity-26.10-ALPHA.001.jar`, `PlayerDataSyncReloaded-Fabric-<mc>-26.10-ALPHA.001.jar`). ### Added - **Save on shutdown and reload**: Paper disables plugins *before* it kicks players, so `PlayerQuitEvent` never reached the plugin on `/stop` and everything since the last autosave was lost. `onDisable` and `/pds reload` now save every online player and wait for the writes. - **Proxy save acknowledgement**: when the Velocity bridge sends `save:`, the plugin answers `saved:<uuid>` on `pds:sync` once the write has landed. The proxy holds the server switch until then, so the destination server never reads a stale profile. - **`/pds info <player>`**: shows whether the stored data has been applied, whether a load is in flight or queued, and the timestamps of the applied record and the last save. ### Fixed - **`/pds reload` refused all saves**: the reload created a fresh sync manager that did not know online players already had their data applied. - **Health 0 killed the player on the next server**: quitting on the death screen saved `health = 0`, which was applied on join. Health is only applied when it is above 0. - The "Syncing your data..." message is no longer sent again on proxy/Redis reloads of an already-synced player. ### Sync core (shared by all platforms) - **Redis auto-reconnect**: the subscriber ran on a common-pool thread and died silently when the connection dropped, so other servers stopped receiving reload notifications. It now runs on its own thread and reconnects every 5 s. - **Encryption failure no longer writes plaintext**: if `CryptoUtil.encrypt` throws, the save fails instead of storing unencrypted JSON (SQL and Mongo). - **Exact unchanged-check**: skipping a save because "nothing changed" now compares the full serialized inventory instead of `String#hashCode`, so a hash collision can no longer drop a changed inventory. - `SyncManager#handleQuit` returns a `CompletableFuture` that completes when the write is done; new `saveAll` and `markLoaded` for shutdown/reload handling. - Includes the 26.9 ordering fixes: loads are serialized per player, saves are refused until the stored profile has been applied, a record that is already applied is not re-applied, and failed SQL writes are counted and retried instead of being cached as "unchanged". ### Requirements - Paper, Spigot, Purpur or Folia — Minecraft 1.20 to 26.2 (Java 21+, Java 25 for 26.x) - MySQL, MariaDB, PostgreSQL or MongoDB - Optional: Redis, Velocity bridge 26.10-ALPHA.001, Vault + economy plugin
release

PlayerDataSync 26.9-Release

26.9-Release
10 сент. 2026 г.402Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, fabric, folia, forge, paper, purpur, spigot, velocity
Скачать
Что нового
## [26.9-Release] - 2026-09-10 ### Fixed - **Old armor / inventory coming back after a server switch**: Three ordering races in `SyncManager` could apply a stale record over the player's real state. (1) The join event, the Velocity `load:` 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 proxy `save:` 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 carry `savedAt`; re-applying the same record within a session is skipped unless forced via `/pds load` or `PlayerDataSyncAPI#forceReload`. - **Failed SQL saves were reported as successful**: `SqlStorage#save` swallowed `SQLException`, so `SyncManager` cached 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 `SyncManager` join/quit ordering (`common/src/test`), run via `gradlew :common:test`.
alpha

PlayerDataSync 26.8-ALPHA

26.8-ALPHA
30 июл. 2026 г.323Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, fabric, folia, forge, paper, purpur, spigot, velocity
Скачать
Что нового
> ⚠️ **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.
release

PlayerDataSync 26.7-Release

26.7-Release
30 июл. 2026 г.395Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, fabric, folia, forge, paper, purpur, spigot, velocity
Скачать
Что нового
### 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.
alpha

PlayerDataSync 26.5.5.1-ALPHA

26.5.5.1-ALPHA
20 мая 2026 г.571Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, fabric, folia, forge, paper, purpur, spigot, velocity
Скачать
Что нового
## [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`](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.
release

PlayerDataSync 26.5.4-Release

26.5.4-Release
5 мая 2026 г.562Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2, 26.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## [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.
release

PlayerDataSync 26.5.3-Release

26.5.3-Release
5 мая 2026 г.34Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## [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.
release

PlayerDataSync 26.5.2-Release

26.5.2-Release
3 мая 2026 г.49Minecraft: 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4, 1.20.5, 1.20.6, 1.21, 1.21.1, 1.21.2, 1.21.3, 1.21.4, 1.21.5, 1.21.6, 1.21.7, 1.21.8, 1.21.9, 1.21.10, 1.21.11, 26.1, 26.1.1, 26.1.2bukkit, folia, paper, purpur, spigot
Скачать
Что нового
## [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.