CrossChat

CrossChat the links all Messages as one

7

CrossChat

A Velocity 3.x proxy plugin that routes chat from every backend server into a single global channel, visible to all connected players in real time.

---

Features

- Toggle on/off — messages sent on any backend server are broadcast to all players on all (configured) servers - Toggle on/off — edit `config.yml` with your own colour codes and placeholders - Toggle on/off — auto-detected; use whichever style you prefer - Toggle on/off — optional; prefixes are pulled automatically if LuckPerms is installed on the proxy - Toggle on/off — choose which servers participate; exclude lobby-only or mini-game servers - Toggle on/off without restarting — flip `enabled: false` and restart the proxy

---

Requirements

| Requirement | Version | |---|---| | Java | 17 or later | | Velocity | 3.x (tested against 3.4.0) | | LuckPerms *(optional)* | 5.x |

---

Installation

1. Download `crosschat-x.x.x.jar` 2. Drop it into your Velocity `plugins/` folder 3. Restart the proxy — `plugins/velocityglobalchat/config.yml` is created automatically 4. Edit the config to taste, then restart again

---

Configuration

`plugins/velocityglobalchat/config.yml`

```yaml

Enable or disable the plugin entirely

enabled: true

Chat format — placeholders:

{server} — backend server name (e.g. HUB, SURVIVAL)

{player} — sender's Minecraft username

{prefix} — LuckPerms prefix (empty if LuckPerms is absent)

{message} — the chat message (always plain text — injection-safe)

#

Use & colour codes OR MiniMessage tags — do not mix both.

format: "&8[&b{server}&8] &7{prefix}{player}&f: {message}"

Servers that participate in global chat.

Players on servers NOT listed here neither see nor send global messages.

Leave the list empty to include ALL servers.

servers: - hub - survival - farming ```

Format examples

| Style | Example | |---|---| | Legacy `&` codes | `&8[&b{server}&8] &7{prefix}{player}&f: {message}` | | MiniMessage | `<dark_gray>[<aqua>{server}</aqua>]</dark_gray> <gray>{prefix}{player}</gray><white>: {message}</white>` |

> Note: Player message content is always inserted as plain text regardless of the format style, preventing colour-code injection by players.

---

How it works

1. `PlayerChatEvent` fires on the proxy when a player sends a chat message 2. The handler resolves the player's current backend server via `player.getCurrentServer()` 3. The format string is rendered using the Adventure API (legacy or MiniMessage) 4. The component is broadcast to all players whose current server is in the configured `servers` list 5. The original event is denied — the backend server never receives the message, so it is not echoed locally

---

Licence

MIT — see LICENSE

ADS