Documentation

AuthCore

Standalone login and registration, fully configurable in game.

v1.0.01.14 - 26.2Spigot / PaperFolia supportedReleased
AuthCore overview

AuthCore locks an offline mode server behind a password without dragging in a login plugin from a decade ago. Players register once, log in on join, and every screen they see is editable in game.

It knows the difference between a paid account and a name somebody typed. The premium resolver asks Mojang who owns a name, so a real account can keep its own id and skin instead of being handed a stranger's inventory.

The password is asked for on the loading screen, in the configuration phase, before the player entity exists. There is no lobby world to build and nothing to hide the player from.

What it does

Login before the world loads
The password prompt runs in the configuration phase, before the player exists. No lobby world, no hiding the player, no freezing them in a box.
Real premium detection
Asks Mojang whether a name is a paid account. The ADOPT policy gives a paid name its real id and skin with no password at all.
Argon2id hashing
Argon2id where the library is available, PBKDF2 as the fallback. A placeholder tells you which one this server actually ended up with.
Alt detection
See which accounts share an address, behind its own permission. Addresses never leave the admin screens and are only ever a truncated hash.
Every screen editable in game
Menus, settings and every player facing message are edited from an in game admin hub. No file editing and no restarts.
Bedrock and skins
Bedrock name markers are understood, skins are stored, and refusal policies decide what happens when a name does not match its account.

Installation

  1. Drop AuthCore.jar into your server's plugins folder.
  2. Restart the server. The plugin writes its own configuration on first start.
  3. Run /auth admin hub in game to set everything up. There is no file editing step.
iEverything ships in one jar. The shared framework is shaded in, so AuthCore does not depend on any other Core plugin and any number of them run side by side.

Optional integrations

All of these are soft dependencies. AuthCore loads and runs with none of them installed.

PluginWhat it adds
PlaceholderAPIRegisters the placeholder expansion listed below.

Commands

Generated from the plugin's own command registry at version 1.0.0, so this list cannot drift out of date.

/loginLog in/l

Requires authcore.login

Usage
UsagePermissionDescription
/login <password>noneLog in
/registerRegister this name/reg

Requires authcore.register

Usage
UsagePermissionDescription
/register <password> <password again>noneRegister this name
/changepasswordChange your password/changepass

Requires authcore.changepassword

Usage
UsagePermissionDescription
/changepassword <current> <new>noneChange your password
/authAuthCore administration

Requires authcore.admin

Usage
UsagePermissionDescription
/authauthcore.adminAuthCore administration
Subcommands
UsagePermissionPlayer onlyDescription
/auth admin <action> [player]authcore.adminnoAdministration
/auth admin actions
UsagePermissionDescription
/auth admin hubauthcore.adminOpen the admin hub
/auth admin accountsauthcore.adminOpen the account list
/auth admin statusauthcore.adminShow what the plugin is doing
/auth admin reset <player>authcore.admin.resetClear somebody's password
/auth admin alts <player>authcore.admin.altsAccounts sharing an address
/auth admin premium <player>authcore.admin.premiumAsk whether a name is a paid account
/auth admin menusauthcore.admin.menusEdit any menu in game
/auth admin settingsauthcore.admin.settingsEdit the settings in game
/auth admin messagesauthcore.admin.settingsEdit any player facing message
/auth admin reloadauthcore.admin.reloadReload the configuration

Permissions

everyone is granted to all players, operator only to ops, and nobody must be granted explicitly by a permissions plugin.

NodeDefaultDescription
authcore.*operatorGrants every authcore permission
authcore.adminoperatorAdministration
authcore.admin.altsoperatorSee which accounts share an address
authcore.admin.menusoperatorEdit the menus in game
authcore.admin.premiumoperatorAsk whether a name is a paid account
authcore.admin.reloadoperatorReload the configuration
authcore.admin.resetoperatorClear somebody's password
authcore.admin.settingsoperatorEdit the settings in game
authcore.changepasswordeveryoneChange your own password
authcore.logineveryoneLog in
authcore.registereveryoneRegister a name

Placeholders

Requires PlaceholderAPI. AuthCore registers the identifier authcore on start and says so in the log. Without PlaceholderAPI installed nothing here resolves and the plugin still works.

No placeholder ever returns an address. A placeholder ends up in scoreboards, tab lists and chat formats that everybody can read, and who else plays from this house is not something a server should print to the room.

Per player

Each of these needs a player and resolves to nothing when asked without one.

PlaceholderNotes
%authcore_registered%true when this name has a password set
%authcore_logged_in%true when they are past the lock and playing
%authcore_session%true when a remembered session is open for the name
%authcore_addresses%how many addresses this account has connected from
%authcore_alts%how many other accounts share an address with this one
%authcore_last_seen%when they last logged in, as a millisecond timestamp

Server wide

These answer with or without a player, which is what makes them usable on a lobby board.

PlaceholderNotes
%authcore_accounts%how many accounts exist
%authcore_registered_count%how many of them have a password
%authcore_pending%how many players are sitting at the lock right now
%authcore_required%true when the lock is active, false on an online mode server
%authcore_hashing%argon2id or pbkdf2, whichever this server ended up with

Worth knowing

The last seen key is raw so you can feed it to whatever date formatter your other plugins already use. The account screens format it themselves.

The hashing key is worth putting on an admin board once. If it ever reads pbkdf2 on a server that should have Argon2, the library did not download and the log will say so.

There is deliberately no address, ip or ip hash placeholder. The addresses themselves live in the admin screens behind authcore.admin.alts, and even there they are only ever the truncated hash.