CraftersLogin
A high-performance, autonomous authentication plugin for premium, offline, and hybrid Minecraft networks. Built to outperform the competition โ zero friction for players, maximum security for admins.
Overview
CraftersLogin is the authentication layer of the Crafters ecosystem โ a high-performance, autonomous plugin that handles player registration, login, sessions, and security for offline-mode (cracked) and hybrid Minecraft networks running on Paper / Spigot 1.13+.
๐ก๏ธ BCrypt Hashing
All passwords are hashed with BCrypt (cost 12). Plaintext passwords are never stored or transmitted.
๐ Redis Sessions
Shared session state across multiple proxy servers. Players don't re-login when switching sub-servers.
๐ต๏ธ Auto Proxy Detection
The plugin detects BungeeCord / Velocity automatically by reading server config files. Zero configuration required.
โ๏ธ Bedrock Support
Silent Reflection-based GeyserMC detection. Bedrock players skip the login screen automatically with zero dependency conflicts.
๐ฑ Sign GUI Login
Native Minecraft sign editor interface. Players type their password using the keyboard โ completely bypasses chat. Defeats chat-logger hacked clients. Powered by ProtocolLib.
๐ Google 2FA
Staff members can protect their accounts with TOTP (Google Authenticator / Authy) for a second authentication factor.
Installation & Requirements
Required
- Paper or Spigot 1.13 โ 1.20.x
- Java 17+ (Java 21 recommended for best compatibility)
- ProtocolLib (required for SIGN mode and for CraftersFastAuth premium login)
Optional but Recommended
- CraftersFastAuth โ enables Mojang premium account auto-login
- PlaceholderAPI โ exposes
%crafterslogin_*%placeholders for scoreboards and chat plugins - CraftersStaff โ activates the staff bridge (vanish/staff-mode state sync)
- Redis โ required only if you use
network-sessions.storage: REDIS
Installation Steps
- Download
CraftersLogin-3.0.jarfrom an official source (Modrinth, SpigotMC, or Discord). - Place it in your server's
plugins/folder. - Restart the server. All configuration files are generated automatically.
- Open
plugins/CraftersLogin/config.ymland configure your database, security settings, and desired features. - Run
/cl reloadafter any configuration change (no restart needed).
Security & Session System
Unauthenticated players are fully isolated: they cannot move, chat, use items, drop items, take damage, interact with entities, or see other players until they successfully log in.
Smart Sessions: When a player reconnects from the same IP within the session window, CraftersLogin auto-authenticates them โ no password required. This dramatically improves the experience for regular players without reducing security.
Brute-Force Protection: After 3 failed attempts, staff are notified. After 5 failures, a temporary IP ban is applied. After 10 consecutive failures, a permanent ban can be triggered automatically.
Authentication Modes
| Mode | How it works | Best for |
|---|---|---|
CHAT |
Player types /login <password> in chat |
Any server. Simplest setup, compatible with all clients. |
SIGN |
Running /login or /register opens a native Minecraft Sign editor. The player types their full password using the keyboard โ no chat interaction. The sign is never placed in the world (ProtocolLib packets only) and the block is restored instantly after submission. |
Servers concerned about chat-logger hacked clients that intercept keystrokes. Supports letters, numbers, and special characters. Requires ProtocolLib. |
Have I Been Pwned (HIBP) Integration
When enabled, CraftersLogin checks every new password against the HaveIBeenPwned API using k-Anonymity: only the first 5 characters of the SHA-1 hash are sent โ the full password is never transmitted to any external service. If the password has appeared in any known data breach, registration is blocked and the player is asked to choose a different password.
Google Authenticator 2FA (for Staff)
Staff members with the crafterslogin.2fa permission can enable TOTP-based two-factor authentication using any standard authenticator app (Google Authenticator, Authy, etc.).
Player Commands
| Command | Alias | Description |
|---|---|---|
/register <pass> <confirmPass> | /reg | Creates a new account. Both passwords must match and pass complexity rules. |
/login <pass> | /l | Authenticates the player using their registered password. |
/changepassword <old> <new> <confirm> | /cp | Changes your password. The current password is required as verification. |
/unregister <password> | /unreg | Permanently deletes your account. Requires your current password as confirmation. |
/premium | โ | Links your account to Mojang for automatic login on future joins. Requires CraftersFastAuth. |
/offline | โ | Switches your account back to password authentication (removes the Mojang link). |
/recovery set <email> | โ | Registers your email address for password recovery. |
/recovery request | โ | Sends a one-time recovery code to your registered email address. |
/recovery confirm <code> <newpass> | โ | Uses the emailed code to set a new password. |
/2fa start | โ | Begins the Google Authenticator 2FA setup flow. Generates a secret key. |
/2fa confirm <code> | โ | Completes 2FA setup by verifying the first TOTP code from your app. |
/2fa verify <code> | โ | Verifies your identity using your authenticator app when prompted after login. |
/securityanswer <answer> | โ | Answers the staff IP-change security challenge to complete authentication. |
/setsecurityanswer <answer> | โ | Sets your personal staff security secret phrase used for IP-change verification. |
Admin Commands โ /crafterslogin (alias /cl)
| Subcommand | Description |
|---|---|
/cl reload | Reloads config.yml and messages.yml live, without restarting the server. |
/cl version | Displays the current plugin version, build date, and author information. |
/cl info <player> | Shows full account details: IP, registration date, last login, 2FA status, and premium status. |
/cl accounts | Shows the total number of registered accounts in the database. |
/cl forcelogin <player> | Forces a player into authenticated state without requiring a password. Useful for locked-out admins. |
/cl forcelogout <player> | Logs a player out immediately and returns them to the authentication screen. |
/cl changepass <player> <newpass> | Resets a player's password as an administrator. Does not require the old password. |
/cl unregister <player> | Permanently deletes a player's account from the database. |
/cl dupeip <player> | Lists all accounts that share the same IP address as the target player. Useful for detecting alt accounts. |
/cl purge <days> | Deletes all accounts that have been inactive for more than the specified number of days. |
/cl spawn <type> | Sets a spawn location at your current position. Types: login, register, firstjoin, join, respawn. |
/cl import <authme|nlogin> | Imports all player accounts from an AuthMe or nLogin database asynchronously. Progress is reported in console. |
/cl migratedb <target> | Migrates all data from the current database backend to a different one (e.g., H2 โ MySQL). |
Permission Nodes
| Permission | Default | Description |
|---|---|---|
crafterslogin.admin | OP | Master node โ grants access to ALL admin subcommands under /cl. Includes all child nodes below. |
crafterslogin.bypass | false | Player completely skips the authentication flow on join. Use with extreme caution โ intended for bots or automated accounts only. |
crafterslogin.bypass.ip-limit | OP | Bypasses the max-accounts-per-IP restriction (Anti-Alt system). Assign to staff or known cybercafรฉ IPs. |
crafterslogin.notify | OP | Player receives in-game notifications when a new CraftersLogin update is available. |
crafterslogin.help | true | Access to the help menu (/cl help). Granted to all players by default. |
crafterslogin.2fa | OP | Allows a player to use the /2fa command system to set up Google Authenticator. |
crafterslogin.staff.security | OP | Subjects this player to the enhanced IP-change security checks. Assign to all staff members. |
crafterslogin.admin.reload | OP | Permission to run /cl reload. |
crafterslogin.admin.version | OP | Permission to run /cl version. |
crafterslogin.admin.info | OP | Permission to run /cl info <player>. |
crafterslogin.admin.accounts | OP | Permission to run /cl accounts. |
crafterslogin.admin.forcelogin | OP | Permission to run /cl forcelogin <player>. |
crafterslogin.admin.forcelogout | OP | Permission to run /cl forcelogout <player>. |
crafterslogin.admin.changepass | OP | Permission to run /cl changepass <player> <pass>. |
crafterslogin.admin.unregister | OP | Permission to run /cl unregister <player>. |
crafterslogin.admin.dupeip | OP | Permission to run /cl dupeip <player>. |
crafterslogin.admin.purge | OP | Permission to run /cl purge <days>. |
crafterslogin.admin.spawns | OP | Permission to run /cl spawn <type>. |
crafterslogin.admin.convert | OP | Permission to run /cl import <plugin>. |
crafterslogin.admin.migratedb | OP | Permission to run /cl migratedb <target>. |
Configuration Reference & Tutorials
All configuration lives in plugins/CraftersLogin/config.yml. After any change, run /cl reload โ no server restart required.
๐ฆ Database
What it does: Defines where player accounts, hashed passwords, IPs, and session data are persisted.
H2 โ embedded Java database. Zero setup, perfect for testing and small servers. Data is stored as a local file (CraftersLogin/database.mv.db).
SQLITE โ lightweight file-based SQL. Also zero setup, but slightly slower than H2 for large datasets.
MYSQL / MARIADB โ recommended for production servers with 50+ concurrent players or multiple servers sharing the same account pool.
๐ซ Pre-Authentication Restrictions
What it does: Controls what unauthenticated players can and cannot do before logging in.
block-chat โ Highly recommended. Prevents players from sending chat messages before login, stopping spam bots and griefers from polluting chat.
block-movement โ Freezes the player at their join position. Prevents exploration of the server while unauthenticated. They will be teleported to the auth spawn if configured.
allowed-commands โ Whitelist of the only commands players can run before authenticating. Always keep /login, /register, and their aliases here.
๐ Authentication Mode
CHAT โ Classic mode. Players type /login <password> in chat. Works on all clients without any extra plugins.
SIGN โ When the player runs /login or /register, a native Minecraft Sign editor opens automatically. The player types their full alphanumeric password using the keyboard and clicks Done. The sign is sent via ProtocolLib packets โ it is never actually placed in the world โ and the block is restored instantly. This completely defeats chat-logger mods that intercept keystrokes. Requires ProtocolLib.
๐ก๏ธ Security โ Anti-Alt, Passwords, Brute Force & Captcha
Anti-Alts โ Limits the number of accounts that can be registered from the same IP address. Prevents account farming and ban evasion. Add shared network IPs (cybercafรฉs, school networks) to whitelisted-ips so those players aren't blocked.
Password Complexity โ Forces players to meet minimum requirements. prevent-username-as-password blocks the single most common weak password pattern.
HIBP โ Checks each new password against millions of known leaked passwords. Only a 5-character SHA-1 prefix is sent (k-Anonymity). The full password never leaves the server.
Brute Force โ At 3 fails: staff get a warning notification. At 5 fails: temporary IP ban for minutes-ban-after-5-fails minutes. At 10 fails: permanent ban if perm-ban-after-10-fails is true.
Captcha โ If require-for-all-unauthenticated is false, captcha only appears for IPs that are new or have recent failed attempts (adaptive). If true, all players solve a captcha on every join.
๐ฎ Staff Security
What it does: Adds extra verification layers specifically for staff members (players with the crafterslogin.staff.security permission).
force-secret-answer โ Staff must run /setsecurityanswer <phrase> before they can fully authenticate. If not set, they are blocked at login until configured.
check-ip-change โ If a staff member connects from a different IP than their last known IP, they must answer their secret phrase before gaining staff permissions. Protects against account hijacking.
afk-timeout โ Staff sessions expire after the configured minutes of inactivity, requiring a fresh login. Prevents a hijacked staff member's session from staying active indefinitely.
GeoIP โ Uses an external HTTP API to look up the country of the connecting IP. Set allowed-countries to restrict logins to specific countries (ISO codes). strict-ip-lock: true goes further โ the exact IP must match, not just the country.
๐ง Password Recovery via Email
What it does: Lets players request a one-time code sent to their registered email address when they forget their password. Each server admin configures their own SMTP credentials โ emails are sent from the server's own address, not a shared Crafters Development account.
Startup validation: CraftersLogin tests the SMTP connection asynchronously when the server starts. If the credentials are wrong, a clear SEVERE error is printed immediately โ you won't discover the misconfiguration when your first player tries to recover their password.
Tutorial: Setting up Gmail SMTP
โ ๏ธ Do NOT use your real Gmail password. Google blocks regular account passwords for SMTP access. You must create an App Password instead.
- Go to myaccount.google.com/security and enable 2-Step Verification (required).
- Go to myaccount.google.com/apppasswords.
- Create a new App Password. Give it a name like "CraftersLogin".
- Copy the 16-character code generated (spaces are fine โ e.g.,
abcd efgh ijkl mnop). - Paste it into the
password:field inconfig.yml. - Set
usernameto your Gmail address and run/cl reload.
๐ Spawns
force-auth-spawn โ When enabled, unauthenticated players are immediately teleported to the designated login spawn on join. This prevents them from appearing in the middle of your main world.
hide-players-while-unauthenticated โ Makes unauthenticated players completely invisible to all other online players. This prevents authenticated players from interacting with or seeing unverified accounts.
isolate-inventories-until-login โ Clears and securely stores the player's inventory while they are in the auth phase. The inventory is fully restored immediately after login. This prevents item duplication exploits and inventory snooping.
Tutorial: Setting Spawn Locations In-Game
Walk to the exact location where you want each spawn, then run the corresponding command:
Spawn data is saved to spawns.yml automatically. Multiple spawn types can use the same location.
๐ Network Sessions & Redis
What it does: Stores authentication state so players don't have to re-enter their password when switching between sub-servers in a BungeeCord or Velocity network.
MEMORY mode โ Sessions live in the JVM heap of the current server. Works perfectly for single-proxy setups. Sessions are cleared on restart.
REDIS mode โ Sessions are stored in Redis (an external in-memory data store). Works across multiple proxies and proxy restarts. Required for high-availability or multi-proxy setups.
fallback-timeout-minutes โ How long (in minutes) a session stays valid. In REDIS mode this becomes the key TTL. In MEMORY mode an internal scheduler handles expiry. 60 minutes is a good balance between security and convenience for most servers.
Tutorial: Enabling Redis Sessions
- Install and start a Redis server (e.g.,
sudo apt install redison Linux, or use a managed Redis service). - Change
storage: "REDIS"in your config. - Set the
redis.hostto the IP of your Redis server. - If Redis requires a password, set
redis.password. - Run
/cl reload. The console will print[NetworkSession] Storage backend: REDISto confirm. - Install CraftersLogin on all sub-servers pointing to the same Redis instance โ sessions will automatically sync across all of them.
Migrating from AuthMe or nLogin
CraftersLogin can import player accounts directly from an existing AuthMe or nLogin installation.
โ ๏ธ Back up your database before running an import. The import is additive (it adds accounts without deleting existing ones), but a backup is always good practice.
- Make sure both the source plugin and CraftersLogin are installed on the same server.
- Configure CraftersLogin's database to point to where you want accounts stored.
- Run the import command as an admin:
/cl import authme โ Import from AuthMe /cl import nlogin โ Import from nLogin
- The import runs asynchronously in the background. Progress and completion are reported in the server console.
- Once complete, you can remove the old authentication plugin.
Developer API
CraftersLogin exposes a Java API for other plugins to check authentication state and hook into login/register events.
Checking Authentication State
Listening to Events
PlaceholderAPI Placeholders
| Placeholder | Returns |
|---|---|
%crafterslogin_is_authenticated% | true or false |
%crafterslogin_is_registered% | true or false |
%crafterslogin_is_premium% | true or false |
%crafterslogin_last_login% | Date/time of the player's last successful login |
%crafterslogin_registered_date% | Date/time the player's account was created |
CraftersFastAuth
โ ๏ธ Premium login requires CraftersFastAuth
The /premium command and automatic Mojang authentication will not work without this companion plugin installed. CraftersFastAuth acts as the bridge between ProtocolLib's packet layer and CraftersLogin's authentication system.
What is CraftersFastAuth?
CraftersFastAuth is a lightweight companion plugin that adds premium (Mojang) auto-authentication to CraftersLogin. It works by intercepting the Minecraft login handshake at the protocol level using ProtocolLib, silently verifying the player's identity with Mojang's session servers, and automatically marking them as authenticated โ all before the player even sees the login screen.
Players with a registered premium account simply connect and are logged in instantly. Non-premium (cracked) players are completely unaffected and continue using the normal /login and /register flow.
How It Works
1 โ LOGIN_START Intercepted
ProtocolLib captures the player's login packet before Minecraft processes it.
2 โ Mojang Verification (async)
CraftersFastAuth checks if the account is marked premium in CraftersLogin, then initiates the Mojang encryption handshake asynchronously.
3 โ Session Created
If Mojang confirms the session, CraftersFastAuth notifies CraftersLogin and the player is auto-logged in instantly.
โ Instant Login โ No Password Needed
The player joins and is immediately authenticated. If Mojang rejects the session, the player is kicked with an "Invalid session" message.
Installation
- Make sure CraftersLogin is already installed and configured.
- Install ProtocolLib on the same server.
- Download and place
CraftersFastAuth-1.0.jarin yourplugins/folder. - Restart the server โ no configuration needed.
- Players run
/premiumto link their Mojang account and enable auto-login for future joins.
Crafters Development