SinceEnchantments Documentation
Core Concepts
Core Concepts
Namespaced Enchantment IDs
SinceEnchantments uses namespaced IDs everywhere.
| Type | Example |
|---|---|
| Built-in custom enchant | since:lifesteal |
| Vanilla enchant | minecraft:sharpness |
| AdvancedEnchantments enchant | ae:harvest |
| CrazyEnchantments enchant | ce:lifesteal |
| ExcellentEnchants enchant | excellentenchants:tunnel |
Always use lowercase IDs in commands and configs unless a page explicitly says otherwise.
Real Data vs Visual Lore
The plugin stores real enchant data in item metadata. Lore is rendered visually through packets.
Benefits:
- Keeps server-side item data clean.
- Prevents duplicate lore lines from stacking permanently.
- Allows MMOItems and custom item lore to stay structured.
- Lets vanilla and custom enchants be displayed in one consistent style.
Important behavior:
- Visual lore may not exist in raw NBT.
- Creative-mode item edits are cleaned before reaching the server.
- Inventory clicks clean injected lore before processing.
- The client receives fresh visual lore after item updates.
Enchantment Application Flow
When a player drags a book onto an item:
- The listener detects a SinceEnchantments book using PDC keys.
- The target item is validated.
- Slot limits are checked.
- Requirements and conflicts are checked.
- Success chance is rolled.
- The enchantment is written to the item.
- The clicked slot is synced.
- Packet lore cache is cleared.
- The player sees the updated visual lore.
Slot System
Each item has a maximum number of custom enchantment slots.
Slot sources:
settings.default-max-custom-enchants-per-itemlimits.ymlmaterial ruleslimits.ymlcustom item rules- Slot Gem modifiers
If a custom item matches a custom item rule, custom item rules take priority over vanilla material rules.
Requirements
An enchantment can require other enchantments.
Example:
requires:
- "minecraft:sharpness"
- "since:thunder"
The target item must already have all required enchantments before the book can apply.
Conflicts
Custom enchantments can conflict with other enchantment IDs.
Example:
conflicts:
- "since:lifesteal"
- "minecraft:smite"
Vanilla enchantment conflicts are also respected when applying vanilla enchantments unless overridden by config behavior.
Targets
Each custom enchant has a target:
target: "WEAPON"
Target names resolve through settings.enchant-targets.
Example:
enchant-targets:
WEAPON:
- "*_SWORD"
- "*_AXE"
- "TRIDENT"
Patterns support:
| Pattern | Meaning |
|---|---|
* |
Everything |
*_SWORD |
Ends with _SWORD |
DIAMOND_* |
Starts with DIAMOND_ |
*DIAMOND* |
Contains DIAMOND |
BOW |
Exact match |
External Enchants
External enchant plugins are not copied into SinceEnchantments.
Instead:
- AdvancedEnchantments uses
ae:<name>. - CrazyEnchantments uses
ce:<name>. - ExcellentEnchants uses Bukkit registry IDs such as
excellentenchants:<name>. - Missing entries are auto-registered in memory.
- Optional overrides can be added to
enchants.yml.