ZDiscord connects your Minecraft server to Discord. Chat flows both ways, players see server status without leaving Discord, and staff manage tickets from a dropdown panel.
| ZDiscord | DiscordSRV | |
|---|---|---|
| Slash commands | Native JDA 6 slash commands + buttons | Bolted-on text commands |
| Folia support | Built-in regionized multithreading | No Folia support |
| Modular design | 15+ toggleable modules | Chat bridge only |
| Account linking | One-time codes + role grants | Clunky multi-step process |
| Ticket system | Built-in dropdown panel with categories | Requires separate plugin |
| Config migration | Automatic schema upgrades | Manual editing |
| Webhook handling | Rate-limited queue with retry | Rate limit issues under load |
| Message delivery | Async with guaranteed delivery | Can drop messages |
- Chat bridge — Two-way chat between Minecraft and Discord. Webhooks display player heads as avatars. Linked players show their Discord name and avatar.
- Server status — One Discord message that auto-updates with player count, TPS, and memory usage.
- Live stats panel — A single auto-updating embed combining players online, performance, and the current top players.
- Console streaming — Server log lines forwarded to a Discord channel.
- Account linking — One-time codes link Discord and Minecraft accounts. Enforce link-to-join if you want.
- Staff chat —
/sctoggles a staff-only channel bridged to Discord. - Tickets — Players open private support channels via a Discord button or
/ticket. - Leaderboards — Kills, deaths, and playtime ranked via
/leaderboard. Replies auto-refresh with live data; a panel channel updates itself continuously. - Event messages — Joins, quits, deaths, and advancements posted to Discord.
- Performance monitor — TPS and memory tracked over time with configurable alerts.
- Anti-raid — Mass-join detection with optional automatic lockdown.
- Command logger — Watched and critical commands posted to a staff channel.
- Voice status — Linked players get a tab-list indicator while in a tracked Discord voice channel.
- Reaction roles — Map message reactions to Discord roles and in-game permissions.
- Player profiles —
/profile [player]renders a rich embed with avatar, NameMC link, stats, and a follow button. - Follow system — Follow players to get DM notifications when they join.
/followingand/unfollowmanage subscriptions. - Anonymous confessions —
/confessposts to a dedicated channel with rate limiting and configurable appearance. - Setup wizard —
/setupconfigures channels from Discord with dropdowns and buttons. - DemonZ integrations — Optional Onlysleep sleep/night messages and RedstoneReboot restart alerts share the events channel (or dedicated channels).
- SkinsRestorer avatars — Player cards and chat webhooks use the active restored skin when available, with safe Java/Bedrock fallbacks.
- Java 17 or newer
- Paper 1.20.4 or newer, Folia, or Spigot 1.20.4 or newer
- A Discord bot token with Server Members and Message Content intents enabled
- MySQL 8.0 or newer when using the optional MySQL storage backend (the JDBC driver is bundled)
- Download
ZDiscord-1.3.1.jarfrom the Releases page. - Place the JAR in your server's
plugins/directory. - Start the server to generate the default
config.ymlandmessages.yml. - Open
plugins/ZDiscord/config.ymland set:bot.token— your bot tokenbot.guild-id— your Discord server IDchannels.chat— the channel ID for chat bridge
- Restart the server.
- Run
/setupin Discord to configure the remaining channels.
All configuration lives in plugins/ZDiscord/config.yml. Summary of major sections:
| Section | Purpose |
|---|---|
storage |
YAML or MySQL backend for persistent data |
bot |
Bot token, activity, and target guild |
channels |
Discord channel IDs for each module |
chat |
Chat bridge formatting and webhook options |
events |
Join, quit, death, and advancement messages |
status |
Server status embed |
leaderboard |
Tracked stats and top count |
linking |
Account linking, optional enforcement, and reward commands |
anti-raid |
Mass-join thresholds and lockdown behaviour |
performance |
TPS and memory alert thresholds |
tickets |
Categories, panel appearance, support roles |
confessions |
Confession channel, cooldown, and color |
follow |
Enable/disable follow features |
command-logger |
Watched and critical commands |
staff-chat, voice-status |
Staff chat bridge and voice status indicator |
misc |
Update checks, invite link, console role, debug |
integrations |
Optional Onlysleep and RedstoneReboot message bridges |
User-facing strings live in messages.yml. They accept & colour codes and the %prefix% placeholder.
| Command | Permission | Description |
|---|---|---|
/zdiscord reload |
zdiscord.admin |
Reload configuration |
/zdiscord status |
zdiscord.admin |
Show bot and platform status |
/zdiscord diagnostics |
zdiscord.admin |
Show storage, Discord, skin, platform, and module health |
/zdiscord link |
zdiscord.link |
Generate a link code |
/zdiscord embed <title> <description> |
zdiscord.embed |
Send a custom embed |
/zdiscord ticket <subject> |
zdiscord.ticket |
Open a support ticket |
/zdiscord panel |
zdiscord.admin |
(Re)post the ticket panel |
/zdiscord lockdown |
zdiscord.admin |
Toggle anti-raid lockdown |
/zdiscord update [check|dismiss] |
zdiscord.admin |
Manual update check / dismiss banner |
/zdiscord dump |
zdiscord.admin |
Write a diagnostics file |
/discord |
zdiscord.discord |
Show the Discord invite link |
/sc [message] |
zdiscord.staffchat |
Send to staff chat (toggle with no message) |
/confess <message> |
zdiscord.confess |
Post an anonymous confession |
| Command | Description |
|---|---|
/status |
Server status |
/players |
Online players |
/tps |
Server performance |
/link <code> |
Link a Discord account to a Minecraft account |
/ticket <subject> |
Open a support ticket |
/panel |
(Re)post the ticket panel (admin) |
/leaderboard <stat> |
View kills, deaths, or playtime leaderboard |
/profile [player] |
Player profile card with stats and follow button |
/seen <player> |
Quick last-seen lookup |
/following |
List players you follow |
/unfollow <player> |
Stop following a player |
/confess <message> |
Post an anonymous confession |
/setup |
Open the setup wizard |
git clone https://github.com/DemonZ-Development/ZDiscord.git
cd ZDiscord
mvn clean packageThe shaded JAR is written to target/ZDiscord-1.3.1.jar.
Other Bukkit plugins can obtain ZDiscordAPI through Bukkit's services manager
or ZDiscordProvider.get(). In 1.3.0 the API can also queue plain messages and
rich EmbedData objects to any configured Discord channel path. ZDiscord itself
uses the same connection for the optional Onlysleep and RedstoneReboot bridges.
Apache License 2.0 — see LICENSE.
