v1.0.6
Features:
- Flicker-free menu transitions: page changes and same-size cross-menu opens swap title and contents in a single bundle packet, no intermediate empty frame. Toggle withsmooth_transitionsin config.yml.
Performance:
- Material lookup cache:
Material.matchMaterialnow resolved once per unique string.- Static ItemStack cache: items with no placeholders and no player-dependent material are built once and cloned on subsequent renders. Cleared on reload.
- Cross-menu smooth swap nulls only orphan slots instead of calling
inventory.clear()on the whole inventory.
Fixes:
- Crash on disable:
onDisablewas closing every online player's open inventory, NPEing on Folia for real Ender Chests during world teardown. Now only closes our own menus, try/catch around each.- ConcurrentModificationException on Folia from tab-complete and broadcast actions iterating
Bukkit.getOnlinePlayers()mid-mutation. All iterations now go throughUtil.snapshotOnlinePlayers()which retries on CME and falls back to empty.update_intervalbelow 1 second was ignored (global task capped at 1 second). Task now ticks at 50ms.- Animated items flickering back to base (update task was overwriting frames the animation task had just written).
- Static items with
{page}/{max_page}in lore showed stale numbers after paging. Added arefreshStaticItemspass.- Meta add/subtract on DOUBLE accumulated floating-point error. Now uses BigDecimal and preserves input scale.
- Bare action names in requirement deny lists (e.g.
- close) were sent to chat instead of executed.player:action no longer double-slashes commands starting with/.click_cooldownwas cached at enable and not refreshed on/am reload. Now read live from config.
Editor fixes:
- Freshly dropped items were deleted on save (orphan-cleanup loop iterated a live view that included items it had just added).
- Player head textures were lost. Dropped heads now save as
basehead-<texture>orhead-<owner>instead of plainPLAYER_HEAD.- Only material/slot/amount/name/lore were captured. Now also captures custom_model_data, item_model, tooltip_style, enchantments, item_flags, unbreakable, rarity, hide_tooltip, damage, and leather/potion RGB.
- Names and lore now serialize with MiniMessage so colors, gradients, fonts, and decorations survive (was plain text).
- Falls back to
item_namewhen an item has nocustom_nameso resource-pack items with only the canonical name save correctly.- Nexo, ItemsAdder, Oraxen, and HeadDatabase items now save as
nexo-<id>/itemsadder-<id>/oraxen-<id>/hdb-<id>via each plugin's reverse-lookup API instead of as their vanilla base material.- Items dragged in with stale editor PDC tags from a prior editor session (e.g. shift-clicked out, dropped into a new menu) were saved as bare
slot:stubs. Tags are now ignored unless they target a name that already exists in the current menu's config.- Per-property metadata captures are wrapped so a single failing API call (e.g. on a future-version-only method) skips that section instead of aborting the whole item.
Diagnostics:
- Defensive
%player_name%fallback at the end of action/placeholder resolution, with debug log when the fallback fires.MetaStore.setlogs[Meta] <player> set <key> (<type>) = <value>to console whendebug: true.- Editor logs
[Editor] <type> saved as material '<resolved>'whendebug: true.
v1.0.5
Features:
Performance:
- Item templates: reusable items in templates/ folder with variable substitution
- Pattern-based layouts: define menu layouts using character grids
- Animated buttons: frame cycling with configurable interval, reverse, and one-time play
- Progress bar items: fill slots based on current/max values from placeholders
- Dynamic titles: update inventory title on timer with live placeholders
- Player list items: auto-generate page items for online players
- Predicate menus: open different menus based on requirements
Fixes:
- 27 optimizations across caching, scheduling, placeholder resolution, data structures, and rendering
- Dirty checking on item updates (skip packet when unchanged)
- Pre-built animation frames, page-only player list generation
- Global async tasks replace per-holder tasks
- Target player preserved on menu reload
- player: action no longer double-slashes commands starting with /
- Minimum click cooldown enforced
- MiniMessage injection escaped in error messages
- Global tasks cancelled on disable
- Dead code removed, legacy codes replaced with MiniMessage
v1.0.4
Features:
- /am with no args shows help
- Hooks wiki page (Vault, PAPI, HeadDatabase, ItemsAdder, Oraxen, Nexo)
- config.yml settings documented
- rawsound, broadcast_rawsound, broadcast_rawsound_world actions documented
Fixes:
- {target} and PAPI placeholders not resolving for target player in click actions
- Anvil input showing XP cost visual desync
- Click cooldown triggering on empty slot clicks
- previous_menu not updating correctly when navigating between menus
- target_player_arg tab completion not working until reload
- Filler items overriding priority/view_require items on shared slots
- %player_name% and built-in placeholders not resolving for target player in click actions
- Unknown /am subcommands showing Brigadier error instead of help
- string_contains_ignorecase missing from wiki
- model_data/item_model docs clarified for resource pack users
Features:
- target_player_arg: first argument as target player, no -p: needed, with tab completion
- %aumenus_current_menu%, %aumenus_previous_menu% placeholders
- Configurable "player not found" message (config.yml messages section)
- Download links added to README
Fixes:
- Deny actions not running on failed optional requirements
- previous_menu looping when navigating back between menus
- Commands showing red after reload (CommandMap registration)
- Fix {deluxemenus_meta_} in math placeholders not converting during migration
Wiki updated to latest.
