Reload & Validation
EasyMenu 7 includes a robust, atomic /menu reload pipeline designed to reload configurations live without risking runtime corruption.
The Atomic Reload Process
When /menu reload is executed, EasyMenu builds a fully detached reload candidate in memory without modifying the active runtime:
/menu reload triggered
↓
1. Background async YAML loading and parsing
2. Intra-menu validation (ID/slot uniqueness, materials, actions)
3. Cross-menu validation (verifies open-menu target existences)
4. Dynamic command planning (detects collisions with other plugins)
↓
All checks pass -> Atomic Commit
:::tip Rollback Guarantee
If even a single error (ERROR) is detected anywhere in the configuration, the entire candidate is rejected. The previous configuration, active menus, permissions, commands, and cache remain 100% untouched.
:::
Diagnostics Log Format
Parse issues produce structured log messages in your server console:
[shop] menu-items[0].material (diamond) unknown or non-item material: DIMAOND [unknown-material]
Diagnostics include:
[shop]: Menu IDmenu-items[0].material: YAML path(diamond): Element IDunknown or non-item material: DIMAOND: Human-readable error description[unknown-material]: Stable diagnostic error code
Severity Levels
- ERROR: Critical flaws (unknown materials, duplicate slots, bad action syntax, missing menus). Rejects reload.
- WARNING: Recoverable values (e.g. unknown sound name). Warning is logged and safe fallback is applied while reload proceeds.
- INFO: Load summaries and diagnostic details.
Stale Interaction Rejection
The moment a reload commits, callback tokens from menus opened before the reload are invalidated. This prevents players with open menus from executing outdated or modified command definitions.