diff --git a/src/main/java/com/bgsoftware/wildtools/objects/tools/WCrowbarTool.java b/src/main/java/com/bgsoftware/wildtools/objects/tools/WCrowbarTool.java index bc0f3193..f0e3a081 100644 --- a/src/main/java/com/bgsoftware/wildtools/objects/tools/WCrowbarTool.java +++ b/src/main/java/com/bgsoftware/wildtools/objects/tools/WCrowbarTool.java @@ -34,7 +34,8 @@ public boolean onBlockInteract(PlayerInteractEvent e) { if (!e.getClickedBlock().getType().name().contains("SPAWNER")) return false; - if (!BukkitUtils.canBreakBlock(e.getPlayer(), e.getClickedBlock(), this)) + if (!BukkitUtils.canBreakBlock(e.getPlayer(), e.getClickedBlock(), this) || + !BukkitUtils.hasBreakAccess(e.getClickedBlock(), e.getPlayer())) return true; CreatureSpawner creatureSpawner = (CreatureSpawner) e.getClickedBlock().getState(); diff --git a/src/main/java/com/bgsoftware/wildtools/objects/tools/WDrainTool.java b/src/main/java/com/bgsoftware/wildtools/objects/tools/WDrainTool.java index 7a3123fb..822c9fab 100644 --- a/src/main/java/com/bgsoftware/wildtools/objects/tools/WDrainTool.java +++ b/src/main/java/com/bgsoftware/wildtools/objects/tools/WDrainTool.java @@ -17,7 +17,7 @@ public final class WDrainTool extends WTool implements DrainTool { private final int radius; - public WDrainTool(Material type, String name, int radius){ + public WDrainTool(Material type, String name, int radius) { super(type, name, ToolMode.DRAIN); this.radius = radius; } @@ -37,7 +37,7 @@ public boolean onAirInteract(PlayerInteractEvent e) { return handleUse(e.getPlayer(), e.getItem(), e.getPlayer().getLocation().getBlock()); } - private boolean handleUse(Player player, ItemStack usedItem, Block block){ + private boolean handleUse(Player player, ItemStack usedItem, Block block) { Location max = block.getLocation().clone().add(radius, radius, radius), min = block.getLocation().clone().subtract(radius, radius, radius); @@ -47,15 +47,16 @@ private boolean handleUse(Player player, ItemStack usedItem, Block block){ int toolUsages = 0; outerLoop: - for(int x = min.getBlockX(); x <= max.getBlockX(); x++){ - for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){ - for(int y = max.getBlockY(); y >= min.getBlockY(); y--){ - if(usingDurability && toolUsages >= toolDurability) + for (int x = min.getBlockX(); x <= max.getBlockX(); x++) { + for (int z = min.getBlockZ(); z <= max.getBlockZ(); z++) { + for (int y = max.getBlockY(); y >= min.getBlockY(); y--) { + if (usingDurability && toolUsages >= toolDurability) break outerLoop; Block targetBlock = block.getWorld().getBlockAt(x, y, z); - if(targetBlock.getType() != Material.ICE || !BukkitUtils.canBreakBlock(player, targetBlock, this)) + if (targetBlock.getType() != Material.ICE || !BukkitUtils.canBreakBlock(player, targetBlock, this) || + !BukkitUtils.hasBreakAccess(targetBlock, player)) continue; blocksController.setAir(targetBlock.getLocation()); @@ -70,7 +71,7 @@ private boolean handleUse(Player player, ItemStack usedItem, Block block){ blocksController.updateSession(); - if(toolUsages > 0) + if (toolUsages > 0) reduceDurablility(player, usingDurability ? toolUsages : 1, usedItem); return true; diff --git a/src/main/java/com/bgsoftware/wildtools/objects/tools/WIceTool.java b/src/main/java/com/bgsoftware/wildtools/objects/tools/WIceTool.java index c44421af..bdb87596 100644 --- a/src/main/java/com/bgsoftware/wildtools/objects/tools/WIceTool.java +++ b/src/main/java/com/bgsoftware/wildtools/objects/tools/WIceTool.java @@ -1,6 +1,8 @@ package com.bgsoftware.wildtools.objects.tools; import com.bgsoftware.wildtools.api.events.IceWandUseEvent; +import com.bgsoftware.wildtools.api.objects.ToolMode; +import com.bgsoftware.wildtools.api.objects.tools.IceTool; import com.bgsoftware.wildtools.utils.BukkitUtils; import org.bukkit.Bukkit; import org.bukkit.Location; @@ -8,8 +10,6 @@ import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.event.player.PlayerInteractEvent; -import com.bgsoftware.wildtools.api.objects.ToolMode; -import com.bgsoftware.wildtools.api.objects.tools.IceTool; import org.bukkit.inventory.ItemStack; import java.util.ArrayList; @@ -19,7 +19,7 @@ public final class WIceTool extends WTool implements IceTool { private final int radius; - public WIceTool(Material type, String name, int radius){ + public WIceTool(Material type, String name, int radius) { super(type, name, ToolMode.ICE); this.radius = radius; } @@ -39,7 +39,7 @@ public boolean onAirInteract(PlayerInteractEvent e) { return handleUse(e.getPlayer(), e.getItem(), e.getPlayer().getLocation().getBlock()); } - private boolean handleUse(Player player, ItemStack usedItem, Block block){ + private boolean handleUse(Player player, ItemStack usedItem, Block block) { Location max = block.getLocation().clone().add(radius, radius, radius), min = block.getLocation().clone().subtract(radius, radius, radius); @@ -49,15 +49,16 @@ private boolean handleUse(Player player, ItemStack usedItem, Block block){ int toolUsages = 0; outerLoop: - for(int x = min.getBlockX(); x <= max.getBlockX(); x++){ - for(int z = min.getBlockZ(); z <= max.getBlockZ(); z++){ - for(int y = max.getBlockY(); y >= min.getBlockY(); y--){ - if(usingDurability && toolUsages >= toolDurability) + for (int x = min.getBlockX(); x <= max.getBlockX(); x++) { + for (int z = min.getBlockZ(); z <= max.getBlockZ(); z++) { + for (int y = max.getBlockY(); y >= min.getBlockY(); y--) { + if (usingDurability && toolUsages >= toolDurability) break outerLoop; Block targetBlock = block.getWorld().getBlockAt(x, y, z); - if(targetBlock.getType() != Material.ICE || !BukkitUtils.canBreakBlock(player, targetBlock, this)) + if (targetBlock.getType() != Material.ICE || !BukkitUtils.canBreakBlock(player, targetBlock, this) || + !BukkitUtils.hasBreakAccess(targetBlock, player)) continue; affectedBlocks.add(targetBlock.getLocation()); @@ -71,7 +72,7 @@ private boolean handleUse(Player player, ItemStack usedItem, Block block){ IceWandUseEvent iceWandUseEvent = new IceWandUseEvent(player, this, affectedBlocks); Bukkit.getPluginManager().callEvent(iceWandUseEvent); - if(toolUsages > 0) + if (toolUsages > 0) reduceDurablility(player, usingDurability ? toolUsages : 1, usedItem); return true;