🔐 SparkLogin
Modern graphical authentication for Paper servers.
No chat commands. No bloat. Just a clean dialog UI that gets players in fast and safe.
✨ Features
- Dialog UI — graphical login & register screens, no typing commands in chat
- Smart version routing — pre-join dialog on 1.21.11+, post-join dialog on 1.21.4–1.21.10
- Full lockdown — movement, chat, commands, inventory all blocked until authenticated
- Session auto-login — returning players skip the dialog if their session is still valid
- BCrypt security — configurable cost factor, brute-force delay, max attempt kicks
- AuthMe migration — one command imports all accounts, supports SHA256 & BCrypt hashes
- Custom branding — change the dialog title prefix to match your server
- Async everything — HikariCP + SQLite with WAL mode, zero server lag
🛠 Commands
Players
/login <password>
/register <password> <confirm>
/changepassword <old> <new> <confirm>
/logout
Admins (sparklogin.admin)
/sparklogin reload
/sparklogin info <player>
/sparklogin resetpassword <player>
/sparklogin unregister <player>
/sparklogin migrate authme
⚙️ Configuration Highlights
branding:
prefix: "SparkLogin" # shown in all dialog titles
security:
bcrypt-cost-factor: 12
max-login-attempts: 3
brute-force-delay-ms: 1500
session:
enabled: true
duration-hours: 12
registration:
min-password-length: 6
max-accounts-per-ip: 3
All dialog text is fully customizable in lang/en_US.yml using MiniMessage formatting.
📦 Installation
- Drop
SparkLogin-3.0.0.jarinto yourplugins/folder - Restart the server
- Edit
plugins/SparkLogin/config.ymlandlang/en_US.yml - Done
📋 Requirements
| Server | Paper 1.21.4+ |
| Java | 21+ |
| Dependencies | None (all shaded) |
📄 License
Developed by PavitraXD — version 3.0.0
All Versions
+ Add VersionAdded 26.X Support.
### 🎨 Major Features
#### Dialog UI Authentication
- Implemented graphical pre-join authentication** using Paper's Dialog API
- Players now see beautiful dialog boxes for registration and login instead of chat commands
- Click-based authentication with button inputs
- Seamless integration with server join flow
- Full player lockdown until authentication completed
- Modern, user-friendly interface
#### AuthMe Migration System
- Added
/sparklogin migrate authmecommand** for one-click migration from AuthMeReloaded - Supports SHA256 and BCRYPT hash types from AuthMe
- Automatic detection of AuthMe database backend (SQLite, MySQL, MariaDB)
- Reads AuthMe configuration from
plugins/AuthMe/config.yml - Preserves all player passwords - no resets required
- Auto-upgrade to BCrypt** on first successful login after migration
- Creates backup before migration at
plugins/SparkLogin/backups/pre-authme-migration-<timestamp>.db - Progress tracking with action bar display
- Detailed migration logging at
plugins/SparkLogin/logs/authme-migration.log - Batch import for efficient processing
- Statistics summary after migration (imported, skipped, unsupported, failed)
### ⚡ Performance Optimizations
#### Account Caching
- Implemented high-performance account caching** using Caffeine library
- Reduces database queries by caching frequently accessed accounts
- Configurable TTL (default: 5 minutes) and max size (default: 1000)
- Sliding expiration on cache reads
- Cache invalidation on account updates (save, update, delete)
- Configurable via
cache.account-ttl-minutesandcache.max-sizein config.yml
### 🎮 User Experience
#### Chat Messages
- Added chat messages** after successful login: "Logged In. Enjoy!"
- Added chat messages** after successful registration: "Successfully registered. Enjoy!"
- Enhanced user feedback for authentication events
#### Command Registration
- Registered
/sparklogin migrate authmecommand** in plugin.yml - Updated tab completion for migrate command
- Added permission:
sparklogin.admin
### 🐛 Bug Fixes
- Fixed SHA256 password verification to match AuthMe's exact implementation
- Resolved issues with AuthMe hash type detection
- Fixed cache invalidation on account updates
### 🔄 Breaking Changes
- Plugin version updated to 2.0.0**
- Database schema migration required (automatic on first run)
- Existing accounts will have
hash_typeset to BCRYPT by default