PlayerStatsSync
The bridge between your Minecraft server and your database.
PlayerStatsSync synchronizes player statistics and scoreboard objectives directly into a MySQL database — reliably, efficiently, and with full control over what gets synced and when.
Whether you're running a small SMP or a larger network, PlayerStatsSync gives you clean, queryable data for every player without writing a single line of SQL yourself.
What it does
Every time a player joins, quits, or at a configurable interval, PlayerStatsSync writes their stats and scoreboard values into individual database tables. Each stat gets its own table, making it trivial to query, display, or build on top of with other plugins or a web frontend.
Supported stat types include all standard Minecraft statistics — deaths, playtime, walk distance, blocks mined, mob kills, and more — as well as scoreboard objectives from any plugin that uses the vanilla scoreboard API, like economy systems, custom kill counters, or progression trackers.
Features
Flexible sync triggers
Configure per stat whether it syncs on join, on quit, periodically, or any combination. High-value stats like balances sync on every quit. Playtime syncs periodically. You decide.
Conflict resolution
When a value already exists in the database, you choose what happens. Last-write-wins for balances. Additive for kills and deaths — so a stale read from one server never wipes out progress written by another. Four strategies available:
last-write-wins,
additive,
max,
min.
PlaceholderAPI support
Use synced stats directly in scoreboards, tab lists, and chat formats without any additional configuration. Placeholders are available the moment PlaceholderAPI is installed:
Code (Text):
%playerstatssync_stat_deaths%
%playerstatssync_stat_kill_entity_creeper%
%playerstatssync_obj_money%
%playerstatssync_player_name%
Developer API
Other plugins can read any synced value with a single method call. No SQL, no boilerplate:
Code (Text):
long deaths = PlayerStatsSyncAPI.getStat(uuid, "deaths");
long balance = PlayerStatsSyncAPI.getObjective(uuid, "money");
boolean tracked = PlayerStatsSyncAPI.isPlayerTracked(uuid);
Powerful sync command
Force a sync at any time with
/pss sync. Target all players, a single player by name, or use full Minecraft selectors:
| /pss sync |
All online players |
| /pss sync Shin_Jin_Jin |
Single player |
| /pss sync @a |
All online players via selector |
| /pss sync @r |
Random online player |
| /pss sync @a[gamemode=survival] |
All survival players |
Website integration
Pairs with the Minecraft Stats WordPress Plugin to display player profiles and statistics on your website. Players link their accounts in-game with a single
/verify command — no OAuth, no third-party services, just a signed token exchanged between your server and your website.
Safe config updates
When you update the JAR, new config keys are added automatically. Your
statistics and
objectives sections are never overwritten — your customizations are always preserved.
Automatic update checker
On startup the plugin checks GitHub for a newer release. Admins with
playerstatssync.admin get a clickable in-game notification on join if an update is available — with direct links to SpigotMC and the GitHub release. Use
/pss version to check at any time. Can be disabled in
config.yml.
Requirements
- Paper or Purpur 1.21+
- Java 21+
- MySQL or MariaDB
- PlaceholderAPI (optional)
Commands
| /pss reload |
Reload config and ensure all tables exist |
| /pss sync |
Force-sync all online players |
| /pss sync <player|@selector> |
Force-sync specific player(s) |
| /pss status |
Show database status and active stat configuration |
| /pss version |
Show current version and check for updates |
| /verify <code> |
Link your Minecraft account with the website |
Permissions
| playerstatssync.admin |
op |
Access to all /pss commands |
| playerstatssync.verify |
true |
Access to /verify |