All Mods Resource Packs Data Packs Shaders Modpacks Plugins
CommandBridge

CommandBridge

by objz • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

CommandBridge

CommandBridge is a cross-server command execution plugin for Minecraft networks running on Velocity. You define commands in YAML scripts on the proxy, and CB registers and dispatches them across all connected backend servers. No plugin messaging, no player-online requirements, no limitations.

A player runs /lobby on a backend, the proxy picks it up. An admin runs /alert on Velocity, every backend executes it. Commands go through instantly over WebSocket or Redis.

separator

CommandBridge

Documentation GitHub

separator

How it works

Everything runs through scripts. You create a .yml file, define the command name, arguments, where it registers, and what happens when someone runs it. Drop it in the scripts folder on Velocity and you're done. CB reads, validates, and registers commands on whichever servers you specified. If something is wrong, it tells you exactly what and skips that script. The rest still loads fine.

Here is a quick example. This registers /alert on the proxy and broadcasts a message to two backends as console:

version: 4

name: example
description: An example command script - edit or replace this with your own
enabled: false
aliases: [ex]

permissions:
  enabled: true
  silent: false

register:
  - id: "client-1"
    location: VELOCITY

defaults:
  run-as: CONSOLE
  execute:
    - id: "survival-1"
      location: BACKEND
  server:
    target-required: false
    schedule-online: false
    player-arg: ""
  delay: 0s
  cooldown: 0s

args:
  - name: player
    required: true
    type: STRING
    suggestions: []

  - name: message
    required: true
    type: TEXT
    suggestions: []

commands:
  - command: "msg ${player} ${message}"

separator

Platforms

One jar works everywhere. Install the same file on Velocity and all your backends.

6 Platforms

Transport

Pick one. WebSocket is the default and works out of the box. Redis is there if you need it.

Transport

WebSocket mode: Velocity hosts the server, backends connect to it. No external dependencies. TLS built in.

Redis mode: all instances connect to your existing Redis server. Useful if your servers are behind NAT or you already run Redis for other things.

Both modes support multi-proxy setups. One Velocity runs as the primary, any additional proxies connect in client mode.

Security

Every connection is authenticated with HMAC-SHA256. Both sides prove they know the secret without ever sending it over the wire. On top of that you get TLS encryption with three modes to choose from.

Security

TOFU is the default. Velocity generates a self-signed certificate on first startup, backends pin it automatically. Zero manual certificate management, encrypted from the start.

Execution modes

Commands can run in three different contexts depending on what you need.

Execution Modes

CONSOLE runs with full permissions. PLAYER runs as the player who triggered it. OPERATOR gives temporary elevated permissions for that specific command and nothing else.

Arguments

Full argument parsing with tab completion via CommandAPI. 22 types covering everything from basic strings to Minecraft-specific types like players, locations, items, and entities.

22 Argument Types

Arguments become ${name} placeholders in your command strings. PlaceholderAPI is supported too if you need external data like player stats or economy values.

separator

Built for real networks

CommandBridge is designed for production. Commands can be rate limited per player with cooldowns from milliseconds to hours. If a player is offline when a command targets them, CB queues it and executes it when they come back, even across server restarts.

You can apply delays to individual commands, reload all scripts without restarting with /cb reload, and run multiple commands in a single script with different targets and settings each. Everything is managed from one place on the Velocity proxy.

Player presence is tracked across the entire network, including multi-proxy setups. CB knows where every player is at all times, so commands that depend on a player being on a specific server just work. No guessing, no race conditions.

Requirements

Requirements

CommandAPI is required on every server. PlaceholderAPI via PapiProxyBridge and PacketEvents are optional.

separator

Metrics

This plugin collects anonymous statistics via bStats. You can disable this in plugins/bStats/config.yml.

bStats

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.1.x 1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
26.1.x 1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
26.1.x 1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
26.1.x 1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Folia Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot Velocity Waterfall
16h ago 1
1.21.x 1.20.x
Paper Purpur Velocity
16h ago 1
1.21.x 1.20.x
Paper Purpur Velocity
16h ago 1
1.21.x 1.20.x
Paper Purpur Velocity
16h ago 1
1.21.x 1.20.x
Paper Purpur Velocity
16h ago 1
1.21.x
Paper Purpur Velocity
16h ago 1
1.21.x
Paper Purpur Velocity
16h ago 1
1.21.x
Paper Purpur Velocity
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21.x 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21.x 1.20.x
Velocity
16h ago 1
1.21 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21 1.20.x
Velocity
16h ago 1
1.21 1.20.x
Velocity
16h ago 1
1.21 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21 1.20.x
Velocity
16h ago 1
1.21 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21 1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.21 1.20.x
Velocity
16h ago 1
1.20.x
Velocity
16h ago 1
1.20.x
Velocity
16h ago 1
1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
1.20.x
Velocity
16h ago 1
1.20.x
Bukkit Paper Purpur Spigot
16h ago 1
this minor update just fixes some bugs and a arclight conflict

latest commit: d6a59a9

this update fixes a placeholder bug that prevented some scheduled tasks from
ever resuming, adds a configurable task-expiry timer, and redesigns the admin
CLI around resources with consistent rendering across console and in-game chat.

so whats new or fixed:

  • scheduled tasks**

  • fixed ${arg} placeholders in execute target IDs not being resolved at
queue time, so affected tasks could never match a connected client and
never resumed
  • new tasks.expire-after config option (seconds; default 86400, 0 disables);
expired tasks are pruned on load and on the 5-minute save tick
  • tasks left over with unresolved ${...} placeholders from earlier versions
are dropped on load with a warning

  • admin commands**

  • redesigned the /cb tree by resource:
  • /cb script list | show <name> [group] | enable <name> | disable <name>
  • /cb task list | clear <id>
  • /cb client list | ping [id] | players <id>
  • /cb config show [section] | reload
  • /cb script show <name> opens a clickable section navigator (permissions,
register, defaults, args, commands); pass a group to drill into just that
group as a syntax-highlighted yaml card
  • /cb script enable|disable <name> edits the enabled: line of the matching
yaml file in place (comments preserved) and re-pushes registrations to
connected clients
  • /cb config show mirrors the same summary + sections layout; drill into a
section via tab-completion or by clicking it in chat
  • every argument-taking subcommand has live tab-completion now (script names,
script groups, task ids, client ids, config keys)

  • rendering**

  • single Report builder drives every command's chat output, so kvs, section
headers, bullets, list items, action buttons, and pagination look the same
everywhere
  • DebugPrinter exposes generic printRecord, printRecordOverview, and
printList so any record renders as the same yaml card the old
/cb scripts view used

  • removed**

  • /cb scripts, /cb tasks, /cb list, /cb ping - replaced by the
resource-scoped forms above (no backwards-compat aliases on v3)
  • /cb task show <id> and /cb client show <id> - their list views already
show everything useful, no point duplicating

latest commit: 76edfda

This update includes a small fix for an issue where the version was saved incorrectly, causing the launcher to always ask for an update.

latest commit: 9563e3c

there are no big changes here:

  • fix(velocity): deprecation warning was broken on NTFS systems
  • feature: added support for the latest minecraft versions(26.1, 26.2 and below)

latest commit: d7f43a1

this update adds a public developer API for third-party plugins, hardens auth security,
and fixes a bunch of stability issues across the board.

so whats new:

  • developer API**

  • new api module for third-party plugin integration, available on maven central
  • typed message channels via CommandBridgeAPI.channel(Class) with send, request, broadcast, and listen
  • delivery conditions on senders: requirePlayer(UUID) to gate on player presence, whenOnline(UUID) to queue until the player connects
  • server lifecycle events via onServerConnected and onServerDisconnected (proxy only)
  • connection state tracking via onConnectionStateChanged (all platforms)
  • player locator service for resolving which server a player is on (proxy only)
  • CommandBridgeProvider.get() and CommandBridgeProvider.get(Class) to obtain the API instance
  • proxy-only methods return Optional<Subscription> instead of raw Subscription, returning Optional.empty() on backends
  • full JDK-style JavaDocs across all API types

  • security**

  • hardened auth flow with constant-time HMAC comparison to prevent timing attacks
  • fixed AUTH_OK race condition where messages could be sent before the client processed auth success
  • added reconnect on failed server proof verification
  • operator execution no longer grants wildcard permissions, only explicit ones

  • fixes**

  • fixed cooldown being applied before dispatch instead of after
  • fixed MiniMessage tags in error messages not being escaped
  • fixed script reload not being thread-safe
  • fixed player join events firing for already-tracked players
  • fixed polling not being reset on shutdown
  • fixed auth check missing on config reload
  • fixed Log varargs handling for single-argument messages
  • fixed config name not being passed to ConfigManager in the velocity backend adapter
  • fixed operator permission resolution being inconsistent across platform executors
  • left-aligned all chat UI output and removed pixel-width centering
  • various null guard and stability improvements across dispatch, registration, and player tracking

  • internals**

  • modernized codebase to java 21 idioms
  • rebuilt test suite from scratch with 136 tests across core, velocity, and backends
  • added CI test workflow and testing documentation

breaking changes:
  • RunAs and ConnectionState moved to the api package, internal duplicates removed

latest commit: d7f43a1

this update is mostly about migration tooling, better player resolution, and support/debug quality of life.
also had some internal cleanup and an important fix for velocity running in client mode.

so whats new:

  • added /cb dump for support snapshots (sanitized upload + local file export)
  • added /cb migrate to migrate script files to the current schema
  • migration is script-only now. there was a short config migration path but that got reverted again
  • added player-arg per command for target-required and schedule-online
  • added remote uuid resolving between connected proxies (RESOLVE_UUID) + local UserCache + Mojang fallback
  • added OFFLINE_PLAYER argument type with suggestions support
  • reworked schedule-online / player tracking flow to be more reliable and added clearer warning logs when player resolution fails
  • fixed double command descriptions in command registration output
  • fixed velocity client mode startup crash (ClassNotFoundException: org.bukkit.command.CommandSender)

breaking changes:
  • scripts now require version: 4
  • older scripts must be migrated first
  • internal runtime files moved into the data/ subdirectory

latest commit: e951a9e

this version brings some nice additions mostly around target-required
and player tracking across proxies. the wiki has been fully rewritten for this version so make sure to check that out.

so whats new:

  • target-required per command option. this makes sure the player is actually on the target server before dispatching the command. also works when a proxy is in client mode so it checks across all connected proxies not just the local one
  • per-command cooldowns, the old pipeline cooldown stage is gone
  • player presence tracking. backends and client mode proxies now sync their player lists to the proxy. the full list only gets sent once on auth and after that only join/leave deltas get sent so you dont have to worry about huge packets even with like 30k players
  • added PLAYERS argument type for velocity
  • scripts now require version 3

breaking changes:
  • removed Server.timeout from the config
  • removed some unused config values
  • script version 3 is now required, older versions wont work anymore

latest commit: 37b29f5

well this is a big version jump because it has major rewrites to support
a second backend. what do I mean by that? CommandBridge was(or still is)
being powered by Websockets. but some users asked for the feature to implement
redis. So here it is:

  • full redis support as transport layer
  • you can either use websockets or redis depends on what you select in the config

so big version because the config has major changes and the plugin architecture


fixed:
  • example.yml was incorrect
  • commandapi unregistration on shutdown threw exceptions

added:
  • modrinth api - update checker

Hello guys, I am happy to release this version. This is the first release of the full rewrite of my plugin. Visit the migration guide here: https://cb.objz.dev/docs/migration/
  • [v2.3.5] - 2025-12-28**

  • dependency: changed commandapi from 11.0.0 to 11.1.0




  • [v2.3.4] - 2025-10-11**

  • fix: fixed command registration issue on paper 1.21.10




  • [v2.3.3] - 2025-10-10**

  • feat: now supports minecraft 1.21.9 and 1.21.10




  • [v2.3.2] - 2025-09-15**

  • fix: fixed ClassCastException




  • [v2.3.1] - 2025-09-14**

  • feat: Inject player placeholders whenever we have a player context, regardless the target executor is set to.




  • [v2.3.0] - 2025-08-01**

  • Fixed multithreading issues on folia servers.




  • [v2.2.9] - 2025-07-22**

  • Added /cb dump command to dump the current configuration and scripts.
You can view the results on the website. It will generate a link for you.




  • [v2.2.8] - 2025-07-22**

  • updated to minecraft version 1.21.8



  • [v2.2.7] - 2025-07-02**

  • updated to minecraft version 1.21.7
  • introduced aliases for scripts.

go outside, great weather!


  • [v2.2.6] - 2025-06-07**

  • Improved feedback when processing player commands sent from the console


  • [v2.2.5] - 2025-05-19**




  • [v2.2.4] - 2025-05-10**

  • changed broken links for the new website
  • internal renamings



  • [v2.2.3] - 2025-04-29**

  • Adds support for minecraft version 1.20.5
  • fixed #14



  • [v2.2.2] - 2025-04-30**

  • Fully rewrote and restructured the wiki for clarity and GitBook compatibility.
  • Scripts guide now split into clean pages with tables, examples, and diagrams.
  • Clear separation of Velocity ↔ Paper script directions with real-world examples.
  • Added built-in placeholder overview with platform support table.
  • Included visual overview diagrams for better understanding.
  • Added permission hints and common setup tips in examples.
  • Improved explanation for PlaceholderAPI support on both platforms.


  • [v2.2.1] - 2025-04-25**

  • Fixed issues with the Metrics class causing runtime errors.
  • Resolved an "Internal Server Error" when players lacked permission.
  • Added full support for Folia, ensuring compatibility and improved performance.

  • [v2.2.0] - 2025-04-17**

  • Replaced entire backend with Netty, providing improved performance and enhanced security.
  • Clients now automatically attempt to reconnect to the server after shutdown, with a configurable timeout. Manual reconnection is possible afterward.
  • Fixed a bug where the WebSocket server would not shut down properly.
This resolves [#11](https://github.com/72-S/CommandBridge/issues/11).

> Major version bump due to complete backend reimplementation.
> In the next release, a WebUI for managing commands and a /dump command will be introduced.

  • [v2.1.8] - 2025-03-21**

  • Improved performance of onLoad and onEnable, reducing usage from 8% to 0.54%.
  • Added PAPIProxyBridge support for PlaceholderAPI integration on Velocity.
  • Fixed an issue on Velocity where command arguments were incorrectly required instead of optional.

  • [v2.1.7] - 2025-03-21**

  • Added**
  • Optional support for PlaceholderAPI on both Bukkit and Velocity platforms. If the PlaceholderAPI plugin is present, external placeholders will be parsed alongside internal ones.
  • Improved internal placeholder handling to avoid conflicts with PlaceholderAPI syntax, ensuring consistent behavior whether or not PlaceholderAPI is installed.

  • Changed**
  • Updated logging messages to clearly indicate whether PlaceholderAPI was detected and whether internal or external placeholder systems are being used.

  • [v2.1.6] - 2025-03-06**

  • Changed**
  • Removed dependencies on the Paper API, making the plugin fully compatible with the Bukkit API. This allows support for a wider range of server software, including third-party platforms like Arclight that do not implement the Paper API.
  • Added a legacy-plugin.yml to ensure compatibility with non-Paper servers while still keeping a paper-plugin.yml to maintain Paper-specific features.

  • [v2.1.5] - 2025-02-27**

  • Changed**
  • The plugin is now Spigot-mapped and will be remapped by Paper to support older versions starting from 1.20.


CommandBridge Icon
Download CommandBridge
Select game version
Select platform