diff --git a/build/tmp/compileJava/previous-compilation-data.bin b/build/tmp/compileJava/previous-compilation-data.bin index c54f9b5..95e946c 100644 Binary files a/build/tmp/compileJava/previous-compilation-data.bin and b/build/tmp/compileJava/previous-compilation-data.bin differ diff --git a/src/main/java/io/github/itzispyder/explosionscontrol/events/ExplosionListener.java b/src/main/java/io/github/itzispyder/explosionscontrol/events/ExplosionListener.java index eb1d228..62599c1 100644 --- a/src/main/java/io/github/itzispyder/explosionscontrol/events/ExplosionListener.java +++ b/src/main/java/io/github/itzispyder/explosionscontrol/events/ExplosionListener.java @@ -13,6 +13,8 @@ import org.bukkit.entity.FallingBlock; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockExplodeEvent; +import org.bukkit.event.entity.EntityDamageByEntityEvent; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityExplodeEvent; import org.bukkit.util.Vector; @@ -36,6 +38,45 @@ public class ExplosionListener implements Listener { catch (Exception ignore) {} } + @EventHandler + private void onEntityDamageByEntity(EntityDamageByEntityEvent e) { + try { + this.handleEntityDamage(e); + } + catch (Exception ignore) {} + } + + @EventHandler + private void onEntityDamage(EntityDamageEvent e) { + try { + this.handleEntityDamage(e); + } + catch (Exception ignore) {} + } + + private void handleEntityDamage(EntityDamageEvent e) { + Entity ent = e.getEntity(); + World world = ent.getWorld(); + ExplosionConfig config = ExplosionConfig.load(world); + EntityDamageEvent.DamageCause cause = e.getCause(); + + if (cause == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) { + e.setCancelled(config.getBlockMode() == Mode.NONE); + } + else if (e instanceof EntityDamageByEntityEvent de) { + Entity damager = de.getDamager(); + + switch (damager.getType()) { + case CREEPER -> e.setCancelled(config.getCreeperMode() == Mode.NONE); + case MINECART_TNT -> e.setCancelled(config.getMinecartMode() == Mode.NONE); + case FIREBALL -> e.setCancelled(config.getFireballMode() == Mode.NONE); + case WITHER_SKULL -> e.setCancelled(config.getWitherMode() == Mode.NONE); + case PRIMED_TNT -> e.setCancelled(config.getTntMode() == Mode.NONE); + case ENDER_CRYSTAL -> e.setCancelled(config.getCrystalMode() == Mode.NONE); + } + } + } + private void handleEntityExplosion(EntityExplodeEvent e) { Entity ent = e.getEntity(); World world = ent.getWorld(); @@ -78,7 +119,7 @@ public class ExplosionListener implements Listener { private void dynamicExplode(Location center, List blocks) { for (Block block : blocks) { Location loc = block.getLocation(); - Vector dir = loc.toVector().subtract(center.toVector()).normalize().multiply(2).add(new Vector(0, 1, 0)); + Vector dir = loc.toVector().subtract(center.toVector()).normalize().add(new Vector(0, 1, 0)); FallingBlock fb = loc.getWorld().spawnFallingBlock(loc.add(0.5, 0.5, 0.5), block.getBlockData()); fb.setVelocity(dir); }