### New Features
#### Stats & Analytics
- **SQLite operation logging** — every disenchant/shatter is persisted to a local SQLite database (`logging.operations` config gate).
- **`/disenchantment stats [player]`** — new command showing lifetime operation counts, XP spent, and economy costs.
- **StatsGUI** — in-game stats screen accessible via the Navigation GUI.
- **PlaceholderAPI expansion** — 6 new PAPI placeholders for stats (total operations, XP, economy, per-type breakdowns).
- **Post-event enrichment** — `PostDisenchantEvent` and `PostShatterEvent` now carry `xpCost` and `economyCost`; Creative-mode players report `xpCost = 0`.
#### Cost & Economy
- **LuckPerms XP discounts** — per-player XP cost reduction via LP meta keys or permission nodes.
- **Per-enchantment economy overrides** — set a flat economy cost for specific enchantments, overriding the default formula.
- **Repair max-cost cap** — configurable cap on anvil prior-work penalty fed into cost calculations.
- **Enchantment success chances** — configurable per-enchantment or global probability that a disenchant/shatter succeeds.
#### Cooldowns
- **Per-player anvil cooldown** — configurable cooldown between operations; delegates to **CMI** or **EssentialsX** cooldown APIs when those plugins are present.
#### Permissions & Bypass
- **Maintenance mode** — lock the plugin to ops only via `/disenchantment maintenance`.
- **World bypass permission** — players with the bypass node ignore per-world disable rules.
- **Material bypass permission** — players with the bypass node ignore per-material disable rules.
- **Anvil cost bypass permission** — skip XP/economy cost entirely.
#### Shatterment (Book Splitting)
- **Random split-count range** — instead of a fixed split count, configure `[min, max]` and get a random value per operation.
- **SplitCountGUI panel** — in-game GUI to configure the split count range.
- **Disabled-materials list for shatterment** — independent material blocklist for book splitting (separate from disenchanting).
- **Dual-toggle Materials GUI** — updated Materials GUI shows separate toggles for disenchant vs. shatter per material.
#### Commands & Config
- **Enchantment groups** — define named groups of enchantments and bulk-enable/disable them with a single command.
- **Namespaced enchantment keys** — `minecraft:sharpness`, `advancedenchantments:fire_wave`, etc. are now valid in config and state lookups.
#### Monitoring
- **Discord webhook crash reporting** — uncaught plugin exceptions POST a structured report to a configured webhook.
- **DISE-NNN error codes** — internal errors now carry short stable codes for support/debugging.
- **`--json` flag on `/disenchantment status`** — machine-readable status output for monitoring scripts.
### Bug Fixes
- Fixed inverted boolean in `CommandBuilder` argument validation (commands with required args were accepting zero args).
- Fixed null-guard order and economy-charge timing in anvil click handlers (economy was charged before confirming the operation succeeded).
- Fixed deprecated permission warning message (was showing the wrong permission node name).
- Fixed zero-`xpCost` not being sent in Post events for Creative-mode players.
- Removed dead code and fixed copy-paste comment in several utility classes.
- Added missing i18n key that caused a silent NPE on certain locale configurations.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }