HomeJavaModsEmptyNet
EmptyNet
ModsJava

EmptyNet

A self-standing plugin that transfers players between servers via commands. Also includes a simple login system

⬇ Download on Modrinth

EmptyNet

A self-standing Paper 1.21.1+ plugin that provides server transfers, a built-in login/register system with 2FA

Features

Requirements

Installation

  1. Download the EmptyNet-1.2.0.jar from the releases page
  2. Place the jar file in your server's plugins/ folder
  3. Restart your server
  4. Edit the plugins/EmptyNet/config.yml to configure your servers
  5. Restart your server or use /reload to apply changes

Configuration

Edit plugins/EmptyNet/config.yml:

# EmptyNet Configuration
# Add as many servers as you want by copying and pasting the section below.

# =====================================================
# Transfer Settings
# =====================================================

# Master switch for the server transfer system. Set to false to disable all transfer commands.
transfer-enabled: true

# Time in seconds to wait for a player to successfully connect to the target server.
# If the player does not connect within this time, they will be notified that the
# connection failed and can try again. Set to 0 to disable.
timeout: 120

# =====================================================
# Login System
# =====================================================

# Master switch for the login/register system. Set to false to disable.
login-enabled: true

# Give players the blindness effect while they are not logged in.
login-blindness: true

# Kick players who do not login/register within the timeout. Set to false to disable.
login-kick-enabled: true

# Time in seconds a player has to login/register before being kicked.
login-kick-timeout: 30

servers:
  example:
    # The display name shown to players
    name: "Example Server"
    # The command name (e.g., /example)
    command: "example"
    # The server IP and port to connect to
    ip: "127.0.0.1:25566"
    # The message shown to the player when connecting
    message: "&aConnecting to Example Server..."

Adding More Servers

Simply copy and paste the server entry block and change the values:

servers:
  lobby:
    name: "Lobby"
    command: "lobby"
    ip: "192.168.1.10:25565"
    message: "&aSending you to the Lobby..."

  survival:
    name: "Survival Server"
    command: "survival"
    ip: "192.168.1.10:25566"
    message: "&aConnecting to Survival..."

  creative:
    name: "Creative Server"
    command: "creative"
    ip: "192.168.1.10:25567"
    message: "&aTeleporting to Creative..."

Config Fields

Field Description Example
transfer-enabled Master switch for the transfer system true
timeout Seconds to wait before considering a transfer failed (0 = disabled) 120
login-enabled Master switch for the login/register system true
login-blindness Give blindness to unauthenticated players true
login-kick-enabled Kick players who don't login in time true
login-kick-timeout Seconds before unauthenticated players are kicked 30
name Display name shown in /server list "Survival Server"
command The command players use (e.g., /survival) "survival"
ip Server IP address and port "192.168.1.10:25566"
message Message shown when connecting (use & for color codes) "&aConnecting..."

Commands

Command Description Permission
/server Lists all available servers emptynet.use
/server <name> Connect to a specific server emptynet.use
/serverback Return to your last server emptynet.use
/<command> Direct command for each configured server emptynet.use
/register <password> <confirm> Register an account true
/login <password> Login to your account true
/2fa <code> Enter your 2FA code after login true
/2fa set <code> Set a 6-digit 2FA code (while logged in) true
/2fa remove Remove your 2FA code (while logged in) true

Examples

Permissions

Permission Description Default
emptynet.use Allows using /server and /serverback commands true (all players)
emptynet.admin Reserved for future admin commands op

How It Works

Server Transfers

This plugin uses Paper's built-in Player#transfer(String host, int port) API to transfer players directly to another server. No proxy or external dependencies are needed - the plugin handles everything internally.

When a player uses /server <name> or a direct command like /lobby, the plugin:

  1. Looks up the server configuration
  2. Stores the target server as the "last server" for /serverback
  3. Starts a transfer timeout monitor (configurable, default 120 seconds)
  4. Sends the configured message to the player
  5. Transfers the player to the target IP:port

If the player is still on this server after the timeout expires, they are notified that the connection failed and can try again.

Login System

When a player joins, they are prompted to either register or login:

  1. New players use /register <password> <confirm-password> to create an account
  2. Returning players use /login <password> to authenticate
  3. If the player has 2FA enabled, they must then enter /2fa <code>
  4. Once authenticated, the player can play normally

While unauthenticated, players cannot:

Additionally, unauthenticated players receive the blindness effect (configurable with login-blindness). If login-kick-enabled is true, players who don't login/register within login-kick-timeout seconds are kicked from the server.

2FA

Players can enable 2FA after logging in with /2fa set <6-digit-code>. Once enabled, they must enter this code after their password on every login. Use /2fa remove to disable it.

H2 Database

All user accounts are stored in an embedded H2 database at plugins/EmptyNet/emptynet.mv.db. Passwords are stored as BCrypt hashes (never plaintext). The database is automatically created on first run.

Verified by MCModsHub

These come from our own check of the pack file, not from the source page.

Explore more