ZDiscord
1.4.0ZDiscord bridges Minecraft and Discord: two-way chat with webhook avatars, live server status (players/TPS), account linking with role grants, and a built-in ticket system. Folia support, native JDA 5
1.4.0latestZDiscord 1.4.0Sep 21, 2026 Added
- Optional CraftyAI integration via/craftyslash command for asking questions from Discord with private replies, rate limiting, and role/channel allowlists.Changed
- Configuration schema version bumped to 12. - Updated official website links to demonz.org.Fixed
- Fixed an infinite loop inLeaderboardModulethat could freeze the server thread when recording stats for a player without prior entries.1.3.1ZDiscord 1.3.1Aug 30, 2026 Fixed
- The startup banner now derives its module total from all 16 current modules, including Live Stats, Confession, and the Onlysleep/RedstoneReboot integration bridge.Changed
- Completed a maintainability pass across configuration, storage, Discord bridge, module, and utility code while preserving public API documentation and runtime behavior. - Added regression coverage for startup module accounting.1.3.0ZDiscord 1.3.0Aug 30, 2026 Added
- Real profile pictures. If SkinsRestorer is installed,/profilecards and leaderboard thumbnails use the player's actual skin instead of the default Steve/Alex head. Setprofile.skin-restorertofalseto disable. - Discord replies are now quoted in Minecraft chat. Replying to a bridged message shows a short "Replying to X: ..." line above it, so it's clear what the message is answering. Seechat.show-replies,chat.reply-format,chat.reply-preview-length. - More console logging: account links/unlinks, ticket open/close, and a shutdown summary with storage flush confirmation. -SkinsRestorerlisted as a soft dependency inplugin.yml. -/zdiscord diagnostics— a read-only health check in-game: storage backend and unflushed writes, Discord ping, active webhooks, SkinsRestorer/Geyser detection with Bedrock player count, and module states. - Live stats panel — one combined embed that refreshes itself in a channel: players online (with names), TPS, memory, top kills, most playtime, and most followed. Enable it withlive-stats.channelin config.yml; refresh rate vialive-stats.update-interval. - Self-refreshing `/leaderboard` replies — command responses now re-edit themselves with fresh data everyleaderboard.auto-refresh-seconds(default 60s, 0 disables) and follow you when you page or switch stats. They stop after 30 minutes or if the message is deleted. -logging.debug: falsein config.yml — one switch for troubleshooting. Turns every log category to DEBUG, unsuppresses JDA/Hikari connection logs, and applies live via/zdiscord reload(previously logging changes needed a restart)./zdiscord diagnosticsshows whether it's on. - Geyser/Floodgate awareness for avatars. Bedrock players get name-based mc-heads heads when SkinsRestorer has no skin for them instead of a guaranteed-broken UUID URL.chat.avatar-urlnow also accepts"auto"(the new default) which picks the best source per player; custom%uuid%/%name%formats still work everywhere. - The "Most Followed Players" leaderboard panel now reads follower counts from storage, so players who haven't joined since the last restart no longer disappear from it. - Ticket channels store their owner in the channel topic, so closing a ticket always frees the right person's ticket slot. - Optional Onlysleep and RedstoneReboot bridges forward sleep/night and restart messages through ZDiscord's existing bot connection. Each can use a dedicated channel or fall back tochannels.events. - The public API can queue plain messages andEmbedDataobjects to configured Discord channels.Changed
-config-versionbumped to 11 so existing configs pick up all avatar, logging, live-stats, reply, and integration keys. Untouchedchat.avatar-urldefaults are migrated to"auto"automatically. - JDA updated from 5.2.1 to 6.5.0 for current Discord API behavior and 2026 permission changes; SLF4J updated/aligned to 2.0.18 and relocated inside the plugin JAR. - MySQL connections encrypt by default (use-ssl: true) but no longer demand a CA-signed certificate; setstorage.mysql.ssl-verify-certificate: trueif yours has one. The official Connector/J driver is now bundled and relocated, so MySQL 8+ storage works on a clean server without another plugin supplying a driver. - Stat-update events (ZDiscordStatUpdateEvent) fire before the value lands and cancelling one no longer rolls back increments that raced with it. -/zdiscord embedreports "bot not connected" instead of throwing when startup failed.Fixed
- Emoji shortcodes (:green_circle:etc.) showed as raw text in every embed - Discord only renders shortcodes in plain messages, not embed titles/fields/footers. All ~80 usages across panels, cards, tickets, and status embeds now use real Unicode emoji, which render everywhere. (config-version 10) - YAML storage could silently drop writes: a save landing between the flusher's file snapshot and its dirty-flag reset was lost until restart. Dirty flags now live under the same lock as the save itself. - Pending MySQL writes queued during shutdown ran anyway instead of being cancelled with the scheduler teardown. -/ticketfrom Discord no longer blocks JDA's gateway thread during channel creation (chat relay froze while tickets were being made). -/playersand the status embed no longer risk aConcurrentModificationExceptionwhen someone joins or leaves mid-refresh; the status panel just skips the player list that tick. - Two simultaneous first messages in a channel can't create duplicate "ZChat" webhooks anymore (orphans count against Discord's 10-webhook channel cap). - Unlinking no longer clears the reverse lookup when legacy data maps several players to one Discord ID - the other linked player keeps working. - Startup gives up on a stuck Discord connection after 15 seconds instead of hanging the server enable phase forever. - Transcript button on a fresh empty ticket replies with a friendly message instead of an exception. - Numbers formatted into URLs and embeds (TPS, memory, K/D, avatar URLs) now use locale-independent formatting, so servers running under digit-substituting locales don't produce broken image links. - Skin cache is bounded (~2048 entries) so very large servers don't accumulate entries forever; confession/follow cooldown maps evict expired entries too. - SkinsRestorer's overloaded texture helper is resolved by itsSkinPropertyparameter, avoiding a runtime mismatch with theStringoverload. - Release automation publishes only the shaded runtime JAR and now runs from immutablev*tags instead of every push tomain. - Discord console commands keep a hard denylist even when a custom allowlist is configured; shutdown, permission escalation, arbitrary command execution, and plugin reload commands cannot be enabled remotely. - Minecraft chat cannot trigger Discord@everyone,@here, or role/user mentions, and console/webhook buffers now have hard memory bounds under message floods. - Ticket numbering no longer resets to #1 after a restart (the counter was written as a string and read back as 0). - ZDiscord no longer crashes at startup if the server console can't display unicode; the startup banner and console messages are ASCII-safe. -status.embed.coloris honored again; it was silently ignored during the rewrite. - TPS reading falls back to a flat 20.0 on old Spigot builds instead of breaking the embed.1.2.0ZDiscord 1.2.0Jun 27, 2026 [1.2.0] - 2026-06-16
Added
- Developer API (ZDiscordAPI,ZDiscordProvider, Bukkit events) for third-party plugins. - Interactive leaderboards with medals, head thumbnails, pagination, and stat-switcher dropdown. - Auto-updating leaderboard panel in a configurable channel. - Centralized logger (ZLogger) with 9 categories, 6 levels, compact format. -/profile [player]— player card with avatar, NameMC link, stats, and follow button. -/seen <player]— last-seen lookup with online status, playtime, sessions. -/followingand/unfollow <player>— manage follow subscriptions from Discord. -/confess <message>— anonymous confessions with cooldown and configurable color. - Achievement rarity badges ("First of the day", rare advancement threshold). - Player activity storage (last_seen, first_join, sessions, advancement unlocks, follows). -ColorUtil.toDiscordMarkdown()for&l,&o,&n,&mconversion. -FollowModule— in-memory cache with non-blocking DM dispatch. -PlayerProfileBuilderfor profile card embeds with Discord username resolution. - In-game/confess <message>command for anonymous confessions.Changed
-config-versionbumped to 6. Default avatar changed to mc-heads.net. -HeadUtilrewritten for mc-heads.net withavatar(),body(),combo(). - Storage backends gained 12 new methods for activity, advancements, and follows. -AdvancementListenerpersists unlocks, reads rarity stats async, guards against duplicates. -UpdateCheckerinterval 6h → 5h. Silent Discord notice fires once per release. -JoinQuitListenerwrites last_seen and increments sessions on every join/quit. - First-join detection uses storage instead ofplayer.hasPlayedBefore().Fixed
-SetupCommand"Loading options failed" bug and NPE on removed ticket categories. -JoinQuitListenernull-safe bot connection checks. -/seenavatar resolution and "never joined" message. -FollowModule.onPlayerJoinno longer blocks scheduler thread. -MySQLStorage.isFollowingusesSELECT COUNT(*)instead of fetching all followers. - Profile card shows actual Discord username instead of raw ID. - Confession handles use monotonic counter instead ofhash % 10000. - Confession embeds use a real love-letter emoji instead of a Discord shortcode. - Stat update events match the calling thread, fixing Paper quit-event crashes. - JDA SLF4J provider packaging fixed so startup does not use the fallback logger. - Ticket setup now uses the guided/setupwizard only and posts a ticket-specific setup flow. - Ticket creation ignores placeholder support-role IDs instead of aborting channel creation. - Setup and follow buttons use real emoji instead of Discord shortcode text. - Ticket panel dropdown values now submit category IDs instead of display labels. -/panelno longer crashes in thread or forum channels. -UpdateCheckerDiscord announcement retries on failure.1.0.0ZDiscord 1.0.0Apr 2, 2026 Initial release
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Simple Voice Chat
A working voice chat in Minecraft!
76.8MSueta
Chunky
Pre-generates chunks, quickly and efficiently
18.4MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
WorldEdit
A Minecraft Map Editor... that runs in-game! With selections, schematics, copy and paste, brushes, and scripting. Use it in creative, or use it temporarily in survival.
11.6MSueta