Anvil code fixed. Repair functionality is complete.

devAnvil
Nonoriri 11 years ago
parent 291e6e4668
commit b632fb3e74
  1. 71
      BankEconomyMod/src/me/kaZep/Base/PlayerListener.java

@ -9715,7 +9715,10 @@ implements Listener
Bukkit.getLogger().info("Anvil interface CLICK at slot #" + event.getRawSlot()); Bukkit.getLogger().info("Anvil interface CLICK at slot #" + event.getRawSlot());
if (event.getRawSlot() < 27) { if (event.getRawSlot() == -999) {
anvilClicked = false;
Bukkit.getLogger().info("Window exterior clicked.");
} else if (event.getRawSlot() < 27) {
anvilClicked = true; anvilClicked = true;
Bukkit.getLogger().info("Anvil clicked."); Bukkit.getLogger().info("Anvil clicked.");
} else { } else {
@ -12818,30 +12821,25 @@ class updateInventoryTask implements Runnable {
final int LEVELS = 22; final int LEVELS = 22;
if (anvilInv.getItem(INPUT) == null || anvilInv.getItem(MATERIALS) == null) {
// No valid combo, set XP orb to stack size 1 and remove output.
anvilInv.getItem(LEVELS).setAmount(1);
anvilInv.setItem(OUTPUT, new ItemStack(Material.AIR));
}
else
{
// Redundant validation code for verification // Redundant validation code for verification
if (anvilInv.getItem(INPUT) != null) {
if (!((anvilInv.getItem(INPUT).toString().toUpperCase().contains("HELMET") || anvilInv.getItem(INPUT).toString().toUpperCase().contains("CHESTPLATE") || if (!((anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("HELMET") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("CHESTPLATE") ||
anvilInv.getItem(INPUT).toString().toUpperCase().contains("LEGGINGS") || anvilInv.getItem(INPUT).toString().toUpperCase().contains("BOOTS") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("LEGGINGS") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("BOOTS") ||
anvilInv.getItem(INPUT).toString().toUpperCase().contains("PICKAXE") || anvilInv.getItem(INPUT).toString().toUpperCase().contains("SPADE") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("PICKAXE") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("SPADE") ||
anvilInv.getItem(INPUT).toString().toUpperCase().contains("HOE") || anvilInv.getItem(INPUT).toString().toUpperCase().contains("AXE") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("HOE") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("AXE") ||
anvilInv.getItem(INPUT).toString().toUpperCase().contains("SWORD") || anvilInv.getItem(INPUT).toString().toUpperCase().contains("FISHING") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("SWORD") || anvilInv.getItem(INPUT).getType().toString().toUpperCase().contains("FISHING") ||
anvilInv.getItem(INPUT).toString().toUpperCase().contentEquals("BOW")) && anvilInv.getItem(INPUT).getDurability() != 0)) { anvilInv.getItem(INPUT).getType().toString().toUpperCase().contentEquals("BOW")) && anvilInv.getItem(INPUT).getDurability() != 0)) {
sendToInventory(INPUT, anvilInv.getItem(INPUT).getAmount(), player); sendToInventory(INPUT, anvilInv.getItem(INPUT).getAmount(), player);
Bukkit.getLogger().info("Invalid input!"); Bukkit.getLogger().info("Invalid input!");
} else {
Bukkit.getLogger().info("Valid input, " + anvilInv.getItem(INPUT).toString().toUpperCase() + " with durability " + anvilInv.getItem(INPUT).getDurability());
}
} }
if (anvilInv.getItem(MATERIALS) != null) {
if (!(anvilInv.getItem(MATERIALS).getType() == Material.LEATHER || anvilInv.getItem(MATERIALS).getType() == Material.IRON_INGOT || if (!(anvilInv.getItem(MATERIALS).getType() == Material.LEATHER || anvilInv.getItem(MATERIALS).getType() == Material.IRON_INGOT ||
anvilInv.getItem(MATERIALS).getType() == Material.GOLD_INGOT || anvilInv.getItem(MATERIALS).getType() == Material.IRON_BLOCK || anvilInv.getItem(MATERIALS).getType() == Material.GOLD_INGOT || anvilInv.getItem(MATERIALS).getType() == Material.IRON_BLOCK ||
anvilInv.getItem(MATERIALS).getType() == Material.DIAMOND_BLOCK || anvilInv.getItem(MATERIALS).getType() == Material.DIAMOND || anvilInv.getItem(MATERIALS).getType() == Material.DIAMOND_BLOCK || anvilInv.getItem(MATERIALS).getType() == Material.DIAMOND ||
@ -12851,8 +12849,29 @@ class updateInventoryTask implements Runnable {
sendToInventory(MATERIALS, anvilInv.getItem(MATERIALS).getAmount(), player); sendToInventory(MATERIALS, anvilInv.getItem(MATERIALS).getAmount(), player);
Bukkit.getLogger().info("Invalid materials!"); Bukkit.getLogger().info("Invalid materials!");
} else {
Bukkit.getLogger().info("Valid materials, " + anvilInv.getItem(MATERIALS).toString().toUpperCase() + " with durability " + anvilInv.getItem(MATERIALS).getDurability());
}
} }
if (anvilInv.getItem(INPUT) == null || anvilInv.getItem(MATERIALS) == null) {
// No valid combo, set XP orb to stack size 1 and remove output.
anvilInv.setItem(OUTPUT, new ItemStack(Material.AIR));
ItemStack orbs = new ItemStack(Material.SLIME_BALL);
ItemMeta temp_meta = orbs.getItemMeta();
temp_meta.setDisplayName(ChatColor.YELLOW + "Experience Cost");
List<String> temp_meta_lore = new ArrayList<String>();
temp_meta_lore.add(ChatColor.ITALIC + "Experience Cost of Enchanting.");
temp_meta.setLore(temp_meta_lore);
orbs.setItemMeta(temp_meta);
anvilInv.setItem(LEVELS, orbs);
// TRY EVERYTHING
player.getInventory().setContents(player.getInventory().getContents());
anvilInv.setContents(anvilInv.getContents());
player.updateInventory();
} else {
// Both repair slots are populated.
// Verify the right material is combined with the source item. // Verify the right material is combined with the source item.
boolean validCombo = false; boolean validCombo = false;
double multiplier = 0; double multiplier = 0;
@ -13019,17 +13038,20 @@ class updateInventoryTask implements Runnable {
player.getInventory().setContents(player.getInventory().getContents()); player.getInventory().setContents(player.getInventory().getContents());
anvilInv.setContents(anvilInv.getContents()); anvilInv.setContents(anvilInv.getContents());
player.updateInventory(); player.updateInventory();
} }
} }
public void sendToInventory(int slot, int itemCount, Player player) { public void sendToInventory(int slot, int itemCount, Player player) {
Bukkit.getLogger().info("Slot: " + slot);
Bukkit.getLogger().info("Item Count: " + itemCount);
Bukkit.getLogger().info("Player: " + player.getDisplayName());
// Get inventories // Get inventories
Inventory anvilInventory = player.getOpenInventory().getTopInventory(); Inventory anvilInventory = player.getOpenInventory().getTopInventory();
Inventory playerInventory = player.getOpenInventory().getBottomInventory(); Inventory playerInventory = player.getOpenInventory().getBottomInventory();
// Get a temporary item stack to transfer // Get a temporary item stack to transfer
ItemStack temp = anvilInventory.getItem(slot); ItemStack temp = anvilInventory.getItem(slot).clone();
temp.setAmount(itemCount); temp.setAmount(itemCount);
// Attempt to add to the player inventory. Store leftovers in itemstack to be dropped. // Attempt to add to the player inventory. Store leftovers in itemstack to be dropped.
@ -13039,13 +13061,18 @@ class updateInventoryTask implements Runnable {
player.getWorld().dropItemNaturally(player.getLocation(), leftovers); player.getWorld().dropItemNaturally(player.getLocation(), leftovers);
} }
anvilInventory.getItem(slot).setAmount(anvilInventory.getItem(slot).getAmount() - itemCount);
if (anvilInventory.getItem(slot).getAmount() == 0) { Bukkit.getLogger().info("Slot stack size is " + anvilInventory.getItem(slot).getAmount());
if (anvilInventory.getItem(slot).getAmount() - itemCount == 0) {
// Should reduce stack count to zero, meaning item needs to be removed.
Bukkit.getLogger().info("Item stack size reduced to 0, " + anvilInventory.getItem(slot).getType().toString() + " removed."); Bukkit.getLogger().info("Item stack size reduced to 0, " + anvilInventory.getItem(slot).getType().toString() + " removed.");
anvilInventory.setItem(slot, new ItemStack(Material.AIR)); anvilInventory.setItem(slot, new ItemStack(Material.AIR));
} else {
// Should set stack size.
Bukkit.getLogger().info("Reduced stack size from " + anvilInventory.getItem(slot).getAmount() + " by " + itemCount);
anvilInventory.getItem(slot).setAmount(anvilInventory.getItem(slot).getAmount() - itemCount);
} }
// player.getWorld().dropItemNaturally(player.getLocation(), new ItemStack(anvilInv.getItem(MATERIALS).getType(), anvilInv.getItem(MATERIALS).getAmount() - maxItemsNeeded)); // player.getWorld().dropItemNaturally(player.getLocation(), new ItemStack(anvilInv.getItem(MATERIALS).getType(), anvilInv.getItem(MATERIALS).getAmount() - maxItemsNeeded));

Loading…
Cancel
Save