From 50e762ba62c0ca32c4bafe48b01fb1ab2fbae095 Mon Sep 17 00:00:00 2001 From: Vivian <19847740+VivianTheFox@users.noreply.github.com> Date: Thu, 18 Jun 2026 18:02:38 -0500 Subject: [PATCH 1/3] Fix tool damage Add a damageEvent to properly decrease the gold tool durability when breaking things using them --- pom.xml | 2 +- .../retrohaven/listeners/PickupBlocksListener.java | 12 ++++++++++++ .../retrohaven/listeners/SpawnerBreakListener.java | 3 +++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 9b7614b..48fd4a5 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ org.retrohaven pickup - 1.0.1 + 1.0.2 8 diff --git a/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java b/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java index 14ca6a9..851e751 100644 --- a/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java +++ b/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java @@ -7,6 +7,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.inventory.ItemStack; public class PickupBlocksListener implements Listener { @@ -15,12 +16,14 @@ public class PickupBlocksListener implements Listener { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); + PlayerItemDamageEvent damageEvent = new PlayerItemDamageEvent(player, player.getItemInHand(), 1); // Check if the player has the right tool and permission for each block type if (block.getType() == Material.GRASS) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { event.setCancelled(true); // Prevent normal block breaking block.setType(Material.AIR); // Set block to air + damageEvent.setDamage(damageEvent.getDamage() - 1); // Decrease durability by 1 block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GRASS, 1)); } } @@ -29,6 +32,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GLASS, 1)); } } @@ -37,6 +41,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GLOWSTONE, 1)); } } @@ -45,6 +50,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.ICE, 1)); } } @@ -53,6 +59,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.SNOW_BLOCK, 1)); } } @@ -61,6 +68,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.SNOW, 1)); } } @@ -69,6 +77,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.COBBLESTONE_STAIRS, 1)); } } @@ -77,6 +86,7 @@ public void onBlockBreak(BlockBreakEvent event) { if ((player.getItemInHand().getType() == Material.GOLD_SWORD || player.getItemInHand().getType() == Material.GOLD_AXE) && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.WOOD_STAIRS, 1)); } } @@ -85,6 +95,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CLAY, 1)); } } @@ -93,6 +104,7 @@ public void onBlockBreak(BlockBreakEvent event) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CAKE_BLOCK, 1)); } } diff --git a/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java b/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java index 432188b..66f2b71 100644 --- a/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java +++ b/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java @@ -6,6 +6,7 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.inventory.ItemStack; public class SpawnerBreakListener implements Listener { @@ -14,12 +15,14 @@ public class SpawnerBreakListener implements Listener { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); + PlayerItemDamageEvent damageEvent = new PlayerItemDamageEvent(player, player.getItemInHand(), 1); if (block.getType() == Material.MOB_SPAWNER) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE) { if (player.hasPermission("pickup.use")) { event.setCancelled(true); block.setType(Material.AIR); + damageEvent.setDamage(damageEvent.getDamage() - 1); // Decrease durability by 1 block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.MOB_SPAWNER, 1)); } } From 229d28d97f9423c1b6d82fc2cb41e976f0c37020 Mon Sep 17 00:00:00 2001 From: Vivian <19847740+VivianTheFox@users.noreply.github.com> Date: Thu, 18 Jun 2026 19:33:57 -0500 Subject: [PATCH 2/3] Actually fix tool damage This one actually works, lol --- .../listeners/PickupBlocksListener.java | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java b/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java index 851e751..08ec322 100644 --- a/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java +++ b/src/main/java/org/retrohaven/listeners/PickupBlocksListener.java @@ -7,7 +7,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockBreakEvent; -import org.bukkit.event.player.PlayerItemDamageEvent; import org.bukkit.inventory.ItemStack; public class PickupBlocksListener implements Listener { @@ -16,97 +15,103 @@ public class PickupBlocksListener implements Listener { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); - PlayerItemDamageEvent damageEvent = new PlayerItemDamageEvent(player, player.getItemInHand(), 1); // Check if the player has the right tool and permission for each block type if (block.getType() == Material.GRASS) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { + useTool(player); // Decrease tool durability event.setCancelled(true); // Prevent normal block breaking block.setType(Material.AIR); // Set block to air - damageEvent.setDamage(damageEvent.getDamage() - 1); // Decrease durability by 1 block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GRASS, 1)); } } if (block.getType() == Material.GLASS) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GLASS, 1)); } } if (block.getType() == Material.GLOWSTONE) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.GLOWSTONE, 1)); } } if (block.getType() == Material.ICE) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.ICE, 1)); } } if (block.getType() == Material.SNOW_BLOCK) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.SNOW_BLOCK, 1)); } } if (block.getType() == Material.SNOW) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.SNOW, 1)); } } if (block.getType() == Material.COBBLESTONE_STAIRS) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.COBBLESTONE_STAIRS, 1)); } } if (block.getType() == Material.WOOD_STAIRS) { if ((player.getItemInHand().getType() == Material.GOLD_SWORD || player.getItemInHand().getType() == Material.GOLD_AXE) && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.WOOD_STAIRS, 1)); } } if (block.getType() == Material.CLAY) { if (player.getItemInHand().getType() == Material.GOLD_SPADE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CLAY, 1)); } } if (block.getType() == Material.CAKE_BLOCK) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE && player.hasPermission("pickup.use")) { + useTool(player); event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.CAKE_BLOCK, 1)); } } } + + public void useTool(Player player) { + if(player.getItemInHand().getDurability() > 31) { + player.setItemInHand(null); + } + player.getItemInHand().setDurability((short)(player.getItemInHand().getDurability() + 1)); + } } From 554317d3e6b46d960cde9aad4de210743041264a Mon Sep 17 00:00:00 2001 From: Vivian <19847740+VivianTheFox@users.noreply.github.com> Date: Thu, 18 Jun 2026 19:46:27 -0500 Subject: [PATCH 3/3] Update SpawnerBreakListener.java --- .../org/retrohaven/listeners/SpawnerBreakListener.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java b/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java index 66f2b71..71928c0 100644 --- a/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java +++ b/src/main/java/org/retrohaven/listeners/SpawnerBreakListener.java @@ -15,17 +15,23 @@ public class SpawnerBreakListener implements Listener { public void onBlockBreak(BlockBreakEvent event) { Player player = event.getPlayer(); Block block = event.getBlock(); - PlayerItemDamageEvent damageEvent = new PlayerItemDamageEvent(player, player.getItemInHand(), 1); if (block.getType() == Material.MOB_SPAWNER) { if (player.getItemInHand().getType() == Material.GOLD_PICKAXE) { if (player.hasPermission("pickup.use")) { + useTool(player); // Decrease tool durability event.setCancelled(true); block.setType(Material.AIR); - damageEvent.setDamage(damageEvent.getDamage() - 1); // Decrease durability by 1 block.getWorld().dropItemNaturally(block.getLocation(), new ItemStack(Material.MOB_SPAWNER, 1)); } } } } + + public void useTool(Player player) { + if(player.getItemInHand().getDurability() > 31) { + player.setItemInHand(null); + } + player.getItemInHand().setDurability((short)(player.getItemInHand().getDurability() + 1)); + } }