From 6fffe10c32f0597ad574b8a5ce9f8fd0cde29370 Mon Sep 17 00:00:00 2001 From: GJ Date: Wed, 28 Mar 2012 15:53:55 -0400 Subject: [PATCH] Fixed bug with repairing wooden tools. --- Changelog.txt | 3 ++- .../com/gmail/nossr50/datatypes/HUDmmo.java | 2 +- .../java/com/gmail/nossr50/skills/Repair.java | 20 ++++++++++++++++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/Changelog.txt b/Changelog.txt index 40ae2b5d3..4266ba1ea 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,7 +8,8 @@ Key: - Removal Version 1.3.05-dev - + + = Fixed bug with repairing wooden tools + ! Changed Tree Feller to account for ability durability loss but not leaves. Version 1.3.04 + Added McMMOPlayerRepairEvent for API usage - fires after completion of a repair. diff --git a/src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java b/src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java index 4e822543f..f5e981e48 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java +++ b/src/main/java/com/gmail/nossr50/datatypes/HUDmmo.java @@ -206,7 +206,7 @@ public class HUDmmo { * * @param sPlayer Player to initialize XP bar for */ - private void initializeXpBarDisplayStandard(SpoutPlayer sPlayer) { + public void initializeXpBarDisplayStandard(SpoutPlayer sPlayer) { if (LoadProperties.xpbar) { xpbar = new GenericTexture(); diff --git a/src/main/java/com/gmail/nossr50/skills/Repair.java b/src/main/java/com/gmail/nossr50/skills/Repair.java index bfba679fc..56fbacd69 100644 --- a/src/main/java/com/gmail/nossr50/skills/Repair.java +++ b/src/main/java/com/gmail/nossr50/skills/Repair.java @@ -426,6 +426,7 @@ public class Repair { public static void repairItem(Player player, ItemStack item, ItemStack repairMaterial) { short initialDurability = item.getDurability(); short newDurability = getRepairAmount(item, player); + PlayerInventory inventory = player.getInventory(); McMMOPlayerRepairCheckEvent preEvent = new McMMOPlayerRepairCheckEvent(player, (short) (initialDurability - newDurability), repairMaterial, item); Bukkit.getPluginManager().callEvent(preEvent); @@ -434,7 +435,12 @@ public class Repair { return; } - player.getInventory().removeItem(repairMaterial); + if (repairMaterial.getType().equals(Material.WOOD)) { + removeWood(inventory); + } + else { + inventory.removeItem(repairMaterial); + } /* Handle the enchants */ if (LoadProperties.mayLoseEnchants && !mcPermissions.getInstance().arcaneBypass(player)) { @@ -472,4 +478,16 @@ public class Repair { PP.togglePlacedAnvil(); } } + + /** + * Removes wood from a player's inventory on repair. Needed due to wood having multiple possible data values. + * + * @param inventory The inventory to remove wood from + */ + private static void removeWood(PlayerInventory inventory) { + //TODO: Make this less hackish once there's a better way to do it... + int slot = inventory.first(Material.WOOD); + ItemStack item = inventory.getItem(slot); + item.setAmount(item.getAmount() - 1); + } }