From 3a9b2534014dd42112add038212c955bf18ad245 Mon Sep 17 00:00:00 2001 From: 112madgamer Date: Thu, 22 Nov 2018 20:06:51 +1100 Subject: [PATCH] Block fire, damage from lightning caused by trident channeling enchant (#417) --- .../GriefPrevention/BlockEventHandler.java | 7 ++++++- .../GriefPrevention/EntityEventHandler.java | 16 ++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java index ec48e67..25df55d 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/BlockEventHandler.java @@ -623,7 +623,12 @@ public class BlockEventHandler implements Listener { //don't track in worlds where claims are not enabled if(!GriefPrevention.instance.claimsEnabledForWorld(igniteEvent.getBlock().getWorld())) return; - + + if(igniteEvent.getCause() == IgniteCause.LIGHTNING && GriefPrevention.instance.dataStore.getClaimAt(igniteEvent.getIgnitingEntity().getLocation(), false, null) != null){ + if(igniteEvent.getIgnitingEntity().hasMetadata("GP_TRIDENT")){ + igniteEvent.setCancelled(true); + } + } if(!GriefPrevention.instance.config_fireSpreads && igniteEvent.getCause() != IgniteCause.FLINT_AND_STEEL && igniteEvent.getCause() != IgniteCause.LIGHTNING) { diff --git a/src/main/java/me/ryanhamshire/GriefPrevention/EntityEventHandler.java b/src/main/java/me/ryanhamshire/GriefPrevention/EntityEventHandler.java index 053d654..b76ba37 100644 --- a/src/main/java/me/ryanhamshire/GriefPrevention/EntityEventHandler.java +++ b/src/main/java/me/ryanhamshire/GriefPrevention/EntityEventHandler.java @@ -35,6 +35,7 @@ import org.bukkit.entity.Explosive; import org.bukkit.entity.FallingBlock; import org.bukkit.entity.Horse; import org.bukkit.entity.Item; +import org.bukkit.entity.LightningStrike; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Monster; import org.bukkit.entity.Player; @@ -75,6 +76,7 @@ import org.bukkit.event.hanging.HangingBreakEvent; import org.bukkit.event.hanging.HangingBreakEvent.RemoveCause; import org.bukkit.event.hanging.HangingPlaceEvent; import org.bukkit.event.vehicle.VehicleDamageEvent; +import org.bukkit.event.weather.LightningStrikeEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.MetadataValue; @@ -118,7 +120,14 @@ public class EntityEventHandler implements Listener } } } - + + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) + public void onLightningStrike(LightningStrikeEvent event){ + if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){ + event.getLightning().setMetadata("GP_TRIDENT", new FixedMetadataValue(GriefPrevention.instance, event.getLightning().getLocation())); + } + } + @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onEntityChangeBLock(EntityChangeBlockEvent event) { @@ -709,7 +718,10 @@ public class EntityEventHandler implements Listener if(!(event instanceof EntityDamageByEntityEvent)) return; EntityDamageByEntityEvent subEvent = (EntityDamageByEntityEvent) event; - + + if(subEvent.getDamager() instanceof LightningStrike && subEvent.getDamager().getMetadata("GP_TRIDENT").size() >= 1){ + event.setCancelled(true); + } //determine which player is attacking, if any Player attacker = null; Projectile arrow = null;