From 28255ca10aea2bb0eb04cbefea712b1b0154a4cd Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Mon, 25 Nov 2013 00:30:47 -0700 Subject: [PATCH] Push changes for anvil. --- .../src/me/kaZep/Base/PlayerListener.java | 282 ++++++++++-------- 1 file changed, 152 insertions(+), 130 deletions(-) diff --git a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java index a13f7dd..2b49c27 100644 --- a/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java +++ b/BankEconomyMod/src/me/kaZep/Base/PlayerListener.java @@ -9895,7 +9895,7 @@ implements Listener } } } - } else if (event.getInventory().getTitle().equalsIgnoreCase("Repair and Enchant")) { + } else if (event.getInventory().getTitle().equalsIgnoreCase("Repair and Enchant")) { final int INPUT = 10; final int MATERIALS = 12; final int MAGIC = 14; @@ -9917,15 +9917,15 @@ implements Listener if (!anvilClicked) { // Clicked the inventory. Leave the operation alone UNLESS it's a shift-click operation. if (event.isShiftClick()) { - // Call the scheduled task to validate and update the inventory + // Call the scheduled task to validate and update the inventory Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(this.plugin, new updateInventoryTask(event.getWhoClicked().getName())); } - } else { - // Clicked the anvil. If GUI items are clicked or an invalid operation happens, cancel the operation. + } else { + // Clicked the anvil. If GUI items are clicked or an invalid operation happens, cancel the operation. if (event.getSlot() == INPUT || event.getSlot() == MATERIALS || event.getSlot() == MAGIC || event.getSlot() == OUTPUT) { - /* + /* * OUTPUT Block */ @@ -9970,46 +9970,46 @@ implements Listener if (event.getCurrentItem().getType() == Material.ENCHANTED_BOOK && event.getInventory().getItem(MAGIC).getType() == Material.BOOK) { // Halve its durability event.getInventory().getItem(INPUT).setDurability((short)(event.getInventory().getItem(INPUT).getDurability() + (event.getInventory().getItem(INPUT).getType().getMaxDurability() - event.getInventory().getItem(INPUT).getDurability()) / 2)); - + // DISENCHANT BEGIN - Map map = event.getInventory().getItem(INPUT).getEnchantments(); - for (Map.Entry entry : map.entrySet()) { - event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); - } - if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { - List newlore = new ArrayList(); - for (int i=0;i map = event.getInventory().getItem(INPUT).getEnchantments(); + for (Map.Entry entry : map.entrySet()) { + event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); + } + if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { + List newlore = new ArrayList(); + for (int i=0;i map = event.getInventory().getItem(INPUT).getEnchantments(); - for (Map.Entry entry : map.entrySet()) { - event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); - } - if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { - List newlore = new ArrayList(); - for (int i=0;i map = event.getInventory().getItem(INPUT).getEnchantments(); + for (Map.Entry entry : map.entrySet()) { + event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); + } + if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { + List newlore = new ArrayList(); + for (int i=0;i map = event.getInventory().getItem(INPUT).getEnchantments(); - for (Map.Entry entry : map.entrySet()) { - event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); - } - if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { - List newlore = new ArrayList(); - for (int i=0;i map = event.getInventory().getItem(INPUT).getEnchantments(); + for (Map.Entry entry : map.entrySet()) { + event.getInventory().getItem(INPUT).removeEnchantment(entry.getKey()); + } + if (event.getInventory().getItem(INPUT).hasItemMeta() && event.getInventory().getItem(INPUT).getItemMeta().hasLore()) { + List newlore = new ArrayList(); + for (int i=0;i lore = anvilInv.getItem(INPUT).getItemMeta().getLore(); - for (int i=0;i itemEnchantments.get(e)) { // Book enchantment is larger in magnitude. Assign it as a possible outcome. probableEnchantments.put(e, bookEnchantments.get(e)); - } else if (bookEnchantments.get(e) == itemEnchantments.get(e) && bookEnchantments.get(e) <= 10) { + } else if (bookEnchantments.get(e) == itemEnchantments.get(e) && bookEnchantments.get(e) < 10) { // Book enchantment is same in magnitude. Upgrade by one level. probableEnchantments.put(e, bookEnchantments.get(e) + 1); } @@ -14038,7 +14047,7 @@ class updateInventoryTask implements Runnable { i++; } - int cost = 0; + int cost = anvilInv.getItem(LEVELS).getAmount(); if (itemBonuses.get(appliedEnchant) == null) { // This bonus doesn't exist. Calculate full cost. @@ -14083,34 +14092,34 @@ class updateInventoryTask implements Runnable { // Bukkit.getLogger().info("Bonus enchantment string: " + appliedEnchant); if (appliedEnchant.equalsIgnoreCase("Critical Chance")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Critical Chance"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Critical Chance"); } if (appliedEnchant.equalsIgnoreCase("Armor Penetration")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Armor Penetration"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Armor Penetration"); } if (appliedEnchant.equalsIgnoreCase("Life Steal")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Life Steal"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Life Steal"); } if (appliedEnchant.equalsIgnoreCase("Attack Speed")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Attack Speed"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Attack Speed"); } if (appliedEnchant.equalsIgnoreCase("Damage")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Damage"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Damage"); } if (appliedEnchant.equalsIgnoreCase("Health")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Health"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+" "+ChatColor.BLUE+"Health"); } if (appliedEnchant.equalsIgnoreCase("Damage Reduction")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Damage Reduction"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Damage Reduction"); } if (appliedEnchant.equalsIgnoreCase("Durability")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Durability"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Durability"); } if (appliedEnchant.equalsIgnoreCase("Block Chance")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Block Chance"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Block Chance"); } if (appliedEnchant.equalsIgnoreCase("Speed Boost Chance")) { - bonusesLore.add(ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Speed Boost Chance"); + bonusesLore.add(0, ChatColor.YELLOW+"+"+magnitude+"% "+ChatColor.BLUE+"Speed Boost Chance"); } bonusesMeta.setLore(bonusesLore); @@ -14119,7 +14128,7 @@ class updateInventoryTask implements Runnable { } else { // This enchantment exists. Calculate incremental cost. - cost += (int)(12 * itemBonuses.get(appliedEnchant) / probableBonuses.get(appliedEnchant)); // Make sure it's at least one level + cost += (int)(12d * itemBonuses.get(appliedEnchant) / probableBonuses.get(appliedEnchant)); // Make sure it's at least one level cost = Math.min(60, cost); cost = Math.max(1, cost); @@ -14204,9 +14213,20 @@ class updateInventoryTask implements Runnable { } else if (anvilInv.getItem(MAGIC).getType() == Material.BOOK && anvilInv.getItem(INPUT).getType() != Material.ENCHANTED_BOOK) { // Magic slot is a book. Unenchanting logic goes here. anvilInv.setItem(OUTPUT, new ItemStack(Material.ENCHANTED_BOOK)); - anvilInv.getItem(OUTPUT).setType(Material.ENCHANTED_BOOK); - - ItemMeta bookMeta = anvilInv.getItem(INPUT).getItemMeta(); + // anvilInv.getItem(OUTPUT).setType(Material.ENCHANTED_BOOK); + + ItemMeta bookMeta = anvilInv.getItem(OUTPUT).getItemMeta(); + + // Grab enchantments and lore. This is necessary due to leather armor meta being a different class. + Map itemEnchantments = anvilInv.getItem(INPUT).getItemMeta().getEnchants(); + + for (Enchantment e : itemEnchantments.keySet()) { + bookMeta.addEnchant(e, itemEnchantments.get(e), true); // force-add all enchants + } + + List bookLore = anvilInv.getItem(INPUT).getItemMeta().getLore(); // add more filtering code after this later + bookMeta.setLore(bookLore); + bookMeta.setDisplayName(null); anvilInv.getItem(OUTPUT).setItemMeta(bookMeta); @@ -14223,6 +14243,8 @@ class updateInventoryTask implements Runnable { for (Enchantment e : enchantments.keySet()) { cost += (1 + enchantments.get(e)); } + + cost = Math.min(60, cost); ItemStack orbs = new ItemStack(Material.SLIME_BALL); @@ -14297,7 +14319,7 @@ class updateInventoryTask implements Runnable { public double getEnchantmentNumb(String s) { //Parse the string for spaces. String[] enchant = s.split(" "); - if (enchant[0].contains(ChatColor.YELLOW+"")) { + if (enchant[0].contains(ChatColor.YELLOW+"") && (enchant.length > 1)) { String newstring = ((enchant[0].replace(ChatColor.YELLOW.getChar(), ' ')).replace('%', ' ')).replace(Character.toString((char)0x00A7), Character.toString((char)0x0020)); // Bukkit.getLogger().info("Enchant number is "+Double.valueOf(newstring)); return Double.valueOf(newstring); @@ -14324,4 +14346,4 @@ class updateInventoryTask implements Runnable { return false; } -} +} \ No newline at end of file