mirror of
https://github.com/EngineHub/WorldGuard.git
synced 2025-02-07 16:01:32 +01:00
Fixed up explosion handling.
This commit is contained in:
parent
0eb68ef864
commit
3757056e46
@ -89,15 +89,16 @@ public class WorldConfiguration {
|
|||||||
public boolean noPhysicsSand;
|
public boolean noPhysicsSand;
|
||||||
public boolean allowPortalAnywhere;
|
public boolean allowPortalAnywhere;
|
||||||
public Set<Integer> preventWaterDamage;
|
public Set<Integer> preventWaterDamage;
|
||||||
public boolean blockTNT;
|
|
||||||
public boolean blockLighter;
|
public boolean blockLighter;
|
||||||
public boolean disableTNTDamage;
|
|
||||||
public boolean disableFireSpread;
|
public boolean disableFireSpread;
|
||||||
public Set<Integer> disableFireSpreadBlocks;
|
public Set<Integer> disableFireSpreadBlocks;
|
||||||
public boolean preventLavaFire;
|
public boolean preventLavaFire;
|
||||||
public Set<Integer> allowedLavaSpreadOver;
|
public Set<Integer> allowedLavaSpreadOver;
|
||||||
|
public boolean blockTNTExplosions;
|
||||||
|
public boolean blockTNTBlockDamage;
|
||||||
public boolean blockCreeperExplosions;
|
public boolean blockCreeperExplosions;
|
||||||
public boolean blockCreeperBlockDamage;
|
public boolean blockCreeperBlockDamage;
|
||||||
|
public boolean blockFireballExplosions;
|
||||||
public boolean blockFireballBlockDamage;
|
public boolean blockFireballBlockDamage;
|
||||||
public int loginProtection;
|
public int loginProtection;
|
||||||
public int spawnProtection;
|
public int spawnProtection;
|
||||||
@ -268,7 +269,9 @@ private void loadConfiguration() {
|
|||||||
allowPortalAnywhere = getBoolean("physics.allow-portal-anywhere", false);
|
allowPortalAnywhere = getBoolean("physics.allow-portal-anywhere", false);
|
||||||
preventWaterDamage = new HashSet<Integer>(getIntList("physics.disable-water-damage-blocks", null));
|
preventWaterDamage = new HashSet<Integer>(getIntList("physics.disable-water-damage-blocks", null));
|
||||||
|
|
||||||
blockTNT = getBoolean("ignition.block-tnt", false);
|
blockTNTExplosions = getBoolean("ignition.block-tnt", false);
|
||||||
|
// any better place to put this?
|
||||||
|
blockTNTBlockDamage = getBoolean("ignition.block-tnt-block-damage", false);
|
||||||
blockLighter = getBoolean("ignition.block-lighter", false);
|
blockLighter = getBoolean("ignition.block-lighter", false);
|
||||||
|
|
||||||
preventLavaFire = getBoolean("fire.disable-lava-fire-spread", true);
|
preventLavaFire = getBoolean("fire.disable-lava-fire-spread", true);
|
||||||
@ -278,6 +281,7 @@ private void loadConfiguration() {
|
|||||||
|
|
||||||
blockCreeperExplosions = getBoolean("mobs.block-creeper-explosions", false);
|
blockCreeperExplosions = getBoolean("mobs.block-creeper-explosions", false);
|
||||||
blockCreeperBlockDamage = getBoolean("mobs.block-creeper-block-damage", false);
|
blockCreeperBlockDamage = getBoolean("mobs.block-creeper-block-damage", false);
|
||||||
|
blockFireballExplosions = getBoolean("mob.block-fireball-explosions", false);
|
||||||
blockFireballBlockDamage = getBoolean("mobs.block-fireball-block-damage", false);
|
blockFireballBlockDamage = getBoolean("mobs.block-fireball-block-damage", false);
|
||||||
antiWolfDumbness = getBoolean("mobs.anti-wolf-dumbness", false);
|
antiWolfDumbness = getBoolean("mobs.anti-wolf-dumbness", false);
|
||||||
|
|
||||||
@ -287,7 +291,6 @@ private void loadConfiguration() {
|
|||||||
exactRespawn = getBoolean("spawn.exact-respawn", false);
|
exactRespawn = getBoolean("spawn.exact-respawn", false);
|
||||||
teleportToHome = getBoolean("spawn.teleport-to-home-on-death", false);
|
teleportToHome = getBoolean("spawn.teleport-to-home-on-death", false);
|
||||||
|
|
||||||
disableTNTDamage = getBoolean("player-damage.disable-tnt-damage", false);
|
|
||||||
disableFallDamage = getBoolean("player-damage.disable-fall-damage", false);
|
disableFallDamage = getBoolean("player-damage.disable-fall-damage", false);
|
||||||
disableLavaDamage = getBoolean("player-damage.disable-lava-damage", false);
|
disableLavaDamage = getBoolean("player-damage.disable-lava-damage", false);
|
||||||
disableFireDamage = getBoolean("player-damage.disable-fire-damage", false);
|
disableFireDamage = getBoolean("player-damage.disable-fire-damage", false);
|
||||||
@ -409,7 +412,7 @@ private void loadConfiguration() {
|
|||||||
logger.log(Level.INFO, enforceOneSession
|
logger.log(Level.INFO, enforceOneSession
|
||||||
? "WorldGuard: (" + worldName + ") Single session is enforced."
|
? "WorldGuard: (" + worldName + ") Single session is enforced."
|
||||||
: "WorldGuard: (" + worldName + ") Single session is NOT ENFORCED.");
|
: "WorldGuard: (" + worldName + ") Single session is NOT ENFORCED.");
|
||||||
logger.log(Level.INFO, blockTNT
|
logger.log(Level.INFO, blockTNTExplosions
|
||||||
? "WorldGuard: (" + worldName + ") TNT ignition is blocked."
|
? "WorldGuard: (" + worldName + ") TNT ignition is blocked."
|
||||||
: "WorldGuard: (" + worldName + ") TNT ignition is PERMITTED.");
|
: "WorldGuard: (" + worldName + ") TNT ignition is PERMITTED.");
|
||||||
logger.log(Level.INFO, blockLighter
|
logger.log(Level.INFO, blockLighter
|
||||||
|
@ -131,7 +131,6 @@ private void registerEvent(String typeName, Priority priority) {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void onEntityInteract(EntityInteractEvent event) {
|
public void onEntityInteract(EntityInteractEvent event) {
|
||||||
//bukkit doesn't actually throw this event yet, someone add a ticket to leaky
|
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
|
|
||||||
@ -193,7 +192,7 @@ private void onEntityDamageByBlock(EntityDamageByBlockEvent event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wcfg.disableExplosionDamage && event.getCause() == DamageCause.BLOCK_EXPLOSION) {
|
if (wcfg.disableExplosionDamage && type == DamageCause.BLOCK_EXPLOSION) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -279,9 +278,36 @@ private void onEntityDamageByEntity(EntityDamageByEntityEvent event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker != null && attacker instanceof TNTPrimed && wcfg.disableTNTDamage) {
|
if (attacker != null && attacker instanceof TNTPrimed) {
|
||||||
event.setCancelled(true);
|
if (wcfg.blockTNTExplosions) {
|
||||||
return;
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (wcfg.useRegions) {
|
||||||
|
Vector pt = toVector(defender.getLocation());
|
||||||
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld());
|
||||||
|
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
||||||
|
if (!set.allows(DefaultFlag.TNT)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (attacker != null && attacker instanceof Fireball) {
|
||||||
|
if (wcfg.blockFireballExplosions) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (wcfg.useRegions) {
|
||||||
|
Vector pt = toVector(defender.getLocation());
|
||||||
|
RegionManager mgr = plugin.getGlobalRegionManager().get(player.getWorld());
|
||||||
|
ApplicableRegionSet set = mgr.getApplicableRegions(pt);
|
||||||
|
if (!set.allows(DefaultFlag.GHAST_FIREBALL)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (attacker != null && attacker instanceof LivingEntity
|
if (attacker != null && attacker instanceof LivingEntity
|
||||||
@ -497,42 +523,57 @@ public void onEntityExplode(EntityExplodeEvent event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ent instanceof LivingEntity) {
|
if (ent instanceof LivingEntity) {
|
||||||
if (wcfg.blockCreeperBlockDamage) {
|
if (wcfg.blockCreeperBlockDamage || wcfg.blockCreeperExplosions) {
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wcfg.blockCreeperExplosions) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wcfg.useRegions) {
|
if (wcfg.useRegions) {
|
||||||
Vector pt = toVector(l);
|
if (wcfg.useRegions) {
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.CREEPER_EXPLOSION)) {
|
for (Block block : event.blockList()) {
|
||||||
event.setCancelled(true);
|
if (!mgr.getApplicableRegions(toVector(block)).allows(DefaultFlag.CREEPER_EXPLOSION)) {
|
||||||
return;
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (ent instanceof TNTPrimed) {
|
} else if (ent instanceof TNTPrimed) {
|
||||||
if (wcfg.blockTNT) {
|
if (wcfg.blockTNTBlockDamage || wcfg.blockTNTExplosions) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wcfg.useRegions) {
|
if (wcfg.useRegions) {
|
||||||
Vector pt = toVector(l);
|
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.TNT)) {
|
for (Block block : event.blockList()) {
|
||||||
event.setCancelled(true);
|
if (!mgr.getApplicableRegions(toVector(block)).allows(DefaultFlag.TNT)) {
|
||||||
return;
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (ent instanceof Fireball) {
|
||||||
|
if (wcfg.blockFireballBlockDamage || wcfg.blockFireballExplosions) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (wcfg.useRegions) {
|
||||||
|
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
||||||
|
|
||||||
|
for (Block block : event.blockList()) {
|
||||||
|
if (!mgr.getApplicableRegions(toVector(block)).allows(DefaultFlag.GHAST_FIREBALL)) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wcfg.signChestProtection) {
|
if (wcfg.signChestProtection) {
|
||||||
for (Block block : event.blockList()) {
|
for (Block block : event.blockList()) {
|
||||||
if (wcfg.isChestProtected(block)) {
|
if (wcfg.isChestProtected(block)) {
|
||||||
@ -542,19 +583,6 @@ public void onEntityExplode(EntityExplodeEvent event) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (wcfg.useRegions) {
|
|
||||||
RegionManager mgr = plugin.getGlobalRegionManager().get(world);
|
|
||||||
|
|
||||||
// Whoo, for each block
|
|
||||||
for (Block block : event.blockList()) {
|
|
||||||
Vector pt = toVector(block);
|
|
||||||
|
|
||||||
if (!mgr.getApplicableRegions(pt).allows(DefaultFlag.TNT)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -567,9 +595,6 @@ public void onExplosionPrime(ExplosionPrimeEvent event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ConfigurationManager cfg = plugin.getGlobalStateManager();
|
ConfigurationManager cfg = plugin.getGlobalStateManager();
|
||||||
Location l = event.getEntity().getLocation();
|
|
||||||
World world = l.getWorld();
|
|
||||||
WorldConfiguration wcfg = cfg.get(world);
|
|
||||||
Entity ent = event.getEntity();
|
Entity ent = event.getEntity();
|
||||||
|
|
||||||
if (cfg.activityHaltToggle) {
|
if (cfg.activityHaltToggle) {
|
||||||
@ -578,22 +603,6 @@ public void onExplosionPrime(ExplosionPrimeEvent event) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ent instanceof Fireball) {
|
|
||||||
if (wcfg.blockFireballBlockDamage) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user