Major architectural overhaul — CordSync is now 100% compatible with Folia (Paper's multithreaded fork) while maintaining full backward compatibility with Spigot/Paper.
- New
SchedulerUtilabstraction layer with runtime Folia detection via reflection - Zero compile-time Folia dependency — all Folia APIs called via reflection
- On Folia: routes sync tasks to
GlobalRegionScheduler, async tasks toAsyncScheduler - On Bukkit/Paper: routes to classic
BukkitScheduleras before
- 37+ direct
Bukkit.getScheduler()calls replaced across 21 files BukkitRunnableeliminated — replaced withSchedulerUtil.runAsyncTimer()- Graceful task cancellation via
SchedulerUtil.cancelAll()on plugin disable - All deprecated scheduler aliases updated to canonical method names
- Zero remaining
Bukkit.getScheduler()calls outside the abstraction layer - Zero remaining
BukkitRunnableusages - Clean Maven build (exit code 0)
Minor code quality improvement — removed an unnecessary @SuppressWarnings("unchecked") annotation from TPSMonitor.java flagged by the IDE.
This hotfix resolves the Missing message key: discord.log-linked error that appeared in Discord log embeds after account linking.
- YAML Key Misplacement Fixed: The discord bot keys (
log-linked,log-unlinked,disabled,started,bot-stopped,failed,auto-message-sent,unlinked,role-remove-error,role-fail,luckperms-role-removed) were incorrectly nested under thecommands:section instead ofdiscord:in all 10 language files. - All 10 Locales Corrected: Moved 12 keys from
commands:todiscord:acrossen,tr,de,es,fr,ru,pl,az,zh,ja. - New Key Added:
discord.verified-consoleadded to all locales.
This patch introduces highly requested security features and rectifies Discord bridging bugs.
- Player-Controlled 2FA Toggle: Players can now actively toggle Two-Factor Authentication via an interactive 🟥 Toggle 2FA button directly from the Discord link embed.
- Smart Reverify Localization: Added the missing
reverify.starttranslation key across all 10 language dictionaries, securing global readability.
- Join/Quit Sync Fixed: Completely rewrote the Join/Quit listeners. Messages correctly map to your dedicated
discord.join-quit-messages.channel-idvariable. - Console Bridge Hardening: Wrapped the console bridge BukkitScheduler in a try-catch block, preventing the logger loop from permanently crashing on single-message exceptions.
- Config & Command Cleans: Resolved corrupted charset issues in
/csinfoand removed dummyguistring requirements fromconfig.yml.
This patch focuses on expanding the plugin's global reach, standardizing configuration files, and addressing critical bridge bugs.
- Added 5 brand-new languages:
ru.yml(Russian),pl.yml(Polish),az.yml(Azerbaijani),zh.yml(Chinese), andja.yml(Japanese). - Synchronized all existing languages (
tr,de,es,fr) to perfectly match the massive 229-key structure ofen.yml. - Replaced hardcoded Turkish logs and missing keys (e.g.
discord.unlinked) with dynamic translation variables.
- ASCII Art Update: Repainted the
config.ymlheader logo from the deprecated CORDSYN to the modern CORDSYNC design. - Join/Quit Sync: Repaired the logic and configuration paths that prevented player join/quit events from displaying in Discord.
- Chat Bridge: Fixed bidirectional chat relay permission/webhook logic. Discord <-> Game communication now flows flawlessly.
- Reward Clean-up: Removed the legacy
itemsnode from linking rewards; rewards are now purely command-driven (e.g.eco give). - Clean Console: Suppressed JDA's internal INFO-level WebSocket logs to prevent console spam.
- IDE Cleanups: Removed unused imports (like
TextChannelinChatBridgeListener).
The long-awaited v1.4.0 is here! This is the most massive update since the creation of CordSync, focusing on Zero-Impact Performance, brand-new premium modules, and dynamic integrations.
CordSync now runs completely invisibly on Spark profiler reports, even on 1000+ player networks, while offering features you'd normally need 4 different discord plugins to achieve.
- Rebuilt from the ground up! Added
/bug <description>for technical reports. - Discord Teleportation: Discord report embeds now feature a real-time
[📍 Teleport]button. A linked staff member clicking this button on Discord will be instantly teleported to the reported player in-game! - Auto-captures TPS, RAM usage, dimensions, and XYZ coordinates in every bug report.
- Configurable spam-prevention cooldowns.
- The live status auto-updating embed is completely rewritten.
- Now tracks MSPT (Milliseconds Per Tick) with 1m, 5m, and 15m rolling averages.
- Includes a traffic light emoji system based on server health (🟢 / 🟡 / 🔴).
- Displays loaded chunks & entities alongside
2d 4h 13mformatted uptime. - Zero-Dependency Spark Integration: Automatically detects Spark API via reflection for enhanced metrics.
- Say goodbye to hardcoded "vault or kills" options.
- The leaderboard module now supports unlimited boards via the config file.
- Automatically connects to
ajLeaderboardsAPI or fallback toPlaceholderAPI. - Every leaderboard has its own independent async ticker and separate Discord message.
- Top 3 players get automatic 🥇 🥈 🥉 medal formatting.
- Instead of instantly punishing players via simple buttons, staff log embeds now spawn Discord Modal Forms (popups).
- Moderators can type custom durations (e.g.,
3d,1h) and custom reasons right from Discord before executing Ban, Kick, or Mute actions! - Buttons automatically disable after an action is taken to prevent double-punishments.
- Fixed a devastating bug where players would click "Approve" but be rejected due to Bukkit and JDA keeping separate memory instances of the
pendingLoginscache. - Hardened the
LoginVerifyListenerarchitecture to a strictly enforced Single-Instance model. - Removed blocking
.complete()calls across the Discord API to drastically improve main-thread performance.
- Added a full in-game
/ticketsystem bridging players with Discord support staff. - Creates Discord threads per ticket with automated responses to the player in-game.
We went through the entire codebase and successfully eliminated every single source of Garbage Collection (GC) pressure and main-thread blockage.
- Ring Buffer TPS Monitor: Eliminated the
LinkedListin favor of a fixeddouble[450]array. Result: Zero object allocations per tick. - No More Zombie Tasks: Fixed an issue where
/reloadwould leave phantom asynchronous tasks alive. CordSync now cleanly executescancelTasks()on shutdown. - Aggressive Config Caching: The Live Status embed no longer reads configuration files or iterates through Bukkit Worlds every 30 seconds. Data is read once on startup and updated via cached volatile variables.
- Pre-Compiled Chat Filters: Moderation forbidden words are now cached and pre-lowercased during startup — removing the memory hit on
AsyncPlayerChatEvent. - Zero
new Thread()Policy: Strict enforcement across the plugin to ensure BukkitScheduler or JDA asynchronous queues handle all processing.
- Auction Module Removed: As per server owner requests, the native auction broadcaster has been retired to keep the codebase lean and free of unnecessary bloat.