Network guide
On a network, uxmAuth runs on the Velocity proxy and on every Paper server behind it.
On a network, uxmAuth runs on the Velocity proxy and on every Paper server behind it. The proxy runs the premium check, knows who has logged in and tells each server so with a claim it signs. A server takes a claim only with the right signature, so a player who reaches it some other way is asked for the password as usual.
Install
- Put the Velocity jar on the proxy and the Paper jar on every backend server. The proxy half reads the same
config.conf,ownership.confandnetwork.confas a server, so the files can be copied to every machine. It uses thelanguage,storage,premium,ownershipandnetworkblocks; when players wait in its own world it also usesnames,passwords,hashing,laneandtimeouts, and reads the words of/loginand/registerfromcommands.conf. - Point
storage.jdbc-urlof the proxy and of every server at one MySQL, MariaDB or PostgreSQL database, so an account is the same account everywhere. - Start the proxy. With
network.secretempty it makes a secret and writes it tonetwork-secret.txtin its data folder, readable by its owner only, and says where in its console. - Copy that secret into
network.secreton every backend server, setnetwork.enabled = trueand setnetwork.server-nameto the server's name in the proxy's list. Keep the secret private: whoever has it can log anybody in. A server with the network on and no secret refuses to start.
Leave network.enabled off on a server that stands alone.
Routing
On the proxy:
network.auth-servers: where a player waits until logged in. Empty means they wait at the dialog on whichever server they join and stay there.network.lobbies: where a player goes from an auth server once logged in, and where a player logged in by Mojang goes first.network.balance: how a server is picked from a list:least-players,randomorfirst.network.after-login:lobby,last-serverorby-domain, which uses theby-domainlist of{ host = "eu.example.org", server = lobby-eu }entries, a star standing for one part of a name.network.allowed-commands: proxy commands a player may run before logging in. Every other proxy command, and every move to another server, waits for the login.
network.claim-seconds is how long a signed claim stays good; the proxy writes a fresh one before each
connection to a server.
Redis
Redis carries what every proxy and server must hear at once, such as an account whose sessions ended after a
password change. Every member writes the same network.redis.uri (for example redis://:password@host:6379/0)
and network.redis.channel. With an empty uri the proxy alone holds the logins and each server reads the
database.
The proxy's waiting world
network.wait-in on the proxy chooses where a player waits before logging in:
server: the dialog or the frozen world of the server they join, so every server behind the proxy must run uxmAuth.limbo: a world built inside the proxy that no server sees, where the player types/loginor/register. It needs LimboAPI on the proxy, version 1.1 or 2.network.limbo-filenames a schematic in the data folder the world is built from; without it the player stands on a small platform atnetwork.limbo-spawn.
A proxy asked for its own world that cannot build it, because LimboAPI is missing or is a release the plugin does not know, refuses every login and says why in its console. A server without uxmAuth would let a waiting player straight in, and the proxy never lets that happen. With the proxy's world, a player who has not logged in reaches no server, not even the first.
Staff alerts and commands
Alerts reach staff holding uxmauth.admin.alerts on every server of the network. /uxmauth forcelogin and the
other staff commands act on the account wherever its player waits. A ban made at the proxy is not sent to Discord;
one made on a server is. The [console] and [player] lines of the registered and logged-in effect lists run
once per login on the proxy, however many servers the player visits afterwards.
Was this page helpful?