Fix for Burning Armor stands exploit

Fix for issue where Burning Arrows could ignite Armor Stands regardless of Build Permissions.
This commit is contained in:
Connor 'Birb' McCormick 2018-01-20 00:59:26 +13:00
parent 3145777fc5
commit aadc85e393

View File

@ -19,6 +19,7 @@ import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.EventHandler;
@ -31,13 +32,16 @@ import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.block.SignChangeEvent;
import org.bukkit.event.entity.EntityCombustByEntityEvent;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.ProjectileHitEvent;
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
import org.bukkit.event.hanging.HangingPlaceEvent;
import org.bukkit.event.player.PlayerBucketEmptyEvent;
import org.bukkit.event.player.PlayerBucketFillEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.projectiles.ProjectileSource;
import java.util.Map;
@ -209,6 +213,26 @@ public class EnginePermBuild extends Engine
build(player, entity.getLocation().getBlock(), event);
}
@EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true)
public void combustEntity(EntityCombustByEntityEvent event) {
// If a burning projectile ...
if (!(event.getCombuster() instanceof Projectile)) return;
Projectile entityProjectile = (Projectile)event.getCombuster();
// ... fired by a player ...
ProjectileSource projectileSource = entityProjectile.getShooter();
if (MUtil.isntPlayer(projectileSource)) return;
// ... and hits an entity which is edited on damage (and thus likely to burn) ...
Entity entityTarget = event.getEntity();
if (entityTarget == null || !EnumerationUtil.isEntityTypeEditOnDamage(entityTarget.getType())) return;
// ... and the player can't build there, cancel the event
Block block = entityTarget.getLocation().getBlock();
protect(ProtectCase.BUILD, false, projectileSource, PS.valueOf(block), block, event);
}
// -------------------------------------------- //
// BUILD > PISTON
// -------------------------------------------- //