Working on the listeners some more.
This commit is contained in:
		@@ -1,10 +1,14 @@
 | 
				
			|||||||
package com.massivecraft.factions.listeners;
 | 
					package com.massivecraft.factions.listeners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Enderman;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Wither;
 | 
				
			||||||
import org.bukkit.event.Cancellable;
 | 
					import org.bukkit.event.Cancellable;
 | 
				
			||||||
import org.bukkit.event.EventHandler;
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
import org.bukkit.event.EventPriority;
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
@@ -18,7 +22,9 @@ import org.bukkit.event.block.BlockPistonRetractEvent;
 | 
				
			|||||||
import org.bukkit.event.block.BlockPlaceEvent;
 | 
					import org.bukkit.event.block.BlockPlaceEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockSpreadEvent;
 | 
					import org.bukkit.event.block.BlockSpreadEvent;
 | 
				
			||||||
import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
 | 
					import org.bukkit.event.block.BlockIgniteEvent.IgniteCause;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.EntityChangeBlockEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
					import org.bukkit.event.entity.EntityDamageEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.EntityExplodeEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityRegainHealthEvent;
 | 
					import org.bukkit.event.entity.EntityRegainHealthEvent;
 | 
				
			||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
 | 
					import org.bukkit.event.hanging.HangingBreakByEntityEvent;
 | 
				
			||||||
import org.bukkit.event.hanging.HangingBreakEvent;
 | 
					import org.bukkit.event.hanging.HangingBreakEvent;
 | 
				
			||||||
@@ -77,6 +83,61 @@ public class FactionsListenerMain implements Listener
 | 
				
			|||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
				
			||||||
 | 
						public void blockExplosion(EntityExplodeEvent event)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// Individually check the flag state for each block
 | 
				
			||||||
 | 
							Iterator<Block> iter = event.blockList().iterator();
 | 
				
			||||||
 | 
							while (iter.hasNext())
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								Block block = iter.next();
 | 
				
			||||||
 | 
								Faction faction = BoardColl.get().getFactionAt(PS.valueOf(block));
 | 
				
			||||||
 | 
								if (faction.getFlag(FFlag.EXPLOSIONS) == false) iter.remove();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Check the entity. Are explosions disabled there? 
 | 
				
			||||||
 | 
							if (BoardColl.get().getFactionAt(PS.valueOf(event.getEntity())).getFlag(FFlag.EXPLOSIONS) == false)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								event.setCancelled(true);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
				
			||||||
 | 
						public void blockExplosion(EntityChangeBlockEvent event)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// If a wither is changing a block ...
 | 
				
			||||||
 | 
							Entity entity = event.getEntity();
 | 
				
			||||||
 | 
							if (!(entity instanceof Wither)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// ... and the faction there has explosions disabled ...
 | 
				
			||||||
 | 
							PS ps = PS.valueOf(event.getBlock());
 | 
				
			||||||
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
 | 
							if (faction.getFlag(FFlag.EXPLOSIONS)) return;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// ... stop the block alteration.
 | 
				
			||||||
 | 
							event.setCancelled(true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// FLAG: ENDERGRIEF
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
				
			||||||
 | 
						public void blockEndergrief(EntityChangeBlockEvent event)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// If an enderman is changing a block ...
 | 
				
			||||||
 | 
							Entity entity = event.getEntity();
 | 
				
			||||||
 | 
							if (!(entity instanceof Enderman)) return;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// ... and the faction there has endergrief disabled ...
 | 
				
			||||||
 | 
							PS ps = PS.valueOf(event.getBlock());
 | 
				
			||||||
 | 
							Faction faction = BoardColl.get().getFactionAt(ps);
 | 
				
			||||||
 | 
							if (faction.getFlag(FFlag.ENDERGRIEF)) return;
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							// ... stop the block alteration.
 | 
				
			||||||
 | 
							event.setCancelled(true);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	// FLAG: BUILD
 | 
						// FLAG: BUILD
 | 
				
			||||||
	// -------------------------------------------- //
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,24 +8,19 @@ import java.util.Set;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import org.bukkit.Bukkit;
 | 
					import org.bukkit.Bukkit;
 | 
				
			||||||
import org.bukkit.Location;
 | 
					import org.bukkit.Location;
 | 
				
			||||||
import org.bukkit.block.Block;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Enderman;
 | 
					 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.LivingEntity;
 | 
					import org.bukkit.entity.LivingEntity;
 | 
				
			||||||
import org.bukkit.entity.Player;
 | 
					import org.bukkit.entity.Player;
 | 
				
			||||||
import org.bukkit.entity.Projectile;
 | 
					import org.bukkit.entity.Projectile;
 | 
				
			||||||
import org.bukkit.entity.Wither;
 | 
					 | 
				
			||||||
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.entity.CreatureSpawnEvent;
 | 
					import org.bukkit.event.entity.CreatureSpawnEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.entity.EntityCombustByEntityEvent;
 | 
					import org.bukkit.event.entity.EntityCombustByEntityEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
 | 
					import org.bukkit.event.entity.EntityDamageByEntityEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
					import org.bukkit.event.entity.EntityDamageEvent;
 | 
				
			||||||
import org.bukkit.event.entity.EntityDeathEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
					 | 
				
			||||||
import org.bukkit.event.entity.EntityTargetEvent;
 | 
					import org.bukkit.event.entity.EntityTargetEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.PlayerDeathEvent;
 | 
				
			||||||
import org.bukkit.event.entity.PotionSplashEvent;
 | 
					import org.bukkit.event.entity.PotionSplashEvent;
 | 
				
			||||||
import org.bukkit.potion.PotionEffect;
 | 
					import org.bukkit.potion.PotionEffect;
 | 
				
			||||||
import org.bukkit.potion.PotionEffectType;
 | 
					import org.bukkit.potion.PotionEffectType;
 | 
				
			||||||
@@ -45,18 +40,24 @@ import com.massivecraft.mcore.ps.PS;
 | 
				
			|||||||
public class TodoFactionsEntityListener implements Listener
 | 
					public class TodoFactionsEntityListener implements Listener
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	@EventHandler(priority = EventPriority.NORMAL)
 | 
						// -------------------------------------------- //
 | 
				
			||||||
	public void onEntityDeath(EntityDeathEvent event)
 | 
						// POWER LOSS ON DEATH
 | 
				
			||||||
	{
 | 
						// -------------------------------------------- //
 | 
				
			||||||
		Entity entity = event.getEntity();
 | 
					 | 
				
			||||||
		if ( ! (entity instanceof Player)) return;
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
		Player player = (Player) entity;
 | 
						@EventHandler(priority = EventPriority.NORMAL)
 | 
				
			||||||
 | 
						public void powerLossOnDeath(PlayerDeathEvent event)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							// If a player dies ...
 | 
				
			||||||
 | 
							Player player = event.getEntity();
 | 
				
			||||||
		FPlayer fplayer = FPlayerColl.get().get(player);
 | 
							FPlayer fplayer = FPlayerColl.get().get(player);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
 | 
							// ... TODO: Sending the message through the event is not the best way of doing it.
 | 
				
			||||||
 | 
							// TODO: We should listen to our own events and send message from there if we cancel.
 | 
				
			||||||
 | 
							// 
 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(PS.valueOf(player));
 | 
							Faction faction = BoardColl.get().getFactionAt(PS.valueOf(player));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		PowerLossEvent powerLossEvent = new PowerLossEvent(faction, fplayer);
 | 
							PowerLossEvent powerLossEvent = new PowerLossEvent(faction, fplayer);
 | 
				
			||||||
 | 
							
 | 
				
			||||||
		// Check for no power loss conditions
 | 
							// Check for no power loss conditions
 | 
				
			||||||
		if ( ! faction.getFlag(FFlag.POWERLOSS))
 | 
							if ( ! faction.getFlag(FFlag.POWERLOSS))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
@@ -68,7 +69,8 @@ public class TodoFactionsEntityListener implements Listener
 | 
				
			|||||||
			powerLossEvent.setMessage("<i>You didn't lose any power due to the world you died in.");
 | 
								powerLossEvent.setMessage("<i>You didn't lose any power due to the world you died in.");
 | 
				
			||||||
			powerLossEvent.setCancelled(true);
 | 
								powerLossEvent.setCancelled(true);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		else {
 | 
							else
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
			powerLossEvent.setMessage("<i>Your power is now <h>%d / %d");
 | 
								powerLossEvent.setMessage("<i>Your power is now <h>%d / %d");
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -100,30 +102,6 @@ public class TodoFactionsEntityListener implements Listener
 | 
				
			|||||||
				event.setCancelled(true);
 | 
									event.setCancelled(true);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		// TODO: Add a no damage at all flag??
 | 
					 | 
				
			||||||
		/*else if (Conf.safeZonePreventAllDamageToPlayers && isPlayerInSafeZone(event.getEntity()))
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			// Players can not take any damage in a Safe Zone
 | 
					 | 
				
			||||||
			event.setCancelled(true);
 | 
					 | 
				
			||||||
		}*/
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
					 | 
				
			||||||
	public void onEntityExplode(EntityExplodeEvent event)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Iterator<Block> iter = event.blockList().iterator();
 | 
					 | 
				
			||||||
		while (iter.hasNext())
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Block block = iter.next();
 | 
					 | 
				
			||||||
			Faction faction = BoardColl.get().getFactionAt(PS.valueOf(block));
 | 
					 | 
				
			||||||
			if (faction.getFlag(FFlag.EXPLOSIONS) == false) iter.remove();
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (BoardColl.get().getFactionAt(PS.valueOf(event.getEntity())).getFlag(FFlag.EXPLOSIONS) == false)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			event.setCancelled(true);
 | 
					 | 
				
			||||||
			return;
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled
 | 
						// mainly for flaming arrows; don't want allies or people in safe zones to be ignited even after damage event is cancelled
 | 
				
			||||||
@@ -332,34 +310,4 @@ public class TodoFactionsEntityListener implements Listener
 | 
				
			|||||||
		event.setCancelled(true);
 | 
							event.setCancelled(true);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
					 | 
				
			||||||
	public void onEntityChangeBlock(EntityChangeBlockEvent event)
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		Entity entity = event.getEntity();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// for now, only interested in Enderman and Wither boss tomfoolery
 | 
					 | 
				
			||||||
		if (!(entity instanceof Enderman) && !(entity instanceof Wither)) return;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		PS ps = PS.valueOf(event.getBlock());
 | 
					 | 
				
			||||||
		Faction faction = BoardColl.get().getFactionAt(ps);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (entity instanceof Enderman)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if ( ! faction.getFlag(FFlag.ENDERGRIEF))
 | 
					 | 
				
			||||||
				event.setCancelled(true);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		else if (entity instanceof Wither)
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			if ( ! faction.getFlag(FFlag.EXPLOSIONS))
 | 
					 | 
				
			||||||
				event.setCancelled(true);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user