diff --git a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ExplosionsListener.java b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ExplosionsListener.java index f18b5c180..cfbbc4cca 100644 --- a/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ExplosionsListener.java +++ b/src/main/java/io/github/thebusybiscuit/slimefun4/implementation/listeners/ExplosionsListener.java @@ -9,10 +9,13 @@ import javax.annotation.ParametersAreNonnullByDefault; import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.entity.Entity; +import org.bukkit.entity.EntityType; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.entity.EntityChangeBlockEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.inventory.ItemStack; @@ -50,6 +53,25 @@ public class ExplosionsListener implements Listener { removeResistantBlocks(e.blockList().iterator()); } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onEntityBreak(EntityChangeBlockEvent e) { + if (e.getEntity().getType() == EntityType.WITHER || e.getEntity().getType() == EntityType.WITHER_SKULL) { + removeResistantBlock(e.getBlock()); + } + } + + private void removeResistantBlock(@Nonnull Block block) { + final SlimefunItem item = BlockStorage.check(block); + + if (item != null + && !(item instanceof WitherProof) + && !item.callItemHandler(BlockBreakHandler.class, handler -> handleExplosion(handler, block)) + ) { + BlockStorage.clearBlockInfo(block); + block.setType(Material.AIR); + } + } + private void removeResistantBlocks(@Nonnull Iterator blocks) { while (blocks.hasNext()) { Block block = blocks.next(); @@ -57,11 +79,7 @@ public class ExplosionsListener implements Listener { if (item != null) { blocks.remove(); - - if (!(item instanceof WitherProof) && !item.callItemHandler(BlockBreakHandler.class, handler -> handleExplosion(handler, block))) { - BlockStorage.clearBlockInfo(block); - block.setType(Material.AIR); - } + removeResistantBlock(block); } } }