diff --git a/pom.xml b/pom.xml index ddb5607..ffd8bcd 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ me.youhavetrouble PreventStabby - 1.4 + 1.5 jar PreventStabby diff --git a/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java b/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java index 47417f8..f71047a 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java +++ b/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java @@ -65,6 +65,26 @@ public class PreventStabbyAPI { return PreventStabby.getPlugin().getPlayerManager().canDamage(attacker.getUniqueId(), victim.getUniqueId(), sendDenyMessage); } + /** + * Checks if player can be damaged by another. Providing UUID of entity other than player may result in exceptions + * @param attackerUuid Attacker's UUID + * @param victimUuid Victim's UUID + * @return True if victim can be attacked by attacker, false if not + */ + public static boolean canDamage(UUID attackerUuid, UUID victimUuid) { + return PreventStabby.getPlugin().getPlayerManager().canDamage(attackerUuid, victimUuid, false); + } + + /** + * Checks if player can be damaged by another. + * @param attacker Attacker + * @param victim Victim + * @return True if victim can be attacked by attacker, false if not + */ + public static boolean canDamage(Player attacker, Player victim) { + return PreventStabby.getPlugin().getPlayerManager().canDamage(attacker.getUniqueId(), victim.getUniqueId(), false); + } + /** * Checks if player has login protection. * @param uuid UUID of player to check diff --git a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java index 2fcd5a4..5d058fd 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java +++ b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java @@ -115,7 +115,7 @@ public class ConfigCache { if (block_commands_in_combat) { this.combatBlockedCommands.addAll(config.getStringList("settings.block_in_combat.block_commands.commands")); } - this.block_teleports_in_combat = config.getBoolean("settings.block_in_combat.block_teleports", true); + this.block_teleports_in_combat = config.getBoolean("settings.block_in_combat.block_teleports", false); this.cache_time = config.getLong("settings.cache_time", 30L); diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java index bda99a7..6920a7c 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java @@ -20,16 +20,16 @@ public class PetTargettingPlayerListener implements Listener { public void onPetTargetPlayer(org.bukkit.event.entity.EntityTargetEvent event) { if (!(event.getEntity() instanceof Tameable)) return; Tameable entity = (Tameable) event.getEntity(); - if (entity.getOwner() == null) return; + if (!(entity.getOwner() instanceof Player)) return; + if (!(entity.getTarget() instanceof Player)) return; - if (event.getTarget() instanceof Player) { - UUID damager = entity.getOwner().getUniqueId(); - UUID victim = event.getTarget().getUniqueId(); + UUID damager = entity.getOwner().getUniqueId(); + UUID victim = event.getTarget().getUniqueId(); + + if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) + CombatTimer.refreshPlayersCombatTime(damager, victim); + else + event.setCancelled(true); - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } } } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java index 88e80f8..dc048b5 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java @@ -12,14 +12,13 @@ import org.bukkit.entity.Player; import org.bukkit.scheduler.BukkitTask; import java.time.Instant; -import java.util.HashMap; -import java.util.Iterator; import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; public class PlayerManager { @Getter - HashMap playerList = new HashMap<>(); + ConcurrentHashMap playerList = new ConcurrentHashMap<>(); public final BukkitTask combatTrackerTask; @@ -30,9 +29,7 @@ public class PlayerManager { } combatTrackerTask = Bukkit.getScheduler().runTaskTimerAsynchronously(PreventStabby.getPlugin(), () -> { - Iterator iterator = playerList.values().iterator(); - while (iterator.hasNext()) { - PlayerData playerData = iterator.next(); + for (PlayerData playerData : playerList.values()) { UUID uuid = playerData.getPlayerUuid(); if (!CombatTimer.isInCombat(uuid)) { if (playerData.getLastCombatCheck()) { @@ -119,7 +116,8 @@ public class PlayerManager { if (!smartCache.getPlayerData(attacker).isPvpEnabled()) { Player attackerPlayer = Bukkit.getPlayer(attacker); - if (PreventStabby.worldGuardHookEnabled() && WorldGuardHook.isPlayerForcedToPvp(attackerPlayer)) return true; + if (PreventStabby.worldGuardHookEnabled() && attackerPlayer != null && WorldGuardHook.isPlayerForcedToPvp(attackerPlayer)) + return true; if (sendDenyMessage) { ConfigCache config = PreventStabby.getPlugin().getConfigCache(); @@ -129,7 +127,8 @@ public class PlayerManager { } if (!smartCache.getPlayerData(victim).isPvpEnabled()) { Player victimPlayer = Bukkit.getPlayer(victim); - if (PreventStabby.worldGuardHookEnabled() && WorldGuardHook.isPlayerForcedToPvp(victimPlayer)) return true; + if (PreventStabby.worldGuardHookEnabled() && victimPlayer != null && WorldGuardHook.isPlayerForcedToPvp(victimPlayer)) + return true; if (sendDenyMessage) { ConfigCache config = PreventStabby.getPlugin().getConfigCache(); diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java index a75c6f4..0474b5a 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java @@ -18,16 +18,18 @@ public class PluginMessages { } public static void sendMessage(Player player, String message) { - String parsedMessage = message; if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { - parsedMessage = PlaceholderAPI.setPlaceholders(player, parsedMessage); + message = PlaceholderAPI.setPlaceholders(player, message); } - parsedMessage = ChatColor.translateAlternateColorCodes('&', parsedMessage); - player.sendMessage(parsedMessage); + message = ChatColor.translateAlternateColorCodes('&', message); + player.sendMessage(message); } public static void sendActionBar(Player player, String message) { // TODO use adventure + if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + message = PlaceholderAPI.setPlaceholders(player, message); + } BaseComponent[] component = TextComponent.fromLegacyText(parseMessage(message)); player.spigot().sendMessage(ChatMessageType.ACTION_BAR, component); } @@ -45,6 +47,9 @@ public class PluginMessages { public static void broadcastMessage(Player player, String message) { message = parsePlayerName(player, message); + if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + message = PlaceholderAPI.setPlaceholders(player, message); + } message = parseMessage(message); BaseComponent[] component = TextComponent.fromLegacyText(parseMessage(message)); Bukkit.spigot().broadcast(component);