From ed88f8aa060eda90228b39bc075f1600c7a929d7 Mon Sep 17 00:00:00 2001 From: KHobbits Date: Sat, 29 Dec 2012 08:35:52 +0000 Subject: [PATCH] Allow unsafe enchantments in /item /give /kit and /enchant Needs enabled in config file manually. --- .../com/earth2me/essentials/ISettings.java | 2 ++ .../src/com/earth2me/essentials/Kit.java | 32 ++++++++++++------- .../src/com/earth2me/essentials/Settings.java | 6 ++++ .../essentials/commands/Commandenchant.java | 12 +++++-- .../essentials/commands/Commandgive.java | 14 +++++++- .../essentials/commands/Commanditem.java | 17 +++++++--- Essentials/src/config.yml | 4 +++ 7 files changed, 67 insertions(+), 20 deletions(-) diff --git a/Essentials/src/com/earth2me/essentials/ISettings.java b/Essentials/src/com/earth2me/essentials/ISettings.java index a261c80bb..c58ffa8e7 100644 --- a/Essentials/src/com/earth2me/essentials/ISettings.java +++ b/Essentials/src/com/earth2me/essentials/ISettings.java @@ -151,6 +151,8 @@ public interface ISettings extends IConf Set getNoGodWorlds(); boolean getUpdateBedAtDaytime(); + + boolean allowUnsafeEnchantments(); boolean getRepairEnchanted(); diff --git a/Essentials/src/com/earth2me/essentials/Kit.java b/Essentials/src/com/earth2me/essentials/Kit.java index fcd1b4932..0611cafec 100644 --- a/Essentials/src/com/earth2me/essentials/Kit.java +++ b/Essentials/src/com/earth2me/essentials/Kit.java @@ -34,12 +34,13 @@ public class Kit { throw new Exception(_("kitError"), ex); } - + } - + public static void checkTime(final User user, final String kitName, final Map els) throws Exception { - if (user.isAuthorized("essentials.kit.exemptdelay")) { + if (user.isAuthorized("essentials.kit.exemptdelay")) + { return; } @@ -55,7 +56,7 @@ public class Kit // When was the last kit used? final long lastTime = user.getKitTimestamp(kitName); - + if (lastTime < earliestLong || lastTime == 0L) { user.setKitTimestamp(kitName, time.getTimeInMillis()); @@ -80,15 +81,15 @@ public class Kit throw new NoChargeException(); } } - + public static List getItems(final User user, final Map kit) throws Exception { if (kit == null) { throw new Exception(_("kitError2")); } - - + + try { return (List)kit.get("items"); @@ -99,7 +100,7 @@ public class Kit throw new Exception(_("kitErrorHelp"), e); } } - + public static void expandItems(final IEssentials ess, final User user, final List items) throws Exception { try @@ -107,7 +108,7 @@ public class Kit boolean spew = false; for (String d : items) { - if (d.startsWith(ess.getSettings().getCurrencySymbol())) + if (d.startsWith(ess.getSettings().getCurrencySymbol())) { Double value = Double.parseDouble(d.substring(ess.getSettings().getCurrencySymbol().length()).trim()); Trade t = new Trade(value, ess); @@ -119,7 +120,7 @@ public class Kit final int id = Material.getMaterial(Integer.parseInt(item[0])).getId(); final short data = item.length > 1 ? Short.parseShort(item[1]) : 0; final int amount = parts.length > 1 ? Integer.parseInt(parts[1]) : 1; - + final ItemStack stack = new ItemStack(id, amount, data); if (parts.length > 2) { @@ -146,7 +147,14 @@ public class Kit } try { - stack.addEnchantment(enchantment, level); + if (ess.getSettings().allowUnsafeEnchantments()) + { + stack.addUnsafeEnchantment(enchantment, level); + } + else + { + stack.addEnchantment(enchantment, level); + } } catch (Exception ex) { @@ -154,7 +162,7 @@ public class Kit } } } - + final Map overfilled; if (user.isAuthorized("essentials.oversizedstacks")) { diff --git a/Essentials/src/com/earth2me/essentials/Settings.java b/Essentials/src/com/earth2me/essentials/Settings.java index d3c6b49d5..8eaa2a57c 100644 --- a/Essentials/src/com/earth2me/essentials/Settings.java +++ b/Essentials/src/com/earth2me/essentials/Settings.java @@ -856,6 +856,12 @@ public class Settings implements ISettings { return config.getBoolean("repair-enchanted", true); } + + @Override + public boolean allowUnsafeEnchantments() + { + return config.getBoolean("unsafe-enchantments", false); + } @Override public boolean isWorldTeleportPermissions() diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandenchant.java b/Essentials/src/com/earth2me/essentials/commands/Commandenchant.java index 212539385..c338090aa 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandenchant.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandenchant.java @@ -56,7 +56,8 @@ public class Commandenchant extends EssentialsCommand } } final Enchantment enchantment = getEnchantment(args[0], user); - if (level < 0 || level > enchantment.getMaxLevel()) + final boolean allowUnsafe = ess.getSettings().allowUnsafeEnchantments() && user.isAuthorized("essentials.enchant.allowunsafe"); + if (level < 0 || (!allowUnsafe && level > enchantment.getMaxLevel())) { level = enchantment.getMaxLevel(); } @@ -66,7 +67,14 @@ public class Commandenchant extends EssentialsCommand } else { - stack.addEnchantment(enchantment, level); + if (allowUnsafe) + { + stack.addUnsafeEnchantment(enchantment, level); + } + else + { + stack.addEnchantment(enchantment, level); + } } user.getInventory().setItemInHand(stack); user.updateInventory(); diff --git a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java index c4e26d9a8..c9dde4688 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commandgive.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commandgive.java @@ -81,7 +81,19 @@ public class Commandgive extends EssentialsCommand { level = enchantment.getMaxLevel(); } - stack.addEnchantment(enchantment, level); + boolean allowUnsafe = ess.getSettings().allowUnsafeEnchantments(); + if (allowUnsafe && sender instanceof Player && !ess.getUser(sender).isAuthorized("essentials.enchant.allowunsafe")) + { + allowUnsafe = false; + } + if (allowUnsafe) + { + stack.addUnsafeEnchantment(enchantment, level); + } + else + { + stack.addEnchantment(enchantment, level); + } } } diff --git a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java index d14b04d2a..a5c59deb6 100644 --- a/Essentials/src/com/earth2me/essentials/commands/Commanditem.java +++ b/Essentials/src/com/earth2me/essentials/commands/Commanditem.java @@ -16,7 +16,7 @@ public class Commanditem extends EssentialsCommand { super("item"); } - + @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { @@ -25,7 +25,7 @@ public class Commanditem extends EssentialsCommand throw new NotEnoughArgumentsException(); } final ItemStack stack = ess.getItemDb().get(args[0]); - + final String itemname = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace("_", ""); if (ess.getSettings().permissionBasedItemSpawn() ? (!user.isAuthorized("essentials.itemspawn.item-all") @@ -69,7 +69,14 @@ public class Commanditem extends EssentialsCommand { level = enchantment.getMaxLevel(); } - stack.addEnchantment(enchantment, level); + if (ess.getSettings().allowUnsafeEnchantments() && user.isAuthorized("essentials.enchant.allowunsafe")) + { + stack.addUnsafeEnchantment(enchantment, level); + } + else + { + stack.addEnchantment(enchantment, level); + } } } } @@ -77,12 +84,12 @@ public class Commanditem extends EssentialsCommand { throw new NotEnoughArgumentsException(); } - + if (stack.getType() == Material.AIR) { throw new Exception(_("cantSpawnItem", "Air")); } - + final String displayName = stack.getType().toString().toLowerCase(Locale.ENGLISH).replace('_', ' '); user.sendMessage(_("itemSpawn", stack.getAmount(), displayName)); if (user.isAuthorized("essentials.oversizedstacks")) diff --git a/Essentials/src/config.yml b/Essentials/src/config.yml index 3b03a9560..0a532ab34 100644 --- a/Essentials/src/config.yml +++ b/Essentials/src/config.yml @@ -334,6 +334,10 @@ oversized-stacksize: 64 # essentials.repair.enchanted repair-enchanted: true +# Allow 'unsafe' enchantments in kits and item spawning. +# Warning: Mixing and overleveling some enchantments can cause issues with clients, servers and plugins. +unsafe-enchantments: false + #Do you want essentials to keep track of previous location for /back in the teleport listener? #If you set this to true any plugin that uses teleport will have the previous location registered. register-back-in-listener: false