Snowbird Command Bridge (plugin)¶
Makes /msg, /tell and /w send ChatControl's cross-server private messages instead of
vanilla's single-server ones. Players keep the commands they already know.
What it does¶
- Takes over the
/msg,/telland/wcommands and passes them straight to/chatcontrol:msg. - Passes tab complete to ChatControl too, so
/msg <tab>lists players on every server, not just the one you are on. - Does nothing else. ChatControl does all the argument checks, permissions and delivery.
Why it is needed: /msg, /tell and /w are vanilla Minecraft commands. ChatControl adds its
message command after the server starts, and Bukkit will not give it a name that is already taken.
So without this plugin the plain names stay vanilla (this server only), and ChatControl's command
is only reachable as /chatcontrol:msg. ChatControl's other names (/pm, /whisper, /message,
/m, /t) are free and work without help.
How players use it¶
/msg Steve hi, want to trade?
/tell Steve hi
/w Steve hi
All three work the same, even if Steve is on another server. Reply with /r as usual.
Staff guide¶
There are no staff commands and no permission nodes of its own. Who can send messages is set by ChatControl's permissions and the CommandWhitelist.
Test as a non-op: /msg <tab> should list players from all servers. /msg <player> hello to
someone on another server should arrive, and /r should reply.
Configuration¶
None. The plugin has no config file. A new jar goes live on a server restart.
Data and storage¶
None.
Troubleshooting¶
| Symptom | Cause | Fix |
|---|---|---|
/msg only reaches players on the same server |
This plugin is not loaded, so vanilla /msg answers |
Check the jar is in plugins/ and restart |
/msg does nothing |
ChatControl is not installed or failed to load | Fix ChatControl first. This plugin only forwards to it |
/msg <tab> shows only local players |
ChatControl's Private_Messages.Allow_Cross_Server_Tab_Complete is off |
Turn it on in ChatControl's settings |
Boot log lines:
[SnowbirdCommandBridge] Bridging /msg, /tell and /w to chatcontrol:msg.
If ChatControl is missing you also see
ChatControl is not installed - /msg, /tell and /w will do nothing.
Maintainer notes¶
- A command listed in
plugin.ymlis registered ahead of vanilla. That is how EssentialsX used to own/msg, and it is the trick this plugin uses. commands.ymlaliases cannot fix this. Bukkit's command map skips an alias whose name is taken, and it does not fall back tobukkit:msgeither.- The full argument line is rebuilt word for word and sent with
dispatchCommandas the same sender, so ChatControl sees the real player. - Tab complete is passed to ChatControl's own command. Without that, Bukkit's default completer would list only players on this server.
- Shipped with the chat stack to all six backends (Paper hub and the Youer backends).
Building¶
This repo has no Gradle build. The jar was built by hand: compile the one class against a Paper
or Spigot 1.21.1 API jar with Java 21, then package it with plugin.yml.
mkdir -p build/classes
javac --release 21 -cp /path/to/paper-api-1.21.1.jar -d build/classes \
src/main/java/net/snowbird/cmdbridge/CommandBridge.java
cp src/main/resources/plugin.yml build/classes/
jar cf build/SnowbirdCommandBridge-1.0.0.jar -C build/classes .
Output: build/SnowbirdCommandBridge-1.0.0.jar (the build/ folder is not tracked in git).
Full command, permission and config tables: Reference.