Prejoin verification (DiscordSRV-style) — optional. Unregistered players are kicked with a one-time code; they run +confirm <code> (or /confirm) on Discord and reconnect. Already-registered players get a DM with Approve / Deny buttons. AuthMe is integrated — the password is DM'd and applied on next join.
FastLogin premium bypass — verified Mojang account owners skip the Discord flow. Secure at the protocol level (cannot be spoofed by name).
Multi-language — set language: es in config to load lang_es.yml. Spanish bundled out of the box; any locale supported via lang_<code>.yml.
Auto-updating server status embed in a Discord channel — online players, MOTD, TPS, uptime. Edits the same message every N seconds, no spam.
Whitelist gate — admins approve / deny join requests directly from a Discord embed with buttons.
Welcome DM sent once on first successful registration. Configurable.
Config auto-merge — upgrades append new keys to your config.yml without regenerating it. Your values are preserved.
Cross-server identity — multiple Bukkit servers can share a single MySQL DB. A player registered on server A is recognised on server B without re-linking Discord.
Configurable bot activity — PLAYING, WATCHING, LISTENING, COMPETING, STREAMING with live placeholders (%minecraft_players%, %minecraft_max_players%, %minecraft_motd%, %server_name%).
Limbo mode (opt-in) — players awaiting verification go to spectator + invisible + chat-muted so they cannot disrupt other players.
Stability & security
Critical CVE in MySQL connector patched (mysql-connector-j 8.4.0)
JDA bumped to stable 5.0.2
Real HikariCP connection pool for MySQL and SQLite (with WAL on SQLite)
Discord token auto-redacted in logs ([REDACTED_DISCORD_TOKEN])
Anti-DoS rate limit on prejoin verification (5 attempts / IP / minute, 1000-entry hard cap)
Schema version guard prevents an older plugin from corrupting a DB already migrated by a newer one
Eager config validation at startup — lists every missing required key in one pass
Clean JDA shutdown on plugin disable (no more "zip file closed" errors)
JDA classes shaded under di.shaded.jda — no more conflicts with Vixio, DiscordSRV or other plugins that bundle their own JDA copy
DM coordinator coalesces Discord DMs per recipient to avoid hitting per-user rate limits
Bug fixes
Roles not granted after registration (giveRole did not handle null role and queue() had no error handler)
Cascading "zip file closed" errors when the config was incomplete
"Server is not fully started" when using FastLogin (DILogin now registers as FastLogin's auth-plugin via reflection)
Click-to-copy on the register message did not work on MC 1.18+ (version parser only knew up to 1.17)
NullPointerException in TmpCache during PlayerJoinEvent (ConcurrentHashMap rejects null values — sentinel pattern now)
SQLite pool starvation at startup caused by an initial connection leak
Race conditions in concurrent caches
Connection leaks in the DAO (missing try-with-resources)
"Users" header in +userlist was not translatable — now lives in lang.yml
⚙️ Developer experience
bStats integration (Spigot ID 31219, Bungee ID 31220)
22 unit tests run in CI
PR validation workflow runs mvn verify on every pull request
/confirm slash command in addition to +confirm
api-version: '1.13' in plugin.yml — silences the "Legacy plugin" warning
release-please automates the changelog and release pipeline
Installation Drop the following jars into your server's
plugins/ folder:
DICore-4.5.0.jar — default. Bundles SLF4J + log4j so JDA logs work out of the box.
DICore-4.5.0-noslf4j.jar — use if your server already exposes SLF4J (modern Paper, Velocity, hybrid). Loading two SLF4J copies would cause LinkageError.
DILogin-4.5.0.jar — registration & login system.
DILitebansLogs-4.5.0.jar — optional, sends LiteBans punishments to Discord.
Direct upgrade from 4.4.0 — config auto-merge appends the new keys for you without touching your existing values. No manual migration needed.
Links