diff --git a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java index 3998d41..2f869e8 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java +++ b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java @@ -23,7 +23,6 @@ public final class PreventStabby extends JavaPlugin { @Override public void onEnable() { plugin = this; - Util.initData(); reloadPluginConfig(); playerManager = new PlayerManager(this); damageCheck = new DamageCheck(this); diff --git a/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java b/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java index 5435407..040adb8 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java +++ b/src/main/java/me/youhavetrouble/preventstabby/api/PreventStabbyAPI.java @@ -1,13 +1,7 @@ package me.youhavetrouble.preventstabby.api; import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerData; -import me.youhavetrouble.preventstabby.util.CombatTimer; import me.youhavetrouble.preventstabby.util.PvpState; -import org.bukkit.entity.Player; - -import javax.annotation.Nullable; -import java.util.UUID; public class PreventStabbyAPI { diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/GlobalToggleCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/GlobalToggleCommand.java index 43adddf..530e325 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/GlobalToggleCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/GlobalToggleCommand.java @@ -13,7 +13,7 @@ public class GlobalToggleCommand { public static void globalToggle(CommandSender sender, String[] args) { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { if (!PreventStabbyPermission.COMMAND_GLOBAL_TOGGLE.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } @@ -27,15 +27,15 @@ public class GlobalToggleCommand { switch (pvpState) { case ENABLED: PreventStabby.getPlugin().getPlayerManager().setForcedPvpState(PvpState.ENABLED); - PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().getForce_pvp_on()); + PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().force_pvp_on); break; case DISABLED: PreventStabby.getPlugin().getPlayerManager().setForcedPvpState(PvpState.DISABLED); - PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().getForce_pvp_off()); + PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().force_pvp_off); break; case NONE: PreventStabby.getPlugin().getPlayerManager().setForcedPvpState(PvpState.NONE); - PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().getForce_pvp_none()); + PluginMessages.broadcastMessage(PreventStabby.getPlugin().getConfigCache().force_pvp_none); break; default: PluginMessages.sendMessage(sender, "Try /pvp override "); diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java index d6ca936..4a6ae42 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java @@ -12,7 +12,7 @@ public class HelpCommand { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { if (!PreventStabbyPermission.COMMAND_HELP.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } @@ -28,7 +28,7 @@ public class HelpCommand { .append(Component.newline()) .append(PluginMessages.MINIMESSAGE.deserialize("/pvp toggle - toggles PvP status")); } - PreventStabby.getAudiences().sender(sender).sendMessage(helpComponent); + sender.sendMessage(helpComponent); }); } diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/MainCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/MainCommand.java index 638250b..754794a 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/MainCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/MainCommand.java @@ -33,7 +33,7 @@ public class MainCommand implements TabExecutor { @Override public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { if (!sender.hasPermission("preventstabby.command")) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return true; } if (args.length == 0) { @@ -63,7 +63,7 @@ public class MainCommand implements TabExecutor { GlobalToggleCommand.globalToggle(sender, args); break; default: - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_such_command()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_such_command); break; } return true; diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java index c133d2e..9506722 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java @@ -3,7 +3,7 @@ package me.youhavetrouble.preventstabby.commands; import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.api.event.PlayerTogglePvpEvent; import me.youhavetrouble.preventstabby.config.PreventStabbyPermission; -import me.youhavetrouble.preventstabby.util.CombatTimer; +import me.youhavetrouble.preventstabby.players.PlayerManager; import me.youhavetrouble.preventstabby.util.PluginMessages; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; @@ -11,46 +11,47 @@ import org.bukkit.entity.Player; public class PvpToggleCommand { + private static final PlayerManager playerManager = PreventStabby.getPlugin().getPlayerManager(); + public static void toggle(CommandSender sender, String[] args) { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { if (!PreventStabbyPermission.COMMAND_TOGGLE.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } if (args.length <= 1) { - if (!(sender instanceof Player)) { + if (!(sender instanceof Player player)) { PluginMessages.sendMessage(sender, "Try /pvp toggle "); return; } - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } - boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); - PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, true); - Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { - if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { - Bukkit.getPluginManager().callEvent(toggleEvent); - } - if (!toggleEvent.isSendMessage()) return; - if (currentState) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); - } else { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); - } - + playerManager.togglePlayerPvpState(player.getUniqueId()).thenAccept(newState -> { + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, newState, true); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { + Bukkit.getPluginManager().callEvent(toggleEvent); + } + if (!toggleEvent.isSendMessage()) return; + if (newState) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().pvp_enabled); + } else { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().pvp_disabled); + } + }); }); + } else if (args.length == 2) { if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } - if (sender instanceof Player) { - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (sender instanceof Player player) { + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } } @@ -60,67 +61,65 @@ public class PvpToggleCommand { PluginMessages.sendMessage(sender, "Player offline."); return; } - boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); - PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, currentState, false); - Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { - if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { - Bukkit.getPluginManager().callEvent(toggleEvent); - } - if (toggleEvent.isSendMessage()) { - if (currentState) { - PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); - } else { - PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + playerManager.togglePlayerPvpState(player.getUniqueId()).thenAccept(newState -> { + PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, newState, false); + Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { + if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { + Bukkit.getPluginManager().callEvent(toggleEvent); } - } + if (toggleEvent.isSendMessage()) { + if (newState) { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().pvp_enabled); + } else { + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().pvp_disabled); + } + } + String message; + if (newState) { + message = PreventStabby.getPlugin().getConfigCache().pvp_enabled_other; + } else { + message = PreventStabby.getPlugin().getConfigCache().pvp_disabled_other; + } + PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); + }); }); - - String message; - if (currentState) { - message = PreventStabby.getPlugin().getConfigCache().getPvp_enabled_other(); - } else { - message = PreventStabby.getPlugin().getConfigCache().getPvp_disabled_other(); - } - PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); } }); } public static void enable(CommandSender sender, String[] args) { if (!PreventStabbyPermission.COMMAND_TOGGLE.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } if (args.length == 1) { - if (!(sender instanceof Player)) { + if (!(sender instanceof Player player)) { PluginMessages.sendMessage(sender, "Try /pvp enable "); return; } - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } - PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); + playerManager.setPlayerPvpState(player.getUniqueId(), true); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, true); Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { Bukkit.getPluginManager().callEvent(toggleEvent); } if (toggleEvent.isSendMessage()) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().pvp_enabled); } }); } else if (args.length == 2) { if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } - if (sender instanceof Player) { - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (sender instanceof Player player) { + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } } @@ -129,16 +128,16 @@ public class PvpToggleCommand { PluginMessages.sendMessage(sender, "Player offline."); return; } - String message = PreventStabby.getPlugin().getConfigCache().getPvp_enabled_other(); + String message = PreventStabby.getPlugin().getConfigCache().pvp_enabled_other; PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); - PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); + playerManager.setPlayerPvpState(player.getUniqueId(), true); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, true, false); Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { Bukkit.getPluginManager().callEvent(toggleEvent); } if (toggleEvent.isSendMessage()) { - PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_enabled()); + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().pvp_enabled); } }); } else { @@ -152,24 +151,23 @@ public class PvpToggleCommand { public static void disable(CommandSender sender, String[] args) { if (!PreventStabbyPermission.COMMAND_TOGGLE.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } if (args.length == 1) { - if (sender instanceof Player) { - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (sender instanceof Player player) { + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } - PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); + playerManager.setPlayerPvpState(player.getUniqueId(), false); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, true); Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { Bukkit.getPluginManager().callEvent(toggleEvent); } if (toggleEvent.isSendMessage()) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().pvp_disabled); } }); } else { @@ -177,13 +175,12 @@ public class PvpToggleCommand { } } else if (args.length == 2) { if (!PreventStabbyPermission.COMMAND_TOGGLE_OTHERS.doesCommandSenderHave(sender)) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } - if (sender instanceof Player) { - Player player = (Player) sender; - if (CombatTimer.isInCombat(player.getUniqueId())) { - PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); + if (sender instanceof Player player) { + if (playerManager.getPlayer(player.getUniqueId()).isInCombat()) { + PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().cant_do_that_during_combat); return; } } @@ -192,16 +189,16 @@ public class PvpToggleCommand { PluginMessages.sendMessage(sender, "Player offline."); return; } - String message = PreventStabby.getPlugin().getConfigCache().getPvp_disabled_other(); + String message = PreventStabby.getPlugin().getConfigCache().pvp_disabled_other; PluginMessages.sendMessage(sender, PluginMessages.parsePlayerName(player, message)); - PreventStabby.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); + playerManager.setPlayerPvpState(player.getUniqueId(), false); PlayerTogglePvpEvent toggleEvent = new PlayerTogglePvpEvent(player, false, false); Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { if (PlayerTogglePvpEvent.getHandlerList().getRegisteredListeners().length > 0) { Bukkit.getPluginManager().callEvent(toggleEvent); } if (toggleEvent.isSendMessage()) { - PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().getPvp_disabled()); + PluginMessages.sendMessage(player, PreventStabby.getPlugin().getConfigCache().pvp_disabled); } }); diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/ReloadCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/ReloadCommand.java index 30e5385..0e776b4 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/commands/ReloadCommand.java +++ b/src/main/java/me/youhavetrouble/preventstabby/commands/ReloadCommand.java @@ -11,7 +11,7 @@ public class ReloadCommand { public static void reload(CommandSender sender) { Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> { if (!PreventStabbyPermission.COMMAND_RELOAD.doesCommandSenderHave(sender)) { - PluginMessages.parseMessage(sender, PreventStabby.getPlugin().getConfigCache().getNo_permission()); + PluginMessages.parseMessage(sender, PreventStabby.getPlugin().getConfigCache().no_permission); return; } PreventStabby.getPlugin().reloadPluginConfig(sender); diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlaceholderApiHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlaceholderApiHook.java index fd7c780..1856420 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlaceholderApiHook.java +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlaceholderApiHook.java @@ -36,40 +36,39 @@ public class PlaceholderApiHook extends PlaceholderExpansion { @Override public String onRequest(OfflinePlayer player, String params) { - switch (params) { - case "pvp": - if (!player.isOnline()) return String.valueOf(false); - return String.valueOf(plugin.getPlayerManager().getPlayer(player.getUniqueId()).isPvpEnabled()); - case "combat_time": - return getCombatTimePlaceholder(player.getUniqueId(), player); - case "in_combat": - if (!player.isOnline()) return String.valueOf(false); - return String.valueOf(plugin.getPlayerManager().getPlayer(player.getUniqueId()).isInCombat()); - case "pvp_forced": - switch (PreventStabby.getPlugin().getPlayerManager().getForcedPvpState()) { - case NONE: - return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_pvp_forced_none())); - case ENABLED: - return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_pvp_forced_true())); - case DISABLED: - return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_pvp_forced_false())); - } - default: - return null; - } + return switch (params) { + case "pvp" -> { + if (!player.isOnline()) yield String.valueOf(false); + yield String.valueOf(plugin.getPlayerManager().getPlayer(player.getUniqueId()).isPvpEnabled()); + } + case "combat_time" -> getCombatTimePlaceholder(player.getUniqueId(), player); + case "in_combat" -> { + if (!player.isOnline()) yield String.valueOf(false); + yield String.valueOf(plugin.getPlayerManager().getPlayer(player.getUniqueId()).isInCombat()); + } + case "pvp_forced" -> switch (PreventStabby.getPlugin().getPlayerManager().getForcedPvpState()) { + case NONE -> + legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().placeholder_pvp_forced_none)); + case ENABLED -> + legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().placeholder_pvp_forced_true)); + case DISABLED -> + legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().placeholder_pvp_forced_false)); + }; + default -> null; + }; } private String getCombatTimePlaceholder(UUID uuid, OfflinePlayer player) { if (!player.isOnline()) { - return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_not_in_combat())); + return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().placeholder_not_in_combat)); } - long seconds = plugin.getPlayerManager().getPlayer(uuid).getCombatTime(); + long seconds = plugin.getPlayerManager().getPlayer(uuid).getSecondsLeftUntilCombatEnd(); if (seconds > 0) { - String msg = plugin.getConfigCache().getPlaceholder_combat_time(); + String msg = plugin.getConfigCache().placeholder_combat_time; msg = msg.replaceAll("%time%", String.valueOf(seconds)); return legacyComponentSerializer.serialize(PluginMessages.parseMessage(msg)); } - return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_not_in_combat())); + return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().placeholder_not_in_combat)); } } diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByExplosionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByExplosionListener.java deleted file mode 100644 index 891c794..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByExplosionListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.mount; - -import me.youhavetrouble.preventstabby.util.Util; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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 org.bukkit.event.entity.EntityDamageEvent; - -import java.util.UUID; - -@PreventStabbyListener -public class MountHitByExplosionListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onMountHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player) || event.getEntity().getPassengers().isEmpty()) return; - if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) return; - UUID damager = event.getDamager().getUniqueId(); - Entity mount = event.getEntity(); - if (Util.processMountAttack(damager, mount)) - event.setCancelled(true); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByFireworkListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByFireworkListener.java deleted file mode 100644 index 405ff07..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitByFireworkListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.mount; - -import me.youhavetrouble.preventstabby.util.Util; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Entity; -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 org.bukkit.event.entity.EntityDamageEvent; - -import java.util.UUID; - -@PreventStabbyListener -public class MountHitByFireworkListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onMountHitByFireWork(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Firework) || event.getEntity().getPassengers().isEmpty()) return; - if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) return; - Firework firework = (Firework) event.getDamager(); - if (!(firework.getShooter() instanceof Player)) return; - UUID damager = ((Player) firework.getShooter()).getUniqueId(); - Entity mount = event.getEntity(); - if (Util.processMountAttack(damager, mount)) - event.setCancelled(true); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitBySplashPotionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitBySplashPotionListener.java deleted file mode 100644 index 2366938..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/MountHitBySplashPotionListener.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.mount; - -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import me.youhavetrouble.preventstabby.util.Util; -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 java.util.UUID; - -@PreventStabbyListener -public class MountHitBySplashPotionListener implements Listener { - - /** - * If thrown potion applies negative effects and it's thrown by a player - * it will have no effect on a pet of a player with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onMountHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { - if (!(event.getEntity().getShooter() instanceof Player)) return; - boolean harmful = false; - for (PotionEffect effect : event.getPotion().getEffects()) { - if (Util.isPotionEffectHarmful(effect.getType())) { - harmful = true; - break; - } - } - if (!harmful) return; - UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId(); - for (LivingEntity entity : event.getAffectedEntities()) { - if (entity.getPassengers().isEmpty()) continue; - if (Util.processMountAttack(damager, entity)) - event.setIntensity(entity, 0); - } - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerAttackMountListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerAttackMountListener.java deleted file mode 100644 index b944e1d..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerAttackMountListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.mount; - -import me.youhavetrouble.preventstabby.util.Util; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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.util.UUID; - -@PreventStabbyListener -public class PlayerAttackMountListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerAttackMount(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Player) || event.getEntity().getPassengers().isEmpty()) return; - Entity entity = event.getEntity(); - UUID damager = event.getDamager().getUniqueId(); - if (Util.processMountAttack(damager, entity)) - event.setCancelled(true); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerHitMountWithProjectileListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerHitMountWithProjectileListener.java deleted file mode 100644 index 641583d..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/mount/PlayerHitMountWithProjectileListener.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.mount; - -import me.youhavetrouble.preventstabby.util.Util; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Entity; -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.util.UUID; - -@PreventStabbyListener -public class PlayerHitMountWithProjectileListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitMountWithProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Projectile)) return; - Projectile projectile = (Projectile) event.getDamager(); - if (!(projectile.getShooter() instanceof Player) || event.getEntity().getPassengers().isEmpty()) return; - Entity entity = event.getEntity(); - UUID damager = event.getDamager().getUniqueId(); - if (Util.processMountAttack(damager, entity)) - event.setCancelled(true); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByExplosionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByExplosionListener.java deleted file mode 100644 index 470538f..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByExplosionListener.java +++ /dev/null @@ -1,40 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; -import java.util.UUID; - -@PreventStabbyListener -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 onPetHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Tameable)) return; - if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) return; - Tameable tameable = (Tameable) event.getEntity(); - if (tameable.getOwner() == null) return; - - UUID victim = tameable.getOwner().getUniqueId(); - - try { - UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); - if (victim.equals(damager)) - return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true, false)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } catch (NullPointerException | IndexOutOfBoundsException ignored) {} - - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByFireworkListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByFireworkListener.java deleted file mode 100644 index 5be2b9a..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitByFireworkListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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; - -@PreventStabbyListener -public class PetHitByFireworkListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPetFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (event.getDamager() instanceof Firework && event.getEntity() instanceof Tameable) { - Tameable tameable = (Tameable) event.getEntity(); - if (tameable.getOwner() == null) return; - Firework firework = (Firework) event.getDamager(); - if (!(firework.getShooter() instanceof Player)) return; - UUID damager = ((Player) firework.getShooter()).getUniqueId(); - UUID victim = tameable.getOwner().getUniqueId(); - if (victim.equals(damager)) return; - - 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/listeners/pets/PetHitBySplashPotionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitBySplashPotionListener.java deleted file mode 100644 index f3a00bb..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetHitBySplashPotionListener.java +++ /dev/null @@ -1,53 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import me.youhavetrouble.preventstabby.util.Util; -import org.bukkit.entity.Entity; -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 org.bukkit.potion.PotionEffect; -import org.bukkit.potion.PotionEffectType; -import java.util.UUID; - -@PreventStabbyListener -public class PetHitBySplashPotionListener implements Listener { - - /** - * If thrown potion applies negative effects and it's thrown by a player - * it will have no effect on a pet of a player with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPetHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { - - if (!(event.getEntity().getShooter() instanceof Player)) return; - boolean harmful = false; - - for (PotionEffect effect : event.getPotion().getEffects()) { - if (Util.isPotionEffectHarmful(effect.getType())) { - harmful = true; - break; - } - } - if (!harmful) return; - UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId(); - for (Entity entity : event.getAffectedEntities()) { - if (entity instanceof Tameable) { - Tameable tameable = (Tameable) entity; - if (tameable.getOwner() == null) continue; - UUID victim = tameable.getOwner().getUniqueId(); - if (victim == damager) return; - - 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/listeners/pets/PetLeashListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetLeashListener.java deleted file mode 100644 index 0a84a9b..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetLeashListener.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import java.util.UUID; - -@PreventStabbyListener -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 tameable = (Tameable) event.getEntity(); - if (tameable.getOwner() == null) return; - - UUID damager = event.getPlayer().getUniqueId(); - UUID victim = tameable.getOwner().getUniqueId(); - if (victim == damager) return; - - 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/listeners/pets/PetTargettingMountListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingMountListener.java deleted file mode 100644 index 168d845..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingMountListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.DamageCheck; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import me.youhavetrouble.preventstabby.util.PvpState; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Tameable; -import org.bukkit.entity.Wolf; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -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) - public void onWolfAttackMount(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (PreventStabby.getPlugin().getPlayerManager().getForcedPvpState() == PvpState.ENABLED) return; - if (!(event.getDamager() instanceof Tameable damager) || event.getEntity().getPassengers().isEmpty()) return; - Entity victim = event.getEntity(); - if (damager.getOwner() == null) return; - - DamageCheck.DamageCheckResult result = PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim); - - if (!result.ableToDamage) { - if (damager instanceof Wolf wolf) { - wolf.setAngry(false); - } - event.setCancelled(true); - } - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPetListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPetListener.java deleted file mode 100644 index d7ada4b..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPetListener.java +++ /dev/null @@ -1,32 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -public class PetTargettingPetListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onWolfAttackWolf(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getDamager() instanceof Tameable) || !(event.getEntity() instanceof Tameable)) return; - Tameable damager = (Tameable) event.getDamager(); - Tameable victim = (Tameable) event.getEntity(); - if (damager.getOwner() == null || victim.getOwner() == null) return; - - if (!PreventStabby.getPlugin().getPlayerManager() - .canDamage( - damager.getUniqueId(), - victim.getUniqueId(), - false, - false - )) - event.setCancelled(true); - - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java deleted file mode 100644 index 8245b6f..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PetTargettingPlayerListener.java +++ /dev/null @@ -1,43 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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 org.bukkit.event.entity.EntityTargetEvent; - -import java.util.UUID; - -@PreventStabbyListener -public class PetTargettingPlayerListener implements Listener { - /** - * Stops pets with owners targetting players with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPetTargetPlayer(EntityTargetEvent event) { - if (!(event.getEntity() instanceof Tameable)) return; - Tameable entity = (Tameable) event.getEntity(); - if (!(entity.getOwner() instanceof Player)) return; - if (!(event.getTarget() instanceof Player)) return; - - UUID damager = entity.getOwner().getUniqueId(); - UUID victim = event.getTarget().getUniqueId(); - - 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); - } - else - event.setCancelled(true); - - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerAttackPetListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerAttackPetListener.java deleted file mode 100644 index 573aaab..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerAttackPetListener.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.config.ConfigCache; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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 org.bukkit.event.entity.EntityDamageByEntityEvent; - -import java.util.UUID; - -@PreventStabbyListener -public class PlayerAttackPetListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerAttackPet(EntityDamageByEntityEvent event) { - - if (!(event.getDamager() instanceof Player) || !(event.getEntity() instanceof Tameable)) return; - - Tameable tameable = (Tameable) event.getEntity(); - if (tameable.getOwner() == null) return; - - UUID damager = event.getDamager().getUniqueId(); - UUID victim = tameable.getOwner().getUniqueId(); - - if (damager.equals(victim)) return; - - ConfigCache config = PreventStabby.getPlugin().getConfigCache(); - - if (PreventStabby.getPlugin().getPlayerManager() - .canDamage( - damager, - victim, - config.getCannot_attack_pets_attacker(), - config.getCannot_attack_pets_victim(), - false - )) - CombatTimer.refreshPlayersCombatTime(damager); - else - event.setCancelled(true); - - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerHitPetWithProjectileListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerHitPetWithProjectileListener.java deleted file mode 100644 index 33e31b2..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerHitPetWithProjectileListener.java +++ /dev/null @@ -1,51 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.config.ConfigCache; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -import java.util.UUID; - -@PreventStabbyListener -public class PlayerHitPetWithProjectileListener implements Listener { - - /** - * Cancels damage done by projectiles to pets of players with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitPetWithProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (!(event.getEntity() instanceof Tameable) || !(event.getDamager() instanceof Projectile)) return; - Projectile projectile = (Projectile) event.getDamager(); - if (!(projectile.getShooter() instanceof Player)) return; - Tameable tameable = (Tameable) event.getEntity(); - if (tameable.getOwner() == null) return; - - UUID damager = ((Player) projectile.getShooter()).getUniqueId(); - UUID victim = tameable.getOwner().getUniqueId(); - - if (damager.equals(victim)) return; - - ConfigCache config = PreventStabby.getPlugin().getConfigCache(); - - if (PreventStabby.getPlugin().getPlayerManager() - .canDamage( - damager, - victim, - config.getCannot_attack_pets_attacker(), - config.getCannot_attack_pets_victim(), - false - )) - CombatTimer.refreshPlayersCombatTime(damager); - else - event.setCancelled(true); - - - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerInteractWithPetListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerInteractWithPetListener.java deleted file mode 100644 index a936753..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/pets/PlayerInteractWithPetListener.java +++ /dev/null @@ -1,26 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.pets; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -public class PlayerInteractWithPetListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerInteractWithPet(org.bukkit.event.player.PlayerInteractEntityEvent event) { - - if (!PreventStabby.getPlugin().getConfigCache().isOnly_owner_can_interact_with_pet()) return; - if (!(event.getRightClicked() instanceof Tameable)) return; - - Tameable tameable = (Tameable) event.getRightClicked(); - if (tameable.getOwner() == null) return; - if (tameable.getOwner().getUniqueId().equals(event.getPlayer().getUniqueId())) return; - - event.setCancelled(true); - - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PetAttackPlayerListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PetAttackPlayerListener.java deleted file mode 100644 index 6311c3d..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PetAttackPlayerListener.java +++ /dev/null @@ -1,47 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerManager; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Player; -import org.bukkit.entity.Tameable; -import org.bukkit.entity.Wolf; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import java.util.UUID; - -@PreventStabbyListener -public class PetAttackPlayerListener implements Listener { - - /** - * Pets stop following player with pvp off after trying to hit them - * This is to fix any inconsistancy with pet behavior - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPetAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - - if (!(event.getDamager() instanceof Tameable)) return; - - Tameable entity = (Tameable) event.getDamager(); - if (entity.getOwner() != null && event.getEntity() instanceof Player) { - - UUID victim = event.getEntity().getUniqueId(); - UUID damager = entity.getOwner().getUniqueId(); - PlayerManager playerManager = PreventStabby.getPlugin().getPlayerManager(); - - if (!playerManager.canDamage(damager, victim, false)) { - if (entity instanceof Wolf) { - Wolf wolf = (Wolf) entity; - wolf.setAngry(false); - } - event.setCancelled(true); - return; - } - CombatTimer.refreshPlayersCombatTime(damager, victim); - } - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerAttackListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerAttackListener.java deleted file mode 100644 index acf266e..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerAttackListener.java +++ /dev/null @@ -1,35 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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.util.UUID; - -@PreventStabbyListener -public class PlayerAttackListener implements Listener { - - /** - * Cancels basic attacks done to player with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerAttack(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - Entity damagerEntity = event.getDamager(); - Entity victimEntity = event.getEntity(); - - if (damagerEntity instanceof Player && victimEntity instanceof Player) { - UUID damager = damagerEntity.getUniqueId(); - UUID victim = victimEntity.getUniqueId(); - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByExplosionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByExplosionListener.java deleted file mode 100644 index 846c348..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByExplosionListener.java +++ /dev/null @@ -1,109 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.EnderCrystal; -import org.bukkit.entity.Player; -import org.bukkit.entity.Projectile; -import org.bukkit.entity.TNTPrimed; -import org.bukkit.entity.EntityType; -import org.bukkit.entity.minecart.ExplosiveMinecart; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDamageEvent; -import org.bukkit.metadata.FixedMetadataValue; -import java.util.UUID; - -@PreventStabbyListener -public class PlayerHitByExplosionListener implements Listener { - - /** - * Cancels explosion damage for players with pvp off that is caused by players - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitByExplosion(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (event.getEntity() instanceof Player) { - if (!event.getCause().equals(EntityDamageEvent.DamageCause.ENTITY_EXPLOSION)) return; - - UUID victim = event.getEntity().getUniqueId(); - try { - UUID damager = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); - if (victim.equals(damager)) return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - - } catch (NullPointerException | IndexOutOfBoundsException ignored) { } - } - } - - /** - * Tags ender crystal with exploder uuid - */ - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitEnderCrystal(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - if (event.getEntity() instanceof EnderCrystal) { - EnderCrystal enderCrystal = (EnderCrystal) event.getEntity(); - if (event.getDamager() instanceof Player) { - enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), event.getDamager().getUniqueId().toString())); - } else if (event.getDamager() instanceof Projectile) { - Projectile projectile = (Projectile) event.getDamager(); - if (projectile.getShooter() instanceof Player) { - Player damager = (Player) projectile.getShooter(); - enderCrystal.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), damager.getUniqueId().toString())); - } - } - } - } - - /** - * Tag ender crystal with destroying players uuid - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerPrimedTnt(org.bukkit.event.entity.ExplosionPrimeEvent event) { - if (event.getEntity() instanceof TNTPrimed) { - TNTPrimed tntPrimed = (TNTPrimed) event.getEntity(); - if (tntPrimed.getSource() instanceof Player) { - Player damager = (Player) tntPrimed.getSource(); - tntPrimed.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), damager.getUniqueId().toString())); - } else if (tntPrimed.getSource() instanceof TNTPrimed) { - try { - TNTPrimed sourceTnt = (TNTPrimed) tntPrimed.getSource(); - String damagerUuid = sourceTnt.getMetadata("PLAYEREXPLODED").get(0).asString(); - tntPrimed.setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), damagerUuid)); - } catch (NullPointerException ignored) { - } - } - } - } - - /** - * Tag TNT minecart with placing player uuid - */ - @SuppressWarnings("deprecation") - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerPlacedTntMinecart(org.bukkit.event.entity.EntityPlaceEvent event) { - if (event.getEntityType().equals(EntityType.MINECART_TNT)) { - if (event.getPlayer() != null) { - event.getEntity().setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), event.getPlayer().getUniqueId().toString())); - } - } - } - - /** - * Tag TNT minecart with uuid of player who last nudged it - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerNudgedTntMinecart(org.bukkit.event.vehicle.VehicleEntityCollisionEvent event) { - if (event.getVehicle() instanceof ExplosiveMinecart && event.getEntity() instanceof Player) { - Player damager = (Player) event.getEntity(); - event.getVehicle().setMetadata("PLAYEREXPLODED", new FixedMetadataValue(PreventStabby.getPlugin(), damager.getUniqueId().toString())); - } - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByFireworkListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByFireworkListener.java deleted file mode 100644 index ba09448..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByFireworkListener.java +++ /dev/null @@ -1,34 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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.util.UUID; - -@PreventStabbyListener -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) { - UUID victim = event.getEntity().getUniqueId(); - Firework firework = (Firework) event.getDamager(); - if (firework.getShooter() instanceof Player) { - UUID damager = ((Player) firework.getShooter()).getUniqueId(); - if (damager == victim) return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } - } - } - - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByProjectileListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByProjectileListener.java deleted file mode 100644 index 19b889f..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitByProjectileListener.java +++ /dev/null @@ -1,59 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import java.util.UUID; - -@PreventStabbyListener -public class PlayerHitByProjectileListener implements Listener { - - /** - * Cancels damage done by projectiles to player with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitProjectile(org.bukkit.event.entity.EntityDamageByEntityEvent event) { - - if (event.getEntity() instanceof Player && event.getDamager() instanceof Projectile) { - Projectile projectile = (Projectile) event.getDamager(); - if (projectile.getShooter() instanceof Player) { - UUID damager = ((Player) projectile.getShooter()).getUniqueId(); - UUID victim = event.getEntity().getUniqueId(); - - if (PreventStabby.getPlugin().getConfigCache().isSnowballs_knockback() && event.getDamager() instanceof Snowball) { - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) { - ((Player) event.getEntity()).damage(0.01, (Entity) projectile.getShooter()); - CombatTimer.refreshPlayersCombatTime(damager, victim); - } else { - event.setCancelled(true); - return; - } - - } else if (PreventStabby.getPlugin().getConfigCache().isEgg_knockback() && event.getDamager() instanceof Egg) { - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) { - ((Player) event.getEntity()).damage(0.01, (Entity) projectile.getShooter()); - CombatTimer.refreshPlayersCombatTime(damager, victim); - } else { - event.setCancelled(true); - return; - } - } - - // Ender pearls and other self-damage - if (damager.equals(victim)) return; - - if (event.getDamage() == 0) return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } - } - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitBySplashPotionListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitBySplashPotionListener.java deleted file mode 100644 index 918a7c7..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/player/PlayerHitBySplashPotionListener.java +++ /dev/null @@ -1,48 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.player; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import me.youhavetrouble.preventstabby.util.Util; -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 java.util.UUID; - -@PreventStabbyListener -public class PlayerHitBySplashPotionListener implements Listener { - - /** - * If thrown potion is applies negative effects and it's thrown by a player it will have no effect on player with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerHitBySplashPotion(org.bukkit.event.entity.PotionSplashEvent event) { - - if (!(event.getEntity().getShooter() instanceof Player)) return; - boolean harmful = false; - - for (PotionEffect effect : event.getPotion().getEffects()) { - if (Util.isPotionEffectHarmful(effect.getType())) { - harmful = true; - break; - } - } - if (!harmful) return; - UUID damager = ((Player) event.getEntity().getShooter()).getUniqueId(); - for (LivingEntity entity : event.getAffectedEntities()) { - if (!(entity instanceof Player)) continue; - UUID victim = entity.getUniqueId(); - if (damager == victim) continue; - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) { - CombatTimer.refreshPlayersCombatTime(damager, victim); - } else { - event.setIntensity(entity, 0); - } - - } - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/CombatCommandListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/CombatCommandListener.java deleted file mode 100644 index 01822de..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/CombatCommandListener.java +++ /dev/null @@ -1,38 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.toggles; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerManager; -import me.youhavetrouble.preventstabby.util.PluginMessages; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -public class CombatCommandListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerCommandInCombat(org.bukkit.event.player.PlayerCommandPreprocessEvent event) { - - if (!PreventStabby.getPlugin().getConfigCache().isBlock_commands_in_combat()) - return; - - if (event.getPlayer().hasPermission("toglepvp.combatcommandblock.bypass")) - return; - - PlayerManager playerManager = PreventStabby.getPlugin().getPlayerManager(); - - if (!playerManager.getPlayer(event.getPlayer().getUniqueId()).isInCombat()) - return; - - String command = event.getMessage().replaceFirst("/", ""); - - if (!PreventStabby.getPlugin().getConfigCache().getCombatBlockedCommands().contains(command)) - return; - - event.setCancelled(true); - PluginMessages.sendMessage(event.getPlayer(), PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/PlayerTeleportInCombatListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/PlayerTeleportInCombatListener.java deleted file mode 100644 index 81aed6a..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/toggles/PlayerTeleportInCombatListener.java +++ /dev/null @@ -1,33 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.toggles; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerManager; -import me.youhavetrouble.preventstabby.util.PluginMessages; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -public class PlayerTeleportInCombatListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerTeleportInCombat(org.bukkit.event.player.PlayerTeleportEvent event) { - - if (!PreventStabby.getPlugin().getConfigCache().isBlock_teleports_in_combat()) - return; - - PlayerManager playerManager = PreventStabby.getPlugin().getPlayerManager(); - - if (!playerManager.getPlayer(event.getPlayer().getUniqueId()).isInCombat()) - return; - - if (event.getPlayer().hasPermission("toglepvp.combatteleportblock.bypass")) - return; - - event.setCancelled(true); - PluginMessages.sendMessage(event.getPlayer(), PreventStabby.getPlugin().getConfigCache().getCant_do_that_during_combat()); - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/AreaEffectCloudApplyListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/AreaEffectCloudApplyListener.java deleted file mode 100644 index 8bdbe43..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/AreaEffectCloudApplyListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.players.PlayerManager; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import me.youhavetrouble.preventstabby.util.Util; -import org.bukkit.entity.LivingEntity; -import org.bukkit.entity.Player; -import org.bukkit.entity.Tameable; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.AreaEffectCloudApplyEvent; -import org.bukkit.potion.PotionEffectType; - -import java.util.Iterator; -import java.util.UUID; - -@PreventStabbyListener -public class AreaEffectCloudApplyListener implements Listener { - - @EventHandler(ignoreCancelled = true) - public void onCloudEffects(AreaEffectCloudApplyEvent event) { - - if (!(event.getEntity().getSource() instanceof Player)) return; - PotionEffectType potionEffectType = event.getEntity().getBasePotionData().getType().getEffectType(); - if (potionEffectType == null) return; - - if (!Util.isPotionEffectHarmful(potionEffectType)) return; - - PlayerManager playerManager = PreventStabby.getPlugin().getPlayerManager(); - - Iterator it = event.getAffectedEntities().iterator(); - UUID damager = ((Player) event.getEntity().getSource()).getUniqueId(); - while (it.hasNext()) { - LivingEntity entity = it.next(); - if (entity instanceof Player) { - UUID victim = entity.getUniqueId(); - if (damager == victim) continue; - - if (playerManager.canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - it.remove(); - - } else if (entity instanceof Tameable) { - Tameable tameable = (Tameable) entity; - - if (tameable.getOwner() == null) continue; - - UUID victim = tameable.getOwner().getUniqueId(); - if (victim == damager) continue; - - if (playerManager.canDamage(damager, victim, true, false)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - it.remove(); - } - } - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/EntityHitByLightningListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/EntityHitByLightningListener.java deleted file mode 100644 index 9ec35a7..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/EntityHitByLightningListener.java +++ /dev/null @@ -1,61 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.LightningStrike; -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 org.bukkit.event.weather.LightningStrikeEvent; -import org.bukkit.metadata.FixedMetadataValue; -import java.util.UUID; - -/** - * Listen for lightning strikes and tag the trident spawned ones. - * Idea from aasmus' PvPToggle plugin - */ -@PreventStabbyListener -public class EntityHitByLightningListener implements Listener { - - /** - * Cancels damage from lightning strike caused by channeling for players with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - 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) { - UUID victim = event.getEntity().getUniqueId(); - - if (PreventStabby.getPlugin().getPlayerManager().hasLoginProtection(victim)) { - event.setCancelled(true); - return; - } - - if (!PreventStabby.getPlugin().getSmartCache().getPlayerData(victim).isPvpEnabled()) { - event.setCancelled(true); - } - } else if (event.getEntity() instanceof Tameable) { - Tameable victim = (Tameable) event.getEntity(); - if (victim.getOwner() != null && !PreventStabby.getPlugin().getSmartCache().getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - } - } - } - } - - /** - * Tags the lightning strike - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onLightningStrike(LightningStrikeEvent event){ - if(event.getCause() == LightningStrikeEvent.Cause.TRIDENT){ - if (PreventStabby.getPlugin().getConfigCache().isChanneling_enchant_disabled()) { - event.setCancelled(true); - return; - } - event.getLightning().setMetadata("TRIDENT", new FixedMetadataValue(PreventStabby.getPlugin(), event.getLightning().getLocation())); - } - } -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/FishingListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/FishingListener.java deleted file mode 100644 index 1c677c6..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/FishingListener.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -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; - -@PreventStabbyListener -public class FishingListener implements Listener { - - /** - * 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) { - if (PreventStabby.getPlugin().getConfigCache().isAllow_fishing_rod_pull()) return; - UUID damager = event.getPlayer().getUniqueId(); - UUID victim = event.getCaught().getUniqueId(); - if (damager == victim) - return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } else if (event.getCaught() instanceof Tameable) { - Tameable tameable = (Tameable) event.getCaught(); - UUID damager = event.getPlayer().getUniqueId(); - if (tameable.getOwner() == null) - return; - - UUID victim = tameable.getOwner().getUniqueId(); - - if (damager == victim) - return; - - 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/listeners/unspecific/LavaDumpAndIgniteListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/LavaDumpAndIgniteListener.java deleted file mode 100644 index aed5d05..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/LavaDumpAndIgniteListener.java +++ /dev/null @@ -1,125 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.config.ConfigCache; -import me.youhavetrouble.preventstabby.util.BoundingBoxUtil; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -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 org.bukkit.util.BoundingBox; - -import java.util.UUID; - - -@PreventStabbyListener -public class LavaDumpAndIgniteListener implements Listener { - - /** - * 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) { - - ConfigCache config = PreventStabby.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(); - UUID damager = event.getPlayer().getUniqueId(); - double radius = config.getLava_and_fire_stopper_radius(); - - BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); - for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { - if (entity instanceof Player) { - UUID victim = entity.getUniqueId(); - if (victim != damager) { - if (PreventStabby.getPlugin().getPlayerManager().hasLoginProtection(victim, damager)) { - event.setCancelled(true); - return; - } - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - - } - } else if (entity instanceof Tameable) { - Tameable tameable = (Tameable) entity; - if (tameable.getOwner() == null) { - return; - } - - UUID victim = tameable.getOwner().getUniqueId(); - if (PreventStabby.getPlugin().getPlayerManager().hasLoginProtection(victim, damager)) { - event.setCancelled(true); - return; - } - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - - } - } - } - } - - /** - * Prevents setting blocks on fire near players with pvp off - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onIgnite(org.bukkit.event.block.BlockIgniteEvent event) { - - ConfigCache config = PreventStabby.getPlugin().getConfigCache(); - - if (!config.isLava_and_fire_stopper_enabled()) - return; - - if (event.getPlayer() == null) - return; - - Location location = event.getBlock().getLocation(); - UUID damager = event.getPlayer().getUniqueId(); - double radius = config.getLava_and_fire_stopper_radius(); - BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); - for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { - if (entity instanceof Player) { - UUID victim = entity.getUniqueId(); - if (victim == damager) - continue; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - - } else if (entity instanceof Tameable) { - Tameable tameable = (Tameable) entity; - if (tameable.getOwner() == null) { - continue; - } - - UUID victim = tameable.getOwner().getUniqueId(); - if (victim == damager) - continue; - - 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/listeners/unspecific/LightningBlockIgniteListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/LightningBlockIgniteListener.java deleted file mode 100644 index e14b95b..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/LightningBlockIgniteListener.java +++ /dev/null @@ -1,50 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.*; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; - -@PreventStabbyListener -public class LightningBlockIgniteListener implements Listener { - - /** - * Lightning strikes from channeling enchant won't ignite blocks if player with pvp off is in radius - */ - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onBlockIgnite(org.bukkit.event.block.BlockIgniteEvent event) { - - if (event.getIgnitingEntity() instanceof LightningStrike && event.getIgnitingEntity().getMetadata("TRIDENT").size() >= 1) { - LightningStrike lightningStrike = (LightningStrike) event.getIgnitingEntity(); - - for (Entity entity : lightningStrike.getNearbyEntities(2,2,2)) { - if (entity instanceof Player) { - Player victim = (Player) entity; - - if (PreventStabby.getPlugin().getPlayerManager().hasLoginProtection(victim.getUniqueId())) { - event.setCancelled(true); - return; - } - - if (!PreventStabby.getPlugin().getSmartCache().getPlayerData(victim.getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - return; - } - } else if (entity instanceof Tameable) { - Tameable victim = (Tameable) entity; - if (victim.getOwner() == null) { - return; - } - if (!PreventStabby.getPlugin().getSmartCache().getPlayerData(victim.getOwner().getUniqueId()).isPvpEnabled()) { - event.setCancelled(true); - return; - } - } - } - } - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/PlaceWitherRoseListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/PlaceWitherRoseListener.java deleted file mode 100644 index 2d66351..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/unspecific/PlaceWitherRoseListener.java +++ /dev/null @@ -1,64 +0,0 @@ -package me.youhavetrouble.preventstabby.listeners.unspecific; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.config.ConfigCache; -import me.youhavetrouble.preventstabby.util.BoundingBoxUtil; -import me.youhavetrouble.preventstabby.util.CombatTimer; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.entity.Entity; -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 org.bukkit.util.BoundingBox; - -import java.util.UUID; - -@PreventStabbyListener -public class PlaceWitherRoseListener implements Listener { - - @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) - public void onPlayerWitherRosePlace(org.bukkit.event.block.BlockPlaceEvent event) { - - ConfigCache config = PreventStabby.getPlugin().getConfigCache(); - - if (!config.isLava_and_fire_stopper_enabled()) - return; - - if (event.getBlock().getType().equals(Material.WITHER_ROSE)) { - Location location = event.getBlockPlaced().getLocation(); - double radius = config.getLava_and_fire_stopper_radius(); - BoundingBox boundingBox = BoundingBoxUtil.getBoundingBox(location, radius); - for (Entity entity : location.getWorld().getNearbyEntities(boundingBox)) { - if (entity instanceof Player) { - UUID damager = event.getPlayer().getUniqueId(); - UUID victim = entity.getUniqueId(); - if (victim == damager) - return; - - if (PreventStabby.getPlugin().getPlayerManager().canDamage(damager, victim, true)) - CombatTimer.refreshPlayersCombatTime(damager, victim); - else - event.setCancelled(true); - } else if (entity instanceof Tameable) { - Tameable tameable = (Tameable) entity; - UUID damager = event.getPlayer().getUniqueId(); - if (tameable.getOwner() == null) - return; - - UUID victim = tameable.getOwner().getUniqueId(); - if (victim == damager) - return; - - 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/PlayerData.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java index 90e20c2..25d2c9c 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerData.java @@ -11,11 +11,12 @@ public class PlayerData { private final UUID playerUuid; private long lastAccessTimestamp, combatStartTimestamp, loginTimestamp, teleportTimestamp; - private boolean pvpEnabled; + private boolean pvpEnabled, lastCombatCheck; public PlayerData(UUID playerUuid, boolean pvpEnabled) { this.playerUuid = playerUuid; this.pvpEnabled = pvpEnabled; + this.lastCombatCheck = false; this.combatStartTimestamp = Long.MIN_VALUE; this.loginTimestamp = Long.MIN_VALUE; this.teleportTimestamp = Long.MIN_VALUE; @@ -29,7 +30,6 @@ public class PlayerData { /** * Returns true if player has personal pvp enabled, false otherwise. * @return True if player has personal pvp enabled, false otherwise. - * @see PlayerManager#getPlayerPvPState(UUID) */ public boolean isPvpEnabled() { return pvpEnabled; @@ -71,6 +71,14 @@ public class PlayerData { return combatStartTimestamp; } + protected boolean getLastCombatCheckState() { + return lastCombatCheck; + } + + protected void setLastCombatCheckState(boolean state) { + this.lastCombatCheck = state; + } + /** * Marks the player as in combat. */ @@ -79,6 +87,11 @@ public class PlayerData { this.combatStartTimestamp = System.currentTimeMillis(); } + protected void markNotInCombat() { + refreshCacheTime(); + this.combatStartTimestamp = Long.MIN_VALUE; + } + /** * Sets the login timestamp for the player. * @param loginTimestamp The login timestamp to set. @@ -109,10 +122,19 @@ public class PlayerData { * @return true if the player is in combat, false otherwise. */ public boolean isInCombat() { - refreshCacheTime(); return System.currentTimeMillis() - (combatStartTimestamp + (PreventStabby.getPlugin().getConfigCache().combat_time * 1000)) < 0; } + /** + * Retrieves the number of seconds left until combat ends for the player. + * @return The number of seconds left until combat ends. -1 if not in combat + */ + public long getSecondsLeftUntilCombatEnd() { + long timeSinceCombatStart = System.currentTimeMillis() - combatStartTimestamp; + long combatTimeConfigured = PreventStabby.getPlugin().getConfigCache().combat_time * 1000; + return (timeSinceCombatStart < combatTimeConfigured) ? (combatTimeConfigured - timeSinceCombatStart) / 1000 : -1; + } + /** * Checks if the player has login protection. * diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java deleted file mode 100644 index ff6ad47..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerDeathListener.java +++ /dev/null @@ -1,28 +0,0 @@ -package me.youhavetrouble.preventstabby.players; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.entity.EntityDeathEvent; - -@PreventStabbyListener -public class PlayerDeathListener implements Listener { - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onPlayerDeath(EntityDeathEvent event) { - - if (!(event.getEntity() instanceof Player)) return; - - Player player = (Player) event.getEntity(); - - PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(player.getUniqueId()); - if (playerData == null) return; - playerData.setCombattime(0); - playerData.setLastCombatCheck(false); - playerData.setInCombat(false); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerListener.java similarity index 55% rename from src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java rename to src/main/java/me/youhavetrouble/preventstabby/players/PlayerListener.java index 3d75367..749759d 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerJoinAndLeaveListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerListener.java @@ -2,19 +2,19 @@ package me.youhavetrouble.preventstabby.players; import me.youhavetrouble.preventstabby.PreventStabby; import me.youhavetrouble.preventstabby.util.PluginMessages; -import me.youhavetrouble.preventstabby.util.PreventStabbyListener; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerQuitEvent; +import org.bukkit.event.player.PlayerTeleportEvent; import java.time.Instant; import java.util.UUID; -@PreventStabbyListener -public class PlayerJoinAndLeaveListener implements Listener { +public class PlayerListener implements Listener { /** * This event is here to get players saved options on join */ @@ -29,21 +29,30 @@ public class PlayerJoinAndLeaveListener implements Listener { * This event is here to save player's data to database * Also punishes players who log out during combat */ - @EventHandler + @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onPlayerLeave(PlayerQuitEvent event) { Player player = event.getPlayer(); - - if (!PreventStabby.getPlugin().getConfigCache().punish_for_combat_logout) return; - - PlayerData playerData = PreventStabby.getPlugin().getSmartCache().getPlayerData(player.getUniqueId()); - + PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); if (!playerData.isInCombat()) return; - player.setHealth(0); if (!PreventStabby.getPlugin().getConfigCache().punish_for_combat_logout_announce) return; PluginMessages.broadcastMessage(player, PreventStabby.getPlugin().getConfigCache().punish_for_combat_logout_message); - - } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onPlayerTeleport(PlayerTeleportEvent event) { + Player player = event.getPlayer(); + PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); + playerData.setTeleportTimestamp(Instant.now().getEpochSecond()); + } + + @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) + public void onPlayerDeath(EntityDeathEvent event) { + if (!(event.getEntity() instanceof Player player)) return; + PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); + if (playerData == null) return; + playerData.markNotInCombat(); + } + } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java index 01e08a5..d655dba 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java +++ b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerManager.java @@ -1,10 +1,12 @@ package me.youhavetrouble.preventstabby.players; import me.youhavetrouble.preventstabby.PreventStabby; +import me.youhavetrouble.preventstabby.api.event.PlayerEnterCombatEvent; +import me.youhavetrouble.preventstabby.api.event.PlayerLeaveCombatEvent; import me.youhavetrouble.preventstabby.util.DamageCheck; +import me.youhavetrouble.preventstabby.util.PluginMessages; import me.youhavetrouble.preventstabby.util.PvpState; import org.bukkit.Bukkit; -import org.bukkit.OfflinePlayer; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import java.util.UUID; @@ -21,17 +23,50 @@ public class PlayerManager { public PlayerManager(PreventStabby plugin) { this.plugin = plugin; Bukkit.getAsyncScheduler().runAtFixedRate(plugin, (task) -> { - // Refresh cache timer if player is online + // Check for entries that should be invalidated + playerList.values().removeIf(PlayerData::isCacheExpired); + }, 250, 250, TimeUnit.MILLISECONDS); + + Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, (task) -> { for (PlayerData playerData : playerList.values()) { if (playerData == null) continue; Player player = Bukkit.getPlayer(playerData.getPlayerUuid()); - if (player != null && player.isOnline()) { - playerData.refreshCacheTime(); + if (player == null || !player.isOnline()) continue; + playerData.refreshCacheTime(); // Refresh cache timer if player is online + // leaving combat logic + if (playerData.getLastCombatCheckState() && !playerData.isInCombat()) { + PlayerLeaveCombatEvent leaveCombatEvent = null; + if (PlayerLeaveCombatEvent.getHandlerList().getRegisteredListeners().length > 0) { + leaveCombatEvent = new PlayerLeaveCombatEvent(player); + Bukkit.getPluginManager().callEvent(leaveCombatEvent); + } + if (leaveCombatEvent != null && leaveCombatEvent.isCancelled()) { + playerData.markInCombat(); + playerData.setLastCombatCheckState(playerData.isInCombat()); + continue; + } + PluginMessages.sendActionBar(player, plugin.getConfigCache().leaving_combat); + playerData.setLastCombatCheckState(playerData.isInCombat()); + continue; + } + // entering combat logic + if (!playerData.getLastCombatCheckState() && playerData.isInCombat()) { + PlayerEnterCombatEvent enterCombatEvent = null; + if (PlayerEnterCombatEvent.getHandlerList().getRegisteredListeners().length > 0) { + enterCombatEvent = new PlayerEnterCombatEvent(player); + Bukkit.getPluginManager().callEvent(enterCombatEvent); + } + if (enterCombatEvent != null && enterCombatEvent.isCancelled()) { + playerData.markNotInCombat(); + playerData.setLastCombatCheckState(playerData.isInCombat()); + continue; + } + PluginMessages.sendActionBar(player, plugin.getConfigCache().entering_combat); + playerData.setLastCombatCheckState(playerData.isInCombat()); + continue; } } - // Check for entries that should be invalidated - playerList.values().removeIf(PlayerData::isCacheExpired); - },250, 250, TimeUnit.MILLISECONDS); + }, 1, 1); } /** @@ -57,30 +92,12 @@ public class PlayerManager { * @return A {@link DamageCheck.DamageCheckResult} object containing the result of the damage check. */ public DamageCheck.DamageCheckResult canDamage(Entity attacker, Entity victim) { - DamageCheck damageCheck = PreventStabby.getPlugin().getDamageUtil(); + DamageCheck damageCheck = plugin.getDamageUtil(); return damageCheck.canDamage(attacker, victim); } - /** - * Determines whether the given players have any form of protection enabled, including login and teleport protection. - * - * @param players The players to check for protection. - * @return true if any of the players have protection enabled, false otherwise. - * @see PlayerData#isProtected() - */ - public boolean hasProtection(OfflinePlayer... players) { - for (OfflinePlayer offlinePlayer : players) { - UUID uuid = offlinePlayer.getUniqueId(); - PlayerData playerData = playerList.get(uuid); - if (playerData == null) continue; - if (playerData.isProtected()) return true; - } - return false; - } - /** * Returns current forced pvp state. - * * @return Current forced pvp state. */ public PvpState getForcedPvpState() { @@ -89,13 +106,18 @@ public class PlayerManager { /** * Sets current forced pvp state. - * * @param forcedPvpState New forced pvp state. */ public void setForcedPvpState(PvpState forcedPvpState) { this.pvpForcedState = forcedPvpState; } + /** + * Retrieves the PlayerData object for the player with the provided UUID. Returns new default if there isn't data. + * + * @param uuid The UUID of the player. + * @return The PlayerData object associated with the player. + */ public CompletableFuture getPlayerData(UUID uuid) { // Try to get data from cache and refresh it PlayerData data = getPlayer(uuid); @@ -105,15 +127,13 @@ public class PlayerManager { } // Get data from database or provide default return CompletableFuture.supplyAsync(() -> { - PlayerData playerData = PreventStabby.getPlugin().getSqLite().getPlayerInfo(uuid); + PlayerData playerData = plugin.getSqLite().getPlayerInfo(uuid); if (playerData == null) { playerData = new PlayerData(uuid, false); } - PreventStabby.getPlugin().getPlayerManager().addPlayer(uuid, playerData); + plugin.getPlayerManager().addPlayer(uuid, playerData); return playerData; }); - - } public void setPlayerPvpState(UUID uuid, boolean state) { @@ -122,6 +142,13 @@ public class PlayerManager { getPlayer(uuid).setPvpEnabled(state); } // Update the database aswell - PreventStabby.getPlugin().getSqLite().updatePlayerInfo(uuid, new PlayerData(uuid, state)); + plugin.getSqLite().updatePlayerInfo(uuid, new PlayerData(uuid, state)); + } + + public CompletableFuture togglePlayerPvpState(UUID uuid) { + return getPlayerData(uuid).thenApply(playerData -> { + playerData.setPvpEnabled(!playerData.isPvpEnabled()); + return playerData.isPvpEnabled(); + }); } } diff --git a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java b/src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java deleted file mode 100644 index ebf155c..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/players/PlayerTeleportListener.java +++ /dev/null @@ -1,21 +0,0 @@ -package me.youhavetrouble.preventstabby.players; - -import me.youhavetrouble.preventstabby.PreventStabby; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.Listener; -import org.bukkit.event.player.PlayerTeleportEvent; - -import java.time.Instant; - -public class PlayerTeleportListener implements Listener { - - @EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true) - public void onPlayerTeleport(PlayerTeleportEvent event) { - Player player = event.getPlayer(); - PlayerData playerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(player.getUniqueId()); - playerData.setTeleportTimestamp(Instant.now().getEpochSecond()); - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/BoundingBoxUtil.java b/src/main/java/me/youhavetrouble/preventstabby/util/BoundingBoxUtil.java deleted file mode 100644 index bd8b9c9..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/util/BoundingBoxUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package me.youhavetrouble.preventstabby.util; - -import org.bukkit.Location; -import org.bukkit.util.BoundingBox; - -public class BoundingBoxUtil { - - public static BoundingBox getBoundingBox(Location location, double radius) { - - double x1 = location.getX()+radius; - double y1 = location.getY()+radius; - double z1 = location.getZ()+radius; - - double x2 = location.getX()-radius; - double y2 = location.getY()-radius; - double z2 = location.getZ()-radius; - - return new BoundingBox(x1, y1, z1, x2, y2, z2); - - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java b/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java deleted file mode 100644 index 062b1fd..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/util/CombatTimer.java +++ /dev/null @@ -1,49 +0,0 @@ -package me.youhavetrouble.preventstabby.util; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.api.event.PlayerEnterCombatEvent; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; -import java.time.Instant; -import java.util.UUID; - -public class CombatTimer { - - public static void refreshPlayersCombatTime(UUID uuid) { - try { - long combattime = PreventStabby.getPlugin().getSmartCache().getPlayerData(uuid).getCombatTime(); - - Player player = Bukkit.getPlayer(uuid); - if (player == null || !player.isOnline()) return; - PlayerEnterCombatEvent playerEnterCombatEvent = new PlayerEnterCombatEvent(player); - Bukkit.getScheduler().runTask(PreventStabby.getPlugin(), () -> { - if (PlayerEnterCombatEvent.getHandlerList().getRegisteredListeners().length > 0) { - Bukkit.getPluginManager().callEvent(playerEnterCombatEvent); - if (playerEnterCombatEvent.isCancelled()) return; - } - - PreventStabby.getPlugin().getPlayerManager().refreshPlayersCombatTime(uuid); - - if (combattime <= 0) { - PluginMessages.sendActionBar(uuid, PreventStabby.getPlugin().getConfigCache().getEntering_combat()); - } - }); - } catch (Exception ignored) { - } - } - - public static void refreshPlayersCombatTime(UUID... uuid) { - for (UUID id : uuid) { - refreshPlayersCombatTime(id); - } - } - - public static boolean isInCombat(UUID uuid) { - try { - return PreventStabby.getPlugin().getPlayerManager().getPlayer(uuid).getCombatTime() >= Instant.now().getEpochSecond(); - } catch (Exception e) { - return false; - } - } - -} diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/DamageCheck.java b/src/main/java/me/youhavetrouble/preventstabby/util/DamageCheck.java index e622246..3d50a7b 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/DamageCheck.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/DamageCheck.java @@ -24,12 +24,18 @@ public class DamageCheck { Target attackerData = getUuidOfActualPlayer(attacker); Target victimData = getUuidOfActualPlayer(victim); if (attackerData == null || victimData == null) return new DamageCheckResult(true, null, null); + return canDamage(attackerData.playerUuid, victimData.playerUuid, victimData.classifier); + } - PlayerData attackerPlayerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(attackerData.playerUuid); - PlayerData victimPlayerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(victimData.playerUuid); + public DamageCheckResult canDamage(UUID attackerId, UUID victimId, EntityClassifier victimClassifier) { + + if (attackerId == null || victimId == null) return new DamageCheckResult(true, null, null); + + PlayerData attackerPlayerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(attackerId); + PlayerData victimPlayerData = PreventStabby.getPlugin().getPlayerManager().getPlayer(victimId); if (attackerPlayerData.isProtected()) { - String message = switch (victimData.classifier) { + String message = switch (victimClassifier) { case PLAYER -> config.cannotAttackTeleportOrSpawnProtectionAttacker; case PET -> config.cannotAttackPetsTeleportOrSpawnProtectionAttacker; case MOUNT -> config.cannotAttackMountsTeleportOrSpawnProtectionAttacker; @@ -39,7 +45,7 @@ public class DamageCheck { } if (victimPlayerData.isProtected()) { String message = null; - if (victimData.classifier == EntityClassifier.PLAYER) { + if (victimClassifier == EntityClassifier.PLAYER) { message = config.cannotAttackTeleportOrSpawnProtectionVictim; } return new DamageCheckResult(false, message, null); @@ -50,7 +56,6 @@ public class DamageCheck { case ENABLED -> new DamageCheckResult(true, null, null); default -> new DamageCheckResult(true, null, null); }; - } /** @@ -60,7 +65,7 @@ public class DamageCheck { * @return UUID of the actual player, null if not found */ @Nullable - private Target getUuidOfActualPlayer(@NotNull Entity entity) { + public Target getUuidOfActualPlayer(@NotNull Entity entity) { if (entity instanceof Player) return new Target(entity.getUniqueId(), EntityClassifier.PLAYER); // Get shooter of projectile diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/DatabaseSQLite.java b/src/main/java/me/youhavetrouble/preventstabby/util/DatabaseSQLite.java index 053406c..2b03095 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/DatabaseSQLite.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/DatabaseSQLite.java @@ -18,9 +18,10 @@ public class DatabaseSQLite { this.url = url; this.folder = folder; this.logger = logger; + createDatabaseFile(); } - public void createDatabaseFile() { + private void createDatabaseFile() { this.folder.mkdir(); try (Connection conn = DriverManager.getConnection(url)) { if (conn == null) return; @@ -34,30 +35,14 @@ public class DatabaseSQLite { } } - public boolean testConnection() { - try (Connection conn = DriverManager.getConnection(url)) { - logger.info("Connection to SQLite has been established."); - if (conn != null) return true; - } catch (SQLException exception) { - exception.printStackTrace(); - } - return false; - } - public PlayerData getPlayerInfo(UUID uuid) { try (Connection conn = DriverManager.getConnection(url)) { - try { - PreparedStatement insertnewuser = conn.prepareStatement("INSERT OR IGNORE INTO `players` (player_uuid, pvpenabled) VALUES (?, ?)"); - insertnewuser.setString(1, uuid.toString()); - insertnewuser.setBoolean(2, PreventStabby.getPlugin().getConfigCache().isPvp_enabled_by_default()); - insertnewuser.executeUpdate(); - } catch (SQLException e) { - if (e.getErrorCode() != 19) { - e.printStackTrace(); - } - } - PreparedStatement statement = conn.prepareStatement("SELECT * FROM `players` WHERE `player_uuid` = ?"); + PreparedStatement statement = conn.prepareStatement( + "INSERT OR IGNORE INTO `players` (player_uuid, pvpenabled) VALUES (?, ?); SELECT * FROM `players` WHERE `player_uuid` = ?;" + ); statement.setString(1, uuid.toString()); + statement.setBoolean(2, PreventStabby.getPlugin().getConfigCache().pvp_enabled_by_default); + statement.setString(3, uuid.toString()); statement.executeQuery(); ResultSet result = statement.getResultSet(); boolean state = result.getBoolean("pvpenabled"); diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java index 826a331..a00375b 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java @@ -2,7 +2,6 @@ package me.youhavetrouble.preventstabby.util; import me.clip.placeholderapi.PlaceholderAPI; import me.youhavetrouble.preventstabby.PreventStabby; -import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.minimessage.MiniMessage; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; @@ -15,7 +14,6 @@ import java.util.UUID; public class PluginMessages { public static final MiniMessage MINIMESSAGE = MiniMessage.miniMessage(); - private static final BukkitAudiences audiences = PreventStabby.getAudiences(); public static Component parseMessage(String message) { message = makeColorsWork('&', message); @@ -24,8 +22,7 @@ public class PluginMessages { } public static Component parseMessage(CommandSender sender,String message) { - if (sender instanceof Player && isPlaceholderApiEnabled()) { - Player player = (Player) sender; + if (sender instanceof Player player && isPlaceholderApiEnabled()) { message = PlaceholderAPI.setPlaceholders(player, message); } return parseMessage(message); @@ -37,13 +34,13 @@ public class PluginMessages { public static void sendMessage(CommandSender sender, String message) { if ("".equals(message)) return; - audiences.sender(sender).sendMessage(parseMessage(sender, message)); + sender.sendMessage(parseMessage(sender, message)); } public static void sendActionBar(Player player, String message) { if ("".equals(message)) return; Component parsedMessage = parseMessage(player, message); - audiences.player(player).sendActionBar(parsedMessage); + player.sendActionBar(parsedMessage); } public static void sendActionBar(UUID uuid, String message) { @@ -64,12 +61,12 @@ public class PluginMessages { if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { message = PlaceholderAPI.setPlaceholders(player, message); } - audiences.all().sendMessage(parseMessage(message)); + Bukkit.broadcast(parseMessage(message)); } public static void broadcastMessage(String message) { if ("".equals(message)) return; - audiences.all().sendMessage(parseMessage(message)); + Bukkit.broadcast(parseMessage(message)); } /** diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/PreventStabbyListener.java b/src/main/java/me/youhavetrouble/preventstabby/util/PreventStabbyListener.java deleted file mode 100644 index f0e10c1..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/util/PreventStabbyListener.java +++ /dev/null @@ -1,11 +0,0 @@ -package me.youhavetrouble.preventstabby.util; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target({ElementType.TYPE}) - -public @interface PreventStabbyListener {} diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/Util.java b/src/main/java/me/youhavetrouble/preventstabby/util/Util.java deleted file mode 100644 index f097a2a..0000000 --- a/src/main/java/me/youhavetrouble/preventstabby/util/Util.java +++ /dev/null @@ -1,73 +0,0 @@ -package me.youhavetrouble.preventstabby.util; - -import me.youhavetrouble.preventstabby.PreventStabby; -import me.youhavetrouble.preventstabby.config.ConfigCache; -import org.bukkit.entity.Entity; -import org.bukkit.entity.Player; -import org.bukkit.potion.PotionEffectType; - -import java.util.HashSet; -import java.util.Set; -import java.util.UUID; - -public class Util { - - private static final HashSet harmfulPotions = new HashSet<>(); - - public static void initData() { - harmfulPotions.add(PotionEffectType.BLINDNESS); - harmfulPotions.add(PotionEffectType.CONFUSION); - harmfulPotions.add(PotionEffectType.HARM); - harmfulPotions.add(PotionEffectType.HUNGER); - harmfulPotions.add(PotionEffectType.POISON); - harmfulPotions.add(PotionEffectType.SLOW_DIGGING); - harmfulPotions.add(PotionEffectType.WEAKNESS); - harmfulPotions.add(PotionEffectType.SLOW); - harmfulPotions.add(PotionEffectType.WITHER); - } - - /** - * @param attacker Player attacking the mount - * @param mount Entity being ridden - * @return true if event should be cancelled - */ - public static boolean processMountAttack(UUID attacker, Entity mount) { - - // Don't cancel attacks on players that have passengers - if (mount instanceof Player) return false; - - ConfigCache config = PreventStabby.getPlugin().getConfigCache(); - - Set playerPassengersWithPvpEnabled = new HashSet<>(); - - boolean hasPlayerPassengers = false; - for (Entity passenger : mount.getPassengers()) { - if (!(passenger instanceof Player)) continue; - Player player = (Player) passenger; - hasPlayerPassengers = true; - if (PreventStabby.getPlugin().getPlayerManager().getPlayerPvPState(player.getUniqueId())) - playerPassengersWithPvpEnabled.add(player.getUniqueId()); - } - - if (!hasPlayerPassengers) return false; - - if (!PreventStabby.getPlugin().getPlayerManager().getPlayerPvPState(attacker)) { - PluginMessages.sendActionBar(attacker, config.getCannot_attack_mounts_attacker()); - return true; - } - - if (playerPassengersWithPvpEnabled.isEmpty()) { - PluginMessages.sendActionBar(attacker, config.getCannot_attack_mounts_victim()); - return true; - } - - playerPassengersWithPvpEnabled.forEach(CombatTimer::refreshPlayersCombatTime); - CombatTimer.refreshPlayersCombatTime(attacker); - return false; - } - - public static boolean isPotionEffectHarmful(PotionEffectType effect) { - return harmfulPotions.contains(effect); - } - -}