Troubleshooting
Common issues and how to fix them. Enable debug: true in config.yml for detailed logs.
Backend can't connect to Velocity
Symptoms: No "Client authenticated" message on Velocity. Backend logs show connection errors or timeouts.
Checklist:
- Secret mismatch → the
secretin each backend's config must match Velocity'ssecret.keyfile contents - Wrong host → if both run on the same machine, use
127.0.0.1. If on different machines, the backend'shostmust point to Velocity's external IP or domain - Port closed → make sure
bind-porton Velocity is open in your firewall and matches the backend'sport - TLS mode mismatch → both sides must use the same
tls-mode(PLAIN,TOFU, orSTRICT) - Start order → start Velocity first, then backends. The proxy must be listening before clients connect.
"Address already in use" on Velocity
Another process is using the configured port.
Fix: Change bind-port to an unused port (e.g. 8766) on Velocity and all backends, then restart.
Clients connect but commands don't work
Symptoms: /cb list shows the client as connected, but running a script command does nothing.
Checklist:
- Script not loaded → check
/cb scriptsto verify the script appears. If not, check for YAML syntax errors in the server log. - Scripts are Velocity-only → all scripts must be in
plugins/commandbridge/scripts/on the Velocity proxy, even if they register commands on backends. - Missing permissions → the player needs
commandbridge.command.<name>unlesspermissions.enabledisfalsein the script - Target client ID mismatch → the
idinexecutemust match the backend'sclient-idexactly - Client disconnected → if the target backend disconnected after
/cb listwas run, the command will fail silently
"You do not have permission to use this command"
The player lacks the required permission node.
Fix:
- Grant
commandbridge.command.<name>on the correct side (where the command is registered), or - Set
permissions.enabled: falsein the script to disable checks, or - Set
permissions.silent: trueto suppress the message (the command still won't run)
TLS / SSL errors
| Error | Cause | Fix |
|---|---|---|
SSL handshake failed |
TLS mode mismatch | Set the same tls-mode on both sides |
Certificate pin mismatch |
Proxy cert was regenerated | Clear tls-pin on the backend, restart |
PKIX path building failed |
STRICT mode with bad keystore | Check keystore-path, keystore-password, and keystore-type |
See the Security page for detailed TLS setup.
Placeholders not resolving
${arg}placeholders require matching argument names in theargslist- PlaceholderAPI (
%placeholder%) requires PAPI on the backend and PapiProxyBridge on Velocity - PAPI placeholders only resolve when the executor is a player (not console)
- Check spelling and case. Placeholder names are case-sensitive.
Script validation errors
CommandBridge validates scripts at load time. Common errors:
name does not match pattern→ script name must be lowercase, 3-33 chars, start with a letter, onlya-z0-9-.required field missing→ add the missing field. All ofversion,name,permissions,register,defaults,args,commandsare required.platform mismatch→ you used a backend-only argument type (likePLAYERS) in a command registered on Velocity. Either register on a backend or use a universal type.unknown argument type→ check spelling against the Argument Types list.
Debug mode
Enable debug logging for detailed output:
debug: true
Or toggle it at runtime:
/cb debug
Debug logs include WebSocket frames, auth handshakes, command dispatch steps, and placeholder resolution.
Getting help
If you're still stuck:
- Run
/cb dumpand include the output - Include your CommandBridge, Minecraft, Velocity, and backend versions
- Include relevant log output (use a pastebin for long logs)