From b93718cce20e312e45ec6f930f20e731f1a6e4dc Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Mon, 28 Sep 2026 21:52:09 +0200 Subject: [PATCH] fix minor bugs related to tools enchanted with tunnelling breaking --- .../listeners/TunnellingListener.java | 41 ++++++++----------- 1 file changed, 18 insertions(+), 23 deletions(-) diff --git a/src/main/java/me/youhavetrouble/enchantio/listeners/TunnellingListener.java b/src/main/java/me/youhavetrouble/enchantio/listeners/TunnellingListener.java index df9694c..d90958d 100644 --- a/src/main/java/me/youhavetrouble/enchantio/listeners/TunnellingListener.java +++ b/src/main/java/me/youhavetrouble/enchantio/listeners/TunnellingListener.java @@ -3,7 +3,6 @@ package me.youhavetrouble.enchantio.listeners; import io.papermc.paper.registry.RegistryAccess; import io.papermc.paper.registry.RegistryKey; import io.papermc.paper.registry.keys.tags.BlockTypeTagKeys; -import me.youhavetrouble.enchantio.Enchantio; import me.youhavetrouble.enchantio.EnchantioConfig; import me.youhavetrouble.enchantio.enchants.EnchantioEnchant; import me.youhavetrouble.enchantio.enchants.TunnellingEnchant; @@ -22,9 +21,7 @@ import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.inventory.EquipmentSlot; import org.bukkit.inventory.ItemStack; import org.bukkit.persistence.PersistentDataType; -import java.util.ArrayList; import java.util.HashSet; -import java.util.List; import java.util.Set; @SuppressWarnings("UnstableApiUsage") @@ -41,7 +38,7 @@ public class TunnellingListener implements Listener { if (event.getHand() != EquipmentSlot.HAND) return; if (event.getAction() != Action.LEFT_CLICK_BLOCK) return; Player player = event.getPlayer(); - if (player.isSneaking() || GameMode.CREATIVE.equals(player.getGameMode())) return; + if (GameMode.CREATIVE.equals(player.getGameMode())) return; ItemStack item = event.getItem(); if (item == null) return; if (!item.containsEnchantment(tunnelling)) return; @@ -74,31 +71,29 @@ public class TunnellingListener implements Listener { Set blocksToBreak = getSquare(block, blockFace, tunnellingEnchant.getBlocksPerLevel() * enchantLevel); blockBreakSkips.addAll(blocksToBreak); for (Block b : blocksToBreak) { + if (player.getInventory().getItemInMainHand().isEmpty()) { + event.setCancelled(true); + blockBreakSkips.removeAll(blocksToBreak); + break; + } event.getPlayer().breakBlock(b); blockBreakSkips.remove(b); } - } private Set getSquare(Block block, BlockFace face, int range) { - Set blocks = new HashSet<>(); switch (face) { - case DOWN: - case UP: - blocks.addAll(getBlocksToTunnel(block.getLocation(), range, 0, range)); - break; - case EAST: - case WEST: - blocks.addAll(getBlocksToTunnel(block.getLocation(), 0, range, range)); - break; - case NORTH: - case SOUTH: - blocks.addAll(getBlocksToTunnel(block.getLocation(), range, range, 0)); - break; - default: - break; + case DOWN, UP -> { + return getBlocksToTunnel(block.getLocation(), range, 0, range); + } + case EAST, WEST -> { + return getBlocksToTunnel(block.getLocation(), 0, range, range); + } + case NORTH, SOUTH -> { + return getBlocksToTunnel(block.getLocation(), range, range, 0); + } } - return blocks; + return new HashSet<>(); } /** @@ -106,8 +101,8 @@ public class TunnellingListener implements Listener { * @param base location at the centre of selection * @return All blocks that will get broken */ - private List getBlocksToTunnel(Location base, int changeX, int changeY, int changeZ) { - List blocks = new ArrayList<>(); + private Set getBlocksToTunnel(Location base, int changeX, int changeY, int changeZ) { + Set blocks = new HashSet<>(); for (int x = (base.getBlockX() - changeX); x <= (base.getBlockX() + changeX); x++) { for (int y = (base.getBlockY() - changeY); y <= (base.getBlockY() + changeY); y++) { for (int z = (base.getBlockZ() - changeZ); z <= (base.getBlockZ() + changeZ); z++) {