diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/LavaDumpAndIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/LavaDumpAndIgniteListener.java index 6a393b2..167d720 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/LavaDumpAndIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/LavaDumpAndIgniteListener.java @@ -17,6 +17,9 @@ public class LavaDumpAndIgniteListener implements Listener { private ConfigCache config = TogglePvP.getPlugin().getConfigCache(); + /** + * Prevents dumping lava and pufferfish bucket near players with pvp off + */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onLavaDump(org.bukkit.event.player.PlayerBucketEmptyEvent event) { @@ -48,9 +51,11 @@ public class LavaDumpAndIgniteListener implements Listener { } } } - - } + + /** + * Prevents setting blocks on fire near players with pvp off + */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) { @@ -82,11 +87,5 @@ public class LavaDumpAndIgniteListener implements Listener { } } } - - } - - - - } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java index b8e4eb5..41980e5 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java @@ -6,9 +6,12 @@ import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.Bukkit; import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.Player; +import org.bukkit.entity.Projectile; +import org.bukkit.entity.TNTPrimed; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.metadata.FixedMetadataValue; import java.util.UUID; @@ -16,17 +19,18 @@ import java.util.UUID; public class PlayerHitByExplosionListener implements Listener { - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitEnderCrystal(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (event.getEntity() instanceof EnderCrystal && event.getDamager() instanceof Player) { - EnderCrystal enderCrystal = (EnderCrystal) event.getEntity(); - enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(TogglePvP.getPlugin(), event.getDamager().getUniqueId().toString())); - } - } + /** + * Cancels explosion damage for players with pvp off that is caused by players + */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getEntity() instanceof Player) { + + if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) { + return; + } + Player victim = (Player) event.getEntity(); try { UUID playeruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); @@ -46,7 +50,43 @@ public class PlayerHitByExplosionListener implements Listener { return; } } - } catch (NullPointerException ignored) {} + } catch (NullPointerException | IndexOutOfBoundsException ignored) {} } } + + /** + * Tags ender crystal with exploder uuid + */ + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerHitEnderCrystal(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + if (event.getEntity() instanceof EnderCrystal) { + EnderCrystal enderCrystal = (EnderCrystal) event.getEntity(); + if (event.getDamager() instanceof Player) { + enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(TogglePvP.getPlugin(), event.getDamager().getUniqueId().toString())); + } else if (event.getDamager() instanceof Projectile) { + Projectile projectile = (Projectile) event.getDamager(); + if (projectile.getShooter() instanceof Player) { + Player damager = (Player) projectile.getShooter(); + enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(TogglePvP.getPlugin(), damager.getUniqueId().toString())); + } + } + } + } + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerPrimedTnt(org.bukkit.event.entity.ExplosionPrimeEvent event) { + if (event.getEntity() instanceof TNTPrimed) { + TNTPrimed tntPrimed = (TNTPrimed) event.getEntity(); + if (tntPrimed.getSource() instanceof Player) { + Player damager = (Player) tntPrimed.getSource(); + tntPrimed.setMetadata("PLAYEREXPLODED",new FixedMetadataValue( TogglePvP.getPlugin(), damager.getUniqueId().toString())); + } else if (tntPrimed.getSource() instanceof TNTPrimed) { + try { + TNTPrimed sourceTnt = (TNTPrimed) tntPrimed.getSource(); + String damagerUuid = sourceTnt.getMetadata("PLAYEREXPLODED").get(0).asString(); + tntPrimed.setMetadata("PLAYEREXPLODED", new FixedMetadataValue( TogglePvP.getPlugin(), damagerUuid)); + }catch (NullPointerException ignored) {} + } + } + } + }