Official Documentation

Auric Network

Zero-Proxy Network System for Minecraft servers.

No BungeeCord · No Velocity · Native Transfers

AuricNetwork allows you to create a full Minecraft server network without any proxy (BungeeCord, Velocity). It uses Paper's native Player#transfer method (1.20.5+) to move players directly between servers.

Important: On the target server, you must set accepts-transfers=true in its server.properties file for the transfers to work.

At a glance

Everything you need to know

Whether you're linking two survival servers or building a full lobby-based network, this wiki covers every feature, command, permission, and configuration option AuricNetwork has to offer.

No Proxy Required

Direct server-to-server transfers using Paper's native Player#transfer() method. No BungeeCord, no Velocity.

Graphical Server Selector

Fully customizable chest GUI with player head, online player count and server status placeholders.

Rescue Server (Fallback)

On graceful shutdown, all online players are automatically moved to a configured rescue server. Console logs detail the transfer.

Multi-Lobby Balancing

/lobby can send players to a random lobby from a list — ideal for large networks.

Capabilities

Key Features

A complete toolkit to run a multi-server Minecraft network without the overhead of a proxy layer.

No Proxy Required

Direct server-to-server transfers using Player#transfer(). No BungeeCord or Velocity needed.

Graphical Server Selector

Fully customizable chest GUI with player head, online player count and server status placeholders.

Rescue Server (Fallback)

On graceful shutdown, all online players are automatically moved to a configured rescue server. Console logs detail the transfer.

Multi-Lobby Balancing

/lobby can send players to a random lobby from a list — ideal for large networks.

Join & Respawn Spawns

Set teleport locations for join and respawn events, so players always land where you want them.

Live Server Status

Fetches real-time online players and online/offline/full status via api.mcsrvstat.us.

Rank-Based Welcome

Title, subtitle, chat, action bar, sound, fireworks and a damage-free lightning strike — all tied to numeric rank permissions.

Protected Hotbar Items

Give players configurable items on join with click actions and drop/move/pickup/swap protection.

Named Announcements

Broadcast a specific announcement on demand by its id, with per-id permissions and tab-completion.

Maintenance Mode

Take any server out of rotation — transfer attempts are rejected with a message instead of failing silently.

Party System

Invite, accept, kick and disband — when the leader transfers servers, the whole party follows automatically.

Full Loot Transfer

Complete inventory, armor and ender chest follow the player across servers via signed, chunked cookies — no database, no proxy.

Discord Webhooks

Lightweight outbound notifications for joins, leaves and transfers — no bot, no persistent connection.

Reference

Commands

Every subcommand below also works directly under /auricnetwork (e.g. /auricnetwork server survival, /auricnetwork party invite Steve). The standalone commands like /server, /spawn, /lobby and /party keep working exactly the same.

/auricnetwork reload
Reloads the config and language files, along with every internal system (welcome, hotbar, queue, bossbar, actionbar...). Permission: auricnetwork.command.reload
/auricnetwork status
Lists every server in the network with its live status, online/max player count, and a maintenance tag when applicable. Permission: auricnetwork.command.status
/auricnetwork test <server>
Forces an immediate status check against one server instead of waiting for the next scheduled poll, and reports how long it took. Checks the same status API as /auricnetwork status — it does not simulate an actual player transfer. Permission: auricnetwork.command.test
/auricnetwork maintenance <server> <on|off>
Toggles maintenance mode for a server without touching config.yml by hand. Permission: auricnetwork.command.maintenance
/auricnetwork recoverloot <player> [list|HH:mm dd/MM/yyyy]
Restores a player's local loot backup — the most recent one by default, or a specific past transfer by exact time. See the Loot Transfer section for the full picture. Permission: auricnetwork.command.recoverloot
/auricnetwork announce <id>
Broadcasts a named announcement from config.yml by its id. Tab-completes with the announcement ids you're allowed to run. Permission: auricnetwork.command.announce (any id) or auricnetwork.command.announce.<id> (a single id)
/auricnetwork menu
Opens the server selector GUI. Permission: auricnetwork.command.menu
/auricnetwork setjoinspawn
Sets the join spawn at your current location. Permission: auricnetwork.command.setjoinspawn
/auricnetwork setrespawnspawn
Sets the respawn spawn at your current location. Permission: auricnetwork.command.setrespawnspawn
/server <name> [player]
Transfers you to another server. With a second argument, transfers a different online player instead. Permission: auricnetwork.command.server (self) or auricnetwork.command.server-others (other players)
/spawn [join|respawn]
Teleports to the configured spawn point. Defaults to the join spawn if no argument is given. Permission: auricnetwork.command.spawn (both) or auricnetwork.command.spawn.join / auricnetwork.command.spawn.respawn (individually)
/lobby or /hub
Sends you to the lobby (supports random or least-players balancing). Permission: auricnetwork.command.lobby
/party <invite|accept|deny|leave|kick|list|disband>
Manages your party — a small group of players who get transferred together when the leader moves to another server.
  • invite <player> — sends a party invitation to that player.
  • accept / deny — accepts or rejects the most recent invitation you received.
  • leave — leaves your current party.
  • kick <player> — removes a member from the party (leader only).
  • list — shows everyone currently in your party.
  • disband — dissolves the party entirely (leader only).
Permission: auricnetwork.command.party (all subcommands) or auricnetwork.command.party.<subcommand> (individually, e.g. auricnetwork.command.party.kick)

Access control

Permissions

Every command node lives under auricnetwork.command.*. Parent nodes grant every subcommand beneath them, but each subcommand also has its own individual node, so you can remove access to a single feature without touching the rest.

Example: granting only auricnetwork.command.party.kick lets a player kick party members without giving them the rest of the party commands.

General

auricnetwork.admin

Parent node for every administrative permission below: reload, announce, status, setjoinspawn, setrespawnspawn, server-others, test, maintenance and recoverloot.

auricnetwork.command.menu

Open the server selector GUI.

auricnetwork.command.lobby

Use /lobby or /hub.

Server Transfers

auricnetwork.command.server

Use /server <name> to transfer yourself.

auricnetwork.command.server-others

Use /server <name> <player> to transfer someone else. Admin-only by default, kept separate from the regular server node on purpose.

Spawns

auricnetwork.command.spawn

Parent node, grants both spawn subcommands below.

auricnetwork.command.spawn.join

Use /spawn join specifically.

auricnetwork.command.spawn.respawn

Use /spawn respawn specifically.

auricnetwork.command.setjoinspawn

Set the join spawn point. Admin-only by default.

auricnetwork.command.setrespawnspawn

Set the respawn spawn point. Admin-only by default.

Party

auricnetwork.command.party

Parent node, grants every party subcommand below.

auricnetwork.command.party.invite

Invite players to your party.

auricnetwork.command.party.accept

Accept a pending party invitation.

auricnetwork.command.party.deny

Reject a pending party invitation.

auricnetwork.command.party.leave

Leave your current party.

auricnetwork.command.party.kick

Kick a member from your party (leader only).

auricnetwork.command.party.list

List your party members.

auricnetwork.command.party.disband

Disband your party (leader only).

Admin Tools

auricnetwork.command.reload

Reload the plugin configuration.

auricnetwork.command.status

View the network server status list.

auricnetwork.command.announce

Broadcast any announcement, regardless of id. Grants every node below.

auricnetwork.command.announce.<id>

Broadcast a single named announcement (e.g. auricnetwork.command.announce.discord). Useful for giving a moderator one announcement without the rest.

auricnetwork.command.test

Run an on-demand status check against a single server.

auricnetwork.command.maintenance

Toggle maintenance mode for a server without editing config.yml.

auricnetwork.command.recoverloot

Restore a player's local loot backup if a network transfer failed.

Welcome System

auricnetwork.welcome.<number>

Unlocks the welcome rank with that exact numeric key in config.yml (e.g. auricnetwork.welcome.10). There's no separate "permission" field — the number itself is the node.

Queue Priority

auricnetwork.queue.<number>

Sets queue priority. Any positive number works — there's no fixed range. The highest number a player has wins.

Setup

Configuration Guide

The config.yml file controls every aspect of AuricNetwork. Below is a detailed explanation of each section.

One key sits outside all of the sections below: check-updates (true by default), near the top of the file. It controls whether the plugin checks Modrinth for a newer version on startup and lets admins know in-game — set it to false to turn that off entirely.

1 Servers

List all servers in your network. The key is the name used in commands and the menu. The value is used exactly as written — accepts host:port, or just a hostname if that's all your host gives you (port 25565 is used only as a technical fallback when none is given; nothing is looked up or substituted). Use whatever address connects directly in your own client.

View example
YAML
servers:
  lobby: "127.0.0.1:25565"
  survival: "127.0.0.1:25566"

2 Maintenance Mode

List the servers that should reject incoming transfers. A player trying to /server into one of them stays on their current server and sees a maintenance message instead. This only blocks transfers from this server instance — each server still needs its own AuricNetwork install to enforce it locally.

View example
YAML
maintenance:
  enabled: false
  servers:
    - "survival"

The /auricnetwork status command shows a maintenance tag next to any server listed here.

3 Transfer Immersion

Adds a short cinematic pause before a player actually leaves for another server, instead of transferring them the instant they run the command.

delay

How many seconds the player waits before the transfer happens. During this time they stay on the current server and can still move around.

sound.sound_id

A Minecraft sound name that plays once per second during the countdown, like a ticking cue that the transfer is coming.

sound.fade_out

If enabled, the sound gets quieter each time it repeats, so it fades away by the time the transfer actually happens instead of staying at the same volume.

View example
YAML
transfer_immersion:
  delay: 3.0
  sound:
    enabled: true
    sound_id: "block.amethyst_block.hit"
    fade_out: true

4 Language

Set en (English) or es (Spanish). Leave empty to auto-detect from the player's client locale.

View example
YAML
language: "en"

5 Join & Respawn Spawn

Enable and set an exact spot for where players land when they join the server, and a separate one for where they respawn after dying.

Each one needs a world name and an x/y/z position. yaw and pitch are optional and control which direction the player faces when they arrive: yaw is the horizontal direction (which way they're looking left/right), pitch is the vertical tilt (looking up/down).

View example
YAML
join_spawn:
  enabled: false
  world: "world"
  x: 0.5
  y: 64.0
  z: 0.5
  yaw: 0.0
  pitch: 0.0

respawn_spawn:
  enabled: false
  world: "world"
  x: 0.5
  y: 64.0
  z: 0.5
  yaw: 0.0
  pitch: 0.0

6 Lobby Balancing

If enabled, /lobby picks a server from the list below instead of always going to lobby. This is meant for networks with more than one lobby, so players don't all pile into the same one.

RANDOM

Picks any server from the list at random, with no regard for how full each one is.

LEAST_PLAYERS

Always picks whichever lobby in the list currently has the fewest players, spreading the population evenly.

View example
YAML
lobby:
  enabled: false
  balancing_mode: "RANDOM"
  servers:
    - "lobby1"
    - "lobby2"

7 Server Status API

Since each server runs in total isolation, AuricNetwork can't ask another server directly "how many players do you have right now?" — there's no shared connection between them. Instead, it periodically asks the public API api.mcsrvstat.us, the same way a website would check if a server is online, and caches the answer until the next check.

update_interval_seconds controls how often that check happens. Lower values are more up to date but make more requests to the external API; 30-60 seconds is a reasonable default for most networks. Run /auricnetwork test <server> anytime to force an immediate check on one server instead of waiting for the next cycle.

View example
YAML
server_status_api:
  enabled: false
  update_interval_seconds: 60

api.mcsrvstat.us is a public external service — it needs to be able to reach the address you configure. Purely local or private IPs (like 127.0.0.1 or a LAN-only address) won't report correctly here, even though transfers between those same servers work completely fine.

8 Loot Transfer

Carries a player's full inventory across a transfer using signed cookies — no database, no proxy. Full explanation, setup steps and the recovery command live in the dedicated Loot Transfer section; this is just the config reference.

View example
YAML
loot_transfer:
  enabled: false
  include_enderchest: true
  sync_experience: false
  sync_health_hunger: false
  sync_potion_effects: false
  sync_gamemode: false
  sync_economy: false
  recovery_history_size: 3
  max_payload_age_seconds: 300
  network_secret: ""

stat_sync:
  enabled: false
  statistics:
    play_one_minute: false
    jump: false
    deaths: false
    mob_kills: false

network_secret is left blank on purpose — it's generated automatically the first time this server starts, then written back into the file. Copy that exact value into every other server's config.yml. max_payload_age_seconds (300 by default) controls how long a payload stays valid after being created — kept short on purpose, since a transfer normally finishes in a few seconds. stat_sync is a separate, optional layer that syncs real vanilla statistics (not the inventory) using the same signed payload; every statistic listed under it defaults to false and only needs a value flipped to true to start syncing that one. The five sync_* options above (experience, health/hunger, potion effects, gamemode, economy) are covered in full in the Loot Transfer section — sync_economy needs Vault plus an economy plugin installed, and is skipped silently otherwise.

9 Discord Webhooks

Sends a message to a Discord channel when something happens — a player joins, a server goes down, an admin toggles maintenance, and more. Events are batched and sent in digests rather than one request per event (see below), and there's no bot involved: no persistent connection to Discord's gateway, so it carries effectively no memory overhead.

View example
YAML
webhooks:
  enabled: false
  batch_interval_seconds: 30
  urls:
    general: ""
    admin: ""
  events:
    join: false
    server_down: false
    loot_signature_mismatch: true
  channels:
    join: general
    server_down: general
    loot_signature_mismatch: admin
  messages:
    join: "**%player%** joined **%server%**."

Get a webhook URL from Discord: open a channel's settings → IntegrationsWebhooksNew WebhookCopy Webhook URL. Every event routes to a named channel under channels — the two built-in names are general (player activity) and admin (server health and admin actions), each with its own URL under urls, so they can point at two different Discord channels. Add more names if two isn't enough. Each line under webhooks.messages is a template — %player%, %server%, %admin% and %name% get replaced depending on the event, and Discord's own **bold** markdown works directly in them.

The full list of events: join, leave, transfer, server_up, server_down, secret_generated, maintenance_on, maintenance_off, reload, announcement_sent, loot_signature_mismatch, loot_replay_detected, and recoverloot_used. Every one is off by default except secret_generated, loot_signature_mismatch and loot_replay_detected — those three flag things worth knowing about immediately, like a network_secret that's out of sync between servers.

Why batching matters here: sending one HTTP request per individual event adds up fast on an active network, and Discord sits behind Cloudflare — enough requests from the same IP (common on shared/free hosting, where that IP isn't only yours) can get rate limited at the network edge, not just by Discord itself. Batching everything from a channel into one message every batch_interval_seconds keeps the request volume low regardless of how much is happening. If a batch ever does get rate limited (HTTP 429), AuricNetwork pauses every channel for 10 minutes rather than retrying immediately, since retrying during a block just prolongs it.

Quick way to test it: set webhooks.enabled: true and webhooks.events.join: true, fill in webhooks.urls.general, save, /auricnetwork reload, then join the server yourself. The message shows up within batch_interval_seconds (30 seconds by default) — not instantly, since it's waiting to be batched. Turn the event back off afterward if you don't want join spam.

First impressions

Welcome System

Greet players differently depending on their rank — title, subtitle, chat lines, action bar, sound, a firework, and an optional lightning strike. Everything is configured directly under welcome in config.yml.

How rank priority works

Each entry under welcome.ranks is keyed by a number, and that number is the permission. An entry keyed "10" requires auricnetwork.welcome.10 — there's no separate permission field to fill in. The entry keyed "0" is the default, used when a player doesn't have any other welcome permission. When a player matches more than one rank, the highest number wins.

Tip: give your highest-priority rank a high number (e.g. 50 for staff, 10 for VIP) so you have room to add ranks in between later.

What each rank can configure

title

The big text shown in the middle of the player's screen on join, with a smaller subtitle line underneath.

chat

One or more chat lines, supporting MiniMessage formatting and placeholders.

actionbar

A short message shown above the hotbar on join.

sound

Plays a sound effect with configurable id, volume, and pitch.

effects

An optional firework launch and an optional lightning strike — always visual-only, it never deals damage. See below for the details of each.

Title timing

The title text doesn't just appear and disappear instantly — it fades in, stays on screen, then fades out. Each phase is measured in ticks, Minecraft's basic unit of time: there are 20 ticks in one second, so 40 means 2 seconds.

fade_in_ticks

How long the title takes to fade into view when it first appears.

stay_ticks

How long the title stays fully visible on screen before it starts fading out.

fade_out_ticks

How long the title takes to fade away after the "stay" phase ends.

Firework and lightning

firework_enabled

Turns the firework launch on or off for this rank.

firework_count

How many fireworks are launched at once above the player.

firework_type

The shape of the firework burst, e.g. BALL, STAR, BURST, or CREEPER — any standard Minecraft firework shape.

firework_colors

A list of colors for the burst, either by name (e.g. YELLOW) or hex code (e.g. #ff6700). With more than one color, the firework cycles through them.

lightning_enabled

Strikes lightning at the player's feet on join — purely for show, since it's always the damage-free visual version of the effect.

View example
YAML
welcome:
  enabled: true
  ranks:
    "0":
      title:
        enabled: true
        text: "<gold>Welcome</gold>"
        subtitle: "<gray>%player_name%</gray>"
        fade_in_ticks: 10
        stay_ticks: 70
        fade_out_ticks: 20
      chat:
        enabled: true
        lines:
          - "<gray>Welcome to the network, %player_name%!</gray>"
      actionbar:
        enabled: false
        text: "<gray>Welcome!</gray>"
      sound:
        enabled: true
        sound_id: "entity.player.levelup"
        volume: 1.0
        pitch: 1.0
      effects:
        firework_enabled: false
        firework_count: 1
        firework_type: "BALL"
        firework_colors:
          - "YELLOW"
        lightning_enabled: false
    "10":
      title:
        enabled: true
        text: "<gradient:#ff6700:#fdc300>VIP</gradient>"
        subtitle: "<gray>Welcome back, %player_name%!</gray>"
        fade_in_ticks: 10
        stay_ticks: 70
        fade_out_ticks: 20
      chat:
        enabled: true
        lines:
          - "<gold>A VIP player has joined: %player_name%</gold>"
      actionbar:
        enabled: true
        text: "<gold>Enjoy your VIP perks, %player_name%!</gold>"
      sound:
        enabled: true
        sound_id: "entity.player.levelup"
        volume: 1.0
        pitch: 1.2
      effects:
        firework_enabled: true
        firework_count: 1
        firework_type: "STAR"
        firework_colors:
          - "#ff6700"
          - "#fdc300"
        lightning_enabled: false

Note: the lightning strike is always a visual-only effect (no damage), so it's safe to enable around other players.

Quick access

Hotbar Items

Give players configurable items in their hotbar the moment they join — a compass to open the server selector, a nether star to return to the lobby, or anything else you can imagine. Configured under hotbar in config.yml.

Item options

slot

Hotbar slot (0-8) where the item is placed.

material, name, lore

Item material, display name and lore, all supporting MiniMessage and placeholders.

glow

Adds an enchantment glow effect to the item.

actions

A list of one or more actions that run when a player clicks while holding the item. See the full list of available actions below.

Available actions

Use any of these as a line under actions. You can combine several in the same list — for example, play a sound and then transfer the player.

transfer:<server>

Sends the player to the named server, the same as typing /server <server>.

Exampletransfer:survival
command:<cmd>

Runs a command as the player, exactly as if they had typed it themselves (their own permissions apply).

Examplecommand:spawn
console_command:<cmd>

Runs a command from the server console instead of the player, useful for commands the player normally can't run themselves.

Exampleconsole_command:eco give %player_name% 100
op_command:<cmd>

Temporarily grants the player operator status, runs the command as them, then immediately removes it. Useful for a single privileged command without permanently OP'ing anyone.

Exampleop_command:gamemode creative
message:<text>

Sends a chat message to the player, formatted with MiniMessage (e.g. <gold> for color) and placeholders.

Examplemessage:<green>Teleporting you now!</green>
sound:<id>,<volume>,<pitch>

Plays a sound to the player. id is a Minecraft sound name (e.g. block.note_block.pling), volume and pitch are both decimal numbers, typically between 0.5 and 2.0.

Examplesound:entity.experience_orb.pickup,1.0,1.5
open:<menu>

Opens one of your configured GUI menus by its id, the same menu system used by /auricnetwork menu.

Exampleopen:kits

Protection options

All four default to true, so a hotbar item is fully protected unless you explicitly turn an option off.

prevent_drop

Prevents dropping the item on the ground with the Q key or by dragging it out of the inventory.

When to disableYou're giving out a consumable item, like a one-time teleport scroll meant to be tradeable.
prevent_move

Prevents dragging the item to another slot in the player's own inventory or into a chest, hopper, or any other container.

When to disableYou want players to be able to reorganize their hotbar freely.
prevent_pickup

If the item somehow ends up on the ground anyway, this stops any player from picking it back up.

When to disableCombined with prevent_drop: false, so the item can be dropped and picked up again normally.
prevent_swap

Prevents pressing F to swap the item between the main hand and the off hand.

When to disableThe item is meant to be held alongside a weapon or tool in the other hand.

An item with all four protections gives players nothing they can do with it except trigger its actions — they can't lose it, drop it, or move it out of its slot. This also covers item frames: a protected item can't be placed into one as a workaround to free it. Disabling hotbar.enabled entirely lifts every protection on every item.

View example
YAML
hotbar:
  enabled: true
  items:
    selector:
      slot: 4
      material: "COMPASS"
      name: "<gold>Server Selector</gold>"
      lore:
        - "<gray>Right click to open the menu</gray>"
      glow: false
      prevent_drop: true
      prevent_move: true
      prevent_pickup: true
      prevent_swap: true
      actions:
        - "open:selector"
    lobby_item:
      slot: 8
      material: "NETHER_STAR"
      name: "<yellow>Lobby</yellow>"
      lore:
        - "<gray>Right click to return to the lobby</gray>"
      glow: true
      prevent_drop: true
      prevent_move: true
      prevent_pickup: true
      prevent_swap: true
      actions:
        - "transfer:lobby"

Broadcasting

Named Announcements

Instead of a rotating list of messages, every announcement has its own id, its own lines, and is sent on demand with a command. Configured under announcements.list in config.yml.

How announcement permissions work

There's no permission field to fill in for each announcement. Instead, every id automatically requires its own node: auricnetwork.command.announce.<id>. A player with the parent auricnetwork.command.announce can run any announcement; a player with only auricnetwork.command.announce.discord can only run that one.

View example
YAML
announcements:
  list:
    welcome_network:
      lines:
        - "<yellow>Welcome to our network!</yellow>"
    discord:
      lines:
        - "<aqua>Join our Discord: discord.gg/example</aqua>"
    vote:
      lines:
        - "<green>Vote for us daily to get rewards!</green>"
    staff_only:
      lines:
        - "<red>This is a staff-only announcement example.</red>"

Run it with /auricnetwork announce <id> — for example, /auricnetwork announce discord broadcasts the discord entry above to every online player. The command tab-completes with whichever ids you have permission to run.

Note: announcements only broadcast on the server where the command is run. There's no automatic rotation anymore — schedule them externally (e.g. a server-side timer or cron) if you want periodic announcements.

Zero-database transfers

Full Loot Transfer

A player's complete inventory — storage, armor, off-hand, whatever's held on the cursor, and optionally the ender chest — travels with them across a transfer, riding inside the same connection the player already uses. No database, no proxy, no extra infrastructure of any kind.

How it actually works

Minecraft's own protocol has a small feature built specifically for this: cookies. Right before a transfer, the server hands the client a signed, compressed blob of data; the client carries it along and hands it back to whichever server it lands on next. AuricNetwork serializes the player's inventory, compresses it, signs it with HMAC-SHA256, and — if it's too big for a single cookie — splits it across up to 20 of them (roughly 96 KB of budget in total). If it still doesn't fit, nothing is touched: the transfer happens normally and the player simply keeps their current inventory, with a warning logged to console.

Each cookie caps out at 5 KiB — a hard limit of the Minecraft protocol itself, not something AuricNetwork chose. Splitting across multiple cookies is what makes a fully loaded inventory (renamed items, enchanted gear, shulker boxes, banners) fit comfortably in practice.

Setting it up: network_secret

Enable loot_transfer.enabled in config.yml and start the server once — a random network_secret is generated automatically and written back into that same file. Copy that exact value into loot_transfer.network_secret on every other server in your network. This is what lets a destination server verify that a payload genuinely came from another server in your network and reject anything else outright — including a modified client trying to hand back forged or replayed data.

View example
YAML
loot_transfer:
  enabled: true
  include_enderchest: true
  recovery_history_size: 3
  max_payload_age_seconds: 300
  network_secret: "(auto-generated on first start)"

Every payload is also tied to the exact player it was created for. Even a correctly signed, not-yet-expired payload is rejected outright if it doesn't match the identity of the player currently connecting — so a payload can never be applied to the wrong person, whatever the reason it ended up in the wrong hands.

max_payload_age_seconds (300 by default) controls how long a payload stays valid after being created. A transfer normally finishes in a few seconds, so this only needs enough slack to cover a slow reconnect — it's kept short on purpose, since a longer window only widens how long an old payload could still be reused for.

If something goes wrong, nothing is silently lost

Before a player's inventory is cleared for the trip, a local backup is written to disk on the origin server. If the transfer fails completely after every retry, that backup is restored automatically — the player never ends up empty-handed on a server they never actually left. If a payload is rejected on the other end (for example because network_secret doesn't match), the backup still exists locally; it just needs to be restored by hand if the player comes back.

Recovering a backup by hand

Every transfer keeps a short history per player — recovery_history_size in config.yml controls how many (3 by default) — and it survives a restart since it's just local files, not memory.

/auricnetwork recoverloot <player>
Restores the most recent backup for that player.
/auricnetwork recoverloot <player> list
Shows every backup available for that player with its exact time.
/auricnetwork recoverloot <player> HH:mm dd/MM/yyyy
Restores one specific backup by the time shown in the list above.

Optional: syncing real statistics too

Separately from the inventory itself, AuricNetwork can also sync a player's actual vanilla statistics — the same ones Minecraft already tracks locally, like PLAY_ONE_MINUTE, MOB_KILLS, or JUMP — using the exact same signed payload. This is off by default, and every statistic is individually toggleable under stat_sync.statistics in config.yml, so nothing changes unless a specific stat is explicitly turned on.

When a statistic is enabled, syncing only ever raises the value to the higher of the two servers — it never lowers one. A player who already has 40 hours played on one server won't see that drop just because another server in the network only has 10.

Optional: full player continuity

Beyond the inventory and statistics, five more things can travel in the same signed payload, each its own independent switch in loot_transfer, all off by default. Useful for networks where one physical server hosts a spin-off of another — a dungeon instance branching off the main survival world, for example — where a transfer should feel invisible rather than like arriving at a different game.

sync_experience
Level and the experience bar. Replaces the destination's value, same as the inventory.
sync_health_hunger
Health, food level and saturation. Replaces the destination's value.
sync_potion_effects
Active potion effects. The destination's current effects are cleared first, then whatever was active on departure is applied — arriving with no effects if you had none.
sync_gamemode
Survival, creative, adventure or spectator. Replaces the destination's mode.
sync_economy
Vault balance. Requires Vault and an economy plugin — silently skipped otherwise.

Statistics use "keep the higher value" because they're counters that should never go backwards. These five are different: they're a snapshot of exactly how the player was the moment they left, so they replace the destination's value outright, the same way the inventory does.

sync_gamemode needs a moment of thought before turning on. It trusts every server in the network equally — if any one of them lets players reach creative or spectator mode, that mode can now follow them anywhere else sync_gamemode is enabled too. Only turn it on if every server in the network should trust the others' gamemode the same way.

sync_economy clears the balance it just captured on the server the player is leaving, the same way the inventory gets cleared — otherwise the same money would effectively exist on both servers at once.

Test before relying on it. Loot transfer, statistic sync, and everything above touch real player data. Try them on a test account or a disposable world first, and confirm network_secret is identical everywhere before enabling any of it on a live network.

Network control

Maintenance Mode

Take a server out of rotation without shutting it down. Players already connected elsewhere simply can't transfer into it.

Add the server's name to maintenance.servers in config.yml and set maintenance.enabled to true. Any /server attempt targeting that server — by a player or sent by an admin — is rejected with a message, and the player stays exactly where they were.

Or skip editing the file entirely: /auricnetwork maintenance <server> on adds it to the list and enables the system in one step, and /auricnetwork maintenance <server> off removes it again.

View example
YAML
maintenance:
  enabled: true
  servers:
    - "survival"

What happens with the queue

Maintenance is checked before the queue. A server under maintenance always rejects the transfer outright — it never places the player in a queue, even if the queue system is enabled.

A full server without maintenance

This is a separate case worth knowing about: if a server is simply full (not in maintenance) and the queue system is enabled, the player is placed in a queue automatically. If the queue is disabled, the player is rejected immediately with a "server is full" message instead of waiting indefinitely.

Checking maintenance status

Run /auricnetwork status to see every server in the network along with a maintenance tag next to any server currently listed in maintenance.servers.

Like everything else in AuricNetwork, maintenance mode is local to each server instance. Enabling it on your lobby's config.yml only blocks transfers initiated from the lobby — if you want the survival server itself to also reject transfers coming from elsewhere, set it in survival's own config.yml too.

Dynamic text

Placeholders

AuricNetwork resolves its own placeholders internally — they work in announcements, the welcome system, the hotbar, the menu, the bossbar and the actionbar, even without PlaceholderAPI installed. If PlaceholderAPI is installed, the same placeholders are also registered as a normal PlaceholderAPI expansion under two identifiers: %auricnetwork_*% and the shorter %an_*%.

Inside AuricNetwork's own configuration files (menu, hotbar, welcome, announcements...) you can use the short form without any prefix too, e.g. %total_online% instead of %auricnetwork_total_online%.

Network-wide

%auricnetwork_total_online%

Total online players across every server in the network.

Example<green>%auricnetwork_total_online% online</green>47 online
%auricnetwork_current_server%

The name of the server this placeholder is resolved on, as set in current_server_name.

ExampleOn the survival server, resolves to survival.

Per-server

Replace <server> with any server name from your servers list.

%auricnetwork_online_<server>%

Online player count for that server. Uses the real local count for the current server, and api.mcsrvstat.us for any other.

Example%auricnetwork_online_survival%12
%auricnetwork_max_<server>%

Maximum player slots for that server, as reported by the status API.

Example%auricnetwork_online_survival%/%auricnetwork_max_survival%12/100
%auricnetwork_status_<server>%

Plain-text status: Online, Offline, or Full — using your configured language file.

ExampleStatus: %auricnetwork_status_survival%Status: Online

Queue

%auricnetwork_queue_position%

The player's current position in their queue, or 0 if they're not queued.

ExampleYou are #%auricnetwork_queue_position% in lineYou are #3 in line
%auricnetwork_queue_server%

The server name the player is currently queued for, or empty if none.

ExampleWaiting for %auricnetwork_queue_server%Waiting for survival

Party

%auricnetwork_party_size%

Number of members in the player's current party.

ExampleParty: %auricnetwork_party_size% membersParty: 4 members
%auricnetwork_party_leader%

Name of the player's party leader, or empty if not in a party.

ExampleLeader: %auricnetwork_party_leader%Leader: Steve
%auricnetwork_in_party%

Returns yes or no depending on whether the player is in a party.

ExampleUseful for a Vault/PlaceholderAPI condition like hiding a tag when the value equals no.

Note: per-server placeholders for a server other than the current one rely on api.mcsrvstat.us, which can't reach servers running on a local network or behind a firewall. They work reliably for publicly reachable servers.

Fallback

Rescue Server

When a server shuts down gracefully (e.g., /stop or a restart), AuricNetwork automatically transfers all online players to a configured rescue server. This prevents disconnections and improves user experience.

The fallback logs a detailed message to the console:

======================================== [AuricNetwork] Rescue server active! Transferred 12 players to lobby (127.0.0.1:25565) Server is shutting down gracefully. ========================================

To enable it, add the following to your config.yml:

YAML
rescue_server:
  enabled: true
  target: "lobby"

Fallback list

target is where everyone goes first. If you also want a backup plan, enable fallback_list_enabled and list extra servers under fallback_list — AuricNetwork will also send any player still online through each one of them, in order, right after the main target.

YAML
rescue_server:
  enabled: true
  target: "lobby"
  fallback_list_enabled: true
  fallback_list:
    - "lobby2"
    - "lobby3"

Note: Works only on controlled shutdowns (not on crashes or kill -9).