Compare commits

...

11 Commits

11 changed files with 113 additions and 68 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>me.youhavetrouble</groupId> <groupId>me.youhavetrouble</groupId>
<artifactId>PreventStabby</artifactId> <artifactId>PreventStabby</artifactId>
<version>1.10.0</version> <version>1.11.1</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<name>PreventStabby</name> <name>PreventStabby</name>
@@ -45,4 +45,9 @@ public class PlayerEnterCombatEvent extends Event implements Cancellable {
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@NotNull
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }
@@ -45,4 +45,9 @@ public class PlayerLeaveCombatEvent extends Event implements Cancellable {
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@NotNull
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }
@@ -59,4 +59,9 @@ public class PlayerTogglePvpEvent extends Event {
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }
@NotNull
public static HandlerList getHandlerList() {
return HANDLERS;
}
} }
@@ -3,6 +3,7 @@ package me.youhavetrouble.preventstabby.listeners.pets;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.players.SmartCache; import me.youhavetrouble.preventstabby.players.SmartCache;
import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
import me.youhavetrouble.preventstabby.util.PvpState;
import me.youhavetrouble.preventstabby.util.Util; import me.youhavetrouble.preventstabby.util.Util;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
@@ -14,8 +15,12 @@ import org.bukkit.event.Listener;
@PreventStabbyListener @PreventStabbyListener
public class PetTargettingMountListener implements Listener { public class PetTargettingMountListener implements Listener {
/**
* TODO - this needs to pass canDamage() in the future, for now it just checks forced pvp state directly
*/
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onWolfAttackMount(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onWolfAttackMount(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (PreventStabby.getPlugin().getPlayerManager().getForcedPvpState() == PvpState.ENABLED) return;
if (!(event.getDamager() instanceof Tameable) || event.getEntity().getPassengers().isEmpty()) return; if (!(event.getDamager() instanceof Tameable) || event.getEntity().getPassengers().isEmpty()) return;
Tameable damager = (Tameable) event.getDamager(); Tameable damager = (Tameable) event.getDamager();
Entity victim = event.getEntity(); Entity victim = event.getEntity();
@@ -1,7 +1,9 @@
package me.youhavetrouble.preventstabby.listeners.pets; package me.youhavetrouble.preventstabby.listeners.pets;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.config.ConfigCache;
import me.youhavetrouble.preventstabby.players.SmartCache; import me.youhavetrouble.preventstabby.players.SmartCache;
import me.youhavetrouble.preventstabby.util.CombatTimer;
import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
import org.bukkit.entity.Tameable; import org.bukkit.entity.Tameable;
import org.bukkit.entity.Wolf; import org.bukkit.entity.Wolf;
@@ -14,23 +16,21 @@ public class PetTargettingPetListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onWolfAttackWolf(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onWolfAttackWolf(org.bukkit.event.entity.EntityDamageByEntityEvent event) {
if (event.getDamager() instanceof Tameable && event.getEntity() instanceof Tameable) { if (!(event.getDamager() instanceof Tameable) || !(event.getEntity() instanceof Tameable)) return;
Tameable damager = (Tameable) event.getDamager(); Tameable damager = (Tameable) event.getDamager();
Tameable victim = (Tameable) event.getEntity(); Tameable victim = (Tameable) event.getEntity();
if (damager.getOwner() == null || victim.getOwner() == null) return; if (damager.getOwner() == null || victim.getOwner() == null) return;
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache(); if (!PreventStabby.getPlugin().getPlayerManager()
boolean damagerPvpEnabled = smartCache.getPlayerData(damager.getOwner().getUniqueId()).isPvpEnabled(); .canDamage(
boolean victimPvpEnabled = smartCache.getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled(); damager.getUniqueId(),
victim.getUniqueId(),
if (!victimPvpEnabled || !damagerPvpEnabled) { false,
if (damager instanceof Wolf) { false
Wolf wolf = (Wolf) damager; ))
wolf.setAngry(false);
}
event.setCancelled(true); event.setCancelled(true);
}
}
} }
} }
@@ -8,6 +8,7 @@ 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 org.bukkit.event.entity.EntityTargetEvent;
import java.util.UUID; import java.util.UUID;
@@ -17,7 +18,7 @@ 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 onPetTargetPlayer(org.bukkit.event.entity.EntityTargetEvent event) { public void onPetTargetPlayer(EntityTargetEvent event) {
if (!(event.getEntity() instanceof Tameable)) return; if (!(event.getEntity() instanceof Tameable)) return;
Tameable entity = (Tameable) event.getEntity(); Tameable entity = (Tameable) event.getEntity();
if (!(entity.getOwner() instanceof Player)) return; if (!(entity.getOwner() instanceof Player)) return;
@@ -26,8 +27,15 @@ public class PetTargettingPlayerListener implements Listener {
UUID damager = entity.getOwner().getUniqueId(); UUID damager = entity.getOwner().getUniqueId();
UUID victim = event.getTarget().getUniqueId(); UUID victim = event.getTarget().getUniqueId();
if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) boolean tempting = event.getReason().equals(EntityTargetEvent.TargetReason.TEMPT);
if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, !tempting, false)) {
if (tempting) {
event.setCancelled(true);
return;
}
CombatTimer.refreshPlayersCombatTime(damager, victim); CombatTimer.refreshPlayersCombatTime(damager, victim);
}
else else
event.setCancelled(true); event.setCancelled(true);
@@ -2,15 +2,14 @@ package me.youhavetrouble.preventstabby.listeners.pets;
import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.config.ConfigCache; import me.youhavetrouble.preventstabby.config.ConfigCache;
import me.youhavetrouble.preventstabby.players.SmartCache;
import me.youhavetrouble.preventstabby.util.CombatTimer; import me.youhavetrouble.preventstabby.util.CombatTimer;
import me.youhavetrouble.preventstabby.util.PluginMessages;
import me.youhavetrouble.preventstabby.util.PreventStabbyListener; import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
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 org.bukkit.event.entity.EntityDamageByEntityEvent;
import java.util.UUID; import java.util.UUID;
@@ -18,10 +17,10 @@ import java.util.UUID;
public class PlayerAttackPetListener implements Listener { public class PlayerAttackPetListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerAttackPet(org.bukkit.event.entity.EntityDamageByEntityEvent event) { public void onPlayerAttackPet(EntityDamageByEntityEvent event) {
if (!(event.getDamager() instanceof Player) || !(event.getEntity() instanceof Tameable)) return;
if (event.getDamager() instanceof Player && event.getEntity() instanceof Tameable) {
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache();
Tameable tameable = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
if (tameable.getOwner() == null) return; if (tameable.getOwner() == null) return;
@@ -31,19 +30,18 @@ public class PlayerAttackPetListener implements Listener {
if (damager.equals(victim)) return; if (damager.equals(victim)) return;
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); ConfigCache config = PreventStabby.getPlugin().getConfigCache();
boolean damagerPvpState = PreventStabby.getPlugin().getPlayerManager().getPlayerPvPState(damager);
if (!damagerPvpState) { if (PreventStabby.getPlugin().getPlayerManager()
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); .canDamage(
event.setCancelled(true); damager,
return; victim,
} config.getCannot_attack_pets_attacker(),
if (!smartCache.getPlayerData(victim).isPvpEnabled()) { config.getCannot_attack_pets_victim(),
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); false
event.setCancelled(true); ))
return;
}
CombatTimer.refreshPlayersCombatTime(damager); CombatTimer.refreshPlayersCombatTime(damager);
else
event.setCancelled(true);
} }
} }
}
@@ -23,7 +23,7 @@ public class PlayerHitPetWithProjectileListener implements Listener {
*/ */
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void onPlayerHitPetWithProjectile(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)) return;
Projectile projectile = (Projectile) event.getDamager(); Projectile projectile = (Projectile) event.getDamager();
if (!(projectile.getShooter() instanceof Player)) return; if (!(projectile.getShooter() instanceof Player)) return;
Tameable tameable = (Tameable) event.getEntity(); Tameable tameable = (Tameable) event.getEntity();
@@ -35,20 +35,19 @@ public class PlayerHitPetWithProjectileListener implements Listener {
if (damager.equals(victim)) return; if (damager.equals(victim)) return;
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); ConfigCache config = PreventStabby.getPlugin().getConfigCache();
SmartCache smartCache = PreventStabby.getPlugin().getSmartCache();
if (!smartCache.getPlayerData(damager).isPvpEnabled()) { if (PreventStabby.getPlugin().getPlayerManager()
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); .canDamage(
event.setCancelled(true); damager,
return; victim,
} config.getCannot_attack_pets_attacker(),
if (!smartCache.getPlayerData(victim).isPvpEnabled()) { config.getCannot_attack_pets_victim(),
PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_victim()); false
event.setCancelled(true); ))
return;
}
CombatTimer.refreshPlayersCombatTime(damager); CombatTimer.refreshPlayersCombatTime(damager);
else
event.setCancelled(true);
} }
} }
}
@@ -12,6 +12,7 @@ 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 javax.annotation.Nullable;
import java.time.Instant; import java.time.Instant;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@@ -142,6 +143,22 @@ public class PlayerManager {
* @return Whenever attacker can harm the victim. * @return Whenever attacker can harm the victim.
*/ */
public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) { public boolean canDamage(UUID attacker, UUID victim, boolean sendDenyMessage, boolean checkVictimSpawnProtection) {
ConfigCache config = PreventStabby.getPlugin().getConfigCache();
String attackerMessage = sendDenyMessage ? config.getCannot_attack_attacker() : null;
String victimMessage = sendDenyMessage ? config.getCannot_attack_victim() : null;
return canDamage(attacker, victim, attackerMessage, victimMessage, checkVictimSpawnProtection);
}
/**
* Check if attacker can harm the victim.
* @param attacker Atacker's UUID.
* @param victim Victim's UUID.
* @param attackerDenyMessage Message that action was denied to the attacker.
* @param victimDenyMessage Message that action was denied to the victim.
* @param checkVictimSpawnProtection Should teleport and spawn protections be taken into account?
* @return Whenever attacker can harm the victim.
*/
public boolean canDamage(UUID attacker, UUID victim, @Nullable String attackerDenyMessage, @Nullable String victimDenyMessage, boolean checkVictimSpawnProtection) {
if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) return false; if (hasLoginProtection(attacker) || hasTeleportProtection(attacker)) return false;
if (checkVictimSpawnProtection && hasLoginProtection(victim)) return false; if (checkVictimSpawnProtection && hasLoginProtection(victim)) return false;
@@ -165,9 +182,8 @@ public class PlayerManager {
if (PreventStabby.worldGuardHookEnabled() && attackerPlayer != null && WorldGuardHook.isPlayerForcedToPvp(attackerPlayer)) if (PreventStabby.worldGuardHookEnabled() && attackerPlayer != null && WorldGuardHook.isPlayerForcedToPvp(attackerPlayer))
return true; return true;
if (sendDenyMessage) { if (attackerDenyMessage != null) {
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); PluginMessages.sendActionBar(attacker, attackerDenyMessage);
PluginMessages.sendActionBar(attacker, config.getCannot_attack_attacker());
} }
return false; return false;
} }
@@ -176,7 +192,7 @@ public class PlayerManager {
if (PreventStabby.worldGuardHookEnabled() && victimPlayer != null && WorldGuardHook.isPlayerForcedToPvp(victimPlayer)) if (PreventStabby.worldGuardHookEnabled() && victimPlayer != null && WorldGuardHook.isPlayerForcedToPvp(victimPlayer))
return true; return true;
if (sendDenyMessage) { if (victimDenyMessage != null) {
ConfigCache config = PreventStabby.getPlugin().getConfigCache(); ConfigCache config = PreventStabby.getPlugin().getConfigCache();
PluginMessages.sendActionBar(attacker, config.getCannot_attack_victim()); PluginMessages.sendActionBar(attacker, config.getCannot_attack_victim());
} }
@@ -24,7 +24,6 @@ public class PluginMessages {
} }
public static Component parseMessage(CommandSender sender,String message) { public static Component parseMessage(CommandSender sender,String message) {
if (sender instanceof Player && isPlaceholderApiEnabled()) { if (sender instanceof Player && isPlaceholderApiEnabled()) {
Player player = (Player) sender; Player player = (Player) sender;
message = PlaceholderAPI.setPlaceholders(player, message); message = PlaceholderAPI.setPlaceholders(player, message);
@@ -37,15 +36,18 @@ public class PluginMessages {
} }
public static void sendMessage(CommandSender sender, String message) { public static void sendMessage(CommandSender sender, String message) {
if ("".equals(message)) return;
audiences.sender(sender).sendMessage(parseMessage(sender, message)); audiences.sender(sender).sendMessage(parseMessage(sender, message));
} }
public static void sendActionBar(Player player, String message) { public static void sendActionBar(Player player, String message) {
if ("".equals(message)) return;
Component parsedMessage = parseMessage(player, message); Component parsedMessage = parseMessage(player, message);
audiences.player(player).sendActionBar(parsedMessage); audiences.player(player).sendActionBar(parsedMessage);
} }
public static void sendActionBar(UUID uuid, String message) { public static void sendActionBar(UUID uuid, String message) {
if ("".equals(message)) return;
Player player = Bukkit.getPlayer(uuid); Player player = Bukkit.getPlayer(uuid);
if (player == null) return; if (player == null) return;
sendActionBar(player, message); sendActionBar(player, message);
@@ -57,6 +59,7 @@ public class PluginMessages {
} }
public static void broadcastMessage(Player player, String message) { public static void broadcastMessage(Player player, String message) {
if ("".equals(message)) return;
message = parsePlayerName(player, message); message = parsePlayerName(player, message);
if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
message = PlaceholderAPI.setPlaceholders(player, message); message = PlaceholderAPI.setPlaceholders(player, message);
@@ -65,6 +68,7 @@ public class PluginMessages {
} }
public static void broadcastMessage(String message) { public static void broadcastMessage(String message) {
if ("".equals(message)) return;
audiences.all().sendMessage(parseMessage(message)); audiences.all().sendMessage(parseMessage(message));
} }