From efab2c190aff49e232b7bd69a1a44f4518540c39 Mon Sep 17 00:00:00 2001 From: Jan Tuck Date: Sat, 24 Feb 2018 14:56:42 +0100 Subject: [PATCH 1/3] Let Bukkit handle the permissions if a player is allowed to break the block, hooks into worldguard without adding it as a dependency. This code is seriously messy though. Closes #45 --- .../ce/Enchantments/Tool/Explosive.java | 45 ++++++++++--------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/src/com/taiter/ce/Enchantments/Tool/Explosive.java b/src/com/taiter/ce/Enchantments/Tool/Explosive.java index 1be157b..37d2d70 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,8 +29,8 @@ 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.ArrayList; +import java.util.List; public class Explosive extends CEnchantment { @@ -79,19 +79,22 @@ 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); + } + } } } @@ -99,12 +102,10 @@ public void effect(Event e, ItemStack item, int level) { // 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 From 641d135e4627a8edba9ed22415e8ddde2e52a7d2 Mon Sep 17 00:00:00 2001 From: Jan Tuck Date: Sat, 24 Feb 2018 15:58:02 +0100 Subject: [PATCH 2/3] Make sure it won't trigger on itself. --- .../ce/Enchantments/Tool/Explosive.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/com/taiter/ce/Enchantments/Tool/Explosive.java b/src/com/taiter/ce/Enchantments/Tool/Explosive.java index 37d2d70..b24298b 100644 --- a/src/com/taiter/ce/Enchantments/Tool/Explosive.java +++ b/src/com/taiter/ce/Enchantments/Tool/Explosive.java @@ -29,20 +29,20 @@ import org.bukkit.event.block.BlockBreakEvent; import org.bukkit.inventory.ItemStack; -import java.util.ArrayList; -import java.util.List; +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); - configEntries.put("Radius", 3); - configEntries.put("LargerRadius", true); - configEntries.put("DropItems", true); + configEntries.put("radius", 3); + configEntries.put("largerRadius", true); + configEntries.put("dropItems", true); triggers.add(Trigger.BLOCK_BROKEN); } @@ -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; @@ -81,13 +82,12 @@ public void effect(Event e, ItemStack item, int level) { String iMat = item.getType().toString(); 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()) + if (dropItems && blockBreakEvent.isDropItems()) block.breakNaturally(item); else for (ItemStack i : block.getDrops(item)) { @@ -97,6 +97,8 @@ public void effect(Event e, ItemStack item, int level) { } } + uuidSet.remove(player.getUniqueId()); + } // Checks if the Material of the block (bMat) is intended to be mined by the @@ -110,11 +112,11 @@ private boolean isUsable(String iMat, String bMat) { @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")); } } From b55455fc93a05c4300781b0d3eaf664cda7ddc41 Mon Sep 17 00:00:00 2001 From: Jan Tuck Date: Sat, 24 Feb 2018 15:59:23 +0100 Subject: [PATCH 3/3] Ugh, refactoring stupid values, why use fucking capital value names? Naming convention please. --- src/com/taiter/ce/Enchantments/Tool/Explosive.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/taiter/ce/Enchantments/Tool/Explosive.java b/src/com/taiter/ce/Enchantments/Tool/Explosive.java index b24298b..b4c5417 100644 --- a/src/com/taiter/ce/Enchantments/Tool/Explosive.java +++ b/src/com/taiter/ce/Enchantments/Tool/Explosive.java @@ -40,9 +40,9 @@ public class Explosive extends CEnchantment { public Explosive(Application app) { super(app); - configEntries.put("radius", 3); - configEntries.put("largerRadius", true); - configEntries.put("dropItems", true); + configEntries.put("Radius", 3); + configEntries.put("LargerRadius", true); + configEntries.put("DropItems", true); triggers.add(Trigger.BLOCK_BROKEN); } @@ -112,11 +112,11 @@ private boolean isUsable(String iMat, String bMat) { @Override public void initConfigEntries() { - radius = Integer.parseInt(getConfig().getString("Enchantments." + getOriginalName() + ".radius")); + 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")); + largerRadius = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".LargerRadius")); + dropItems = Boolean.parseBoolean(getConfig().getString("Enchantments." + getOriginalName() + ".DropItems")); } }