[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)