BungeeCord network
On a network behind a BungeeCord or Waterfall proxy, AdminControl does what it does behind Velocity: a banned player cannot join the network, and a kick or ban given on one server takes the player off the whole network. Supported: current BungeeCord builds (checked on build 2104, version 26.1) and Waterfall (checked on 1.21 build 615). Other BungeeCord forks are not tested.
What you need
- A current BungeeCord build or Waterfall, on Java 21 or newer.
- A MySQL or MariaDB database shared by the proxy and every server behind it (see Database).
online_mode: truein BungeeCord'sconfig.yml, or an authentication plugin on a network without premium accounts (below).- Internet access from the proxy on its first start with AdminControl (below).
- The servers' ports closed to everything but the proxy, or BungeeGuard (see "Securing the servers").
Install
Put the same
AdminControl.jarin the proxy'splugins/folder. One jar works on Paper, Purpur, Folia, Spigot, Velocity, BungeeCord and Waterfall.Start the proxy once. BungeeCord reads the
librarieslist of the plugin and downloads Adventure (the text library AdminControl uses) from Maven Central into itslibraries/folder. AdminControl then createsplugins/AdminControl/config.ymland tries the database in it (localhost, no password): until you set yours, the log saysCould not open the shared databaseand punishments are not checked on the proxy.In
plugins/AdminControl/config.ymlon the proxy, enter the database every server uses. The keys are the same as on Velocity:# en or pl: the ban screen and the replies of /ac on the proxy. language: en # A name for this proxy in the logs. server-name: proxy database: type: mysql mysql: host: db.example.com port: 3306 database: admincontrol user: admincontrol password: "a-long-random-password" pool-size: 4 use-ssl: trueEvery server behind the proxy runs AdminControl with
database.type: mysqland the same database.Restart the proxy and run
/ac versionon its console: it showsDatabase: mysql, readywhen the proxy reaches the database. Withdatabase.type: sqliteAdminControl does not start on the proxy and says why in the log.
The proxy has no panel: the panel of any server shows the whole network (see Network panel).
No internet on the first start
Without access to Maven Central, BungeeCord cannot download the libraries and does not load AdminControl (the log
shows an error while resolving net.kyori libraries). Start the proxy once with outbound access, or copy the
libraries/ folder from a proxy where it worked. Very old BungeeCord builds do not read libraries at all and do
not load the plugin: update the proxy.
A copied libraries/ folder is trusted as it is. Check its files against these SHA-256 sums (the same files as on
Maven Central) before you start the proxy with them; net/kyori/ in that folder holds them:
| File | SHA-256 |
|---|---|
adventure-api-4.18.0.jar |
079f8f6030f320c37159abb5d55d106b1736b44c90e9f7a42886a81183dac3fc |
adventure-key-4.18.0.jar |
2b32dd1f9987af8dcd0bf5ab8e96fc3deeac03f85d5329b588d98b806230e52d |
adventure-text-minimessage-4.18.0.jar |
444e7108e2b030d02d12d36439563350ccfcf2cf6a8f50db6057fc76a16d0abf |
adventure-text-serializer-plain-4.18.0.jar |
15ff9e237d5bf200ecaceb57e83049d23765690bb8ce3a5320aa37d4b5cba3da |
adventure-text-serializer-legacy-4.18.0.jar |
36e08f218927c47dca1c90306afb31f1f0bbbfc71e3ea58b0fbfe1d7020c6965 |
adventure-text-serializer-gson-4.18.0.jar |
ccf68107afe65a5f6f8d822698b002e46e05e10aca6fb5801a7f86a0ed71f93d |
adventure-text-serializer-json-4.18.0.jar |
645041fca550b3bf1bcb8508b72942cc15ea18377b51ceb96d073edf432eb66f |
adventure-text-serializer-bungeecord-4.3.4.jar |
e1bc376c6dc7a2100016015735ce4ccc534d2b26bf5ab82aac751c5032056c39 |
examination-api-1.3.0.jar |
c9237ffecb05428f6eff86216246ac70ce0b47b04c08ea7ca35020fde57f8492 |
examination-string-1.3.0.jar |
7d01fc25a4bb3af0e1662685455f4541fbf4626216ea5846e455c1491e156b8c |
option-1.0.0.jar |
2bde5a7a2d73fa1166a0f1663a22c3af7d2768ffc4fea331774c3c0f62225d11 |
Forwarding
Without forwarding, the servers see every player at the proxy's address: IP bans and "other accounts from the same address" stop working, and AdminControl refuses IP bans of such players so it does not lock everyone out.
- BungeeCord,
config.yml:ip_forward: trueandonline_mode: true. Withonline_mode: falseanyone can join through the proxy with a staff member's name and gets their account, their linked panel account included; such a network needs an authentication plugin on the proxy. - Each server,
spigot.yml:settings.bungeecord: true. Inserver.propertiessetonline-mode=false(the proxy checks the accounts).
Behind a load balancer or a DDoS shield that sends the PROXY protocol, set proxy_protocol: true for the listener in
BungeeCord's config.yml, and then let only the shield reach the proxy's port.
Securing the servers
BungeeCord forwarding has no secret. A server with bungeecord: true believes whoever connects to it about the
player's name, UUID and address. Anyone who can reach a server's port directly can join as any player, staff
included, and dodge every ban. Do one of these:
- Close each server's port to everything but the proxy (a firewall rule, or the servers listening only on a private address).
- Install BungeeGuard on the proxy and on every server: the proxy then sends a token the servers check.
Once the server has started, AdminControl checks whether BungeeGuard is enabled on it (installed but failed to start
counts as missing). It does not check BungeeGuard's tokens. A server in BungeeCord mode without an enabled BungeeGuard
logs a warning:
This server takes player data from a BungeeCord proxy without BungeeGuard. Its panel shows
Unsecured forwarding next to the server in the network servers card, or as a warning on the dashboard when it is
the only server. The warning stays when the port is closed by a firewall: AdminControl cannot see firewall rules. The server
starts either way.
No flag does not mean safe: only servers with AdminControl (from this version on) report their forwarding. The proxy itself, and servers without AdminControl, show nothing.
What happens where
The same as behind Velocity (see Velocity network): bans and IP bans are checked when a player joins
the network, a new ban or a kick takes the player off the network, mutes are enforced on the servers, warnings are
shown on the server the player is on. If the database is down or the check takes longer than 3 seconds, the proxy
decides with the bans it keeps in memory (the log says checked against the in-memory list); only when that list was
never read does it let the player in and log letting them in.
Commands on the proxy
The same commands as on Velocity, run on the proxy console or by a player anywhere on the network:
| Command | What it does | Who |
|---|---|---|
/ac help |
List of commands. | admincontrol.command |
/ac version |
Plugin version, license, database and how far the punishment log has been read. | admincontrol.command |
/ac ban <player> <reason> |
Permanent ban. | punishment rights |
/ac tempban <player> <time> <reason> |
Timed ban. | punishment rights |
/ac ipban <player> <reason> |
Permanent IP ban. | punishment rights |
/ac tempipban <player> <time> <reason> |
Timed IP ban. | punishment rights |
/ac mute <player> <reason> |
Permanent mute. | punishment rights |
/ac tempmute <player> <time> <reason> |
Timed mute. | punishment rights |
/ac warn <player> <reason> |
Warning. | punishment rights |
/ac kick <player> <reason> |
Kick from the network. | punishment rights |
/ac unban <player> [reason] |
Lift a ban (also an IP ban). | punishment rights |
/ac unmute <player> [reason] |
Lift a mute. | punishment rights |
/ac unwarn <player> [reason] |
Lift the newest warning. | punishment rights |
/ac punish <player> <template> [reason] |
Punish with a template: the player's next escalation step. | punishment rights |
/ac history <player> |
A player's 10 latest punishments. | punishment rights |
/ac rollback and /ac restore (CoreProtect, admincontrol.rollback) are not proxy commands: CoreProtect runs on
the servers, so a player's /ac rollback goes on to the server they are on, and the proxy console does not run them.
/ac ban <player> -r <time> on the proxy answers that CoreProtect is not available there; use the panel or a
server's console.
Punishment rights are the same as on the servers: the proxy console may do everything; a player needs
admincontrol.punish and a linked panel account, and their panel role sets what they may do.
Give admincontrol.command and admincontrol.punish on the proxy with LuckPerms for BungeeCord, which gives them
by UUID. The groups section of BungeeCord's config.yml gives them by name: whoever takes a staff member's old name
after a name change gets them too. Everything else a player types under /ac (/ac link,
/ac report, /ac reload, or a punishment without proxy permissions) goes on to the server the player is on, which
checks its own permissions as before. The proxy console runs only the commands above. AdminControl passes such a
line on last, after the command filters of other proxy plugins have seen it as typed; only a plugin listening to
BungeeCord's chat event at the highest priority sees it as /admincontrol:ac ... (on clients from 1.19), or as a
cancelled line (on older clients, whose line AdminControl sends to the server as typed).
Waterfall
Waterfall is set up the same way. PaperMC no longer develops it: its builds only take BungeeCord's updates, so new Minecraft versions arrive on BungeeCord first.
Known limitations
- The same as on Velocity: mutes are not enforced for chat and commands that a plugin on the proxy handles, and tab
completion of
/acon the network lists only the proxy commands.