Skip to content

Latest commit

 

History

29 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

buc

BungeeCord User Control — whitelisting, banning and proxy-wide broadcasts, as a Velocity plugin.

Requirements

Proxy Velocity 4.2.0 (built against com.velocitypowered:velocity-api:4.2.0)
Java 25 — velocity-api 4.2.0 ships Java 25 class files, so an older JRE cannot load it
Build Gradle wrapper (9.7.1), ./gradlew build

Artifacts land in build/libs/buc-<version>-velocity.jar.

Commands

The command alias defaults to buc and is configurable via buc_command in config.toml.

Command Permission Description
/buc help — Show the command list
/buc whitelist <on/off> buc.whitelist.toggle Toggle the whitelist
/buc whitelist add <playername> buc.whitelist.add Add a player to the whitelist
/buc whitelist remove <playername> buc.whitelist.remove Remove a player from the whitelist
/buc whitelist reload buc.whitelist.reload Reload whitelist.json from disk
/buc ban <playername> [reason] buc.ban Ban a player permanently
/buc tempban <playername> <time> [reason] buc.tempban Ban a player for a while (1d2h3m4s)
/buc unban <playername> buc.unban Lift a ban
/buc broadcast <message...> buc.broadcast Announce a message to every player on this proxy
/buc reload buc.reload Reload the configuration

All permissions default to deny for players: Velocity grants nothing unless a permission plugin says so. The console is exempt, as it is for every other BUC command — Velocity's console source answers true to every permission check.

/buc broadcast

/buc broadcast <message...>

Delivers one chat message to every player connected to this proxy, no matter which backend server they are currently on, and exactly once each. Players who are attached to the proxy but not yet handed off to a backend receive it too.

  • Scope is this proxy only. The player set is ProxyServer#getAllPlayers(). BUC does not federate the announcement to sibling proxies — if you run several Velocity instances in front of one network, each one broadcasts only to its own players. There is no Redis/plugin-messaging fan-out.
  • The message is literal. It is never parsed as MiniMessage and never colour-translated, so <red>, <click:run_command:...> and &c typed by a sender are displayed as the characters they are and can never turn into a clickable action. Unicode, emoji and runs of interior spaces survive verbatim. Only the configurable prefix around the message carries colour.
  • The sender is not double-sent. An online sender receives the announcement once, as one of the players, plus a separate acknowledgement line reporting how many players it reached.
  • Empty input does nothing. /buc broadcast with no text, or with only whitespace, prints the usage line and sends no announcement at all.
  • An empty network is fine. With nobody online the command reports 0 player(s) and sends nothing.
  • Every broadcast is written to the proxy log with the sender, the recipient count and the verbatim text.

Example console output with nobody online:

[buc] [CONSOLE] broadcast to 0 player(s): scheduled restart in 5 minutes

Messages / localisation

messages.toml is copied into the plugin data folder on first start and is never overwritten. Keys missing from your copy — including everything under [messages.broadcast], command.help.broadcast and log.broadcast — fall back to the defaults bundled in the jar, so a messages.toml carried over from an older BUC keeps working without edits.

The broadcast keys are:

[log]
  broadcast = "%s broadcast to %s player(s): %s"   # sender, count, message
[command]
  [command.help]
    broadcast = "&3/%s broadcast <message...> &6- &bBroadcast a message to every player on this proxy"
[messages]
  [messages.broadcast]
    format = "&6[Broadcast] &f%s"                  # %s is replaced by the sender's text, literally
    usage  = "&cUsage: /%s broadcast <message...>"
    sent   = "&aBroadcast delivered to %s player(s)"

& is translated to the section sign in the pattern only, never in the broadcast text itself.

HAProxy Support

Set haproxy to true and add all your HAProxy server IP to the list. Only IPs in this list will enable PROXY protocol support, traffic from other IPs is treated as normal TCP traffic.

Example of HAProxy configuration file:

global
        ulimit-n  4096

defaults
        log global
        mode    tcp
        option  dontlognull
        timeout connect 1000
        timeout client 150000
        timeout server 150000

frontend mc-in
        bind *:25565
        default_backend mc-out

backend mc-out
        server mcbackend1 backend1:25565 send-proxy-v2
        server mcbackend2 backend2:25565 send-proxy-v2
        source 1.2.3.4 # your haproxy public ip address

About

BungeeCord User Control - Whitelisting / Banning for BungeeCord, with HAProxy support.

Resources

Stars

2 stars

Watchers

10 watching

Forks

Releases

Packages

Contributors

Languages