diff --git a/src/main/java/eu/endermite/togglepvp/TogglePvP.java b/src/main/java/eu/endermite/togglepvp/TogglePvP.java index bc08cfd..28c1f1b 100644 --- a/src/main/java/eu/endermite/togglepvp/TogglePvP.java +++ b/src/main/java/eu/endermite/togglepvp/TogglePvP.java @@ -35,6 +35,7 @@ public final class TogglePvP extends JavaPlugin { getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this); getServer().getPluginManager().registerEvents(new PlayerHitByProjectileListener(), this); getServer().getPluginManager().registerEvents(new AreaEffectCloudApplyListener(), this); + getServer().getPluginManager().registerEvents(new PlayerHitBySplashPotionListener(), this); getServer().getPluginManager().registerEvents(new PlayerHitByLightningListener(), this); getServer().getPluginManager().registerEvents(new LightningBlockIgniteListener(), this); getServer().getPluginManager().registerEvents(new PlayerHitByFireworkListener(), this); @@ -71,7 +72,4 @@ public final class TogglePvP extends JavaPlugin { public DatabaseSQLite getSqLite() {return sqLite;} - - - } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/AreaEffectCloudApplyListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/AreaEffectCloudApplyListener.java index 012b41b..cfca8d3 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/AreaEffectCloudApplyListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/AreaEffectCloudApplyListener.java @@ -30,6 +30,7 @@ public class AreaEffectCloudApplyListener implements Listener { potionEffectType.equals(PotionEffectType.POISON) || potionEffectType.equals(PotionEffectType.SLOW_DIGGING) || potionEffectType.equals(PotionEffectType.WEAKNESS) || + potionEffectType.equals(PotionEffectType.SLOW) || potionEffectType.equals(PotionEffectType.WITHER)) { Iterator it = event.getAffectedEntities().iterator(); @@ -43,11 +44,10 @@ public class AreaEffectCloudApplyListener implements Listener { ConfigCache config = TogglePvP.getPlugin().getConfigCache(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); - if (!damagerPvpEnabled) { it.remove(); PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - return; + continue; } boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); if (!victimPvpEnabled) { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java new file mode 100644 index 0000000..181543a --- /dev/null +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java @@ -0,0 +1,72 @@ +package eu.endermite.togglepvp.listeners.player; + +import eu.endermite.togglepvp.TogglePvP; +import eu.endermite.togglepvp.config.ConfigCache; +import eu.endermite.togglepvp.util.PluginMessages; +import org.bukkit.entity.Entity; +import org.bukkit.entity.LivingEntity; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; +import org.bukkit.potion.PotionEffect; +import org.bukkit.potion.PotionEffectType; + +import java.util.Iterator; + +public class PlayerHitBySplashPotionListener implements Listener { + + /** + * If thrown potion is applies negative effects and it's thrown by a player it will ahve no effect on player with pvp off + */ + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) + public void onPlayerHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { + + if (!(event.getEntity().getShooter() instanceof Player)) + return; + + boolean harmful = false; + + for (PotionEffect effect : event.getPotion().getEffects()) { + if (effect.getType().equals(PotionEffectType.BLINDNESS) || + effect.getType().equals(PotionEffectType.CONFUSION) || + effect.getType().equals(PotionEffectType.HARM) || + effect.getType().equals(PotionEffectType.HUNGER) || + effect.getType().equals(PotionEffectType.POISON) || + effect.getType().equals(PotionEffectType.SLOW_DIGGING) || + effect.getType().equals(PotionEffectType.WEAKNESS) || + effect.getType().equals(PotionEffectType.SLOW) || + effect.getType().equals(PotionEffectType.WITHER)) { + harmful = true; + } + } + + if (!harmful) + return; + + for (Entity entity : event.getAffectedEntities()) { + if (entity instanceof Player) { + Player damager = (Player) event.getEntity().getShooter(); + Player victim = (Player) entity; + if (damager == victim) + continue; + + ConfigCache config = TogglePvP.getPlugin().getConfigCache(); + boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager); + if (!damagerPvpEnabled) { + event.setIntensity(victim, 0); + PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); + continue; + } + boolean victimPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim); + if (!victimPvpEnabled) { + event.setIntensity(victim, 0); + PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); + } + } + } + + + + } +}