/ef split — splits a fused elytra back into the original elytra + chestplate. Lossless for fusions made on 1.6+. Older fusions fall back to a blank elytra + blank chestplate of the matching tier, with the enchantments moved to the chestplate.
Chat confirmation for /ef split with clickable [Confirm] [Cancel] buttons and a 30s timeout.
Named elytras now carry their name into the fused result by default. Controlled by fusion.name_mode (elytra, chestplate, preserve, config).
Per-tier toggle: set enabled: false on any material to remove its recipe without deleting the section.
Global particle toggle: particles.enabled: false.
Per-tier particle opt-out: set particle: "none" (or leave empty) to disable a tier's trail.
All player-facing messages moved to messages: in config.yml. Supports & color codes and {placeholder} substitution. Empty string suppresses a line.
New permissions: elytrafusion.use (default true) to fuse, elytrafusion.split (default true) to split. Useful with LuckPerms contexts if you want fusing restricted to certain worlds or ranks.
Changed
Updating the jar no longer requires deleting config.yml. Missing keys fall back to packaged defaults at runtime, your file is never modified. If your config is out of date, a config-latest.yml reference is dropped next to it and the missing keys are listed in the console; if it's up to date, nothing extra is written.
/ef reload now reloads the config, re-binds fallback defaults, and re-checks for missing keys.
/ef split gives a different message depending on whether you're not holding an elytra at all vs. holding a plain (non-fused) one.
Fixed
Invalid particle names no longer spam the console every tick. Warned once per unique bad value.
Fusing a damaged elytra into a tier with lower max_durability (e.g. into leather) no longer produces an already-broken item.
Fusing an already-fused elytra preserved the wrong snapshot. /ef split now always returns the very first elytra and chestplate regardless of how many times it's been re-fused.
Update checker compared versions with Double.parseDouble, so 1.10 looked older than 1.5. Now compares numerically per dot-segment.
Tab completion crashed when materials: was empty.
bStats chart NPE'd on elytras without a display name; switched to the internal tag so it's language-independent.
Performance: Optimized the damage listener to reduce server lag during high-intensity combat.
Unbreaking Fix: Re-wrote the durability logic.
Unbreaking III now correctly gives your infused gear a 70% chance to ignore damage in combat.
Environmental Logic: Your armor will no longer take durability damage from drowning, starving, or freezing.
Secure Tagging: Switched to PersistentDataContainer for item tracking. Players can no longer "fake" an infused Elytra by just renaming a normal one in an anvil.
Update Checker: Added an update checker