This one is all about memory and performance, the stuff that was making RAM climb and big servers chug.
[1] Fixed a memory leak that made RAM slowly climb the longer the server ran. The team ender chest was kept in memory forever after it was first opened, so on a busy network it just piled up. Ender chests are now released when the last person closes them (and reloaded from the database next time someone opens it), so memory stays flat. Also cleaned up a handful of smaller leaks while I was at it: team chat / chat-spy toggles, quest progress, glow data and a few per-team timers weren't being released when a player logged out or a team unloaded. All released properly now.
[2] Big optimization to team glow on large servers. It was doing a ton of wasted work every second, comparing every player against every other player and even sending "stop glowing" packets to pairs that weren't glowing in the first place. It now only checks players on the same team and only sends a packet when something actually changes, which is a massive cut in CPU and network traffic at 500+ players.
[3] Opening a team ender chest no longer causes a tiny hitch. The item data is decoded off the main thread now, so even chests full of shulkers or heavy items open smoothly.
[4] Trimmed repeated config reads on hot paths. Every PvP hit, kill, chat message and tab-list refresh was re-reading settings from the parsed config; those values are cached now, which lightens the constant background load on a full server.
[5] More Folia polish for 1.21.11 and the 2026 line (26.1.x). A few actions (disbanding a team, reopening the ally menu) were running on the wrong region thread and could error on strict Folia; they run on the right thread now. I also went over the whole plugin and confirmed all scheduling, teleports and entity access use the correct Folia-safe paths.
[6] Added the missing team glow toggle messages (team_glow_enabled / team_glow_disabled) so /team glow no longer logs a "message key not found" warning. They're added to your messages.yml automatically.
For server admins: drop the new JAR in and restart, nothing to change. If you've had a slowly climbing RAM graph, this is the build that fixes it.
[1] Fixed coloured team names breaking the team completely. If a team got created with colour codes in its name (like &eVelix), nobody could accept invites to it or look it up, /team accept Velix and /team info Velix just said "team not found", because the plugin was matching against the full coloured name instead of the plain text. Team names are now stored as plain text (which is what the name was always meant to be, colour belongs on the tag and /team setcolor), and every lookup, invite, ally request and admin command matches on the plain name. Teams that were already created with colours are findable again by typing the normal name.
[2] The allow_formatting_codes setting in config.yml actually works now. It was being read from the wrong place so it was always treated as on, which is how colored names slipped in even with it set to false. Set it to false and colour codes in names are rejected on creation like they should be.
[3] /team rename had the same problem, it would save a coloured name and then you couldn't find the team. It saves the plain name now and updates the cache so the team is immediately findable under the new name.
[4] Fixed a possible crash/desync around team invites on Folia. Invites are tracked in a list that could be touched by two threads at once (a cross-server invite arriving while you accept/deny one), which could throw or lose an invite. That list is thread-safe now.
[5] Built and tested on Paper 1.21.11, and went over every place a team is looked up by name to make sure none of them can hit this bug again.
For server admins: drop the new JAR in and restart, nothing to change. Existing teams (including ones with coloured names) keep working.
This release rolls in everything from 2.5.5 and finishes the job on a few of those fixes that weren't fully holding up yet. The team glow crash and the ender chest in particular got patched in 2.5.5 but a rarer version could still slip through, and those are properly sorted now.
[1] Fixed a crash that could take down a busy network. With a lot of teams online the plugin was firing off a separate background job for every single team every few seconds, and on a packed server those stacked up faster than they could finish until the server ran clean out of threads and fell over. It now runs that work through one small pool and asks the database once instead of once per team. On a 1000+ team stress test the background thread count went from around 2,400 down to about 12. If your server was randomly freezing or dying with an "unable to create native thread" error, this is the fix.
[2] The cross-server sync was hammering the database far more often than it should have, basically every tick with the shipped settings. It's capped to sensible intervals now (a few seconds), and since Redis already pushes changes the instant they happen you won't notice any difference except a much happier database.
[3] Your console isn't a waterfall anymore. It used to print a line for every member of every team each time it saved permissions, plus a line for every cross-server message and update. All of that noise is debug-only now.
[4] Fixed team points getting wiped or coming out wrong when more than one server, or more than one award at the same moment, touched them. Points are now added directly in the database and read back, so two awards landing together both count instead of one quietly overwriting the other. Team kills and deaths had the exact same problem across servers and got the same fix.
[5] The team glow crash is fully gone now. 2.5.5 took a first pass at the "Cannot remove from team" error that disconnected Fabric and other strict clients, but it could still trigger after a respawn, world change, or relog. It's been reworked so it never sends the packet that caused that at all. One small trade-off: a player's name might keep its glow colour until they glow again or relog.
[6] The team ender chest is fully sorted across the board now. 2.5.5 hardened it against item duplication and fixed it crashing on the 2026 server line (26.1.x, the Base64 error), and this release goes further: it no longer loses items when the chest gets smaller (dropping a tier, turning upgrades off, or lowering the rows) it loads what fits and just notes the rest in the console instead of wiping it and the cross-server sync can't build a broken, wrong-sized chest or stomp on someone who has it open right then.
[7] Fixed team bank balances drifting apart across servers. If the database hiccupped right after a deposit or withdraw, the plugin used to broadcast a guessed balance to your other servers; now it just re-reads the real number so everyone stays in sync.
[8] Team chat is solid now, local and cross-server. 2.5.5 stopped it eating messages on Paper and stopped it dropping anything containing "pass" (compass, passed, and so on); this release makes the cross-server side reliable too messages with certain characters could get dropped, a message could be deleted before it actually arrived, and on three-or-more-server setups some servers never got it. All fixed.
[9] Coloured clan names and tags (the &c&l kind, and the raw color tags 2.5.5 first tackled) show as actual colour everywhere they appear now, including chat across servers, instead of printing the raw codes.
[10] Private team chat was being relayed into your public Discord channel if you run DiscordSRV. It's properly private again.
[11] Team PvP toggle sticks properly. Turning PvP on with /team pvp could be quietly reverted by a background sync before its save landed, so teammates still couldn't hit each other. A local change is trusted for a few seconds now so the toggle holds.
[12] You can now set the team ender chest window title yourself in messages.yml, with colours, gradients and hex, instead of it being hard-coded. The key is added automatically when you update.
[13] New placeholder %justteams_tag_formatted% the team tag in brackets, painted in the team's color (follows /team setcolor), e.g. [EAGLE], and empty when the player has no team. Drop it straight into a TAB tabprefix, no condition needed. For reference, %justteams_tag_silent% is the plain one (no color, it inherits whatever's around it).
[14] /team quests now shows up in /team help and tab-complete when the quest system is on. The command always worked, it just wasn't easy to find.
[15] Opening team menus is much lighter on the server. The team menu, ally menu, warps and the leaderboards used to hit the database once for every row while you watched it draw; now they grab everything up front off the main thread, so big teams don't cause a hitch. Flipping permission and admin toggles in the menus no longer stalls the server for a moment either.
[16] Tab-completing team commands and running things like /team info no longer run database lookups on the main thread, so they can't cause a stutter on a busy server.
[17] Polished Folia support for 1.21.11 and the 2026 line (26.1.x). Sounds, particles, warp-setting, the ender chest and the glow range check all run on the correct thread now, and an ender chest can't get stuck locked if the player who opened it disconnects at the wrong moment.
[18] Made sure nothing slips through the cracks on shutdown or reload. Pending saves finish before the database closes, the cross-server sync can't get itself stuck, and background tasks stop cleanly.
[19] If you're not running cross-server, the plugin no longer does pointless cross-server database writes in the background.
[20] Raised the default MySQL connection pool size so it fits a bigger network out of the box, lifted an old hard limit on the H2 (file) database, and fixed a couple of pool settings that were quietly ignoring what you'd put in the config.
[21] Built and tested on a real Paper 1.21.11 server plus a 1000+ team stress simulation, and the whole plugin was gone over end to end for safety and stability. Runs on Paper, Folia, Purpur, Spigot and the 26.1.x line, no internal/NMS code anywhere. Java 21+.
For server admins: drop the new JAR in and restart. Your config, messages and team data are kept as-is and any new keys are added for you.
[1] Team chat works again.
[2] Team chat shows your team color now instead of raw tags like <red> or <gradient:...>.
[3] Team chat stopped eating messages with "pass" in them (compass, passed, etc.). It only catches actual "password" now.
[4] Team PvP toggle sticks now. Turning it on could get reverted by a background sync a second later, so teammates still couldn't hit.
[5] Ender chest hardened against dupes. Two people can't open it at once, and it's now snapshotted right before saving so a mid-drag item can't land in two slots.
[6] Works on Paper 1.21.x and 26.1.2, Folia, Purpur and Spigot.
[1] Your team bank can't be duped anymore. If two people in the same team hit withdraw at the same moment, both withdrawals went through on the same balance, so the team walked away with more money than the bank ever held. It was easiest to pull off from the bank menu, since the amount you type goes through chat and that runs on its own thread, but two people clicking at once was enough. The bank now takes the money out in one step straight on the database, so the same balance can't be spent twice, even by two players on two different servers. Nothing to migrate, just drop it in.
[2] That same fix covers everywhere else money moves through the bank. Deposits, tier upgrades, quest money rewards and anything you pay for out of the bank all use the same safe deduction now, so none of them can lose or double money when they happen at the same time as something else.
[3] People who weren't in your team stopped showing up in it. If you accepted an invite or joined a public team while you were already in another team, the database correctly turned you down, but the member list added you anyway and left a ghost behind. It listens to the database now, so that can't happen.
[4] Members actually show up across the network now. A join, leave or kick on one server didn't always reach the others, so the same team could look different depending on which server you were standing on. Membership is pulled fresh from the database on every server now, on both Redis and MySQL-only setups.
[5] No more duplicate or leftover names in the member list. The list you see and the internal "who's in which team" lookup could quietly fall out of step with each other. They're rebuilt together from one source now, so no doubles and no stragglers.
[6] Turning off an alias like /party works on /team reload now. Before, switching it off in commands.yml did nothing until a full server restart because the command stayed registered the whole time. Now /team reload drops it on the spot, and brings back any you switch on, so the name is free for other plugins right away. If someone still sees it in their tab-complete, they just need to rejoin.
[7] Works on Paper 1.21.x, Purpur, Folia and Spigot, with cross-server over Redis or MySQL.
CRITICAL FIXES
[1] Team bank not syncing between servers when cross-server mode is enabled. The Redis subscriber had no handler for BANK_DEPOSIT or BANK_WITHDRAW so balance changes were silently dropped on receiving servers. Added handlers and reordered the publish to fire after the async DB write completes with the new balance in the payload.
[2] /team create rejected hex colors in team names. Bare #RRGGBB and Bukkit-style &#RRGGBB are now stripped before the alphanumeric name validator, so /team create #96DF86CoolClan works. Legacy &-codes, <#RRGGBB>, and gradients continue to work
[3] /team setcolor with a single hex argument rejected with invalid_color. Single hex is now accepted and stored as a same-start/same-end gradient. /team setcolor #FF0000 works. Two arg gradient and named colors are unchanged
[4] Team chat duplicating as a global message with AlonsoChat installed. Added a parallel guard on the legacy AsyncPlayerChatEvent (cancel, clear recipients, empty message, empty format) so chat formatters that listen with ignoreCancelled = true and broadcast manually no longer produce a duplicate.
FEATURES
[5] ENABLED / DISABLED labels in the Member Edit GUI permission lores are now translatable. New messages.yml keys status_enabled and status_disabled. Auto-migration adds them to existing installs
[6] Cost-message feature labels are now translatable. The <feature> placeholder in economy_charged, economy_charged_bank, economy_charged_split, and items_taken now resolves through a new feature_names section in messages.yml instead of returning the raw internal key.
CONFIGURATION
[7] New messages.yml keys status_enabled and status_disabled
[8] New messages.yml section feature_names with 14 default keys
FEATURES
[1] Team Tier Upgrade System. Teams start at tier 1 and spend bank funds to progress through 5 tiers unlocking larger max members (10→25), a bigger ender chest (3→6 rows), a PvP damage bonus (0→5%), and a home cooldown reduction (0→50%). Owner-only purchase. Every perk is hard capped (at the moment) in code so no config mistake can produce one-shot PvP or 500-player teams. Opens from the new nether star button in the team GUI
[2] Members can now use /team sethome when the owner explicitly grants them the permission via the permissions GUI. Previously this toggle only worked for Co-owners. Disabled by default
[3] Co-owners can promote Members to Co-owner when the owner grants them the new "Promote to Co-owner" permission. New toggle in the Co-owner permissions GUI, owner-only, disabled by default
[4] PvP toggle cooldown - configurable cooldown between PvP status changes per team. Bypass with justteams.bypass.pvp.cooldown permission. Configure with team_pvp.toggle_cooldown (default: 300 seconds, set to 0 to disable)
[5] Flight is disabled when entering PvP combat. Works for creative-mode fly and elytra. Configure with team_pvp.disable_fly_on_combat (default: false). Skips spectators and creative players who have joined legitimately
[6] New PAPI placeholder %justteams_pvp_toggle_cooldown% — returns remaining cooldown seconds with "s" suffix, or "Ready" when no cooldown is active
[7] FastStats anonymous metrics integration with optional error tracking for uncaught exceptions. Disable entirely with settings.faststats.enabled: false
[8] Configurable slot layouts for all dynamic GUI lists. Place member heads, warps, allies, invites, and blacklist entries on exact slot indices via a slots: list in gui.yml. Unused slots become free space for fillers and decorations
[9] Per-alias enable/disable toggles in commands.yml for /guild, /clan, /party, /guildmsg, /clanmsg, /partymsg.
[10] /party and /partymsg ship disabled by default to avoid conflicts with common network plugins
[11] In-game admin notification when PacketEvents is not installed. Shows a clickable Modrinth download link on join, toggleable via settings.notify-missing-packetevents
CRITICAL FIXES
[12] NoClassDefFoundError on startup when PacketEvents was not installed. GlowManager now only initializes when PacketEvents is present and all call sites are null-guarded so the plugin boots cleanly without it
[13] /guild, /clan, /guildmsg, /clanmsg were registering even when disabled in commands.yml because they were hardcoded in plugin.yml. Removed from plugin.yml, now registered dynamically by AliasManager only when enabled. No ghost commands
IMPROVEMENTS
[14] Leaderboard category GUI is now fully translatable. Title, item names (Top Kills, Top Balance, Top Members), and lore all read from messages.yml
[15] Leaderboard view GUI title now renders MiniMessage formatting correctly instead of showing raw gradient tags
[16] Startup banner shows PacketEvents status alongside Vault, PAPI, and PvPManager
CONFIGURATION
[17] New settings.faststats.enabled boolean (default: true)
[18] New settings.notify-missing-packetevents boolean (default: true)
[19] New command-aliases section in commands.yml with per-alias enabled flags
[20] New slots: list on every dynamic GUI section in gui.yml. Remove the list to fall back to the default slot range
[21] Version check endpoint updated from api.kotori.ink to api.deltura.net
[22] New team_pvp.toggle_cooldown integer - seconds between PvP toggle uses per team (default: 300, 0 to disable)
[1] Fixed critical memory leak in GlowManager
[1] Fixed team chat message duplication with some chat formatting plugins (AlonsoChat, etc.)
[2] Fixed leaderboard colored_tag and gradient_tag placeholders
[3] Fixed gradient display in TAB lists and scoreboards
[1] Fixed critical chat input bug - "cancel" and other input messages no longer appear in global chat when creating teams or using GUIs
[2] Fixed team chat bleeding into global chat - changed event priority from HIGHEST to LOWEST to process before other chat handlers
[3] Fixed ChatInputManager event priority - now properly intercepts internal messages before TeamChatListener processes them
[4] Fixed %justteams_display% placeholder - now correctly replaces angle-bracket tags instead of returning literal placeholder text
[5] Fixed Redis NumberFormatException - improved parsing logic to handle data fields containing pipe characters
[6] Fixed Redis TEAM_CREATED handler - added missing handler to prevent "Unknown Redis update type" warnings
[7] Added legacy color code support - /team setcolor now accepts &c, &a, &e (ampersand) and §c, §a, §e (section sign) formats
[8] Added gradient color support for all color placeholders - %justteams_color_tag%, %justteams_colored_tag%, and %justteams_gradient_tag% now support hex gradients
[9] Added silent mode for color placeholders - returns empty string when player has no team instead of showing placeholder text
[10] Added team name support for ally requests - /team ally accept and /team ally deny now use team names instead of internal team IDs
[11] Enhanced /team setcolor command - now supports four modes: named colors (RED, BLUE), legacy codes (&c, §c), hex colors (#FF0000), and gradients (#FF0000 #00FF00)
[12] Improved PlaceholderAPI compatibility - added onPlaceholderRequest(Player) method for plugins that specifically call Player-based placeholder methods
[1] Fixed critical chat input bug - "cancel" and other input messages no longer appear in global chat when creating teams or using GUIs
[2] Fixed team chat bleeding into global chat - changed event priority from HIGHEST to NORMAL to process after ChatInputManager
[3] Fixed ChatInputManager event priority - changed from LOWEST to HIGHEST to cancel events before other chat handlers process them
[4] Added gradient color support for team names - use `/team setcolor #RRGGBB #RRGGBB` to create beautiful gradient effects
[5] Added hex color validation - ensures proper #RRGGBB format before applying gradient colors
[6] Added database support for gradient colors - new `gradient_start` and `gradient_end` columns in donut_teams table
[7] Enhanced `/team setcolor` command - now supports three modes: named colors (RED, BLUE), hex gradients (#FF0000 #00FF00), and reset
[8] Added gradient color persistence - gradient colors are saved to database and loaded on server restart
[9] Improved color command usage messages - shows examples for both named colors and gradient hex colors
[10] Fixed team chat event handling - added proper cancelled event checks to prevent duplicate processing
[11] EternalCombat integration fixed
[1] Fixed EternalCombat integration initialization - increased API initialization delay from 1 second to 3 seconds to allow EternalCombat API to fully load
[2] Improved error handling in EternalCombat hook - better error messages distinguish between "not installed" vs "API not ready" scenarios
[3] Enhanced reflection based integration - clearer logging shows exactly which step failed during initialization
[4] Fixed "API classes not found" error appearing after "hook created" message - now it waits for API to be ready before attempting reflection
[5] Added error messages with indicators for integration status
[6] Improved initialization feedback
[1] Fixed critical teleport warmup bug - running `/team home` or `/team warp` twice before warmup completes no longer orphans tasks and blocks future teleports
[2] Added proper task cancellation logic - existing warmup tasks are now cancelled before creating new ones, preventing task tracking corruption
[3] Fixed `<team_color>` placeholder in team chat - now outputs valid MiniMessage color tags (`<dark_red>`, `<blue>`, etc.) instead of plain text color names
[4] Converted ChatColor enum to MiniMessage format across all chat handlers - team colors now display correctly in chat messages
[5] Fixed team color display in TeamChatListener - local team chat now properly renders team colors set via `/team setcolor`
[6] Fixed team color display in TeamMessageCommand - `/tm` command now properly renders team colors in cross-server environments
[7] Fixed team color display in Redis cross-server chat - TeamMessageSubscriber now converts ChatColor to MiniMessage tags for Redis-based team chat
[8] Fixed team color display in MySQL cross-server chat - TeamManager now converts ChatColor to MiniMessage tags for MySQL-based team chat synchronization
[9] Enhanced warmup cancellation feedback - players now receive "teleport_cancelled" message when spamming teleport commands
[10] Applied teleport fix to all three warmup methods - `initiateLocalTeleport()`, `startNamedWarpTeleportWarmup()`, and `startWarpTeleportWarmup()` all properly cancel existing tasks
[1] Fixed critical server watchdog timeout - removed CompletableFuture.join() blocking main thread in getPlayerTeam() method
[2] Fixed player quit crashes - unloadPlayer() now fully asynchronous to prevent database overload during mass disconnects
[3] Eliminated console spam - backup snapshot messages reduced from INFO to FINE logging level (only visible with debug enabled)
[4] Optimized player disconnect handling - team cache cleanup now runs asynchronously to prevent server thread blocking
[5] Fixed race conditions during concurrent player quits - synchronized cache access prevents data corruption
[6] Added Team Alliances System - complete ally management with GUI, commands, and cross-server synchronization
[7] Added /team ally command with 7 subcommands - add, remove, accept, deny, toggle, list, and GUI access
[8] Added Ally GUI - intuitive interface for managing alliances and viewing pending requests
[9] Added EternalCombat integration - prevents combat-tagged players from exploiting team commands via reflection-based hook
[10] Added configurable combat restrictions - 9 separate toggles for blocking actions during combat (teleport, leave, disband, etc.)
[11] Added combat tag messages - shows remaining combat time when actions are blocked
[12] Added database tables - donut_team_allies and donut_team_ally_requests with automatic migration
[13] Added 27 new messages - 17 for ally system, 10 for combat integration
[14] Added full tab completion - ally commands with subcommand and team name suggestions
[15] Optimized database queries - indexed ally tables prevent performance degradation
[16] Fixed potential memory leaks - proper cleanup in async operations and hook shutdown
[17] Added validation-first approach - all ally operations validate before database writes
[18] Enhanced cross-server sync - ally changes propagate via Redis/MySQL to all servers
[19] Fixed team uncaching logic - prevents premature cache eviction when players quit
[1] Fixed `/team warp` teleportation warmup system - now properly reads warmup duration from `team_warps.warmup_seconds` configuration
[2] Fixed warp creation limit enforcement - corrected config path from `settings.max_warps_per_team` to `team_warps.max_warps`
[3] Overhauled cost deduction system - all monetary/item costs now charged AFTER successful validation and operation completion
[4] Fixed team creation cost bug - players no longer charged when team creation fails due to invalid names, tags, or database errors
[5] Fixed warp creation cost bug - `/team setwarp` no longer charges players when warp creation fails or permissions are insufficient
[6] Fixed home setting cost bug - `/team sethome` no longer charges players when operation fails or permissions are insufficient
[7] Fixed teleportation cost bugs - `/team home` and `/team warp` no longer charge when teleportation is cancelled or fails
[8] Added ConfigManager method `getWarpWarmupSeconds()` for centralized warp warmup configuration access
[9] Implemented validation-first payment system - all cost-based features now validate permissions/conditions before charging
[10] Enhanced error handling with payment rollback - failed operations now properly refund costs when payment succeeds but operation fails
[11] Fixed cross-world warp teleportation failures - resolved silent teleportation bugs caused by locale-dependent coordinate formatting
[12] Fixed teleportation message accuracy - warp teleports now correctly display warp name instead of generic "team home" message
[1] Added GUI-based team creation with color selection menu (configurable via `settings.creation.use_gui_color_selection`)
[2] Fixed MiniMessage parsing error in color selection GUI by replacing legacy color codes with proper MiniMessage format
[3] Fixed `%justteams_online_members%` placeholder to work correctly across servers using player sessions database
[4] Added missing `%justteams_offline_members%` placeholder for cross-server offline member counting
[5] Added missing `%justteams_team_color%` placeholder that returns team color name (e.g., RED, BLUE, GOLD)
[6] Added missing documented placeholders: `%justteams_team_balance%`, `%justteams_team_max_size%`, `%justteams_team_kills%`, `%justteams_team_deaths%`, `%justteams_team_kdr%`, `%justteams_pvp_status%`
[7] Fixed cross-server invitation acceptance by checking database invites when local cache is empty
[8] Added `isPlayerOnlineAnywhere()` method to check player presence across all servers via `donut_player_sessions` table
[9] Fixed ender chest lock acquisition to handle stale locks (>5 minutes) and inactive server locks (>2 minutes)
[10] Fixed cross-server team member online status display in GUI - now shows players online on other servers correctly
[1] Fixed tag color codes not persisting after server restart
[2] Added automatic database migration to expand tag column for existing servers without data loss
[3] Fixed tag truncation issue where color codes (e.g., `&c&lRED`) were silently cut off at 6 characters
[4] Added permission check for `/team setcolor` command (permission: `justteams.setcolor`, default: true)
[5] Fixed ghost-input bug where a single chat message could satisfy multiple sequential prompts
[6] Added missing help entries for `/team admin home` and `/team admin enderchest`
[7] Added Compass icon to `AdminTeamManageGUI` for admin teleport to team home
[1] Fixed critical database deadlocks (connection sharing)
[2] Removed redundant validation (connection leaks)
[3] Added warp_count caching to Team object
[4] PAPI now uses cached data (less DB pressure)
[5] Synced warp cache across servers
[6] Removed duplicate team name message
[7] Added color selection during team creation (configurable default is false)
[8] Fixed disband confirmation (2 steps now!)
[9] Cancel button works for all inputs
[10] Leaderboard shows 28 teams (was 14)
[11] Disabled features are no longer displayed in the GUI. Instead, they are replaced with the placeholder item
[12] Other fixes & improvements
[1] Fixed missing PAPI placeholders (leaderboards, roles, platform)
[2] Implemented fully translatable /team help via messages.yml
[3] Added "enabled" flag to all GUI items for easy button removal
[4] Refactored Member Permissions menu to be fully config-driven
[5] Added Role Icons and Platform indicators (Geyser support) to GUIs
[1] Fixed a issue with 1.21.11
[2] Fixed some database migration issues
[1] Fixed Folia watchdog crash caused by blocking database calls in GlowManager
[2] Fixed startup NPE when ConfigManager was accessed before initialization
[3] Other fixes & adjustments
[1] Fixed main thread lag in GlowManager (Async rewrite)
[2] Added support for Bedrock/Geyser usernames (spaces and dots allowed)
[3] Added /team admin home <team> command
[1] Fixed Issues with Folia
[1] Added Team Glow (PacketEvents required)
[2] Added Leaderboard Placeholders
[3] Probably fixed local enderchest bug
[4] Fixed other minor issues
[1] Fixed Config Version not updating (Important)