Protect against BlockExplodeEvent
This commit is contained in:
		@@ -9,6 +9,7 @@ import org.bukkit.Location;
 | 
				
			|||||||
import org.bukkit.block.Block;
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
import org.bukkit.entity.Entity;
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
import org.bukkit.entity.Wither;
 | 
					import org.bukkit.entity.Wither;
 | 
				
			||||||
 | 
					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;
 | 
				
			||||||
import org.bukkit.event.entity.EntityChangeBlockEvent;
 | 
					import org.bukkit.event.entity.EntityChangeBlockEvent;
 | 
				
			||||||
@@ -18,9 +19,11 @@ import org.bukkit.event.entity.EntityExplodeEvent;
 | 
				
			|||||||
import org.bukkit.event.hanging.HangingBreakEvent;
 | 
					import org.bukkit.event.hanging.HangingBreakEvent;
 | 
				
			||||||
import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
 | 
					import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
import java.util.EnumSet;
 | 
					import java.util.EnumSet;
 | 
				
			||||||
import java.util.HashMap;
 | 
					import java.util.HashMap;
 | 
				
			||||||
import java.util.Iterator;
 | 
					import java.util.Iterator;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Set;
 | 
					import java.util.Set;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -73,32 +76,34 @@ public class EngineFlagExplosion extends Engine
 | 
				
			|||||||
	@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
						@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
				
			||||||
	public void blockExplosion(EntityExplodeEvent event)
 | 
						public void blockExplosion(EntityExplodeEvent event)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		// Prepare some variables:
 | 
							Location location = event.getLocation();
 | 
				
			||||||
		// Current faction
 | 
							Cancellable cancellable = event;
 | 
				
			||||||
		Faction faction = null;
 | 
							Collection<Block> blocks = event.blockList();
 | 
				
			||||||
		// Current allowed
 | 
							
 | 
				
			||||||
		Boolean allowed = true;
 | 
							blockExplosion(location, cancellable, blocks);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						// Note that this method is used by EngineV18 for the BlockExplodeEvent
 | 
				
			||||||
 | 
						public void blockExplosion(Location location, Cancellable cancellable, Collection<Block> blocks)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
		// Caching to speed things up.
 | 
							// Caching to speed things up.
 | 
				
			||||||
		Map<Faction, Boolean> faction2allowed = new HashMap<>();
 | 
							Map<Faction, Boolean> faction2allowed = new HashMap<>();
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// If an explosion occurs at a location ...
 | 
					 | 
				
			||||||
		Location location = event.getLocation();
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// Check the entity. Are explosions disabled there?
 | 
							// Check the entity. Are explosions disabled there?
 | 
				
			||||||
		faction = BoardColl.get().getFactionAt(PS.valueOf(location));
 | 
							Faction faction = BoardColl.get().getFactionAt(PS.valueOf(location));
 | 
				
			||||||
		allowed = faction.isExplosionsAllowed();
 | 
							Boolean allowed = faction.isExplosionsAllowed();
 | 
				
			||||||
		if (allowed == false)
 | 
							if (!allowed)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			event.setCancelled(true);
 | 
								cancellable.setCancelled(true);
 | 
				
			||||||
			return;
 | 
								return;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		faction2allowed.put(faction, allowed);
 | 
							faction2allowed.put(faction, allowed);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		// Individually check the flag state for each block
 | 
							// Individually check the flag state for each block
 | 
				
			||||||
		Iterator<Block> iter = event.blockList().iterator();
 | 
							Iterator<Block> iterator = blocks.iterator();
 | 
				
			||||||
		while (iter.hasNext())
 | 
							while (iterator.hasNext())
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			Block block = iter.next();
 | 
								Block block = iterator.next();
 | 
				
			||||||
			faction = BoardColl.get().getFactionAt(PS.valueOf(block));
 | 
								faction = BoardColl.get().getFactionAt(PS.valueOf(block));
 | 
				
			||||||
			allowed = faction2allowed.get(faction);
 | 
								allowed = faction2allowed.get(faction);
 | 
				
			||||||
			if (allowed == null)
 | 
								if (allowed == null)
 | 
				
			||||||
@@ -107,7 +112,7 @@ public class EngineFlagExplosion extends Engine
 | 
				
			|||||||
				faction2allowed.put(faction, allowed);
 | 
									faction2allowed.put(faction, allowed);
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			
 | 
								
 | 
				
			||||||
			if (allowed == false) iter.remove();
 | 
								if (!allowed) iterator.remove();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										55
									
								
								src/com/massivecraft/factions/integration/V18/EngineV18.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/com/massivecraft/factions/integration/V18/EngineV18.java
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,55 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.integration.V18;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.factions.Factions;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.engine.EngineCanCombatHappen;
 | 
				
			||||||
 | 
					import com.massivecraft.factions.engine.EngineFlagExplosion;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.Engine;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.MassivePlugin;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.util.MUtil;
 | 
				
			||||||
 | 
					import org.bukkit.Location;
 | 
				
			||||||
 | 
					import org.bukkit.block.Block;
 | 
				
			||||||
 | 
					import org.bukkit.entity.Entity;
 | 
				
			||||||
 | 
					import org.bukkit.entity.LivingEntity;
 | 
				
			||||||
 | 
					import org.bukkit.event.Cancellable;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventHandler;
 | 
				
			||||||
 | 
					import org.bukkit.event.EventPriority;
 | 
				
			||||||
 | 
					import org.bukkit.event.block.BlockExplodeEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.EntityDamageByEntityEvent;
 | 
				
			||||||
 | 
					import org.bukkit.event.entity.EntityDamageEvent;
 | 
				
			||||||
 | 
					import org.bukkit.projectiles.ProjectileSource;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.ArrayList;
 | 
				
			||||||
 | 
					import java.util.Collection;
 | 
				
			||||||
 | 
					import java.util.List;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class EngineV18 extends Engine
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// INSTANCE & CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static EngineV18 i = new EngineV18();
 | 
				
			||||||
 | 
						public static EngineV18 get() { return i; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public MassivePlugin getActivePlugin()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return Factions.get();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// LISTENER
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
 | 
				
			||||||
 | 
						public void blockExplosion(BlockExplodeEvent event)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Location location = event.getBlock().getLocation();
 | 
				
			||||||
 | 
							Cancellable cancellable = event;
 | 
				
			||||||
 | 
							Collection<Block> blocks = event.blockList();
 | 
				
			||||||
 | 
							
 | 
				
			||||||
 | 
							EngineFlagExplosion.get().blockExplosion(location, cancellable, blocks);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					package com.massivecraft.factions.integration.V18;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.Engine;
 | 
				
			||||||
 | 
					import com.massivecraft.massivecore.Integration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public class IntegrationV18 extends Integration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// INSTANCE & CONSTRUCT
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						private static IntegrationV18 i = new IntegrationV18();
 | 
				
			||||||
 | 
						public static IntegrationV18 get() { return i; }
 | 
				
			||||||
 | 
						private IntegrationV18()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							this.setClassNames(
 | 
				
			||||||
 | 
								"org.bukkit.entity.ArmorStand"
 | 
				
			||||||
 | 
							);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
						// OVERRIDE
 | 
				
			||||||
 | 
						// -------------------------------------------- //
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						@Override
 | 
				
			||||||
 | 
						public Engine getEngine()
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return EngineV18.get();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user