diff --git a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java index da4279d09..7cae80fec 100644 --- a/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java +++ b/src/me/mrCookieSlime/Slimefun/Setup/SlimefunSetup.java @@ -42,6 +42,7 @@ import org.bukkit.event.entity.EntityDamageEvent.DamageCause; import org.bukkit.event.entity.FoodLevelChangeEvent; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.BlockStateMeta; import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; @@ -1841,8 +1842,9 @@ public class SlimefunSetup { @Override public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { - if (SlimefunManager.isItemSimiliar(e.getPlayer().getInventory().getItemInMainHand(), SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) { if (e.getBlock().getType() != Material.SPAWNER) return true; + BlockStorage.clearBlockInfo(e.getBlock()); ItemStack spawner = SlimefunItems.BROKEN_SPAWNER.clone(); ItemMeta im = spawner.getItemMeta(); List lore = im.getLore(); @@ -2924,6 +2926,19 @@ public class SlimefunSetup { } else return false; } + }, new BlockBreakHandler() { + + @Override + public boolean onBlockBreak(BlockBreakEvent e, ItemStack item, int fortune, List drops) { + SlimefunItem spawner = BlockStorage.check(e.getBlock()); + if (spawner != null && SlimefunManager.isItemSimiliar(spawner.getItem(), SlimefunItems.REPAIRED_SPAWNER, false)) { + if (SlimefunManager.isItemSimiliar(item, SlimefunItems.PICKAXE_OF_CONTAINMENT, true)) + return false; + BlockStorage.clearBlockInfo(e.getBlock()); + return true; + } + else return false; + } }); new EnhancedFurnace(1, 1, 1, SlimefunItems.ENHANCED_FURNACE, "ENHANCED_FURNACE", diff --git a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java index a57f088f0..000eb0646 100644 --- a/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java +++ b/src/me/mrCookieSlime/Slimefun/listeners/ToolListener.java @@ -43,7 +43,7 @@ public class ToolListener implements Listener { plugin.getServer().getPluginManager().registerEvents(this, plugin); } - @EventHandler(priority=EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockRegister(BlockPlaceEvent e) { if (BlockStorage.hasBlockInfo(e.getBlock())) { e.setCancelled(true); @@ -52,14 +52,18 @@ public class ToolListener implements Listener { ItemStack item = e.getItemInHand(); if (item != null && item.getType() == Material.INK_SAC) return; SlimefunItem sfItem = SlimefunItem.getByItem(item); - if (sfItem != null && !(sfItem instanceof NotPlaceable)){ + if (sfItem != null && !(sfItem instanceof NotPlaceable)) { BlockStorage.addBlockInfo(e.getBlock(), "id", sfItem.getID(), true); if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { SlimefunItem.blockhandler.get(sfItem.getID()).onPlace(e.getPlayer(), e.getBlock(), sfItem); + } else { + for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) { + if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break; + } } } else { - for (ItemHandler handler: SlimefunItem.getHandlers("BlockPlaceHandler")) { + for (ItemHandler handler : SlimefunItem.getHandlers("BlockPlaceHandler")) { if (((BlockPlaceHandler) handler).onBlockPlace(e, item)) break; } } @@ -165,15 +169,15 @@ public class ToolListener implements Listener { } - @EventHandler(priority=EventPriority.MONITOR, ignoreCancelled = true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onBlockBreak(BlockBreakEvent e) { boolean allow = true; List drops = new ArrayList(); - ItemStack item = e.getPlayer().getInventory().getItemInMainHand(); + ItemStack item = e.getPlayer().getEquipment().getItemInMainHand(); int fortune = 1; Block block2 = e.getBlock().getRelative(BlockFace.UP); - if (StringUtils.equals(block2.getType().toString(), "SAPLING", "WOOD_PLATE", "STONE_PLATE", "IRON_PLATE", "GOLD_PLATE")) { + if (StringUtils.equals(block2.getType().toString(), "SAPLING", "WOOD_PLATE", "STONE_PLATE", "IRON_PLATE", "GOLD_PLATE")) { // ToDo: 1.13 Material names SlimefunItem sfItem = BlockStorage.check(e.getBlock().getRelative(BlockFace.UP)); if (sfItem != null && !(sfItem instanceof HandledBlock)) { if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { @@ -194,6 +198,10 @@ public class ToolListener implements Listener { if (sfItem != null && !(sfItem instanceof HandledBlock)) { if (SlimefunItem.blockhandler.containsKey(sfItem.getID())) { allow = SlimefunItem.blockhandler.get(sfItem.getID()).onBreak(e.getPlayer(), e.getBlock(), sfItem, UnregisterReason.PLAYER_BREAK); + } else { + for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) { + if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) return; + } } if (allow) { drops.add(BlockStorage.retrieve(e.getBlock())); @@ -203,21 +211,20 @@ public class ToolListener implements Listener { return; } } - else if (item != null){ + else if (item != null) { if (item.getEnchantments().containsKey(Enchantment.LOOT_BONUS_BLOCKS) && !item.getEnchantments().containsKey(Enchantment.SILK_TOUCH)) { fortune = SlimefunStartup.randomize(item.getEnchantmentLevel(Enchantment.LOOT_BONUS_BLOCKS) + 2) - 1; if (fortune <= 0) fortune = 1; fortune = (e.getBlock().getType() == Material.LAPIS_ORE ? 4 + SlimefunStartup.randomize(5) : 1) * (fortune + 1); } - - for (ItemHandler handler: SlimefunItem.getHandlers("BlockBreakHandler")) { + for (ItemHandler handler : SlimefunItem.getHandlers("BlockBreakHandler")) { if (((BlockBreakHandler) handler).onBlockBreak(e, item, fortune, drops)) break; } } if (!drops.isEmpty()) { e.getBlock().setType(Material.AIR); - for (ItemStack drop: drops) { + for (ItemStack drop : drops) { if (drop != null) { e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), drop); } @@ -225,7 +232,7 @@ public class ToolListener implements Listener { } } - @EventHandler(priority=EventPriority.MONITOR, ignoreCancelled=true) + @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) public void onEntityExplode(EntityExplodeEvent e) { Iterator blocks = e.blockList().iterator(); while (blocks.hasNext()) { @@ -254,4 +261,5 @@ public class ToolListener implements Listener { SlimefunItem item = BlockStorage.check(block); if (item != null) e.setCancelled(true); } + }