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));
+ }
}