diff --git a/src/com/taiter/ce/Enchantments/Tool/Explosive.java b/src/com/taiter/ce/Enchantments/Tool/Explosive.java index 1be157b..b4c5417 100644 --- a/src/com/taiter/ce/Enchantments/Tool/Explosive.java +++ b/src/com/taiter/ce/Enchantments/Tool/Explosive.java @@ -18,9 +18,9 @@ * along with this program. If not, see . */ -import java.util.ArrayList; -import java.util.List; - +import com.taiter.ce.Enchantments.CEnchantment; +import com.taiter.ce.Tools; +import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.block.Block; @@ -29,14 +29,14 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; -import com.taiter.ce.Tools; -import com.taiter.ce.Enchantments.CEnchantment; +import java.util.*; public class Explosive extends CEnchantment { - int Radius; - boolean LargerRadius; - boolean DropItems; + int radius; + boolean largerRadius; + boolean dropItems; + private Set uuidSet = new HashSet(); public Explosive(Application app) { super(app); @@ -50,14 +50,15 @@ public Explosive(Application app) { public void effect(Event e, ItemStack item, int level) { BlockBreakEvent event = (BlockBreakEvent) e; Player player = event.getPlayer(); - + if (uuidSet.contains(player.getUniqueId())) return; + uuidSet.add(player.getUniqueId()); if (!isUsable(player.getItemInHand().getType().toString(), event.getBlock().getType().toString())) return; List locations = new ArrayList(); - int locRad = Radius; - if (LargerRadius && Tools.random.nextInt(100) < level * 5) + int locRad = radius; + if (largerRadius && Tools.random.nextInt(100) < level * 5) locRad += 2; int r = locRad - 1; int start = r / 2; @@ -79,41 +80,43 @@ public void effect(Event e, ItemStack item, int level) { for (Location loc : locations) { String iMat = item.getType().toString(); - Block b = loc.getBlock(); - String bMat = b.getType().toString(); - - if (isUsable(iMat, bMat)) - if (!loc.getBlock().getDrops(item).isEmpty()) - if (Tools.checkWorldGuard(loc, player, "BUILD", false)) - if (DropItems) - loc.getBlock().breakNaturally(item); - else - for (ItemStack i : loc.getBlock().getDrops(item)) { - player.getInventory().addItem(i); - loc.getBlock().setType(Material.AIR); - } + Block block = loc.getBlock(); + String bMat = block.getType().toString(); + if (isUsable(iMat, bMat)) { + BlockBreakEvent blockBreakEvent = new BlockBreakEvent(block, player); + Bukkit.getServer().getPluginManager().callEvent(blockBreakEvent); + if (blockBreakEvent.isCancelled()) return; + if (!block.getDrops(item).isEmpty()) + if (dropItems && blockBreakEvent.isDropItems()) + block.breakNaturally(item); + else + for (ItemStack i : block.getDrops(item)) { + player.getInventory().addItem(i); + block.setType(Material.AIR); + } + } } + uuidSet.remove(player.getUniqueId()); + } // Checks if the Material of the block (bMat) is intended to be mined by the // item's Material (iMat) private boolean isUsable(String iMat, String bMat) { - if ((iMat.endsWith("PICKAXE") && (bMat.contains("ORE") || (!bMat.contains("STAIRS") && bMat.contains("STONE")) || bMat.equals("STAINED_CLAY") || bMat.equals("NETHERRACK"))) + return (iMat.endsWith("PICKAXE") && (bMat.contains("ORE") || (!bMat.contains("STAIRS") && bMat.contains("STONE")) || bMat.equals("STAINED_CLAY") || bMat.equals("NETHERRACK"))) || (iMat.endsWith("SPADE") && (bMat.contains("SAND") || bMat.equals("DIRT") || bMat.equals("SNOW_BLOCK") || bMat.equals("SNOW") || bMat.equals("MYCEL") || bMat.equals("CLAY") || bMat.equals("GRAVEL") || bMat.equals("GRASS"))) - || (iMat.endsWith("_AXE") && bMat.contains("LOG") || bMat.contains("PLANKS")) || (iMat.endsWith("HOE") && (bMat.equals("CROPS") || bMat.equals("POTATO") || bMat.equals("CARROT")))) - return true; - return false; + || (iMat.endsWith("_AXE") && bMat.contains("LOG") || bMat.contains("PLANKS")) || (iMat.endsWith("HOE") && (bMat.equals("CROPS") || bMat.equals("POTATO") || bMat.equals("CARROT"))); } @Override public void initConfigEntries() { - Radius = Integer.parseInt(getConfig().getString("Enchantments." + getOriginalName() + ".Radius")); - if (Radius % 2 == 0) - Radius += 1; - LargerRadius = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".LargerRadius")); - DropItems = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".DropItems")); + radius = Integer.parseInt(getConfig().getString("Enchantments." + getOriginalName() + ".Radius")); + if (radius % 2 == 0) + radius += 1; + largerRadius = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".LargerRadius")); + dropItems = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".DropItems")); } }