Update v1.8.0 – Smarter GUI Flow, Confirm Menus, Session Expiry & Empty States
April 2025 – Major infrastructure & UX improvements
✨ New Features
✅ Confirm Menu System
• Added
ConfirmMenuManager for confirmation workflows (accept/cancel)
• Fully integrated with
SelectGamemodeMenuManager and session tracking
• Customizable title, layout, filler from
confirmGUI.yml
• Supports:
-
setConfirmContext(...) in
DuelBuilderSession
-
ConfirmMenuManager.reopen(...) to go back if needed
Empty State Item Support
• When no players are online, a custom "no players" icon is displayed in the top row
• Configurable via
menu.empty-item in
challengeGUI.yml
• Supports material, MiniMessage title, lore, enchantment, sound & particles
Seamless Menu Navigation
• Confirm Cancel button now returns to Gamemode Selector (with delay fix)
• "Back" buttons use
BukkitScheduler.runTaskLater for smooth reopening
• Session tracking retains previous page when switching menus
Internal Improvements
Centralized Session Expiration
• New async cleanup task via
DuelBuilderManager.expireStaleSessions()
• Automatically removes stale
DuelBuilderSession objects
• Configurable via
gui-settings.timeout-seconds in your
config.yml
⚙️ Improved GUI Parsing
•
DuelBuildingManager now cleanly parses:
-
menu.empty-item
-
menu.sounds
-
menu.navigation.layout
-
menu.filler-item
• All GUI metadata now stored in
DuelMenuMeta
ItemBuilder Enhancements
• Material parsing now logs invalid types and defaults to
BARRIER
• Filler and button slots only update if empty (null or AIR)
Config Changes
challengeGUI.yml
Make sure
empty-item is under
menu:
Code (YAML):
menu
:
...
empty-item:
enabled
: true
material
: SKELETON_SKULL
name
:
"<gray>No players found"
lore
:
-
"<dark_gray>Try again later."
enchanted
: false
config.yml
Set the global GUI timeout (in seconds):
Code (YAML):
gui-settings:
timeout-seconds
: 60
Developer Notes
• Compatible with older GUI configs
• Uses full MiniMessage support for titles, lore
• Works with PlaceholderAPI (%player_name%, etc.)
• Reload menus anytime with
/duel reload
✅ Ready for smoother menu navigation, confirmation control, and cleaner sessions!