mirror of
https://github.com/MassiveCraft/Factions.git
synced 2024-12-22 16:48:32 +01:00
Protect against BlockExplodeEvent
This commit is contained in:
parent
76c4b7f865
commit
72b7a6a4ac
@ -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;
|
||||||
|
|
||||||
@ -69,36 +72,38 @@ public class EngineFlagExplosion extends Engine
|
|||||||
// ... then cancel!
|
// ... then cancel!
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@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)
|
||||||
@ -106,8 +111,8 @@ public class EngineFlagExplosion extends Engine
|
|||||||
allowed = faction.isExplosionsAllowed();
|
allowed = faction.isExplosionsAllowed();
|
||||||
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user