SMP-Reconnect 1.2 (Preview)
This is the manual for the unreleased 1.2 build of SMP-Reconnect. It keeps everything in the released plugin — players are held on a fallback server while their backend restarts and are sent back the moment it answers — and adds cross-server chat forwarding with LuckPerms prefixes and suffixes. The released version is documented in the SMP-Reconnect manual.
What's New in 1.2
- Cross-server chat: chat sent on one backend is shown to players on every other backend, in a format you choose.
- LuckPerms prefixes and suffixes in forwarded chat — through the LuckPerms API when LuckPerms runs on the proxy, or read directly from the LuckPerms MySQL database when it does not.
- Chat injection is blocked: the player's message is always inserted as plain text, so nobody can colour or format forwarded chat with
&codes. - Built for Java 25 (the released 1.1 targets Java 17).
Chat forwarding is off by default. Installing 1.2 over 1.1 changes nothing until you switch it on.
Installation
- Stop the Velocity proxy and replace the old SMP-Reconnect jar in
plugins/with the 1.2 build (reconnectanzi-1.2.jar). - Start the proxy. A missing
config.ymlis generated inplugins/smp-reconnect/; an existing one is kept, and the new options fall back to their defaults until you add them (see Full config.yml). - Optional: install the bridge jar (
reconnect-bridge-1.0.0.jar) on backend servers that should accept/vforwardcommands.
Requirements
- Velocity proxy, Java 25
- For prefixes in forwarded chat: LuckPerms on the proxy, or network access to the LuckPerms MySQL/MariaDB database
Auto-Reconnect
Unchanged from the released plugin:
- A player is kicked from a backend. If that server is in
blacklisted_servers, nothing happens. - If the kick reason looks like a ban or a kick (it contains "ban", "banned", "kick" or "kicked"), the player is not held for reconnect.
- Otherwise the player is redirected to the server mapped in
fallback_servers_map, or togeneral_fallback. If that is missing or is the crashed server itself, the first other registered server is used. - Every
ping_delay_secondsthe proxy pings each server players are waiting for. Once the ping returns player data, everyone waiting is sent back. - While they wait,
reconnecting_messageis repeated everymessage_interval_seconds(0turns it off).
A reconnect that fails is put back in the queue, and a player who leaves the proxy is dropped from it.
Cross-Server Chat
When chat_forward.enabled is true, a chat message sent on a backend is broadcast by the proxy to players on every other backend. The sender's own server is skipped, because the backend already shows the message there.
chat_forward:
enabled: true
# Servers whose chat gets forwarded. Empty list = all servers.
source_servers: []
# Servers that will NOT receive forwarded chat.
blacklisted_servers:
- auth
- login
format: "{prefix}&f{player}{suffix} &8» &7{message}"
| Setting | Default | Description |
|---|---|---|
chat_forward.enabled | false | Turn chat forwarding on. |
chat_forward.source_servers | [] | Only forward chat sent on these servers. Empty means every server. |
chat_forward.blacklisted_servers | [auth, login] | Players on these servers never receive forwarded chat. |
chat_forward.format | {prefix}&f{player}{suffix} &8» &7{message} | Message format, with & colour codes. |
Format placeholders
| Placeholder | Value |
|---|---|
{server} | The server the message was sent on |
{player} | The sender's name |
{message} | The message, inserted as plain text — colour codes in it are not applied |
{prefix} / {suffix} | The sender's LuckPerms prefix and suffix, or empty |
Server names are matched case-insensitively.
Prefixes & LuckPerms
{prefix} and {suffix} are filled from one of two sources, in this order:
- LuckPerms on the proxy. When LuckPerms is installed on Velocity, its API is always used. Nothing to configure; the console logs LuckPerms detected - chat forwarding will include prefixes/suffixes.
- The LuckPerms database. When LuckPerms only runs on the backends with a shared MySQL/MariaDB storage, the proxy can read ranks straight from that database:
chat_forward:
luckperms_db:
# Only used when LuckPerms is NOT installed on the proxy.
enabled: true
host: localhost
port: 3306
database: luckperms
username: root
password: ""
table_prefix: luckperms_
# How long a player's rank is cached before it is re-read.
cache_seconds: 60
The reader resolves the player's primary group and its full inheritance chain (inherit.<group> nodes) and picks the highest-weight prefix.<weight>.<value> and suffix.<weight>.<value> nodes, preferring global-context nodes and direct user assignments on ties. World contexts are ignored. A read-only database user is enough.
Lookups are cached for cache_seconds and refreshed in the background, so the database is never queried on the chat thread. The very first message a player sends after joining may go out without a prefix while the lookup completes.
Command Forwarding
/vforward <server> <command...> sends a command to a backend, which runs it from its console. The backend needs the bridge jar, which listens on the smpreconnect:forward channel. Plugin messages travel through a player's connection, so the target server needs at least one player online.
Whitelist
With the whitelist on, only listed players may use /vforward, even if they have the permission. The console is never restricted.
whitelist:
enabled: false
players:
- Notch
- Dinnerbone
Manage it in game with /reconnect whitelist add|remove|list; changes are saved to config.yml immediately. Names are case-insensitive.
Commands & Permissions
| Command | Description | Permission |
|---|---|---|
/reconnectreload | Reloads config.yml and restarts the pinger and message timers. | smpreconnect.admin |
/reconnectdebug | Toggles verbose logging in the console. | smpreconnect.admin |
/reconnect whitelist <add|remove|list> [name] | Manages the /vforward whitelist. | smpreconnect.admin |
/vforward <server> <command...> | Runs a command on a backend's console. Needs the bridge jar there. | smpreconnect.forward |
Chat forwarding has no commands or permissions of its own.
Full config.yml
The file generated on first start, in plugins/smp-reconnect/config.yml. If you are upgrading, copy the chat_forward block into your existing file.
# Servers where offline players shouldn't trigger an auto-reconnect logic.
blacklisted_servers:
- lobby
- login
- auth
# Specific fallback server to redirect a player to, when specific server goes down.
fallback_servers_map:
bedwars: bedwars_hub
survival: lobby
# The fallback server to use if it's not specified in fallback_servers_map.
general_fallback: lobby
# How often (in seconds) should the plugin ping crashed servers to see if they are back up.
ping_delay_seconds: 5
# How often (in seconds) should waiting players receive a notification message.
message_interval_seconds: 15
# The periodic message sent to waiting players.
reconnecting_message: "§aThe server is still starting up! You will be connected shortly..."
whitelist:
# Whether the command forwarder whitelist is enabled.
enabled: false
# Players allowed to use the /vforward command.
players:
- Notch
- Dinnerbone
chat_forward:
# Whether chat should be forwarded across backend servers.
enabled: false
# Servers whose player chat gets forwarded. Empty list = all servers.
source_servers: []
# Servers that will NOT receive forwarded chat messages.
blacklisted_servers:
- auth
- login
# Placeholders: {server}, {player}, {message}, {prefix}, {suffix}
format: "{prefix}&f{player}{suffix} &8» &7{message}"
luckperms_db:
# Read ranks directly from the LuckPerms MySQL database.
# Only used when LuckPerms is NOT installed on the proxy.
enabled: false
host: localhost
port: 3306
database: luckperms
username: root
password: ""
table_prefix: luckperms_
# How long (in seconds) a player's rank is cached before being re-fetched.
cache_seconds: 60
Troubleshooting
Q: Players see forwarded chat twice
A: Another plugin is forwarding chat as well — a proxy chat plugin or a backend chat bridge. Run only one of them.
Q: Forwarded chat has no prefix
A: Without LuckPerms on the proxy, set chat_forward.luckperms_db.enabled: true and check the console for Connected to the LuckPerms database for chat rank lookups. A Could not connect warning names the reason. Also check that table_prefix matches your LuckPerms storage settings.
Q: A server receives no forwarded chat
A: It is listed in chat_forward.blacklisted_servers. If nobody's chat is forwarded from a server, check source_servers: when it is not empty, only the servers in it are forwarded.
Q: Need more help?
A: Ask in the Discord server, which is also where you request the 1.2 build.