A network
Velocity and every server behind it as one door, signed claims, routing, Redis and the proxy's own waiting world.
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.
Setting it up
- Put the Velocity jar on the proxy and the Paper jar on every server. The proxy reads the same
config.conf,ownership.confandnetwork.conf, so the files can be copied to every machine. It useslanguage,storage,premium,ownershipandnetwork; when players wait in its own world alsonames,passwords,hashing,laneandtimeouts, and the words of/loginand/registerfromcommands.conf. - Point
storage.jdbc-urlof the proxy and every server at one MySQL, MariaDB or PostgreSQL database. - Start the proxy. With
network.secretempty it makes one 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 server, setnetwork.enabled = trueandnetwork.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
| Key | Default | Meaning |
|---|---|---|
auth-servers | [] | Where a player waits until logged in; empty, they wait at the dialog on whichever server they join and stay there |
lobbies | [] | Where a player goes from an auth server once logged in, and where a player logged in by Mojang goes first |
balance | least-players | least-players, random or first |
after-login | lobby | lobby, last-server (the server they last left, or a lobby) or by-domain |
by-domain | [] | { host = "eu.example.org", server = lobby-eu } entries, read in order; a star stands for one part of a name |
allowed-commands | [] | Proxy commands a player may run before logging in, such as glist. Every other proxy command, and every move to another server, waits |
claim-seconds | 30 | How long a signed claim stays good; a fresh one is written before each connection |
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 (redis://:password@host:6379/0) and channel (uxmauth).
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:
| Value | The player waits |
|---|---|
server (default) | At the dialog or frozen world of the server they join, so every server behind the proxy must run uxmAuth |
limbo | In a world built inside the proxy that no server sees, typing /login or /register. Needs LimboAPI 1.1 or 2 |
limbo-file (limbo.schem) names a schematic in the data folder the world is built from; without it the player stands
on a small platform at limbo-spawn ([0.5, 100, 0.5]). A proxy asked for its own world that cannot build it refuses
every login and says why: a server without uxmAuth would let a waiting player straight in. With the proxy's world, a
player who has not logged in reaches no server.
Across the network
Alerts reach staff with uxmauth.admin.alerts on every server. /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 registered and logged-in run once per login on the proxy.
Related: network.conf, Database
Was this page helpful?