From 7f5d95138fedbf2e4444e3b9cc2828fc65cfd773 Mon Sep 17 00:00:00 2001 From: xFier Date: Wed, 28 Feb 2024 15:05:01 +0000 Subject: [PATCH] Deoxidise as many blocks as the tool in-hand can --- .../hacks/basic/CopperRail.java | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/CopperRail.java b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/CopperRail.java index 1195f533a..d5561bcff 100644 --- a/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/CopperRail.java +++ b/plugins/simpleadminhacks-paper/src/main/java/com/programmerdan/minecraft/simpleadminhacks/hacks/basic/CopperRail.java @@ -139,23 +139,35 @@ public class CopperRail extends BasicHack { Block copperBlock = block.getRelative(BlockFace.DOWN); Optional previous = WeatheringCopper.getPrevious(((CraftBlock) copperBlock).getNMS()); - if (previous.isEmpty()) { - copperBlock = copperBlock.getRelative(BlockFace.DOWN); + + int damageToApply = 0; + CraftPlayer player = (CraftPlayer) event.getPlayer(); + net.minecraft.world.item.ItemStack handle = ((CraftItemStack) item).handle; + + while (previous.isPresent() && (handle.getMaxDamage() - handle.getDamageValue()) > damageToApply) { + copperBlock.setType(previous.get().getBukkitMaterial()); + damageToApply++; + previous = WeatheringCopper.getPrevious(((CraftBlock) copperBlock).getNMS()); } + copperBlock = copperBlock.getRelative(BlockFace.DOWN); previous = WeatheringCopper.getPrevious(((CraftBlock) copperBlock).getNMS()); - if (previous.isEmpty()) { + + while (previous.isPresent() && (handle.getMaxDamage() - handle.getDamageValue()) > damageToApply) { + copperBlock.setType(previous.get().getBukkitMaterial()); + damageToApply++; + previous = WeatheringCopper.getPrevious(((CraftBlock) copperBlock).getNMS()); + } + + if (damageToApply == 0) { return; } - copperBlock.setType(previous.get().getBukkitMaterial()); - block.getWorld().playSound(block.getLocation(), Sound.ITEM_AXE_SCRAPE, SoundCategory.BLOCKS, 1, 1); block.getWorld().playEffect(block.getLocation(), Effect.OXIDISED_COPPER_SCRAPE, 0); - CraftPlayer player = (CraftPlayer) event.getPlayer(); // TODO: In 1.19 or above, this can be replaced with ItemStack#damage thanks to Paper - ((CraftItemStack) item).handle.hurtAndBreak(1, player.getHandle(), p -> { + handle.hurtAndBreak(damageToApply, player.getHandle(), p -> { p.broadcastBreakEvent(event.getHand() == EquipmentSlot.HAND ? InteractionHand.MAIN_HAND : InteractionHand.OFF_HAND); });