ajdnikov Dashboard

SMP-Reconnect 1.2 (Preview)

State Preview buildPlatform VelocityJava 25Storage NoneOptional LuckPerms or its MySQL

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

  1. Stop the Velocity proxy and replace the old SMP-Reconnect jar in plugins/ with the 1.2 build (reconnectanzi-1.2.jar).
  2. Start the proxy. A missing config.yml is generated in plugins/smp-reconnect/; an existing one is kept, and the new options fall back to their defaults until you add them (see Full config.yml).
  3. Optional: install the bridge jar (reconnect-bridge-1.0.0.jar) on backend servers that should accept /vforward commands.

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:

  1. A player is kicked from a backend. If that server is in blacklisted_servers, nothing happens.
  2. 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.
  3. Otherwise the player is redirected to the server mapped in fallback_servers_map, or to general_fallback. If that is missing or is the crashed server itself, the first other registered server is used.
  4. Every ping_delay_seconds the proxy pings each server players are waiting for. Once the ping returns player data, everyone waiting is sent back.
  5. While they wait, reconnecting_message is repeated every message_interval_seconds (0 turns 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}"
SettingDefaultDescription
chat_forward.enabledfalseTurn 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

PlaceholderValue
{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:

  1. 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.
  2. 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

CommandDescriptionPermission
/reconnectreloadReloads config.yml and restarts the pinger and message timers.smpreconnect.admin
/reconnectdebugToggles 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.