diff --git a/resources/plugin.yml b/resources/plugin.yml index ca8edef..f50026a 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.96.6.1 +version: 0.96.6.3 softdepend: [Multiverse-Core,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/ArenaImpl.java b/src/com/garbagemule/MobArena/ArenaImpl.java index b898568..3f9b704 100644 --- a/src/com/garbagemule/MobArena/ArenaImpl.java +++ b/src/com/garbagemule/MobArena/ArenaImpl.java @@ -1041,7 +1041,8 @@ public class ArenaImpl implements Arena PlayerData mp = playerData.remove(p); // Health must be handled in a certain way because of Heroes - setHealth(p, mp.health()); + // Math.min to guard for ItemLoreStats weirdness + setHealth(p, Math.min(p.getMaxHealth(), mp.health())); // Put out fire. Delays.douse(plugin, p, 3); diff --git a/src/com/garbagemule/MobArena/ArenaListener.java b/src/com/garbagemule/MobArena/ArenaListener.java index e468658..a7c3a6b 100644 --- a/src/com/garbagemule/MobArena/ArenaListener.java +++ b/src/com/garbagemule/MobArena/ArenaListener.java @@ -776,20 +776,38 @@ public class ArenaListener public void onPotionSplash(PotionSplashEvent event) { ThrownPotion potion = event.getPotion(); - if (!region.contains(potion.getLocation()) || pvpEnabled) { + if (!region.contains(potion.getLocation())) { return; } - // If a potion has harmful effects, remove all players. - for (PotionEffect effect : potion.getEffects()) { - PotionEffectType type = effect.getType(); - if (type.equals(PotionEffectType.HARM) || type.equals(PotionEffectType.POISON)) { - for (LivingEntity le : event.getAffectedEntities()) { - if (le instanceof Player) { - event.setIntensity(le, 0.0); + if (potion.getShooter() instanceof Player) { + // Check for PvP stuff if the shooter is a player + if (!pvpEnabled) { + // If a potion has harmful effects, remove all players. + for (PotionEffect effect : potion.getEffects()) { + PotionEffectType type = effect.getType(); + if (type.equals(PotionEffectType.HARM) || type.equals(PotionEffectType.POISON)) { + for (LivingEntity le : event.getAffectedEntities()) { + if (le instanceof Player) { + event.setIntensity(le, 0.0); + } + } + break; } } - break; + } + } else if (!monsterInfight) { + // Otherwise, check for monster infighting + for (PotionEffect effect : potion.getEffects()) { + PotionEffectType type = effect.getType(); + if (type.equals(PotionEffectType.HARM) || type.equals(PotionEffectType.POISON)) { + for (LivingEntity le : event.getAffectedEntities()) { + if (!(le instanceof Player)) { + event.setIntensity(le, 0.0); + } + } + break; + } } } }