1
mirror of https://github.com/StarWishsama/Slimefun4.git synced 2024-09-20 11:45:51 +00:00

withers shouldnt cause ghost bs anymore

This commit is contained in:
Jeffrey Kosse 2022-10-17 18:43:18 +02:00
parent 475b27b48c
commit 4f43e33755

View File

@ -9,10 +9,13 @@ import javax.annotation.ParametersAreNonnullByDefault;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.block.Block; import org.bukkit.block.Block;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockExplodeEvent; import org.bukkit.event.block.BlockExplodeEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
@ -50,6 +53,25 @@ public class ExplosionsListener implements Listener {
removeResistantBlocks(e.blockList().iterator()); 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<Block> blocks) { private void removeResistantBlocks(@Nonnull Iterator<Block> blocks) {
while (blocks.hasNext()) { while (blocks.hasNext()) {
Block block = blocks.next(); Block block = blocks.next();
@ -57,11 +79,7 @@ public class ExplosionsListener implements Listener {
if (item != null) { if (item != null) {
blocks.remove(); blocks.remove();
removeResistantBlock(block);
if (!(item instanceof WitherProof) && !item.callItemHandler(BlockBreakHandler.class, handler -> handleExplosion(handler, block))) {
BlockStorage.clearBlockInfo(block);
block.setType(Material.AIR);
}
} }
} }
} }