From 00767f142c6fc1cc8577be7fd53e224613684efe Mon Sep 17 00:00:00 2001 From: Chasing Code Date: Tue, 8 Jan 2013 11:37:46 -0800 Subject: [PATCH] Store enchanments in Enchanted Books MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change enchant command to store the enchantment instead of applying it when used on an Enchanted Book.  If an enchantment is already present, replace it (only one allowed on Enchanted Books). --- .../src/com/earth2me/essentials/ItemDb.java | 57 ++++++++++++++++--- 1 file changed, 49 insertions(+), 8 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ItemDb.java b/Essentials/src/com/earth2me/essentials/ItemDb.java index 80c54a5a2..9dad836c7 100644 --- a/Essentials/src/com/earth2me/essentials/ItemDb.java +++ b/Essentials/src/com/earth2me/essentials/ItemDb.java @@ -171,21 +171,37 @@ public class ItemDb implements IConf, IItemDb public void addEnchantment(final User user, final boolean allowUnsafe, final ItemStack stack, final Enchantment enchantment, final int level) throws Exception { - if (level == 0) - { - stack.removeEnchantment(enchantment); - } - else + if (stack.getType().equals(Material.ENCHANTED_BOOK)) { try { - if (allowUnsafe) + EnchantmentStorageMeta meta = (EnchantmentStorageMeta) stack.getItemMeta(); + + if (level == 0) { - stack.addUnsafeEnchantment(enchantment, level); + if (meta.hasStoredEnchant(enchantment)) + { + meta.removeStoredEnchant(enchantment); + stack.setItemMeta(meta); + } } else { - stack.addEnchantment(enchantment, level); + // Enchanted Books only allowed to have one enchantment + if (meta.hasStoredEnchants()) + { + // Although there should be only one, don't make assumptions + Iterator> entries = meta.getStoredEnchants().entrySet().iterator(); + while (entries.hasNext()) + { + Map.Entry entry = entries.next(); + Enchantment ench = entry.getKey(); + meta.removeStoredEnchant(ench); + } + } + + meta.addStoredEnchant(enchantment, level, allowUnsafe); + stack.setItemMeta(meta); } } catch (Exception ex) @@ -193,6 +209,31 @@ public class ItemDb implements IConf, IItemDb throw new Exception("Enchantment " + enchantment.getName() + ": " + ex.getMessage(), ex); } } + else // all other material types besides ENCHANTED_BOOK + { + if (level == 0) + { + stack.removeEnchantment(enchantment); + } + else + { + try + { + if (allowUnsafe) + { + stack.addUnsafeEnchantment(enchantment, level); + } + else + { + stack.addEnchantment(enchantment, level); + } + } + catch (Exception ex) + { + throw new Exception("Enchantment " + enchantment.getName() + ": " + ex.getMessage(), ex); + } + } + } } //TODO: Properly TL this