diff --git a/src/main/java/eu/endermite/togglepvp/TogglePvp.java b/src/main/java/eu/endermite/togglepvp/TogglePvp.java index 29a4de5..3ab2515 100644 --- a/src/main/java/eu/endermite/togglepvp/TogglePvp.java +++ b/src/main/java/eu/endermite/togglepvp/TogglePvp.java @@ -19,9 +19,9 @@ public final class TogglePvp extends JavaPlugin { @Getter private static TogglePvp plugin; private ConfigCache configCache; - private PlayerManager playerManager; - private DatabaseSQLite sqLite; - private SmartCache smartCache; + protected PlayerManager playerManager; + protected DatabaseSQLite sqLite; + protected SmartCache smartCache; @Override public void onEnable() { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByExplosionListener.java index fefb2de..36dae13 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByExplosionListener.java @@ -1,10 +1,7 @@ package eu.endermite.togglepvp.listeners.pets; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -19,35 +16,28 @@ public class PetHitByExplosionListener implements Listener { * Cancels explosion damage for pets with pvp off that is caused by players */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + public void onPetHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (!(event.getEntity() instanceof Tameable)) return; if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) return; - Tameable victim = (Tameable) event.getEntity(); - if (victim.getOwner() == null) + Tameable tameable = (Tameable) event.getEntity(); + if (tameable.getOwner() == null) return; + UUID victim = tameable.getOwner().getUniqueId(); + try { - UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); - if (victim.getOwner().getUniqueId() == damageruuid) { + UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); + if (victim == damager) return; - } - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damageruuid).isPvpEnabled()) { - PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_attacker()); + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damageruuid, victim.getOwner().getUniqueId()); } catch (NullPointerException | IndexOutOfBoundsException ignored) {} } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByFireworkListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByFireworkListener.java index d26191a..7e0912f 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByFireworkListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitByFireworkListener.java @@ -1,43 +1,36 @@ package eu.endermite.togglepvp.listeners.pets; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Firework; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PetHitByFireworkListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + public void onPetFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Firework && event.getEntity() instanceof Tameable) { - Tameable victim = (Tameable) event.getEntity(); - if (victim.getOwner() == null) + Tameable tameable = (Tameable) event.getEntity(); + if (tameable.getOwner() == null) return; Firework firework = (Firework) event.getDamager(); if (!(firework.getShooter() instanceof Player)) return; - Player damager = (Player) firework.getShooter(); - if (victim.getOwner() == damager) + UUID damager = ((Player) firework.getShooter()).getUniqueId(); + UUID victim = tameable.getOwner().getUniqueId(); + if (victim == damager) return; - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_pets_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_pets_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitBySplashPotionListener.java index 6538f2b..9142daa 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitBySplashPotionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetHitBySplashPotionListener.java @@ -1,10 +1,7 @@ package eu.endermite.togglepvp.listeners.pets; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; @@ -13,6 +10,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PetHitBySplashPotionListener implements Listener { @@ -22,7 +20,7 @@ public class PetHitBySplashPotionListener implements Listener { * it will have no effect on a pet of a player with pvp off */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onWolfHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { + public void onPetHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { if (!(event.getEntity().getShooter() instanceof Player)) return; @@ -46,25 +44,21 @@ public class PetHitBySplashPotionListener implements Listener { return; for (Entity entity : event.getAffectedEntities()) { if (entity instanceof Tameable) { - Player damager = (Player) event.getEntity().getShooter(); - Tameable victim = (Tameable) entity; - if (victim.getOwner() == null || victim.getOwner() == damager) + UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId(); + Tameable tameable = (Tameable) entity; + + if (tameable.getOwner() == null) continue; - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + UUID victim = tameable.getOwner().getUniqueId(); - if (!TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId())) { - event.setIntensity(victim, 0); - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); - continue; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - event.setIntensity(victim, 0); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - continue; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); + if (victim == damager) + return; + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else + event.setCancelled(true); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetLeashListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetLeashListener.java index 07f15c2..18da4ed 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetLeashListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetLeashListener.java @@ -1,14 +1,12 @@ package eu.endermite.togglepvp.listeners.pets; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; -import eu.endermite.togglepvp.util.PluginMessages; -import org.bukkit.entity.Player; +import eu.endermite.togglepvp.util.CombatTimer; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PetLeashListener implements Listener { @@ -16,25 +14,19 @@ public class PetLeashListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPetLeash(org.bukkit.event.entity.PlayerLeashEntityEvent event) { if (event.getEntity() instanceof Tameable) { - Tameable victim = (Tameable) event.getEntity(); - if (victim.getOwner() == null) + Tameable tameable = (Tameable) event.getEntity(); + if (tameable.getOwner() == null) return; - Player damager = event.getPlayer(); - if (victim.getOwner() == damager) + UUID damager = event.getPlayer().getUniqueId(); + UUID victim = tameable.getOwner().getUniqueId(); + if (victim == damager) return; - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); - event.setCancelled(true); - } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPetListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPetListener.java index 4ae5d96..1c64ede 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPetListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPetListener.java @@ -20,9 +20,9 @@ public class PetTargettingPetListener implements Listener { return; SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - boolean damagerPvpEnabled = smartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled(); boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); + if (!victimPvpEnabled || !damagerPvpEnabled) { if (damager instanceof Wolf) { Wolf wolf = (Wolf) damager; diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPlayerListener.java index 7fc3575..d977fa2 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPlayerListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PetTargettingPlayerListener.java @@ -1,19 +1,22 @@ package eu.endermite.togglepvp.listeners.pets; import eu.endermite.togglepvp.TogglePvp; +import eu.endermite.togglepvp.util.CombatTimer; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; + @eu.endermite.togglepvp.util.Listener public class PetTargettingPlayerListener implements Listener { /** * Stops pets with owners targetting players with pvp off */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onWolfTarget(org.bukkit.event.entity.EntityTargetEvent event) { + public void onPetTargetPlayer(org.bukkit.event.entity.EntityTargetEvent event) { if (!(event.getEntity() instanceof Tameable)) return; @@ -22,12 +25,13 @@ public class PetTargettingPlayerListener implements Listener { return; if (event.getTarget() instanceof Player) { - boolean attackerPvPEnabled = TogglePvp.getPlugin().getSmartCache().getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled(); - Player victim = (Player) event.getTarget(); - boolean victimPvpEnabled = TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled(); - if (!attackerPvPEnabled || !victimPvpEnabled) { + UUID damager = entity.getOwner().getUniqueId(); + UUID victim = event.getTarget().getUniqueId(); + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - } } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerAttackPetListener.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerAttackPetListener.java index 1c4e01d..4051a6a 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerAttackPetListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerAttackPetListener.java @@ -11,11 +11,13 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; + @eu.endermite.togglepvp.util.Listener public class PlayerAttackPetListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerAttacktameable(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + public void onPlayerAttackPet(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Player && event.getEntity() instanceof Tameable) { SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); @@ -23,25 +25,25 @@ public class PlayerAttackPetListener implements Listener { if (tameable.getOwner() == null) return; - Player damager = (Player) event.getDamager(); + UUID damager = event.getDamager().getUniqueId(); + UUID victim = tameable.getOwner().getUniqueId(); - if (damager.getUniqueId() == tameable.getOwner().getUniqueId()) + if (damager == victim) return; ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - boolean damagerPvpState = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); - + boolean damagerPvpState = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager); if (!damagerPvpState) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); event.setCancelled(true); return; } - if (!smartCache.getPlayerData(tameable.getOwner().getUniqueId()).isPvpEnabled()) { + if (!smartCache.getPlayerData(victim).isPvpEnabled()) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); event.setCancelled(true); return; } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), tameable.getOwner().getUniqueId()); + CombatTimer.refreshPlayersCombatTime(damager); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerHitPetWithProjectile.java b/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerHitPetWithProjectile.java index 2c62b71..e9215a7 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerHitPetWithProjectile.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/pets/PlayerHitPetWithProjectile.java @@ -12,6 +12,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; + @eu.endermite.togglepvp.util.Listener public class PlayerHitPetWithProjectile implements Listener { @@ -19,30 +21,37 @@ public class PlayerHitPetWithProjectile implements Listener { * Cancels damage done by projectiles to pets of players with pvp off */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitWolfWithProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + public void onPlayerHitPetWithProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getEntity() instanceof Tameable && event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); if (!(projectile.getShooter() instanceof Player)) return; - Tameable victim = (Tameable) event.getEntity(); - Player damager = (Player) projectile.getShooter(); - if (victim.getOwner() == null || victim.getOwner() == damager) + Tameable tameable = (Tameable) event.getEntity(); + + if (tameable.getOwner() == null) + return; + + UUID damager = ((Player) projectile.getShooter()).getUniqueId(); + UUID victim = tameable.getOwner().getUniqueId(); + + if (damager == victim) return; ConfigCache config = TogglePvp.getPlugin().getConfigCache(); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); + + if (!smartCache.getPlayerData(damager).isPvpEnabled()) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); return; } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); + if (!smartCache.getPlayerData(victim).isPvpEnabled()) { + PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); + event.setCancelled(true); + return; + } + CombatTimer.refreshPlayersCombatTime(damager); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PetAttackPlayerListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PetAttackPlayerListener.java index 0defcc1..f6f296c 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PetAttackPlayerListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PetAttackPlayerListener.java @@ -1,7 +1,7 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.players.SmartCache; +import eu.endermite.togglepvp.players.PlayerManager; import eu.endermite.togglepvp.util.CombatTimer; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; @@ -9,8 +9,7 @@ import org.bukkit.entity.Wolf; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; - -import java.time.Instant; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PetAttackPlayerListener implements Listener { @@ -20,7 +19,7 @@ public class PetAttackPlayerListener implements Listener { * This is to fix any inconsistancy with pet behavior */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onWolfAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) { + public void onPetAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (!(event.getDamager() instanceof Tameable)) return; @@ -28,16 +27,12 @@ public class PetAttackPlayerListener implements Listener { Tameable entity = (Tameable) event.getDamager(); if (entity.getOwner() != null && event.getEntity() instanceof Player) { - Player victim = (Player) event.getEntity(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + UUID victim = event.getEntity().getUniqueId(); + UUID damager = entity.getOwner().getUniqueId(); - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { - event.setCancelled(true); - return; - } - boolean damagerPvpEnabled = smartCache.getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled(); - boolean victimPvpEnabled = smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled(); - if (!victimPvpEnabled || !damagerPvpEnabled) { + PlayerManager playerManager = TogglePvp.getPlugin().getPlayerManager(); + + if (!playerManager.canDamage(damager, victim, false)) { if (entity instanceof Wolf) { Wolf wolf = (Wolf) entity; wolf.setAngry(false); @@ -45,7 +40,7 @@ public class PetAttackPlayerListener implements Listener { event.setCancelled(true); return; } - CombatTimer.refreshPlayersCombatTime(entity.getOwner().getUniqueId(), victim.getUniqueId()); + CombatTimer.refreshPlayersCombatTime(damager, victim); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java index 39700e4..2cebb15 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerAttackListener.java @@ -1,17 +1,13 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; - -import java.time.Instant; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PlayerAttackListener implements Listener { @@ -25,28 +21,13 @@ public class PlayerAttackListener implements Listener { Entity victimEntity = event.getEntity(); if (damagerEntity instanceof Player && victimEntity instanceof Player) { - Player damager = (Player) damagerEntity; - Player victim = (Player) victimEntity; + UUID damager = damagerEntity.getUniqueId(); + UUID victim = victimEntity.getUniqueId(); - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } } 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 5c86252..a6bf877 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByExplosionListener.java @@ -1,10 +1,7 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; @@ -16,8 +13,6 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.metadata.FixedMetadataValue; - -import java.time.Instant; import java.util.UUID; @eu.endermite.togglepvp.util.Listener @@ -32,34 +27,18 @@ public class PlayerHitByExplosionListener implements Listener { if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) { return; } - Player victim = (Player) event.getEntity(); + UUID victim = event.getEntity().getUniqueId(); try { - UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); - if (victim.getUniqueId().equals(damageruuid)) + UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); + if (victim.equals(damager)) return; - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - if (!smartCache.getPlayerData(damageruuid).isPvpEnabled()) { - PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_attacker()); - event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damageruuid, victim.getUniqueId()); - - } catch (NullPointerException | IndexOutOfBoundsException ignored) { - } + } catch (NullPointerException | IndexOutOfBoundsException ignored) { } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java index 826de50..94a84f1 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByFireworkListener.java @@ -1,16 +1,13 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Firework; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; - -import java.time.Instant; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PlayerHitByFireworkListener implements Listener { @@ -18,32 +15,18 @@ public class PlayerHitByFireworkListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player) { - Player victim = (Player) event.getEntity(); + UUID victim = event.getEntity().getUniqueId(); Firework firework = (Firework) event.getDamager(); if (firework.getShooter() instanceof Player) { - Player damager = (Player) firework.getShooter(); + UUID damager = ((Player) firework.getShooter()).getUniqueId(); if (damager == victim) { return; } - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager.getUniqueId(), TogglePvp.getPlugin().getConfigCache().getCannot_attack_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java index 03fca78..18d1203 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitByProjectileListener.java @@ -1,17 +1,13 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Player; import org.bukkit.entity.Projectile; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; - -import java.time.Instant; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PlayerHitByProjectileListener implements Listener { @@ -25,33 +21,17 @@ public class PlayerHitByProjectileListener implements Listener { if (event.getEntity() instanceof Player && event.getDamager() instanceof Projectile) { Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof Player) { - Player damager = (Player) projectile.getShooter(); - Player victim = (Player) event.getEntity(); + UUID damager = ((Player) projectile.getShooter()).getUniqueId(); + UUID victim = event.getEntity().getUniqueId(); // Ender pearls and other self-damage - if (damager == victim) { + if (damager == victim) return; - } - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java index a87db18..9aef68d 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/player/PlayerHitBySplashPotionListener.java @@ -1,20 +1,18 @@ package eu.endermite.togglepvp.listeners.player; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -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.time.Instant; import java.util.ArrayList; import java.util.List; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class PlayerHitBySplashPotionListener implements Listener { @@ -54,30 +52,16 @@ public class PlayerHitBySplashPotionListener implements Listener { return; for (Entity entity : event.getAffectedEntities()) { if (entity instanceof Player) { - Player damager = (Player) event.getEntity().getShooter(); - Player victim = (Player) entity; + UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId(); + UUID victim = entity.getUniqueId(); if (damager == victim) continue; - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - - if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { - event.setIntensity(victim, 0); - continue; + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) { + CombatTimer.refreshPlayersCombatTime(damager, victim); + } else { + event.setIntensity((LivingEntity) entity, 0); } - - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - event.setIntensity(victim, 0); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - continue; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setIntensity(victim, 0); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - continue; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java index 31d2f6e..7a360f9 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java @@ -1,10 +1,8 @@ package eu.endermite.togglepvp.listeners.unspecific; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; +import eu.endermite.togglepvp.players.PlayerManager; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; @@ -13,6 +11,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.AreaEffectCloudApplyEvent; import org.bukkit.potion.PotionEffectType; import java.util.Iterator; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class AreaEffectCloudApplyListener implements Listener { @@ -36,47 +35,37 @@ public class AreaEffectCloudApplyListener implements Listener { potionEffectType.equals(PotionEffectType.SLOW) || potionEffectType.equals(PotionEffectType.WITHER)) { - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + PlayerManager playerManager = TogglePvp.getPlugin().getPlayerManager(); Iterator it = event.getAffectedEntities().iterator(); - Player damager = (Player) event.getEntity().getSource(); + UUID damager = ((Player) event.getEntity().getSource()).getUniqueId(); while(it.hasNext()) { LivingEntity entity = it.next(); if(entity instanceof Player) { - Player victim = (Player) entity; + UUID victim = entity.getUniqueId(); if (damager == victim) continue; - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { + if (playerManager.canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else it.remove(); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - continue; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - it.remove(); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - continue; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); + } else if (entity instanceof Tameable) { - Tameable victim = (Tameable) entity; - if (victim.getOwner() == null || victim.getOwner() == damager) { - return; - } - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - it.remove(); - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); + Tameable tameable = (Tameable) entity; + + if (tameable.getOwner() == null) continue; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - it.remove(); - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); + + UUID victim = tameable.getOwner().getUniqueId(); + if (victim == damager) continue; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); + + if (playerManager.canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else + it.remove(); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java index 563df78..fb248b2 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/EntityHitByLightningListener.java @@ -9,6 +9,7 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.event.weather.LightningStrikeEvent; import org.bukkit.metadata.FixedMetadataValue; +import java.util.UUID; /** * Listen for lightning strikes and tag the trident spawned ones. @@ -24,8 +25,14 @@ public class EntityHitByLightningListener implements Listener { public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1) { if (event.getEntity() instanceof Player) { - Player victim = (Player) event.getEntity(); - if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) { + UUID victim = event.getEntity().getUniqueId(); + + if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim)) { + event.setCancelled(true); + return; + } + + if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim).isPvpEnabled()) { event.setCancelled(true); } } else if (event.getEntity() instanceof Tameable) { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java index e1bff11..4d8a77d 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java @@ -1,62 +1,47 @@ package eu.endermite.togglepvp.listeners.unspecific; import eu.endermite.togglepvp.TogglePvp; -import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.entity.Player; import org.bukkit.entity.Tameable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import java.util.UUID; @eu.endermite.togglepvp.util.Listener public class FishingListener implements Listener { - ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - /** * Prevents hooking players with disabled pvp with fishing rod */ @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onFish(org.bukkit.event.player.PlayerFishEvent event) { if (event.getCaught() instanceof Player) { - Player damager = event.getPlayer(); - Player victim = (Player) event.getCaught(); - if (damager == victim) { + UUID damager = event.getPlayer().getUniqueId(); + UUID victim = event.getCaught().getUniqueId(); + if (damager == victim) return; - } - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } else if (event.getCaught() instanceof Tameable) { - Tameable victim = (Tameable) event.getCaught(); - Player damager = event.getPlayer(); - if (victim.getOwner() == null || victim.getOwner() == damager) { + Tameable tameable = (Tameable) event.getCaught(); + UUID damager = event.getPlayer().getUniqueId(); + if (tameable.getOwner() == null) return; - } - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { + + UUID victim = tameable.getOwner().getUniqueId(); + + if (damager == victim) + return; + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); } } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java index 7252487..43fbd63 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java @@ -2,10 +2,8 @@ package eu.endermite.togglepvp.listeners.unspecific; import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.BoundingBoxUtil; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -16,61 +14,60 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.util.BoundingBox; +import java.util.UUID; + @eu.endermite.togglepvp.util.Listener 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) { - if (!TogglePvp.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled()) + ConfigCache config = TogglePvp.getPlugin().getConfigCache(); + + if (!config.isLava_and_fire_stopper_enabled()) return; if (event.getBucket().equals(Material.LAVA_BUCKET) || event.getBucket().equals(Material.PUFFERFISH_BUCKET)) { Location location = event.getBlockClicked().getLocation(); - Player damager = event.getPlayer(); + UUID damager = event.getPlayer().getUniqueId(); double radius = config.getLava_and_fire_stopper_radius(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { if (entity instanceof Player) { - Player victim = (Player) entity; + UUID victim = entity.getUniqueId(); if (victim != damager) { - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); + if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim, damager)) { event.setCancelled(true); return; } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); + } } else if (entity instanceof Tameable) { - Tameable victim = (Tameable) entity; - if (victim.getOwner() == null) { + Tameable tameable = (Tameable) entity; + if (tameable.getOwner() == null) { return; } - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); + + UUID victim = tameable.getOwner().getUniqueId(); + if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim, damager)) { event.setCancelled(true); return; } - boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); - if (!victimPvpEnabled) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); } } @@ -83,49 +80,43 @@ public class LavaDumpAndIgniteListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) { - if (!TogglePvp.getPlugin().getConfigCache().isLava_and_fire_stopper_enabled()) + ConfigCache config = TogglePvp.getPlugin().getConfigCache(); + + if (!config.isLava_and_fire_stopper_enabled()) return; if (event.getPlayer() == null) return; Location location = event.getBlock().getLocation(); - Player damager = event.getPlayer(); + UUID damager = event.getPlayer().getUniqueId(); double radius = config.getLava_and_fire_stopper_radius(); BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { if (entity instanceof Player) { - Player victim = (Player) entity; - if (victim != damager) { - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); - event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); - } + UUID victim = entity.getUniqueId(); + if (victim == damager) + continue; + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else + event.setCancelled(true); + } else if (entity instanceof Tameable) { - Tameable victim = (Tameable) entity; - if (victim.getOwner() == null || victim.getOwner() == damager) { - return; + Tameable tameable = (Tameable) entity; + if (tameable.getOwner() == null) { + continue; } - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); + + UUID victim = tameable.getOwner().getUniqueId(); + if (victim == damager) + continue; + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java index bd8faaa..8d6677d 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LightningBlockIgniteListener.java @@ -21,6 +21,12 @@ public class LightningBlockIgniteListener implements Listener { for (Entity entity : lightningStrike.getNearbyEntities(2,2,2)) { if (entity instanceof Player) { Player victim = (Player) entity; + + if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim.getUniqueId())) { + event.setCancelled(true); + return; + } + if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) { event.setCancelled(true); return; diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java index e40c98d..9d9d01c 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java @@ -2,10 +2,8 @@ package eu.endermite.togglepvp.listeners.unspecific; import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.config.ConfigCache; -import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.util.BoundingBoxUtil; import eu.endermite.togglepvp.util.CombatTimer; -import eu.endermite.togglepvp.util.PluginMessages; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Entity; @@ -16,6 +14,8 @@ import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; import org.bukkit.util.BoundingBox; +import java.util.UUID; + @eu.endermite.togglepvp.util.Listener public class PlaceWitherRoseListener implements Listener { @@ -23,7 +23,6 @@ public class PlaceWitherRoseListener implements Listener { public void onPlayerWitherRosePlace(org.bukkit.event.block.BlockPlaceEvent event) { ConfigCache config = TogglePvp.getPlugin().getConfigCache(); - SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (!config.isLava_and_fire_stopper_enabled()) return; @@ -34,38 +33,29 @@ public class PlaceWitherRoseListener implements Listener { BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { if (entity instanceof Player) { - Player damager = event.getPlayer(); - Player victim = (Player) entity; + UUID damager = event.getPlayer().getUniqueId(); + UUID victim = entity.getUniqueId(); if (victim == damager) return; - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker()); + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } else if (entity instanceof Tameable) { - Tameable victim = (Tameable) entity; - Player damager = event.getPlayer(); - if (victim.getOwner() == null || victim.getOwner() == damager) { + Tameable tameable = (Tameable) entity; + UUID damager = event.getPlayer().getUniqueId(); + if (tameable.getOwner() == null) return; - } - if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); + + UUID victim = tameable.getOwner().getUniqueId(); + if (victim == damager) + return; + + if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else event.setCancelled(true); - return; - } - if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); } } } diff --git a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java index d45af98..7f0b01d 100644 --- a/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java +++ b/src/main/java/eu/endermite/togglepvp/players/PlayerManager.java @@ -1,12 +1,14 @@ package eu.endermite.togglepvp.players; import eu.endermite.togglepvp.TogglePvp; +import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.PluginMessages; import lombok.Getter; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; +import java.time.Instant; import java.util.HashMap; import java.util.Map; import java.util.UUID; @@ -46,7 +48,8 @@ public class PlayerManager { public void refreshPlayersCombatTime(UUID uuid) { try { playerList.get(uuid).refreshCombatTime(); - } catch (Exception ignored) { } + } catch (Exception ignored) { + } } public PlayerData getPlayer(UUID uuid) { @@ -75,4 +78,49 @@ public class PlayerManager { return true; } } + + public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage) { + return canDamage(attacker, victim, sendDenyMessage, true); + } + + public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) { + + if (hasLoginProtection(attacker)) + return false; + + if (checkVictimSpawnProtection && hasLoginProtection(victim)) + return false; + + SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + + if (!smartCache.getPlayerData(attacker).isPvpEnabled()) { + if (sendDenyMessage) { + ConfigCache config = TogglePvp.getPlugin().getConfigCache(); + PluginMessages.sendActionBar(attacker, config.getCannot_attack_attacker()); + } + return false; + } + if (!smartCache.getPlayerData(victim).isPvpEnabled()) { + if (sendDenyMessage) { + ConfigCache config = TogglePvp.getPlugin().getConfigCache(); + PluginMessages.sendActionBar(victim, config.getCannot_attack_victim()); + } + return false; + } + return true; + } + + /** + * @param uuid Player UUIDs + * @return true if any of the provided UUIDs has spawn protection + */ + public boolean hasLoginProtection(UUID... uuid) { + SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); + for (UUID checkedUuid : uuid) { + if (Instant.now().getEpochSecond() < smartCache.getPlayerData(checkedUuid).getLoginTimestamp()) + return true; + } + return false; + } + }