ModsJava
proxied_command
Proxied Command allows players to execute commands across servers
⬇ Download on Hangar# Proxied Command
[GitHub](https://github.com/mrcl-at/proxied_command) - [Hangar](https://hangar.papermc.io/mrcl/proxied_command) - [Modrinth](https://modrinth.com/plugin/proxied-command) - [SpigotMC](https://www.spigotmc.org/resources/proxied-command.138117/) - [Discord](https://discord.gg/8pSzR4XYPw)
This project is a fork of [Proxied Warp](https://github.com/mrcl-at/proxied_warp).
Proxied Command allows players to execute **commands across servers** within a Velocity or BungeeCord network. The player doesn't need to manually switch servers – Proxied Command automatically connects them to the target server and then executes the command there.
The project consists of four modules:
| Module | Task |
|--------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `velocity` | Forwards command requests between backend servers and connects players to the target server when needed |
| `paper` | Receives the `/proxiedcommand` command from the player and executes the requested command after the server connection. For **Paper** backend servers. Supports [MiniMessage](https://docs.papermc.io/adventure/minimessage/) formatting for messages |
| `spigot` | Same functionality as the `paper` module, but for **Spigot** backend servers. Messages use legacy Minecraft color codes (`&`) instead of MiniMessage |
| `bungeecord` | BungeeCord proxy module that forwards command requests and connects players to the target server |
## How It Works
Communication between the proxy and backend servers happens via the shared **Plugin Messaging Channels** `proxied_command:command` and `proxied_command:message`.
The process works as follows:
1. **Player executes command** – On a backend server, the player calls the registered command with a target server and command (e.g., `/proxiedcommand farmworld home farmhome`).
2. **Backend plugin sends message** – The plugin (`paper` or `spigot` module, depending on the server) first checks the input and permission, then builds the message ` ` and sends it as a plugin message over the channel to the proxy.
3. **Proxy plugin processes the request** (Velocity or BungeeCord):
- Checks whether the specified player and target server exist.
- If the player is already on the target server, the message is forwarded directly.
- Otherwise, a connection to the target server is established first, and the message is only forwarded after the server switch succeeds.
4. **Target server executes the command** – The plugin on the target server receives the forwarded message, checks whether the player is online there, and dispatches the given command as that player.
## Installation
1. Place the matching proxy module in the proxy's `plugins` folder: **`velocity`** for Velocity or **`bungeecord`** for BungeeCord.
2. Install the matching backend module on **every** backend server where players should be able to trigger or receive commands: the **`paper` module** on Paper servers, the **`spigot` module** on Spigot servers.
3. Restart the proxy and the affected backend servers.
## Configuration (Paper/Spigot Modules)
On first startup, the respective plugin generates a `config.yml` with the following default values. The `aliases` section is optional and can be added manually.
**`paper` module:**
```yaml
need-permission: false
whitelisted-servers: []
whitelisted-commands: []
message:
usage: 'Usage: /proxiedcommand '
usage-other: 'Usage: /proxiedcommandother '
permission: 'You do not have permission to do that!'
server-not-whitelisted: 'This server is not whitelisted!'
command-not-whitelisted: 'This command is not whitelisted!'
player-not-online: 'Player is not online!'
key-not-found: "Key '' not found!"
server-not-found: 'Server not found!'
connection-failed: 'Connection failed!'
```
**`spigot` module:**
```yaml
need-permission: false
whitelisted-servers: []
whitelisted-commands: []
message:
usage: '&cUsage:&r /proxiedcommand '
usage-other: '&cUsage:&r /proxiedcommandother '
permission: '&cYou do not have permission to do that!'
server-not-whitelisted: '&cThis server is not whitelisted!'
command-not-whitelisted: '&cThis command is not whitelisted!'
player-not-online: '&cPlayer is not online!'
key-not-found: "&cKey &f'%s' &cnot found!"
server-not-found: '&cServer not found!'
connection-failed: '&cConnection failed!'
```
| Key | Description |
|-----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|
| `need-permission` | Determines whether players need an explicit permission to use the commands (see [Permissions](#permissions)). |
| `whitelisted-servers` | List of servers that are allowed to be used as a target. If empty, all servers are allowed. |
| `whitelisted-commands` | List of commands that are allowed to be executed. If empty, all commands are allowed. |
| `aliases` | Optional section mapping an alias to a target server. For example, `spawn: lobby` lets `/proxiedcommand spawn` execute `spawn` on `lobby`. |
| `message.usage` | Message shown when `/proxiedcommand` is used incorrectly. |
| `message.permission` | Message shown when permission is missing. |
| `message.server-not-whitelisted` | Message shown when a server is not whitelisted. |
| `message.command-not-whitelisted` | Message shown when a command is not whitelisted. |
| `message.usage-other` | Message shown when `/proxiedcommandother` is used incorrectly. |
| `message.player-not-online` | Message shown when the selected player is not online on the source server. |
| `message.key-not-found` | Fallback message used when a configured message key is missing. |
| `message.server-not-found` | Message shown when the target server cannot be found by the proxy. |
| `message.connection-failed` | Message shown when the proxy cannot connect the player to the target server. |
In the **`paper` module**, messages support [MiniMessage](https://docs.papermc.io/adventure/minimessage/) formatting (e.g. ``, ``). In the **`spigot` module**, messages use legacy Minecraft color codes with `&` as the formatting character (e.g. `&c` for red) instead.
## Command
The following commands are available on the backend server (Paper or Spigot):
```
/proxiedcommand
/proxiedcommandother
```
The commands also have aliases: `/proxied_command` and `/pcmd` for `/proxiedcommand`, and `/proxied_command_other`, `/pcmdother`, and `/pcmdo` for `/proxiedcommandother`.
- `` – Name of the target server, as registered in the proxy configuration (for example `velocity.toml`).
- `` – The command to execute on the target server. Arguments may contain spaces.
- `` – An alias defined in `config.yml` that maps an alias/command name to a target server.
- `` – An online player who should be connected and have the command executed.
`/proxiedcommand` can only be executed by players. `/proxiedcommandother` can also be executed from the console.
## Permissions
If `need-permission` is set to `true` in `config.yml`, a player needs one of the following permissions to execute `/proxiedcommand `:
| Permission | Effect |
|------------------------------------|---------------------------------------------------------------------------------|
| `proxiedcommand.command.*` | Allows executing **all** commands. |
| `proxiedcommand.command.` | Allows executing a **specific** command (spaces are replaced with underscores). |
For `/proxiedcommandother`, the corresponding permissions are `proxiedcommand.command.other.*` and `proxiedcommand.command.other.`.
Permissions are matched by prefix, so it is not necessary to specify the complete command. For example, with `need-permission: true`:
- `proxiedcommand.command.gamemode` allows both `gamemode creative` and `gamemode survival`.
- `proxiedcommand.command.gamemode_creative` allows `gamemode creative`, but not `gamemode survival`.
Command spaces are replaced with underscores when the permission is built. The same prefix behavior applies to the corresponding `proxiedcommandother` permissions.
If both permissions are missing, the player receives the error message configured in `message.permission`, and the request is not sent to the proxy.
If `need-permission` is set to `false` (default), no permission check is performed and every player can use the command for every registered server.
## Requirements
- A Velocity or BungeeCord proxy with the matching proxy module (`velocity` or `bungeecord`).
- A **Paper** based backend server (with the `paper` module) or a **Spigot** based backend server (with the `spigot` module).
- The commands being executed must be available on the target backend server.
- Java version 25 or higher.
## Known Limitations
- Proxied Command itself does not check whether the specified command exists – command validation and execution are handled by the target server.
proxied_command is a free Minecraft Java mod. Compatible with Minecraft 1.10, 1.10.1, 1.10.2, 1.11 and newer. Downloaded 1 times (via Hangar). Download it and open it directly in the game.