NeoPlayerSync stores the player in one PostgreSQL database that all your servers share. When the player switches servers, the new server reads their character from that database, so they keep everything.
**You will need a mod allowing proxies to run on Neoforge like Proxy Compatible Forge.**
What travels with the player
- inventory, armor, off hand and ender chest
- health, hunger and potion effects
- experience and the recipe book
- the player data of every other mod you run
Position, spawn point, advancements and statistics stay on each server.
Tutorial
1. Make a database. In PostgreSQL, create an empty database and a user who owns it:
CREATE USER minecraft WITH PASSWORD 'pick-a-strong-password'; CREATE DATABASE minecraft OWNER minecraft;
NeoPlayerSync creates its own tables the first time it starts.
2. Install the mod. Copy the jar into the mods folder of each server behind your proxy. Start each server once, then stop it. That creates config/neoplayersync.toml.
3. Fill in the config. Open config/neoplayersync.toml on each server:
enabled = true host = "10.0.0.5" # your database's address port = 5432 database = "minecraft" user = "minecraft" password = "pick-a-strong-password" require_ssl = true # set false only if the database runs on the same machine server_name = "lobby" # any name; the database shows it as the player's current server
docs/default-config.toml explains every setting.
4. Start your servers. Look for this line in each log:
NeoPlayerSync is storing players in Postgres.
If a server can't reach the database, it refuses to start rather than letting players load an old copy of their character.
The config file holds your database password. Keep it out of modpacks you share. NeoForge never sends it to players.
You can turn the mod on for a network that already has players. Each player's current character goes into the database the first time a server saves them.
How it works
Think of the database row as the one real copy of the player, and each server as borrowing it.
- A player joins a server. That server borrows the player's row and copies the character into its normal save file. Minecraft loads the player from that file as usual.
- While the player plays, the server writes their character back to the database. It does this about a second after the inventory changes, once a minute, and when they respawn or leave.
- The player switches servers. The old server writes their character one last time and hands the row back. The new server waits for that, then borrows the row.
Only one server can borrow a player at a time, so two servers can never overwrite each other. If a server crashes, the next server waits about 15 seconds to make sure the crashed one is gone, then takes the player. They lose up to a second of inventory changes and up to a minute of everything else.
For mod dev
Please go visit the project's github for more info on how to make your mod compatible. Any mod using the vanilla playerstate are automatically compatible.

