Fixed
- MMOItems lore-format placement now uses OmniEnchant's native MMOItems stat insertion, so
#omnienchant#is resolved during item build instead of by a delayed post-build lore rewrite.- Disabled the delayed MMOItems build-lore renderer path because it could lose the placeholder and move enchant lore to fallback position.
- ProtocolLib packet lore rendering is optional at startup; servers without ProtocolLib no longer fail while loading OmniEnchant.
- Folia/Paper scheduled tasks now use the Folia compatibility wrapper for cooldown cleanup, inventory scans, permanent effects, GUI reopen flows, anvil/enchant-table/book callbacks, lore watching, set bonuses, and crop replanting.
- Activity data unload/flush keeps dirty player data until async save succeeds, preventing progress loss after write failures.
- Fusion now validates output and payment before consuming source books, and failed payments no longer remove ingredients.
- Config migration preserves existing live config files and only creates missing defaults instead of overwriting admin edits.
/sle browseand/sle browsernow have first-class Brigadier registration instead of relying on the fallback parser./sle shop,/sle dust,/sle version,/sle giverandom,/sle givescroll, and no-arg admin commands now route through explicit Brigadier nodes./sle versionnow reports plugin version, loaded enchant count, server version, and dependency status./sle giverandom <player> <rarity> [level] [amount]now matches the wiki and gives random enchant books by rarity./sle addenchant <enchant> <level>and/sle removeenchant <enchant>now match the wiki and use the shared NBT/lore update pipeline.- Player command permissions now match the wiki defaults for
slenchant.info,slenchant.browser,slenchant.shop,slenchant.dust, andslenchant.activity.
- Drag-drop,
/sle addenchant,/sle removeenchant, enchant table, and anvil merge now share the ordered slot-state writer.- Removing an enchant leaves its slot empty until compacted instead of reshuffling lore unexpectedly.
gradlew.batnow exits cleanly in shells where%OS%is not defined.
#enchantslots#no longer duplicates OmniEnchant lore at the top of MMOItems tooltips; the initial MMOItems slot block is now managed and replaced in-place.- Slot limits are enforced when reading legacy overfilled enchant data, so items with 5 slots no longer render or activate 24 custom enchants.
- Runtime stat, permanent effect, set bonus, mechanic, packet lore, tracker, extraction, anvil, and enchant-table paths now read the slot-aware effective enchant map.
- Compact lore now renders every enchant and wraps by
chars-per-lineinstead of truncating long lists.
UPDATE
- Slot counter is enabled by default and now usesEnchant Slot: {used}/{max}in the generatedsettings/display.yml.
- Native MMOItems
ENCHANTSLOTSstat for ordered OmniEnchant slots.#enchantslots#lore-format placeholder support for gem-slot-style placement.- Slot display formats in
settings/display.yml:slot-name-format,slot-empty-format,slot-desc-format,show-empty-slots,show-slot-counter, andslot-counter-format./sle compactand/sle compressto move filled enchant slots upward.- PlaceholderAPI counters:
%slenchant_slots_used%,%slenchant_slots_max%,%slenchant_slots_empty%.
### Improved
- Fusion GUI now aggregates duplicate required books and shows owned/required counts, e.g.
Fire Aspect III x2 (1/2).- Fusion recipes now consume the exact required quantity for duplicate inputs and block crafting when the player only has one matching book.
- Dust Crafting now consumes exactly one enchant book per craft and keeps the rest of a stacked input in the GUI slot.
- MMOItems enchant editor now requires Shift-click to clear all enchants, preventing accidental full item cleanup.
- Fusion GUI now honors
filler-material,filler-name, andrecipe-start-slotfromsettings/fusion.yml.
REBRANDING Plugin Rename
- Renamed from SLMMOEnchant / OminiEnchant to OmniEnchant
- JAR output is now OmniEnchant.jar (no version suffix)
- Plugin folder: plugins/OmniEnchant/
- Lore placeholder changed to #omnienchant# (legacy #ominienchant# and #slenchant# still accepted)
- Modifier placeholder changed to #omnimodifier# (legacy tokens still accepted)
- All in-game GUI branding updated to OmniEnchant
ADDED New Systems
- OmniModifier runtime hook for unified lore management
- Lore Orchestrator core (LoreOrchestrator, LoreSectionParser) — non-destructive lore synchronization
- External Adapter Framework (EcoEnchants, AdvancedEnchant interop)
CHANGED Improvements
- Version bumped from 1.2.7 to 2.0.0
- Paper API target: 1.21.11
- Config defaults now prefer OmniEnchant naming
- Lore writes skip no-op updates to reduce meta churn
COMPAT Backward Compatibility
- All legacy placeholder tokens (#slenchant#, #ominienchant#) still supported
- Permission nodes (slenchant.*) unchanged for backward compatibility
- NBT keys (SLENCHANT_*) unchanged — existing item data is preserved
