Update focused on better event filtering, EXP messaging improvements, rewards reliability, data safety, and message rendering across versions. Recommended: Back-up any player data before updating.
| Added - Added NAME_CONTAINS and NAME_EXACT arguments for KILL_MOB and DAMAGE_MOB events to validate mob names. - Added internal placeholder {exp_event} for exp.gained messages in lang.yml to display the event that granted EXP. - Added exp.events section to translate event names used by the {exp_event} placeholder. - Added compatibility so EXP stacking combo can show the last EXP event using {exp_event}. - Added MiniMessage support to all messages.
| Changed - Adjusted internal methods to use the new RequirementTracker. - Improved internal database methods for better reliability and consistency. - Reworked shortcut options to better match the most used commands: - Old: show-menu-in-main-command: false - New: - command-shortcuts.xlv: false - command-shortcuts.prestige: false - General improvements across the internal codebase.
| Fixed - Fixed an issue where players were not receiving their rewards (with or without prestige). - Fixed /xlv delete not allowing players to regain previously earned rewards. - Fixed rewards not being granted when using the Auto Claim feature. - Fixed a major issue where player data could be lost after a reload or restart. - Fixed some compiling issues. - Fixed titles not working on 1.8. - Fixed gradients not working on any messages.
| Notes / Recommendations - Recommended: Back-up any player data before updating. - Review your config and migrate old shortcut options to the new command-shortcuts section if needed.
| Added - Added command to force stop any/chosen boosters. Use /xlv booster stop/stopall <arguments> (XenoLevels.admin.booster.stop & XenoLevels.admin.booster.stopall) - Added more placeholders to show more info about player's boosters or any booster | Changed - Reworked the BaseSystem code structure: each feature now has its own dedicated class (This is an internal improvement only — end users will not be affected).
| Fixed - An issue where anti-abuse checks couldn't properly prevent users from gaining EXP.
| Fixed - Reloading XLV after getting exp/levels shouldn't reset/remove/add random exp values. - /xlv addexp and /xlv info now works correctly with offline players. - Rewards triggered for offline players won't send messages to global chat now.
| Added - Added a PERMISSION EventType to parse players only with a specific permission, mainly on level requirements. Eg: PERMISSION:custom.permission. - Added a config option to enable or disable offline user data loading when tab complete called tab-complete.load-offline-users. - Added support for legacy versions (1.8.X to 1.15.X). If XLV is on any of those versions, the GUI will be disabled entirely. - New option on config.yml called show-menu-in-main-command. When true, running /xlv with no arguments opens the main system menu (disabled by default). You can add it manually if this option wasn't added automatically.
| Changed - Update Database libraries to newer versions, as well, updated its methods to support async data handling. - Update Scheduler management to support abstract runnables to easier task cancellations. - Update Formula Expression management in order to use another more efficient open source formula library. - Now setlevel, removelevel and removeexp bypass prevent-level-down option to always remove levels if requested.
| Fixed - Error when databases try to manage a lot of data at once. - Level placeholders not updated correctly. - Exp stacking message not updating correctly if enabled. - Error loading data on legacy servers. - Not loading on Folia or forks of it (like Canvas). - Multiple NPE on player messages. - Overflow option not working at all. - User data not being saved at all. - Placeholder {progress_bar} not being parsed. - Levels not being removed correctly.
| Added - RivalHarvesterHoes and RivalPickaxes support. Events are RIVAL_HARVESTER_HOES or RHH and RIVAL_PICKAXES or RPX, follows same arguments as BREAK_BLOCK. - the [op] prefix for command execution to dispatch commands as OP.