tiny adjustment

This commit is contained in:
YouHaveTrouble
2021-03-08 02:02:23 +01:00
parent c2033f5bcb
commit 4c68f7e149
22 changed files with 301 additions and 399 deletions
@@ -19,9 +19,9 @@ public final class TogglePvp extends JavaPlugin {
@Getter private static TogglePvp plugin; @Getter private static TogglePvp plugin;
private ConfigCache configCache; private ConfigCache configCache;
private PlayerManager playerManager; protected PlayerManager playerManager;
private DatabaseSQLite sqLite; protected DatabaseSQLite sqLite;
private SmartCache smartCache; protected SmartCache smartCache;
@Override @Override
public void onEnable() { public void onEnable() {
@@ -1,10 +1,7 @@
package eu.endermite.togglepvp.listeners.pets; package eu.endermite.togglepvp.listeners.pets;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; 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 * Cancels explosion damage for pets with pvp off that is caused by players
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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)) if (!(event.getEntity() instanceof Tameable))
return; return;
if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION))
return; return;
Tameable victim = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
if (victim.getOwner() == null) if (tameable.getOwner() == null)
return; return;
UUID victim = tameable.getOwner().getUniqueId();
try { try {
UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString());
if (victim.getOwner().getUniqueId() == damageruuid) { if (victim == damager)
return; return;
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); CombatTimer.refreshPlayersCombatTime(damager, victim);
if (!smartCache.getPlayerData(damageruuid).isPvpEnabled()) { else
PluginMessages.sendActionBar(damageruuid, config.getCannot_attack_pets_attacker());
event.setCancelled(true); 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) {} } catch (NullPointerException | IndexOutOfBoundsException ignored) {}
} }
@@ -1,43 +1,36 @@
package eu.endermite.togglepvp.listeners.pets; package eu.endermite.togglepvp.listeners.pets;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Firework; import org.bukkit.entity.Firework;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetHitByFireworkListener implements Listener { public class PetHitByFireworkListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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) { if (event.getDamager() instanceof Firework && event.getEntity() instanceof Tameable) {
Tameable victim = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
if (victim.getOwner() == null) if (tameable.getOwner() == null)
return; return;
Firework firework = (Firework) event.getDamager(); Firework firework = (Firework) event.getDamager();
if (!(firework.getShooter() instanceof Player)) if (!(firework.getShooter() instanceof Player))
return; return;
Player damager = (Player) firework.getShooter(); UUID damager = ((Player) firework.getShooter()).getUniqueId();
if (victim.getOwner() == damager) UUID victim = tameable.getOwner().getUniqueId();
if (victim == damager)
return; 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); 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());
} }
} }
@@ -1,10 +1,7 @@
package eu.endermite.togglepvp.listeners.pets; package eu.endermite.togglepvp.listeners.pets;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
@@ -13,6 +10,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetHitBySplashPotionListener implements 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 * it will have no effect on a pet of a player with pvp off
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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)) if (!(event.getEntity().getShooter() instanceof Player))
return; return;
@@ -46,25 +44,21 @@ public class PetHitBySplashPotionListener implements Listener {
return; return;
for (Entity entity : event.getAffectedEntities()) { for (Entity entity : event.getAffectedEntities()) {
if (entity instanceof Tameable) { if (entity instanceof Tameable) {
Player damager = (Player) event.getEntity().getShooter(); UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId();
Tameable victim = (Tameable) entity; Tameable tameable = (Tameable) entity;
if (victim.getOwner() == null || victim.getOwner() == damager)
if (tameable.getOwner() == null)
continue; continue;
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); UUID victim = tameable.getOwner().getUniqueId();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (!TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId())) { if (victim == damager)
event.setIntensity(victim, 0); return;
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
continue; if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
} CombatTimer.refreshPlayersCombatTime(damager, victim);
if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { else
event.setIntensity(victim, 0); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
continue;
}
CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId());
} }
} }
} }
@@ -1,14 +1,12 @@
package eu.endermite.togglepvp.listeners.pets; package eu.endermite.togglepvp.listeners.pets;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetLeashListener implements Listener { public class PetLeashListener implements Listener {
@@ -16,25 +14,19 @@ public class PetLeashListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPetLeash(org.bukkit.event.entity.PlayerLeashEntityEvent event) { public void onPetLeash(org.bukkit.event.entity.PlayerLeashEntityEvent event) {
if (event.getEntity() instanceof Tameable) { if (event.getEntity() instanceof Tameable) {
Tameable victim = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
if (victim.getOwner() == null) if (tameable.getOwner() == null)
return; return;
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
if (victim.getOwner() == damager) UUID victim = tameable.getOwner().getUniqueId();
if (victim == damager)
return; return;
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); CombatTimer.refreshPlayersCombatTime(damager, victim);
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { else
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
event.setCancelled(true); event.setCancelled(true);
return;
}
if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true);
}
} }
} }
@@ -20,9 +20,9 @@ public class PetTargettingPetListener implements Listener {
return; return;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
boolean damagerPvpEnabled = smartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled(); boolean damagerPvpEnabled = smartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled();
boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled || !damagerPvpEnabled) { if (!victimPvpEnabled || !damagerPvpEnabled) {
if (damager instanceof Wolf) { if (damager instanceof Wolf) {
Wolf wolf = (Wolf) damager; Wolf wolf = (Wolf) damager;
@@ -1,19 +1,22 @@
package eu.endermite.togglepvp.listeners.pets; package eu.endermite.togglepvp.listeners.pets;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.util.CombatTimer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetTargettingPlayerListener implements Listener { public class PetTargettingPlayerListener implements Listener {
/** /**
* Stops pets with owners targetting players with pvp off * Stops pets with owners targetting players with pvp off
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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)) if (!(event.getEntity() instanceof Tameable))
return; return;
@@ -22,12 +25,13 @@ public class PetTargettingPlayerListener implements Listener {
return; return;
if (event.getTarget() instanceof Player) { if (event.getTarget() instanceof Player) {
boolean attackerPvPEnabled = TogglePvp.getPlugin().getSmartCache().getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled(); UUID damager = entity.getOwner().getUniqueId();
Player victim = (Player) event.getTarget(); UUID victim = event.getTarget().getUniqueId();
boolean victimPvpEnabled = TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled();
if (!attackerPvPEnabled || !victimPvpEnabled) { if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
CombatTimer.refreshPlayersCombatTime(damager, victim);
else
event.setCancelled(true); event.setCancelled(true);
}
} }
} }
} }
@@ -11,11 +11,13 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerAttackPetListener implements Listener { public class PlayerAttackPetListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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) { if (event.getDamager() instanceof Player && event.getEntity() instanceof Tameable) {
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
@@ -23,25 +25,25 @@ public class PlayerAttackPetListener implements Listener {
if (tameable.getOwner() == null) if (tameable.getOwner() == null)
return; 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; return;
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
boolean damagerPvpState = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); boolean damagerPvpState = TogglePvp.getPlugin().getPlayerManager().getPlayerPvPState(damager);
if (!damagerPvpState) { if (!damagerPvpState) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
if (!smartCache.getPlayerData(tameable.getOwner().getUniqueId()).isPvpEnabled()) { if (!smartCache.getPlayerData(victim).isPvpEnabled()) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), tameable.getOwner().getUniqueId()); CombatTimer.refreshPlayersCombatTime(damager);
} }
} }
@@ -12,6 +12,8 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitPetWithProjectile implements 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 * Cancels damage done by projectiles to pets of players with pvp off
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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) { if (event.getEntity() instanceof Tameable && event.getDamager() instanceof Projectile) {
Projectile projectile = (Projectile) event.getDamager(); Projectile projectile = (Projectile) event.getDamager();
if (!(projectile.getShooter() instanceof Player)) if (!(projectile.getShooter() instanceof Player))
return; return;
Tameable victim = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
Player damager = (Player) projectile.getShooter();
if (victim.getOwner() == null || victim.getOwner() == damager) if (tameable.getOwner() == null)
return;
UUID damager = ((Player) projectile.getShooter()).getUniqueId();
UUID victim = tameable.getOwner().getUniqueId();
if (damager == victim)
return; return;
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); 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()); PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
return;
}
if (!smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
return; 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);
} }
} }
@@ -1,7 +1,7 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.SmartCache; import eu.endermite.togglepvp.players.PlayerManager;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
@@ -9,8 +9,7 @@ import org.bukkit.entity.Wolf;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PetAttackPlayerListener implements Listener { public class PetAttackPlayerListener implements Listener {
@@ -20,7 +19,7 @@ public class PetAttackPlayerListener implements Listener {
* This is to fix any inconsistancy with pet behavior * This is to fix any inconsistancy with pet behavior
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @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)) if (!(event.getDamager() instanceof Tameable))
return; return;
@@ -28,16 +27,12 @@ public class PetAttackPlayerListener implements Listener {
Tameable entity = (Tameable) event.getDamager(); Tameable entity = (Tameable) event.getDamager();
if (entity.getOwner() != null && event.getEntity() instanceof Player) { if (entity.getOwner() != null && event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity(); UUID victim = event.getEntity().getUniqueId();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); UUID damager = entity.getOwner().getUniqueId();
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { PlayerManager playerManager = TogglePvp.getPlugin().getPlayerManager();
event.setCancelled(true);
return; if (!playerManager.canDamage(damager, victim, false)) {
}
boolean damagerPvpEnabled = smartCache.getPlayerData(entity.getOwner().getUniqueId()).isPvpEnabled();
boolean victimPvpEnabled = smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled();
if (!victimPvpEnabled || !damagerPvpEnabled) {
if (entity instanceof Wolf) { if (entity instanceof Wolf) {
Wolf wolf = (Wolf) entity; Wolf wolf = (Wolf) entity;
wolf.setAngry(false); wolf.setAngry(false);
@@ -45,7 +40,7 @@ public class PetAttackPlayerListener implements Listener {
event.setCancelled(true); event.setCancelled(true);
return; return;
} }
CombatTimer.refreshPlayersCombatTime(entity.getOwner().getUniqueId(), victim.getUniqueId()); CombatTimer.refreshPlayersCombatTime(damager, victim);
} }
} }
@@ -1,17 +1,13 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerAttackListener implements Listener { public class PlayerAttackListener implements Listener {
@@ -25,28 +21,13 @@ public class PlayerAttackListener implements Listener {
Entity victimEntity = event.getEntity(); Entity victimEntity = event.getEntity();
if (damagerEntity instanceof Player && victimEntity instanceof Player) { if (damagerEntity instanceof Player && victimEntity instanceof Player) {
Player damager = (Player) damagerEntity; UUID damager = damagerEntity.getUniqueId();
Player victim = (Player) victimEntity; UUID victim = victimEntity.getUniqueId();
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); CombatTimer.refreshPlayersCombatTime(damager, victim);
else
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) {
event.setCancelled(true); 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());
} }
} }
@@ -1,10 +1,7 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.EnderCrystal; import org.bukkit.entity.EnderCrystal;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
@@ -16,8 +13,6 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import java.time.Instant;
import java.util.UUID; import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
@@ -32,34 +27,18 @@ public class PlayerHitByExplosionListener implements Listener {
if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) { if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) {
return; return;
} }
Player victim = (Player) event.getEntity(); UUID victim = event.getEntity().getUniqueId();
try { try {
UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString());
if (victim.getUniqueId().equals(damageruuid)) if (victim.equals(damager))
return; return;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
CombatTimer.refreshPlayersCombatTime(damager, victim);
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { else
event.setCancelled(true); event.setCancelled(true);
return;
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); } catch (NullPointerException | IndexOutOfBoundsException ignored) { }
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) {
}
} }
} }
@@ -1,16 +1,13 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Firework; import org.bukkit.entity.Firework;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitByFireworkListener implements Listener { public class PlayerHitByFireworkListener implements Listener {
@@ -18,32 +15,18 @@ public class PlayerHitByFireworkListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player) { if (event.getDamager() instanceof Firework && event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity(); UUID victim = event.getEntity().getUniqueId();
Firework firework = (Firework) event.getDamager(); Firework firework = (Firework) event.getDamager();
if (firework.getShooter() instanceof Player) { if (firework.getShooter() instanceof Player) {
Player damager = (Player) firework.getShooter(); UUID damager = ((Player) firework.getShooter()).getUniqueId();
if (damager == victim) { if (damager == victim) {
return; return;
} }
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
CombatTimer.refreshPlayersCombatTime(damager, victim);
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { else
event.setCancelled(true); 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());
} }
} }
} }
@@ -1,17 +1,13 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Projectile; import org.bukkit.entity.Projectile;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
import java.time.Instant;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitByProjectileListener implements Listener { public class PlayerHitByProjectileListener implements Listener {
@@ -25,33 +21,17 @@ public class PlayerHitByProjectileListener implements Listener {
if (event.getEntity() instanceof Player && event.getDamager() instanceof Projectile) { if (event.getEntity() instanceof Player && event.getDamager() instanceof Projectile) {
Projectile projectile = (Projectile) event.getDamager(); Projectile projectile = (Projectile) event.getDamager();
if (projectile.getShooter() instanceof Player) { if (projectile.getShooter() instanceof Player) {
Player damager = (Player) projectile.getShooter(); UUID damager = ((Player) projectile.getShooter()).getUniqueId();
Player victim = (Player) event.getEntity(); UUID victim = event.getEntity().getUniqueId();
// Ender pearls and other self-damage // Ender pearls and other self-damage
if (damager == victim) { if (damager == victim)
return; return;
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
CombatTimer.refreshPlayersCombatTime(damager, victim);
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { else
event.setCancelled(true); 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());
} }
} }
} }
@@ -1,20 +1,18 @@
package eu.endermite.togglepvp.listeners.player; package eu.endermite.togglepvp.listeners.player;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlayerHitBySplashPotionListener implements Listener { public class PlayerHitBySplashPotionListener implements Listener {
@@ -54,30 +52,16 @@ public class PlayerHitBySplashPotionListener implements Listener {
return; return;
for (Entity entity : event.getAffectedEntities()) { for (Entity entity : event.getAffectedEntities()) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player damager = (Player) event.getEntity().getShooter(); UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId();
Player victim = (Player) entity; UUID victim = entity.getUniqueId();
if (damager == victim) if (damager == victim)
continue; continue;
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true)) {
CombatTimer.refreshPlayersCombatTime(damager, victim);
if (Instant.now().getEpochSecond() < smartCache.getPlayerData(victim.getUniqueId()).getLoginTimestamp()) { } else {
event.setIntensity(victim, 0); event.setIntensity((LivingEntity) entity, 0);
continue;
} }
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());
} }
} }
} }
@@ -1,10 +1,8 @@
package eu.endermite.togglepvp.listeners.unspecific; package eu.endermite.togglepvp.listeners.unspecific;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.players.PlayerManager;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
@@ -13,6 +11,7 @@ import org.bukkit.event.Listener;
import org.bukkit.event.entity.AreaEffectCloudApplyEvent; import org.bukkit.event.entity.AreaEffectCloudApplyEvent;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
import java.util.Iterator; import java.util.Iterator;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class AreaEffectCloudApplyListener implements Listener { public class AreaEffectCloudApplyListener implements Listener {
@@ -36,47 +35,37 @@ public class AreaEffectCloudApplyListener implements Listener {
potionEffectType.equals(PotionEffectType.SLOW) || potionEffectType.equals(PotionEffectType.SLOW) ||
potionEffectType.equals(PotionEffectType.WITHER)) { potionEffectType.equals(PotionEffectType.WITHER)) {
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); PlayerManager playerManager = TogglePvp.getPlugin().getPlayerManager();
Iterator<LivingEntity> it = event.getAffectedEntities().iterator(); Iterator<LivingEntity> it = event.getAffectedEntities().iterator();
Player damager = (Player) event.getEntity().getSource(); UUID damager = ((Player) event.getEntity().getSource()).getUniqueId();
while(it.hasNext()) { while(it.hasNext()) {
LivingEntity entity = it.next(); LivingEntity entity = it.next();
if(entity instanceof Player) { if(entity instanceof Player) {
Player victim = (Player) entity; UUID victim = entity.getUniqueId();
if (damager == victim) if (damager == victim)
continue; continue;
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); if (playerManager.canDamage(damager, victim, true))
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { CombatTimer.refreshPlayersCombatTime(damager, victim);
else
it.remove(); 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) { } else if (entity instanceof Tameable) {
Tameable victim = (Tameable) entity; Tameable tameable = (Tameable) entity;
if (victim.getOwner() == null || victim.getOwner() == damager) {
return; if (tameable.getOwner() == null)
}
ConfigCache config = TogglePvp.getPlugin().getConfigCache();
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
it.remove();
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker());
continue; continue;
}
if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { UUID victim = tameable.getOwner().getUniqueId();
it.remove(); if (victim == damager)
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim());
continue; continue;
}
CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getOwner().getUniqueId()); if (playerManager.canDamage(damager, victim, true, false))
CombatTimer.refreshPlayersCombatTime(damager, victim);
else
it.remove();
} }
} }
} }
@@ -9,6 +9,7 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.weather.LightningStrikeEvent; import org.bukkit.event.weather.LightningStrikeEvent;
import org.bukkit.metadata.FixedMetadataValue; import org.bukkit.metadata.FixedMetadataValue;
import java.util.UUID;
/** /**
* Listen for lightning strikes and tag the trident spawned ones. * 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) { public void onPlayerLightningDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1) { if (event.getDamager() instanceof LightningStrike && event.getDamager().getMetadata("TRIDENT").size() >= 1) {
if (event.getEntity() instanceof Player) { if (event.getEntity() instanceof Player) {
Player victim = (Player) event.getEntity(); UUID victim = event.getEntity().getUniqueId();
if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim)) {
event.setCancelled(true);
return;
}
if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
} }
} else if (event.getEntity() instanceof Tameable) { } else if (event.getEntity() instanceof Tameable) {
@@ -1,62 +1,47 @@
package eu.endermite.togglepvp.listeners.unspecific; package eu.endermite.togglepvp.listeners.unspecific;
import eu.endermite.togglepvp.TogglePvp; 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.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class FishingListener implements Listener { public class FishingListener implements Listener {
ConfigCache config = TogglePvp.getPlugin().getConfigCache();
/** /**
* Prevents hooking players with disabled pvp with fishing rod * Prevents hooking players with disabled pvp with fishing rod
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onFish(org.bukkit.event.player.PlayerFishEvent event) { public void onFish(org.bukkit.event.player.PlayerFishEvent event) {
if (event.getCaught() instanceof Player) { if (event.getCaught() instanceof Player) {
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
Player victim = (Player) event.getCaught(); UUID victim = event.getCaught().getUniqueId();
if (damager == victim) { if (damager == victim)
return; return;
}
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { CombatTimer.refreshPlayersCombatTime(damager, victim);
else
event.setCancelled(true); 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) { } else if (event.getCaught() instanceof Tameable) {
Tameable victim = (Tameable) event.getCaught(); Tameable tameable = (Tameable) event.getCaught();
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
if (victim.getOwner() == null || victim.getOwner() == damager) { if (tameable.getOwner() == null)
return; return;
}
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache(); UUID victim = tameable.getOwner().getUniqueId();
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) {
if (damager == victim)
return;
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
CombatTimer.refreshPlayersCombatTime(damager, victim);
else
event.setCancelled(true); 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());
} }
} }
} }
@@ -2,10 +2,8 @@ package eu.endermite.togglepvp.listeners.unspecific;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.BoundingBoxUtil; import eu.endermite.togglepvp.util.BoundingBoxUtil;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -16,61 +14,60 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.util.BoundingBox; import org.bukkit.util.BoundingBox;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class LavaDumpAndIgniteListener implements Listener { public class LavaDumpAndIgniteListener implements Listener {
private ConfigCache config = TogglePvp.getPlugin().getConfigCache();
/** /**
* Prevents dumping lava and pufferfish bucket near players with pvp off * Prevents dumping lava and pufferfish bucket near players with pvp off
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onLavaDump(org.bukkit.event.player.PlayerBucketEmptyEvent event) { 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; return;
if (event.getBucket().equals(Material.LAVA_BUCKET) || event.getBucket().equals(Material.PUFFERFISH_BUCKET)) { if (event.getBucket().equals(Material.LAVA_BUCKET) || event.getBucket().equals(Material.PUFFERFISH_BUCKET)) {
Location location = event.getBlockClicked().getLocation(); Location location = event.getBlockClicked().getLocation();
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
double radius = config.getLava_and_fire_stopper_radius(); double radius = config.getLava_and_fire_stopper_radius();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; UUID victim = entity.getUniqueId();
if (victim != damager) { if (victim != damager) {
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim, damager)) {
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); event.setCancelled(true);
return; 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); event.setCancelled(true);
return;
}
CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId());
} }
} else if (entity instanceof Tameable) { } else if (entity instanceof Tameable) {
Tameable victim = (Tameable) entity; Tameable tameable = (Tameable) entity;
if (victim.getOwner() == null) { if (tameable.getOwner() == null) {
return; 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); event.setCancelled(true);
return; return;
} }
boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
if (!victimPvpEnabled) { CombatTimer.refreshPlayersCombatTime(damager, victim);
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); else
event.setCancelled(true); 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) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) { 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; return;
if (event.getPlayer() == null) if (event.getPlayer() == null)
return; return;
Location location = event.getBlock().getLocation(); Location location = event.getBlock().getLocation();
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
double radius = config.getLava_and_fire_stopper_radius(); double radius = config.getLava_and_fire_stopper_radius();
BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; UUID victim = entity.getUniqueId();
if (victim != damager) { if (victim == damager)
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { continue;
PluginMessages.sendActionBar(damager, config.getCannot_attack_attacker());
event.setCancelled(true); if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true))
return; CombatTimer.refreshPlayersCombatTime(damager, victim);
} else
if (!smartCache.getPlayerData(victim.getUniqueId()).isPvpEnabled()) { event.setCancelled(true);
PluginMessages.sendActionBar(damager, config.getCannot_attack_victim());
event.setCancelled(true);
return;
}
CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId());
}
} else if (entity instanceof Tameable) { } else if (entity instanceof Tameable) {
Tameable victim = (Tameable) entity; Tameable tameable = (Tameable) entity;
if (victim.getOwner() == null || victim.getOwner() == damager) { if (tameable.getOwner() == null) {
return; 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); 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());
} }
} }
@@ -21,6 +21,12 @@ public class LightningBlockIgniteListener implements Listener {
for (Entity entity : lightningStrike.getNearbyEntities(2,2,2)) { for (Entity entity : lightningStrike.getNearbyEntities(2,2,2)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player victim = (Player) entity; Player victim = (Player) entity;
if (TogglePvp.getPlugin().getPlayerManager().hasLoginProtection(victim.getUniqueId())) {
event.setCancelled(true);
return;
}
if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) { if (!TogglePvp.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) {
event.setCancelled(true); event.setCancelled(true);
return; return;
@@ -2,10 +2,8 @@ package eu.endermite.togglepvp.listeners.unspecific;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache; import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.players.SmartCache;
import eu.endermite.togglepvp.util.BoundingBoxUtil; import eu.endermite.togglepvp.util.BoundingBoxUtil;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
@@ -16,6 +14,8 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.util.BoundingBox; import org.bukkit.util.BoundingBox;
import java.util.UUID;
@eu.endermite.togglepvp.util.Listener @eu.endermite.togglepvp.util.Listener
public class PlaceWitherRoseListener implements Listener { public class PlaceWitherRoseListener implements Listener {
@@ -23,7 +23,6 @@ public class PlaceWitherRoseListener implements Listener {
public void onPlayerWitherRosePlace(org.bukkit.event.block.BlockPlaceEvent event) { public void onPlayerWitherRosePlace(org.bukkit.event.block.BlockPlaceEvent event) {
ConfigCache config = TogglePvp.getPlugin().getConfigCache(); ConfigCache config = TogglePvp.getPlugin().getConfigCache();
SmartCache smartCache = TogglePvp.getPlugin().getSmartCache();
if (!config.isLava_and_fire_stopper_enabled()) if (!config.isLava_and_fire_stopper_enabled())
return; return;
@@ -34,38 +33,29 @@ public class PlaceWitherRoseListener implements Listener {
BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius);
for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) {
if (entity instanceof Player) { if (entity instanceof Player) {
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
Player victim = (Player) entity; UUID victim = entity.getUniqueId();
if (victim == damager) if (victim == damager)
return; 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); 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) { } else if (entity instanceof Tameable) {
Tameable victim = (Tameable) entity; Tameable tameable = (Tameable) entity;
Player damager = event.getPlayer(); UUID damager = event.getPlayer().getUniqueId();
if (victim.getOwner() == null || victim.getOwner() == damager) { if (tameable.getOwner() == null)
return; return;
}
if (!smartCache.getPlayerData(damager.getUniqueId()).isPvpEnabled()) { UUID victim = tameable.getOwner().getUniqueId();
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); if (victim == damager)
return;
if (TogglePvp.getPlugin().getPlayerManager().canDamage(damager, victim, true, false))
CombatTimer.refreshPlayersCombatTime(damager, victim);
else
event.setCancelled(true); 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());
} }
} }
} }
@@ -1,12 +1,14 @@
package eu.endermite.togglepvp.players; package eu.endermite.togglepvp.players;
import eu.endermite.togglepvp.TogglePvp; import eu.endermite.togglepvp.TogglePvp;
import eu.endermite.togglepvp.config.ConfigCache;
import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.CombatTimer;
import eu.endermite.togglepvp.util.PluginMessages; import eu.endermite.togglepvp.util.PluginMessages;
import lombok.Getter; import lombok.Getter;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import java.time.Instant;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.UUID; import java.util.UUID;
@@ -46,7 +48,8 @@ public class PlayerManager {
public void refreshPlayersCombatTime(UUID uuid) { public void refreshPlayersCombatTime(UUID uuid) {
try { try {
playerList.get(uuid).refreshCombatTime(); playerList.get(uuid).refreshCombatTime();
} catch (Exception ignored) { } } catch (Exception ignored) {
}
} }
public PlayerData getPlayer(UUID uuid) { public PlayerData getPlayer(UUID uuid) {
@@ -75,4 +78,49 @@ public class PlayerManager {
return true; 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;
}
} }