π§ AuthCore Server Admin Guide
A step-by-step guide for server owners, from first install to a fully secured server. AuthCore is an authentication framework for offline/cracked servers: it forces every player to register with a password and log in before they can play, with 2FA/MFA, a web admin panel, a honeypot, anti-bot protection and network-wide single sign-on.
β¨ AuthCore runs out of the box with zero configuration (SQLite database, no Redis, no email). Every database and service below is optional, enable only what you need.
π§© The same jar is your server mod, your client companion and your BungeeCord/Velocity proxy plugin, install it once wherever AuthCore should run.
π What you'll learn here
| Step | What it covers |
|---|---|
| 1. Pick the right jar | Which of the 7 jars fits your server |
| 2. Install | Drop-in install, config files, startup banner |
| 3. The first player experience | How register/login/lobby actually work |
| 4. settings.conf, the important parts | The ~10 settings you'll actually change |
| 5. Admin commands | Every /authcore command |
| 6. Security checklist | Make your server hard to break |
| 7. Troubleshooting | Fix the common problems |
| 8. Learning path, go deeper | Links to the advanced docs per topic |
1. Pick the right jar
AuthCore ships range jars, one jar covers a whole Minecraft version range. Pick the row matching your server's Minecraft version AND loader:
| Jar | Minecraft versions | Loader |
|---|---|---|
authcore-1.16-1.18-fabric-<v>.jar |
1.16.0 β 1.18.2 | Fabric |
authcore-1.16-1.18-forge-<v>.jar |
1.16.0 β 1.18.2 | Forge |
authcore-1.19-1.21-fabric-<v>.jar |
1.19.0 β 1.21.11 | Fabric |
authcore-1.19-1.21-forge-<v>.jar |
1.19.0 β 1.21.11 | Forge |
authcore-1.19-1.21-neoforge-<v>.jar |
1.19.0 β 1.21.11 | NeoForge |
authcore-26.1-26.2-fabric-<v>.jar |
26.1 β 26.2 | Fabric |
authcore-26.1-26.2-neoforge-<v>.jar |
26.1 β 26.2 | NeoForge |
π‘ Which loader? Use the loader your server already runs, every range ships all supported loaders. Fabric needs Fabric API installed alongside the jar; Forge and NeoForge need nothing extra. All three drop the jar into
mods/.
Download from: Modrinth or GitHub Releases.
π§ Newbie question: "why are there so many jars?", Because Minecraft changed its code format at 26.1, one jar cannot work on every version. Each range jar is tested on every version of its range before release. More background: docs/26x.md.
2. Install
- Download the jar that matches your Minecraft version and loader (Fabric/Forge/NeoForge).
- Put it in the
mods/folder of your server. - Start the server once. AuthCore creates its files automatically:
config/authcore/ βββ settings.conf β the main configuration (explained in section 4) βββ messages.conf β every message players see (translations included) βββ ip-rules.conf β per-IP allow/deny rules βββ security.log β all security events βββ backups/ β automatic database backups βββ database/ β the SQLite database (or your chosen DB)
What you should see in the console (the startup banner):
AuthCore - The Fortress Framework for Minecraft Servers
Version : 1.0.0
Minecraft : 1.21.11
...
Security Summary:
- Password Hashing : argon2
- 2FA (TOTP) : disabled
- Sessions : enabled
If the banner shows a warning about an untested version, the mod still works, it just means the version wasn't in the officially tested set yet. If the server crashes or won't start, jump to section 7 (Troubleshooting).
3. The first player experience (how it works)
This is the flow your players will see, understanding it makes every setting below obvious:
- A player joins β they land in the lobby (spawn): no chat, no commands, no movement (all configurable), blindness/invisibility if configured.
- They run
/register <password> <confirm>. - They run
/login <password>. - If 2FA is enabled, they are asked for their TOTP code (from their authenticator app) or an email code.
- They are released into the world. On their next join, their session resumes automatically (same IP), no password needed until the session expires.
- If they have the client companion (the same jar installed on their client), the login screen appears automatically, sessions resume with a secure session token, and the server can attest the client (anti-bot).
π§ Newbie question: "do my players need to install anything?", No. The companion is optional convenience. Plain vanilla players just type
/registerand/loginin chat.
4. settings.conf, the important parts
All settings live in config/authcore/settings.conf (HOCON format). Reload changes with
/authcore reload, no restart needed.
β οΈ Recommended values, not defaults. The snippets below show what to set for a secure setup. Defaults differ (e.g. 2FA is off by default). The full reference with every default is docs/CONFIG.md, bookmark it.
4.1 Server mode & authentication
session {
server-mode = "offline" # "online" = premium auto-auth, "offline" = passwords
# β set to "offline" on cracked servers!
authentication {
allow-totp-support = true # 2FA with an authenticator app (default: false)
email-otp-support = false # 2FA via email code (requires SMTP, see 4.5)
require-mfa-for-sensitive = true # players with 2FA must verify it before /account set-password
max-login-attempts = 8 # wrong-password attempts before kick (default: 8)
block-duplicate-session = true # the same account cannot be online twice
premium-auto-login = true # premium (paid) players log in automatically
allow-proxy-users = false # block players coming through proxies/VPNs
}
account-lock {
enabled = true # lock the account after repeated failures
max-failed-logins = 8 # failures before locking (default: 8)
lock-duration-ms = 600000 # lock length (10 minutes)
}
enable-sessions = true # remember logins (auto resume on rejoin)
session-from-same-ip-only = true # sessions only resume from the same IP
timeout-ms = 3600000 # session lifetime (1 hour)
cooldown-after-kick-ms = 120000 # wait time after being kicked
}
What to expect: with 2FA on, every login needs password + authenticator code. The
recovery codes (shown at /account codes) can be used once each when the phone
is lost.
4.2 Lobby (the waiting area)
lobby {
allow-chat = false # can players chat before logging in?
allow-commands = false # can they use commands? (whitelist below)
whitelisted-commands = ["login", "account", "register"]
use-whitelist-as-blacklist = false # true = block only the listed commands
allow-movement = false # lock players in place
allow-item-drop = false # no dropping items in the lobby
allow-item-pickup = false
allow-item-use = false
allow-block-interaction = false
max-lobby-users = 50 # lobby size limit (kicks extra joiners)
captcha { enabled = true } # text captcha on register/login
announcements = ["Welcome! Register with /register <password> <confirm>"]
}
4.3 ClientGuard (anti-bot / anti-bypass)
AuthCore profiles every player's behavior and raises a risk score when something looks automated. Signals: missing client settings, ghost clients (no chat/auth), movement/click/ chat/payload floods, tab-completion probing, fake companion clients, confusable names.
session {
client-guard {
enabled = true
ghost-kick-after-sec = 45 # kick silent bots after 45s idle in the lobby
settings-timeout-sec = 20 # flag clients that never send their settings
move-packet-rate-per-sec = 120
lobby-click-rate-per-sec = 12
payload-rate-per-sec = 15
lobby-chat-rate-per-sec = 3
risk-alert-threshold = 40 # log + webhook alert
risk-kick-threshold = 70 # kick from the lobby
risk-2fa-threshold = 50 # high-risk players must complete 2FA
re-challenge-interval-sec = 30 # periodic companion attestation
challenge-timeout-sec = 10
companion-spoof-risk = 40
concurrent-login-policy = "kick-new" # "allow" | "kick-new" | "kick-old"
allowed-name-regex = "^[A-Za-z0-9_]{3,16}$"
detect-confusable-names = true # flag StΠ΅vΠ΅ (lookalike) names
require-token-for-resume = true
vanilla-resume-risk = 10
max-payload-bytes = 8192
}
}
Vanilla players are never locked out. Every check is risk-based; the normal chat login always works. The companion (same jar on the client) is optional, it just earns more trust and convenience.
4.4 Network-wide single sign-on (SSO)
With Redis enabled, a player who logs in on one server of your network is trusted on all of them:
session {
sso {
enabled = true # requires database.redis.enabled = true
session-ttl-min = 30 # how long a login is honoured network-wide
trust-vanilla = false # also trust vanilla clients when a remote session exists
}
}
4.5 Email (for email 2FA + recovery)
email {
enabled = true
host = "smtp.gmail.com"
port = 587
username = "you@gmail.com"
password = "your-app-password"
from = "you@gmail.com"
}
4.6 Web admin panel
session {
web-panel {
enabled = true
host = "127.0.0.1" # keep local, tunnel it (or bind 0.0.0.0 with a token)
port = 25570
token = "change-me-long-random-token"
# https-enabled = true # optional HTTPS (self-signed keystore)
}
honeypot { enabled = true; port = 25571 } # traps and logs port scanners
}
The panel rejects requests without a token (401), with a wrong token (401) and locks out
brute force after repeated failures (429). A readonly-token exists for status-only access.
How to use the panel: docs/WEBPANEL.md.
4.7 Databases (all optional)
database {
sqlite { file = "authCore-db.sqlite" } # default: zero-config
# mysql { enabled = true; host = "..."; ... }
# postgres { enabled = true; ... }
redis { enabled = false; host = "localhost"; port = 6379 } # sessions sync, SSO, bans, event bus
}
π§ Newbie question: "which database should I use?", Start with SQLite (zero setup). Move to MySQL/PostgreSQL only when you run several servers on one account database, and add Redis when you want network-wide sessions/SSO.
5. Admin commands
All admin commands need OP 3+, a LuckPerms node, or console access:
| Command | What it does |
|---|---|
/authcore reload |
Reload settings.conf + messages.conf |
/authcore validate |
Dry-run check of your config |
/authcore list players |
All registered players |
/authcore list online-players / offline-players |
Online/offline only |
/authcore whois <player> |
Full info including the ClientGuard profile (risk score + signals) |
/authcore history <player> |
Last 10 logins with risk scores |
/authcore delete player <name> |
Delete an account |
/authcore destroy-session <player> |
Force-logout a player |
/authcore set-password <player> <new> (alias resetpw) |
Reset a password |
/authcore set-mode <player> online/offline |
Toggle premium/offline mode per account |
/authcore set-spawn limbo <x> <y> <z> |
Set the lobby spawn point |
/authcore backup |
Create a database backup (also automatic) |
/authcore export |
Export all accounts as JSON |
/authcore maintenance on/off |
Maintenance mode (blocks joins) |
Player commands: /register, /login, /account set-password, /account codes
(recovery codes), /account email, /account nickname, /account logout,
/account unregister, /account recover, /discord link, /discord unlink.
6. Security recommendations (checklist)
- Set
session.server-mode = "offline"on cracked servers. - Enable 2FA (
allow-totp-support = true), recovery codes are single-use. - Keep
password-hash-algorithm = "argon2"(nevermd5). - Put a long random token on the web panel and keep it on 127.0.0.1 (tunnel it).
- Keep ClientGuard defaults on; check
/authcore whois+security.logfor signals. - Use a proxy (Velocity/BungeeCord) with modern forwarding for networks; enable SSO with Redis when you run multiple servers.
- Backups are automatic (
session.backup.interval-hours), store them off-server. - When something looks wrong, share the error code from the console
(format
AC-<hex>-<hex>-<hex>-<hex>) with the mod author, it pinpoints the exact failure without exposing internals.
π§ Want the why behind each item? The full threat model lives in docs/SECURITY.md.
7. Troubleshooting
| Symptom | Likely cause / fix |
|---|---|
| "Players are not asked to register" | server-mode is "online", set it to "offline" (section 4.1) |
| 2FA prompt but no TOTP setup link | 2FA secret is generated on first lobby join, have the player re-register or /authcore whois to inspect the account |
| Sessions always ask for password | enable-sessions off, or session-from-same-ip-only with a changing IP |
| Web panel unreachable | Panel binds 127.0.0.1 by default, connect from the same machine or tunnel it (WEBPANEL.md) |
| "Mod requires fabric-api" | Install Fabric API alongside the jar (Fabric loader only, Forge/NeoForge need nothing extra) |
Console shows AC-7-3-1-... |
Database connection failure (module 7 = DATABASE, kind 3 = connection), send the code to the author |
| Server won't start on a newer version | Use the matching range jar; a newer stable may not be covered yet, the weekly compat scan catches these automatically |
| Something behaves oddly after an update | Run /authcore validate, then /authcore reload, config migrations run automatically |
| Players on proxies/VPNs are blocked | That's allow-proxy-users = false (section 4.1), disable it to allow them |
8. Learning path, go deeper
This guide intentionally keeps things simple. When you're ready, each topic links to its full documentation:
| Topic | Read this | Why it matters for you |
|---|---|---|
| Every config option (~180 settings, defaults, use-cases) | π Configuration Reference | The single source of truth for settings.conf |
| Putting AuthCore behind Velocity / BungeeCord | π Proxy Support | Real client IPs, modern forwarding, proxy-side auth |
| Web panel API & HTTPS setup | π Web Panel | Automate bans, player lookup, curl examples |
| Threat model (OWASP + Minecraft) | π‘οΈ Security Model | Understand what AuthCore defends against |
| 26.1-26.2 range jars & architecture | π¦ 26.1-26.2 Builds | Why multiple jars exist, how they're verified |
| Building from source / contributing | βοΈ Development | For developers, not server admins |
| Integrating other plugins with AuthCore | π Developer API | AuthCoreApi for plugin authors |
| Release history | π Changelog | What changed between versions |
π§ Suggested order for a newbie: read this guide β skim CONFIG.md once β then read PROXY.md and WEBPANEL.md only when you set those up.
9. Getting help
- Bugs & ideas: open an issue on GitHub
- Questions: Discussions
- Discord / webhook alerts: see section 4.6 and WEBPANEL.md
- When reporting a bug: include the console error code (
AC-...) and the version from the startup banner, it pinpoints the failure without exposing internals.