Skip to content

Commit

Permalink
Added backwards compatibility for versions below MC1.4.
Browse files Browse the repository at this point in the history
  • Loading branch information
sk89q committed Nov 3, 2012
1 parent fcfc3ac commit 68a7455
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 34 deletions.
33 changes: 26 additions & 7 deletions src/main/java/com/sk89q/worldguard/bukkit/BukkitUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,11 @@ public static void setBlockToWater(World world, int ox, int oy, int oz) {
/**
* Checks if the given block is water
*
* @param world
* @param ox
* @param oy
* @param oz
* @return
* @param world the world
* @param ox x
* @param oy y
* @param oz z
* @return true if it's water
*/
public static boolean isBlockWater(World world, int ox, int oy, int oz) {
Block block = world.getBlockAt(ox, oy, oz);
Expand Down Expand Up @@ -229,7 +229,7 @@ public static String replaceColorMacros(String str) {
* Returns whether an entity should be removed for the halt activity mode.
*
* @param entity
* @return
* @return true if it's to be removed
*/
public static boolean isIntensiveEntity(Entity entity) {
return entity instanceof Item
Expand All @@ -245,7 +245,7 @@ public static boolean isIntensiveEntity(Entity entity) {
* Returns whether our running CraftBukkit already supports
* the HangingEvent instead of the PaintingEvent
*
* @return
* @return true if the hanging event is supported
*/
public static boolean hasHangingEvent() {
Class<?> tmp = null;
Expand All @@ -254,4 +254,23 @@ public static boolean hasHangingEvent() {
} catch (ClassNotFoundException ignored) { }
return (tmp != null);
}

/**
* Search an enum for a value, and return the first one found. Return null if the
* enum entry is not found.
*
* @param enumType enum class
* @param values values to test
* @return a value in the enum or null
*/
public static <T extends Enum<T>> T tryEnum(Class<T> enumType, String ... values) {
for (String val : values) {
try {
return Enum.valueOf(enumType, val);
} catch (IllegalArgumentException e) {
}
}

return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,31 +18,60 @@
*/
package com.sk89q.worldguard.bukkit;

import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.GlobalRegionManager;
import com.sk89q.worldguard.protection.events.DisallowedPVPEvent;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import com.sk89q.worldguard.protection.managers.RegionManager;
import static com.sk89q.worldguard.bukkit.BukkitUtil.toVector;

import java.util.Set;

import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.entity.Creature;
import org.bukkit.entity.Creeper;
import org.bukkit.entity.EnderDragon;
import org.bukkit.entity.EnderPearl;
import org.bukkit.entity.Enderman;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Fireball;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.entity.TNTPrimed;
import org.bukkit.entity.Tameable;
import org.bukkit.entity.Wolf;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.*;
import org.bukkit.event.entity.CreatureSpawnEvent;
import org.bukkit.event.entity.CreeperPowerEvent;
import org.bukkit.event.entity.EntityChangeBlockEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageByBlockEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityInteractEvent;
import org.bukkit.event.entity.EntityRegainHealthEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.event.entity.FoodLevelChangeEvent;
import org.bukkit.event.entity.PigZapEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.inventory.ItemStack;

import java.util.Set;

import static com.sk89q.worldguard.bukkit.BukkitUtil.toVector;
import com.sk89q.worldedit.Vector;
import com.sk89q.worldedit.blocks.BlockID;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.blacklist.events.ItemUseBlacklistEvent;
import com.sk89q.worldguard.protection.ApplicableRegionSet;
import com.sk89q.worldguard.protection.GlobalRegionManager;
import com.sk89q.worldguard.protection.events.DisallowedPVPEvent;
import com.sk89q.worldguard.protection.flags.DefaultFlag;
import com.sk89q.worldguard.protection.managers.RegionManager;

/**
* Listener for entity related events.
Expand All @@ -52,7 +81,9 @@
public class WorldGuardEntityListener implements Listener {

private WorldGuardPlugin plugin;
private EntityType fireballEntityType;
private EntityType fireballType;
private EntityType witherType;
private EntityType witherSkullType;

/**
* Construct the object;
Expand All @@ -61,12 +92,10 @@ public class WorldGuardEntityListener implements Listener {
*/
public WorldGuardEntityListener(WorldGuardPlugin plugin) {
this.plugin = plugin;

try {
fireballEntityType = EntityType.valueOf("LARGE_FIREBALL");
} catch (IllegalArgumentException e) {
fireballEntityType = EntityType.valueOf("FIREBALL");
}

fireballType = BukkitUtil.tryEnum(EntityType.class, "LARGE_FIREBALL", "FIREBALL");
witherType = BukkitUtil.tryEnum(EntityType.class, "WITHER");
witherSkullType = BukkitUtil.tryEnum(EntityType.class, "WITHER_SKULL");
}

/**
Expand Down Expand Up @@ -467,7 +496,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
return;
}

if (ent instanceof Wither) {
if (ent.getType() == witherType) {
if (wcfg.blockWitherBlockDamage) {
event.blockList().clear();
return;
Expand All @@ -479,7 +508,7 @@ public void onEntityExplode(EntityExplodeEvent event) {
}
}

if (ent instanceof WitherSkull) {
if (ent.getType() == witherSkullType) {
if (wcfg.blockWitherSkullBlockDamage) {
event.blockList().clear();
return;
Expand Down Expand Up @@ -600,19 +629,19 @@ public void onExplosionPrime(ExplosionPrimeEvent event) {
return;
}

if (event.getEntityType() == EntityType.WITHER) {
if (event.getEntityType() == witherType) {
if (wcfg.blockWitherExplosions) {
event.setCancelled(true);
return;
}
}
else if (event.getEntityType() == EntityType.WITHER_SKULL) {
else if (event.getEntityType() == witherSkullType) {
if (wcfg.blockWitherSkullExplosions) {
event.setCancelled(true);
return;
}
}
else if (event.getEntityType() == fireballEntityType) {
else if (event.getEntityType() == fireballType) {
if (wcfg.blockFireballExplosions) {
event.setCancelled(true);
return;
Expand Down Expand Up @@ -756,7 +785,7 @@ public void onEndermanPickup(EntityChangeBlockEvent event) {
}
}
}
} else if (ent instanceof Wither) {
} else if (ent.getType() == witherType) {
ConfigurationManager cfg = plugin.getGlobalStateManager();
WorldConfiguration wcfg = cfg.get(ent.getWorld());

Expand Down

0 comments on commit 68a7455

Please sign in to comment.