### New Features
#### Restriction Modes
- **ALLOWLIST / DENYLIST modes for worlds** — the per-world list can now act as either a denylist (block only listed worlds) or an allowlist (permit only listed worlds). Config migration 12 adds the new setting automatically.
- **ALLOWLIST / DENYLIST modes for materials** — same allowlist/denylist model applied to the per-material restriction list.
- **`mode` subcommand** — `/disenchantment worlds mode`, `/disenchantment materials mode`, and the shatter variants toggle the restriction mode from chat.
- **Restriction-mode GUI toggle** — the Worlds and Materials GUIs gained an in-panel control to switch between allowlist and denylist.
- **i18n strings** — new English and Czech localization entries for all restriction-mode controls.
### Bug Fixes
- **Anvil result-slot item duplication** — fixed a duplication exploit on the anvil result slot; shared guard logic centralized in `AnvilEventGuards`.
- **Single-source-item enforcement** — disenchant and shatter now reject stacked source items and operate on a single item only, preventing unintended multi-item processing.
### Internal
- **Logging refactor** — debug messages are now built lazily, webhook payloads are serialized as safe JSON, and duplicate startup log lines were removed.
- **Diagnostics** — `DiagnosticUtils` updated to report the active restriction modes.
- Added regression tests for anvil guards and single-item enforcement (`AnvilEventGuardsTest`, `EventUtilsDisenchantTest`, `EventUtilsShatterTest`).
- Documented the restriction-mode model across the user and engineering docs.
**Full Changelog**: https://github.com/H7KZ/Disenchantment/compare/v6.5.11...v6.5.12
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" }