1
0
mirror of https://github.com/essentials/Essentials.git synced 2025-08-22 14:23:09 +02:00

Store enchanments in Enchanted Books

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).
This commit is contained in:
Chasing Code
2013-01-08 11:37:46 -08:00
parent 1b6729d3fc
commit 00767f142c

View File

@@ -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<Map.Entry<Enchantment, Integer>> entries = meta.getStoredEnchants().entrySet().iterator();
while (entries.hasNext())
{
Map.Entry<Enchantment, Integer> 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