diff --git a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java index 473bb734..834bea26 100644 --- a/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java +++ b/src/main/java/com/sk89q/worldguard/bukkit/WorldGuardEntityListener.java @@ -108,6 +108,7 @@ public void onEntityDamageByBlock(EntityDamageByBlockEvent event) { if (wcfg.disableLavaDamage && type == DamageCause.LAVA) { event.setCancelled(true); + if (cfg.hasGodMode(player)) player.setFireTicks(0); return; } @@ -268,6 +269,7 @@ public void onEntityDamage(EntityDamageEvent event) { if (cfg.hasGodMode(player)) { event.setCancelled(true); + player.setFireTicks(0); return; } @@ -326,8 +328,9 @@ public void onEntityExplode(EntityExplodeEvent event) { Location l = event.getLocation(); World world = l.getWorld(); WorldConfiguration wcfg = cfg.get(world); + Entity ent = event.getEntity(); - if (event.getEntity() instanceof LivingEntity) { + if (ent instanceof LivingEntity) { if (wcfg.blockCreeperBlockDamage) { event.setCancelled(true); return; @@ -347,7 +350,17 @@ public void onEntityExplode(EntityExplodeEvent event) { return; } } - } else { // Shall assume that this is TNT + } else if (ent instanceof Fireball) { + if (wcfg.useRegions) { + Vector pt = toVector(l); + RegionManager mgr = plugin.getGlobalRegionManager().get(world); + + if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.GHAST_FIREBALL)) { + event.setCancelled(true); + return; + } + } + } else if (ent instanceof TNTPrimed) { if (wcfg.blockTNT) { event.setCancelled(true); return; diff --git a/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java b/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java index 84804ab0..494f5ca2 100644 --- a/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java +++ b/src/main/java/com/sk89q/worldguard/protection/flags/DefaultFlag.java @@ -29,8 +29,9 @@ public final class DefaultFlag { public static final StateFlag BUILD = new StateFlag("build", 'b', true); public static final StateFlag PVP = new StateFlag("pvp", 'p', true); public static final StateFlag MOB_DAMAGE = new StateFlag("mob-damage", 'm', true); - public static final StateFlag MOB_SPAWNING = new StateFlag("mob-spawning", 'M', true); + public static final StateFlag MOB_SPAWNING = new StateFlag("mob-spawning", true); public static final StateFlag CREEPER_EXPLOSION = new StateFlag("creeper-explosion", 'c', true); + public static final StateFlag GHAST_FIREBALL = new StateFlag("ghast-fireball", true); public static final StateFlag SLEEP = new StateFlag("sleep", true); public static final StateFlag TNT = new StateFlag("tnt", 't', true); public static final StateFlag LIGHTER = new StateFlag("lighter", 'l', true); @@ -62,7 +63,8 @@ public final class DefaultFlag { TNT, LIGHTER, FIRE_SPREAD, LAVA_FIRE, CHEST_ACCESS, WATER_FLOW, LAVA_FLOW, USE, PLACE_VEHICLE, GREET_MESSAGE, FAREWELL_MESSAGE, NOTIFY_GREET, NOTIFY_FAREWELL, DENY_SPAWN, HEAL_DELAY, HEAL_AMOUNT, TELE_LOC, - TELE_PERM, SPAWN_LOC, SPAWN_PERM, BUYABLE, PRICE, SNOW_FALL + TELE_PERM, SPAWN_LOC, SPAWN_PERM, BUYABLE, PRICE, SNOW_FALL, + GHAST_FIREBALL }; private DefaultFlag() {