New Features
- /elo rank GUI is fully configurable via gui.yml — title, slots, materials, names, lore, and format messages under gui.rank
- Config keys auto-merge on startup and reload for gui.yml, messages.yml, and config.yml (existing values are preserved)
- gui.rank.stats-source and gui.leaderboard.stats-source support database, placeholderapi, or papi
- Shared StatsResolver for rank and leaderboard GUIs with PlaceholderAPI integration
- debug.stats option in config.yml for verbose stat-resolution logging
Improvements
- messages.yml rank-ui.* keys remain as fallbacks when gui.rank.messages.* is not set
- PlaceholderAPI expansion falls back to database when player data is not cached
- PlaceholderAPI registration failure is now logged if expansion does not register
Bug Fixes
- YAML storage now persists kills, deaths, and eloRating (fixes stats showing 0 after server restart)
- Existing users receive new gui.yml keys on update without deleting their config file
- Removed unused legacy RankGui class that could cause confusion with the active rank GUI
Configuration
- gui.yml — added config-version: 1, gui.rank.items., gui.rank.messages., gui.rank.stats-source
- config.yml — added debug.stats: false
- Customize /elo rank in plugins/<plugin>/gui.yml; use gui.rank.stats-source: placeholderapi for PAPI-backed stats
- Fixed a critical threading issue that prevented rank-up notifications and money rewards from working on Folia servers.
New /elo reload Command
- Validation-before-apply: Each configuration file is validated before being applied. If a file contains errors, the previous working configuration is preserved and the specific error is reported.
- Per-file status reporting: Reload now reports success/failure for each file individually (config.yml, messages.yml, gui.yml, database.yml).
- Permission: The new elo.admin.reload permission (default: op) grants reload access independently of elo.admin. The elo.admin permission also includes elo.admin.reload as a child.
- Console logging: All reload events are logged to the console with the [ELO] prefix.
- Runtime service reload: After config reload, the rank system, sync manager, leaderboard cache, and rank permissions are all refreshed automatically.
- Partial reload support: If only some config files pass validation, the valid ones are applied while the others keep their previous state.
Fully Configurable /elo rank UI
All visible text in the /elo rank GUI is now configurable via messages.yml:
YAML:rank-ui: title: "&6&lʏᴏᴜʀ ʀᴀɴᴋ" subtitle: "&7ᴄᴜʀʀᴇɴᴛ ᴄᴏᴍᴘᴇᴛɪᴛɪᴠᴇ ꜱᴛᴀɴᴅɪɴɢ" elo-format: "&eELO: &f{elo}" rank-format: "&bRank: &f{rank}" position-format: "&aLeaderboard Position: &f#{position}" wins-format: "&aWins: &f{wins}" losses-format: "&cLosses: &f{losses}" winrate-format: "&dWin Rate: &f{winrate}%" progress-format: "&6Progress: &f{progress_percent}%" placement-text: "&7Complete placements to receive a rank" next-rank-format: "&eNext Rank: &f{next_rank}" points-needed-format: "&ePoints Needed: &f{points_to_next}"Language System Expansion
New messages added to messages.yml:
YAML:reload: reloading: "&eʀᴇʟᴏᴀᴅɪɴɢ ᴄᴏɴꜰɪɢ..." success: "&a✓ Configuration successfully reloaded." no-permission: "&cYou do not have permission to reload the configuration." invalid-config: "&cAn error occurred while loading the configuration." file-error: "&cError in {file}: {error}" file-ok: "&a ✓ {file} reloaded successfully." kept-old-config: "&e ⚠ {file} had errors — keeping previous configuration." complete: "&a[ELO] Configuration successfully reloaded."UI Customization Options
New ui section in config.yml:
YAML:ui: text-format: "legacy" # "legacy" or "minimessage" use-progress-bar: true progress-bar-length: 20 filled-symbol: "█" empty-symbol: "░" filled-color: "&a" empty-color: "&7" rank-icons: ht1: "⬆" ht2: "⬆" # ... header-separator: "&6&l═══════════════════════════════" footer-separator: "&6&l═══════════════════════════════"
- Fixed rank-down permission cleanup so higher-rank permissions are removed when a player drops to a lower rank.
- Added full rank permission resync on rank changes, joins/relogs, admin point changes, plugin reloads, and online data recalculation paths.
- Added a dedicated rank permission sync service that clears old Elo rank attachments before applying only the current rank's configured permissions.
- Updated rank rewards so commands and Vault economy rewards still run, while rank permissions are managed by the resync system.
- Added cross-server Elo sync with Redis/MySQL.
- Added AjLeaderboards top 10 placeholders.
- Added player rank/value placeholders.
- Improved /elo top, /elo rank, and /elo reload internals.
- Improved performance with player and leaderboard caching.
- Introduced MINI CAPS UI refresh.
- fize size reduced.
- Added async sync operations and timestamp conflict handling.
- Various bug fixes and optimizations.
New Placeholders
- %elo_top_1_name% through %elo_top_10_name%
- %elo_top_1_value% through %elo_top_10_value%
- %elo_player_rank%
- %elo_player_value%
New Config
YAML:elo-sync: enabled: true type: "redis" # or "mysql" redis: host: localhost port: 6379 password: "" mysql: host: localhost port: 3306 database: elo username: root password: ""
Messages now configurable for the first time:
New keys added to messages.yml:
- /elo help output (title, all command descriptions, admin section header)
- Kill action bar feedback (the +points / total message shown after a kill)
- Rank-up title overlay (✦ RANK UP! ✦)
- /elo rank and /elo top "players only" errors
- /elo top invalid page number error
- /elo points success format and "no data" error
- /elo addpoints and /elo setpoints success confirmations and usage hints
- /elo reload status messages (reloading, success, failed)
- Unknown subcommand error
YAML:errors: players-only: # "Only players can use this command" unknown-subcommand: # "Unknown subcommand: {command}" specify-player: # "You must specify a player" no-data: # "No data found for player" amount-positive: # "Amount must be positive" command-error: # Generic command error feedback: reload-reloading: # Shown when reload starts reload-success: # Shown on successful reload reload-failed: # Shown if reload throws an error help: admin-header: # "--- Admin Commands ---" separator line commands: addpoints: usage: # /elo addpoints usage hint setpoints: usage: # /elo setpoints usage hint
- Added version check on start up.
- Fixed some minor issues in Folia.
- Fixed some minor bugs on al platforms.
- Fix: /elo top leaderboard now shows correct player statistics when configured to use PlaceholderAPI.
- Added: new config option
choose database (default) or placeholderapi to control where leaderboard values come from.YAML:gui.leaderboard.stats-source- Fixed startup Banner not showing up as intended.
