zMenu - Ultra complete menu plugin v1.1.1.7

Our goal: Dethrone DeluxeMenu

1.1.1.7 MIB V2 is out ! 10 August 2026

New Features

  • Live sync for button patterns: the website can now push button patterns as well as inventories. A new

pattern.sync event installs a pattern sent from the Pattern Studio, and an inventory that depends on

patterns now downloads and installs all of its patterns first (sequentially, so the inventory never

reloads on a half-updated set) before being reloaded. Patterns are written into patterns/ (or into

another plugin's patterns/ folder when the website sends a plugin_name), with the same guarantees as

inventories: SHA-256 verification, size limit, path sanitisation, BUTTON type validation, atomic write

with a .bak backup and rollback on a load failure.

  • New requirement item-rule: check the item a player is holding or wearing against a zMenu rule.

Configure it with rule (any rule supported by the rule engine), item-source (HAND, OFF_HAND,

HELMET, CHESTPLATE, LEGGINGS, BOOTS or INVENTORY), amount (minimum quantity, counted across

the whole inventory when item-source: INVENTORY) and the usual deny / success actions.

  • Give an item on the first join of a world: custom items can use give-first-world-join in their

mechanics.itemjoin section (a single world name or a list). The item is given the first time the player enters

that world - on join or on a world change - and the visited worlds are stored in database (new

first_world_join table, created automatically), so the item is never given twice.

  • Localized dialog messages: dialog-plain-message-body now accepts a localized-messages section

with one message list per locale, used when the client's language matches.

Improvements

  • Updated CurrenciesAPI to version 1.0.14 (fixed the ExcellentEconomy enum name, old usage deprecated)
  • All economy and item plugins are now declared in paper-plugin.yml as optional dependencies (Vault,

PlayerPoints, BeastTokens, CoinsEngine, EcoBits, ElementalTokens, ElementalGems, ExcellentEconomy,

RedisEconomy, RoyaleEconomy, VotingPlugin, zEssentials, plus CraftEngine, Denizen, Shopkeepers, zItems,

eco, Nexo, NextGens, Nova), so their classes are always visible to zMenu when they are installed - and

none of them is required to start.

  • Commands accept a target player again in a uniform way: player arguments no longer use a raw string

argument (a name with a space could break the parsing) and every command resolves its target through the

same helper - selector, online player or offline player - falling back to the command sender.

/zmenu players convert can now be run from the console / on another player.

  • /zmenu save <name> [type]: the type argument is now a real enum argument (YML / BASE64) with

proper completion, and it is optional - it defaults to BASE64.

  • CraftEngine items are now built with the player context, so per-player CraftEngine items resolve

correctly inside menus.

  • PacketEvents listeners are thread-safe: animation and click-limiter data now use ConcurrentHashMap,

and inventory tasks are scheduled on the player's region instead of resolving a container location

(safer on Folia).

  • More logs to debug items: eco item lookup failures are logged in debug mode, and an unknown mechanic

now reports the file it comes from and the list of available mechanics.

Fixes

  • Fixed the on-click mechanic never running: OnClickMechanicFactory was not registered in the item manager.
  • Fixed clearInventory: true leaving the player inventory untouched: the saved items are now actually

removed after being cloned, and only the 36 storage slots are processed (armor and off-hand are left alone).

  • Fixed color values not being clamped in ColorUtils (and a potential NullPointerException).
  • Fixed the offline player cache never being uninstalled on disable.
  • Cooldowns now clean up their expired entries and drop empty maps instead of growing forever.
1.1.1.6 26.2 support ! 15 July 2026

26.2 support !

1.1.1.5 Yeah, too many thing 16 June 2026

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]New Features[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Player Inventory Placeholders[/b]: Added %zmenu_player_empty_slots% to get the number of free slots in the player's inventory, and %zmenu_player_item_count_<MATERIAL>% to count the total amount of a specific item. These placeholders work even when the bottom inventory is hidden with clear-inventory: true, allowing shop menus to check if the player has enough space before purchasing.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Custom Commands[/b]: Add a new field actions-requirements for custom commands, allowing you to specify requirements that must be met for the command's actions to execute. This provides more control over argument conditions and enhances command functionality.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Anvil Inventory Support[/b]: Added a new ANVIL inventory type, with rename-requirements to validate the text entered by the player before running the rename actions. Inventory types are now resolved through a dedicated InventoryType registry (currently ANVIL and CHEST), making it easier to add new container types in the future.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Item Rules System[/b]: Added a flexible item-matching system configurable through a rule section. Built-in rule types: material, material-contains, material-prefix, material-suffix, name, lore, tag, custom-model-data, and the and / or composites to combine several rules. Plugin-specific item rules (match by item id, supporting wildcards and ignore-case) are available for CraftEngine, Denizen, Eco, ExecutableBlocks, ExecutableItems, HeadDatabase, ItemsAdder, MMOItems, Nexo, NextGens, Nova, Oraxen and SlimeFun. The item_drag button now accepts a rule section to validate which items a player is allowed to drop.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]New Action set_item[/b] (set_item / set-item): place an item in one or several inventory slots (menu or player inventory via in-player-inventory: true), with dupe-protection enabled by default.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]New Action take_item[/b] (take_item / take-item): remove a configurable amount of matching items from the player's inventory, with verification: SIMILAR (default) or MODELID to control how items are matched.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]New Action refresh_slot[/b] (refresh_slot / refresh-slot): refresh only the given slots (menu or player inventory) without rebuilding the whole inventory.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Check Inventory Requirement[/b] (check-inventory permissible): verify that a given slot contains a specific item (or that the player owns it), with success and deny actions and a configurable comparison type.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Denizen Support[/b]: Added a new hook for Denizen, allowing Denizen items to be matched through the item rules system (denizen rule type).[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Bug Fixes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Clear Inventory Session Items[/b]: Fixed a bug where items given to the player during a menu session (e.g., via shop purchase actions) were lost when closing a menu with clear-inventory: true. Session items are now collected before restoring the original inventory and properly restored afterward.

[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]ItemGiveAction Inventory Update[/b]: Added player.updateInventory() after giving items via the give_item action, ensuring the client inventory display updates immediately.

[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Inventory Desync on Item Give[/b]: Fixed ItemGiveAction not calling player.updateInventory() after adding items, causing a visual desynchronization where the player's hotbar/inventory wouldn't visually update until the next interaction.

[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Multi Dialogs number-of-columns[/b]: Fixed multi-action dialogs not supporting the number-of-columns option.

[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Nexo Glyphs in Items[/b]: Fixed Nexo glyphs not working inside items. Add skip-first-cache: true to the item configuration to use them.

[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Animation Listener[/b]: Fixed an issue with PacketAnimationListener ([url=https://github.com/Maxlego08/zMenu/issues/245]#245[/url]).

[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][b]Internal Changes[/b][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]New Minecraft version detection system MinecraftVersion over old NMSVersion enum, allowing more flexible version checks and better support for future Minecraft versions without needing to update the plugin.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]New utils annotations

[/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]@SinceVersion | These annotations can be used to mark classes that should only be loaded for specific Minecraft versions, check in the VersionFilter class for more details.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@UntilVersion | These annotations can be used to mark classes that should only be loaded for specific Minecraft versions, check in the VersionFilter class for more details.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@PaperOnly | These annotations can be used to mark classes that should only be loaded if the server is a Paper version, check in the VersionFilter class for more details.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@SpigotOnly | These annotations can be used to mark classes that should only be loaded if the server is a spigot version, check in the VersionFilter class for more details.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoComponentLoader (renamed from @ComponentLoader) | Allow to load dynamically all items component loader without having to register them one by one in the ZComponentManager class for "fr.maxlego08.zmenu" package, filtering by version and server type with the new annotations by the helper of VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoListener | Allow to load dynamically all listeners who take a MenuPlugin in their constructor or no-arg constructor without having to register them one by one in the ZListenerManager class for "fr.maxlego08.zmenu" package, filtering by version and server type with the new annotations by the helper of VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoActionLoader | Allow to load dynamically all action loaders without having to register them one by one, filtering by version and server type via the VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoMaterialLoader | Allow to load dynamically all material loaders without having to register them one by one, filtering by version and server type via the VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoPermissibleLoader | Allow to load dynamically all permissible (requirement) loaders without having to register them one by one, filtering by version and server type via the VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@AutoRuleLoader | Allow to load dynamically all item rule loaders without having to register them one by one in the ZRuleLoaderRegistry, filtering by version and server type via the VersionFilter class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]@RequiresPlugin | Mark a class so it is only loaded when a given plugin is present. Now supports a version and a type (Comparison) to only load the class when the plugin version comparison is true, plus a checkMode (EXISTS / EXISTS_AND_ENABLED) to choose between "plugin installed" and "plugin installed and enabled".[/font][/size][/li]

[/ul]

[/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]All action, component, listener, material, permissible and rule loaders are now discovered and registered automatically at startup through ClassRegistry and the annotations above, instead of being registered one by one.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]ClassRegistry now logs constructor instantiation failures, making it easier to diagnose why a loader did not register.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]New dedicated NMS modules (NMS/Base, NMS/v1_20_R3, NMS/v1_20_R4, NMS/v1_21_R1) with a versioned NMSHandler abstraction.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]New item packet management classes: NMSMenuPacketListener, PacketQueue and ForceChannelPromise.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]New item components: AttackRange and MaxStackSize (with Spigot and Paper implementations); entity variant loaders refactored onto shared base classes (CollarColor, DyeColor, Enum, Registry variant loaders).[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Standardized string casing using Locale.ROOT across all classes for consistent, locale-independent behavior.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Migrated the build to a Gradle version catalog (gradle/libs.versions.toml).[/font][/size][/li]

[/ul]

1.1.1.4 Bedrock is now available ! 21 May 2026

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]New Features[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Bedrock Inventory Support[/b]: Added full Bedrock inventory support via Geyser/Floodgate integration. Includes Bedrock-specific actions, buttons, input builders (with placeholders support and legacy color code conversion), drag button, inventory replacement, dialog support, and Bedrock player validation.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Inventory Replacement[/b]: Implemented inventory replacement functionality, allowing inventories to be dynamically replaced across various classes.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]ItemStack Build Context[/b]: Added ItemStack support to build context and updated durability handling in menu item stack.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]PaperProfileComponent[/b]: Added new PaperProfileComponent for Paper-specific profile handling.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Bug Fixes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Clear Inventory + BACK Button[/b]: Fixed items being restored to the player when clicking a BACK button between two inventories with clear-inventory: true and clear-inventory-type: PACKET_EVENT. Items are now physically cleared from the player inventory during storage, ensuring container content packets don't reveal hidden items. The close handler also uses physical restoration (giveInventory) instead of packet-based restoration.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Item Pickup with Clear Inventory[/b]: Fixed items being picked up by the player when clear-inventory is enabled.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Lore Metadata Duplication[/b]: Fixed "lore" metadata duplication when loading items.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Color Handling[/b]: Fixed and simplified color handling for leather armor and banner patterns in MenuItemStackLoader.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]NPE Fix[/b]: Fixed null pointer exception.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Import Fix[/b]: Fixed import for ZBuildContext in ItemEditAction.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]API Errors[/b]: Fixed errors and updated API version.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Improvements[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Requirement Configuration Validation[/b]: Added validation for click-requirement, view-requirement, and open-requirement configurations. Detects common misconfiguration where users place requirement keys directly under the requirement section instead of using named groups (for click-requirement) or a requirements list (for view/open-requirement). Displays a clear warning message with an example of the correct structure and a link to the documentation.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Inventory Lookup Optimization[/b]: Optimized inventory lookup with a map cache for better performance.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]CraftEngine Compatibility[/b]: Updated compatibility with the latest version of CraftEngine.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Color Parsing[/b]: Added color parsing support.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Changes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Time Placeholders[/b]: Changed time_unix_timestamp, time_next_day_unix_timestamp, and time_today_start_unix_timestamp placeholders to return values in seconds instead of milliseconds.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Internal Changes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Standardized method parameter annotations to use @NonNull across action and button classes.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Standardized this keyword usage in method return statements for clarity.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Streamlined item stack creation by consolidating special item stack application.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Enhanced click handling in Button class and simplified click requirement configuration.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Updated Nexo dependency version.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Updated Gradle repositories URL for Floodgate.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed unused library files (FirstCore.jar, zEssentials.jar, zMenu-1.1.0.0.jar).[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed debug messages.[/font][/size][/li]

[/ul]

1.1.1.3 New features !! 19 April 2026

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]New Features[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Pagination Management System[/b]: Introduced PaginationManager with PaginationButton, PaginationNextButton, and PaginationPreviousButton classes, allowing a single button to handle pagination. Includes max page tracking and optimized page size handling.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Pagination Placeholders[/b]: Added pagination-related placeholders to MenuPlaceholders for enhanced inventory navigation.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Reset Pagination Action[/b]: New ResetPaginationAction and loader to reset pagination state for button paginations.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Skip Close Actions on Inventory Switch[/b]: Added skip-close-actions-on-switch configuration option to prevent close actions from firing when switching between inventories, fixing issues with back/inventory actions triggering on close.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]PacketManager Interface[/b]: Introduced PacketManager API interface and refactored title name handling in packet events for cleaner architecture.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]ClickAction Enum[/b]: Added ClickAction enum to streamline action handling in InventoryLoader.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Bug Fixes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed CustomModelDataComponent data handling (removed Optional) and added Paper-specific implementation (PaperCustomModelDataComponent) for proper Paper compatibility.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed head cache issue in ZMenuItemStack.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed unnecessary toLowerCase conversion on dialog names in CommandDialogOpen.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed item button click handling by removing redundant null check for clickable buttons.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Internal Changes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Added javadocs.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]API fixes.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed unused class.[/font][/size][/li]

[/ul]

1.1.1.2 Bugs fixes 17 March 2026

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Bug Fixes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed openWithOldInventories method crash on 1.20 by using CompatibilityUtil.getTopInventory() for safe inventory access.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed trim pattern and material validation: now uses Bukkit Registry instead of the hardcoded TrimHelper, with proper error messages listing all available patterns/materials when a key is not found.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed null ItemFlag entries causing errors when applying flags to item meta.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed EnchantmentGlintOverrideComponent not handling false values correctly - previously only true was applied, now both true and false are respected.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed click requirements defaulting to an empty click list when none are specified - now defaults to all click types.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed AttributeWrapper to support an optional NamespacedKey instead of always generating a random UUID, preventing attribute duplication on item rebuild.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed database connection logger initialization order in ZStorageManager.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed item loading from map (loadItemStack) to use MenuItemStackLoader instead of the removed MenuItemStackFormMap class.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Improvements[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Command Permissions[/b]: Added dedicated permissions for CommandMenuEditor (ZMENU_EDITOR), CommandMenuVersion (ZMENU_VERSION), and CommandMenuGiveOpenItem (ZMENU_GIVE_OPEN_ITEM).[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]API[/b]: Added getClickRequirementKeys() method to MenuPlugin interface, allowing addons to retrieve the supported click requirement configuration keys.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Default Configs[/b]: Updated default configuration files (pro_inventory.yml, playtime_reward.yml) to use kebab-case (view-requirement, click-requirement, open-requirement) matching current conventions.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Dependencies[/b]: Added adventure-text-minimessage as a library dependency in plugin.yml.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Internal Changes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed unused PlayerSkin class.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed unused MenuItemStackFormMap class and associated fromMap static method.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Cleaned up imports and formatting across multiple files.[/font][/size][/li]

[/ul]

1.1.1.1 Bugs fixs 9 March 2026

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]New Features[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]MMOItems Support[/b]: Added material loader for MMOItems plugin integration.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif][b]Enchantments Component[/b]: Added enchantments component support for item configuration.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Performance[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Performance improvement for items that will use a player's nickname to be displayed (player-head optimization).[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Bug Fixes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed enchant key parsing in configuration.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed enchantments component initialization.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed title parsing before sending to player in PlayerTitleAnimation.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed dynamic material check in menu item stack caching logic.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed %player% as a valid player argument in validators.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed error handling and formatting in various loaders and actions.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed basehead itemstack rendering.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed French translations in message strings.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed wrong format issues.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed null checks for player in packet listeners.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed [] display when placeholder returns an empty list.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Fixed null message handling in getLegacyMessage method.[/font][/size][/li]

[/ul]

[size=2][font="Droid Sans", Arial, sans-serif][size=5][size=5][b]Internal Changes[/b][/size][/size][/font][/size]

[ul]

[li][size=2][font="Droid Sans", Arial, sans-serif]Refactored placeholder package structure and usage.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Renamed SpigotDyeColorItemComponentLoader to SpigotDyedColorItemComponentLoader.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Changed item model type from String to NamespacedKey in MenuItemStack classes.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Updated @Contract annotations in BaseInventory.java for clarity.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed unnecessary whitespace in ComponentMeta.java.[/font][/size][/li]

[li][size=2][font="Droid Sans", Arial, sans-serif]Removed debug messages.[/font][/size][/li]

[/ul]

1.1.1.0 Improve performance ! 15 February 2026

[color=#eeffff][size=5][font=Helvetica, Arial, freesans, sans-serif][b]New Features[/b][/font][/size][/color]

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][b][b]Performance Debug System[/b][/b]: Added per-operation performance monitoring for inventory opening. Measures execution time for each step (permission checks, button building, item rendering, etc.) and logs results to console. Configurable via 

enable-performance-debug

, with threshold filtering and whitelist/blacklist support for operation names.[/font][/size][/color][/li]

[/ul]

[color=#eeffff][size=5][font=Helvetica, Arial, freesans, sans-serif][b]Performance[/b][/font][/size][/color]

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][b][b]ItemStack Build Optimization[/b][/b]: Optimized 

ZMenuItemStack.build()

 to reduce redundant work on each inventory open:

[/font][/size][/color]

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Eliminated duplicate PlaceholderAPI resolution for material strings (was called twice per build)[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Pre-resolve 

Material

 at load time when no placeholders are present, skipping PAPI parsing at runtime[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Replaced exception-based control flow for numeric material IDs with a simple numeric check[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Pre-compute 

NamespacedKey

 for 

tooltipStyle

itemModel

, and 

equippedModel

 in setters instead of splitting/creating on every build[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Cache the glowing enchantment lookup instead of querying the enchantment registry on every build[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Pre-split lore lines containing 

\n

 at load time instead of splitting on every build[/color][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][color=#eeffff]Added early exit in 

Placeholders.parse()

 when the string contains no 

%

 character, avoiding unnecessary iteration over all placeholder entries[/color][/font][/size][/color][/li]

[/ul]

[/li]

[/ul]

[color=#eeffff][size=5][font=Helvetica, Arial, freesans, sans-serif][b]Internal Changes[/b][/font][/size][/color]

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif][b][b]MiniMessage Color Parsing Refactor[/b][/b]: Consolidated color parsing methods into 

MiniMessageColorUtils

 class for better maintainability and code reuse.[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Added unit tests to verify preservation of MiniMessage color tags.[/font][/size][/color][/li]

[/ul]

[color=#eeffff][size=5][font=Helvetica, Arial, freesans, sans-serif][b]Bug Fixes[/b][/font][/size][/color]

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed hex color parsing regex to correctly handle edge cases.[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed typo in 

PlayerCommandLoader

 constructor parameter list.[/font][/size][/color][/li]

[/ul]

1.1.0.9 Bugs fixs 3 February 2026

[b][size=5]New Features[/size][/b]

[ul]

[li]Dynamic Inventory Title Updates: Added PacketEventChangeTitleName and PacketTitleListener for changing inventory titles dynamically without reopening the inventory. Requires PacketEvents.[/li]

[li]ClearInvType for Inventory Management: Introduced ClearInvType enum and temporary inventory storage system for better inventory state management.[/li]

[li]Per-Inventory Click Limiter: The click limiter now only applies to zMenu inventories and can be configured per inventory with click-limiter-enabled: true/false. It no longer interferes with non-zMenu inventories.[/li]

[li]Enhanced ItemButton Context: ItemButton now includes inventory context for improved button logic and interactions.[/li]

[/ul]

[b][size=5]Bug Fixes[/size][/b]

[ul]

[li]Fixed parsing of map structures inside arrays in YAML configuration. #219[/li]

[li]Fixed click limiter applying to all inventories instead of only zMenu inventories. #219[/li]

[li]Fixed inventory restoration on plugin disable. #215[/li]

[li]Fixed PacketEvents warning on plugin disable. #215[/li]

[li]Resolved scheduler compatibility issue with Folia.[/li]

[li]Fixed task registration during plugin shutdown.[/li]

[li]Enhanced variant component initialization with proper error handling and version checks.[/li]

[/ul]

1.1.0.7 Bug fixs and improve code ! 16 December 2025

[ul]

[li]Fixed NMS compatibility for 1.21.10.[/li]

[li]Fixed issues with DeluxeMenus inventory loading.[/li]

[li]Fixed MiniMessage regex handling.[/li]

[li]Added the ZMenuItemsLoad event, triggered when zMenu custom items are loaded or reloaded.[/li]

[li]Improved the logging system.[/li]

[li]Improved item mechanics.[/li]

[li]Added deny-chance-actions support for actions.[/li]

[li]Various minor fixes and general code improvements.[/li]

[li]Added new placeholders:[/li]

[li]%zmenu_time_unix_timestamp%,[/li]

[li]%zmenu_time_next_day_unix_timestamp%,[/li]

[li]%zmenu_time_today_start_unix_timestamp%[/li]

[/ul]

1.1.0.6 Bug fixs and update attributes ! 1 December 2025

[ul]

[li]Fixed the removal of default attributes.[/li]

[li]Improved attribute configuration, you now have more comprehensive options. More information available here.[/li]

[li]Added more configuration options for patterns.[/li]

[li]Added Brewery support to create your items.[/li]

[li]Added an option to run actions as an administrator.[/li]

[li]Added support for Oraxen fonts.[/li]

[li]Fixed the loading of certain plugins.[/li]

[li]Added a system to apply actions to items.[/li]

[/ul]

1.1.0.5 Code performance improve 27 October 2025

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Improved and optimized internal code. These consist of micro-optimizations that will only be noticeable on servers with several hundred players.[/font][/size][/color]

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Added an option to disable toasts.[/font][/size][/color]

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Fixed antivirus-related flag issues.[/font][/size][/color]

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Fixed default attributes applied to items.[/font][/size][/color]

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Added support for MythicMobs.[/font][/size][/color]

[color=#2c2c2c][size=2][font="Droid Sans", Arial, sans-serif]- Added a placeholder for global placeholders.[/font][/size][/color]

1.1.0.4 Update to Sarah 1.20 2 October 2025

[ul]

[li]Update to Sarah 1.20. Added MARIADB support[/li]

[li]Fixed NONE database settings[/li]

[li]Improve pattern file loading[/li]

[/ul]

1.1.0.3 You can use the dialogues! It’s a crazy thing !!!! 18 September 2025

Added dialogs inventories /zm dialog #186 by 1robie and saildrag

Added %player% placeholder for each action

Added a view requirement system with the ability to define an else for another pattern

Added option to disable inventory loading: enable: false

Added reason for withdraw and deposit action

Fixed withdraw and deposit action with zEssentials

Improve update checker #183

Fix openInventoryWithOldInventories method

Fixed inventory button drop on death when clear inv is active

Fixed item giving on disconnect when clear inv is active

Fixed textures of offline players’ heads

Optimized Enum NmsVersion → no more repeated calls to getVersion (unnecessary since the version doesn’t change at startup)

Fixed commands not displaying the "No permission" message during setup

New command: /zm contributors

New command: /zm addons

New command: /zm dumplog

Update to Sarah 1.19

1.1.0.2 Toast action ! 8 August 2025

[ul]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Added [url=https://docs.zmenu.dev/configurations/actions#toast][color=#ff9800]toast[/color][/url] action[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Added more API methods[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Added equipped model, for custom armor[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed error if button is not found[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed luckperm action[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed discord parsing[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Fixed inventory reloading issues [url=https://github.com/Maxlego08/zMenu/pull/173][color=#ff9800]#173[/color][/url][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Updated source code to java 21 [url=https://github.com/Maxlego08/zMenu/pull/166][color=#ff9800]#166[/color][/url][/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Updated to last CurrenciesAPI version[/font][/size][/color][/li]

[li][color=#eeffff][size=2][font=Helvetica, Arial, freesans, sans-serif]Some fixs [url=https://github.com/Maxlego08/zMenu/pull/170][color=#ff9800]#170[/color][/url][/font][/size][/color][/li]

[/ul]