diff --git a/src/main/java/eu/endermite/togglepvp/commands/PvpToggleCommand.java b/src/main/java/eu/endermite/togglepvp/commands/PvpToggleCommand.java index d4a4c14..220c80d 100644 --- a/src/main/java/eu/endermite/togglepvp/commands/PvpToggleCommand.java +++ b/src/main/java/eu/endermite/togglepvp/commands/PvpToggleCommand.java @@ -1,6 +1,7 @@ package eu.endermite.togglepvp.commands; import eu.endermite.togglepvp.TogglePvP; +import eu.endermite.togglepvp.util.CombatTimer; import eu.endermite.togglepvp.util.PluginMessages; import net.md_5.bungee.api.ChatMessageType; import net.md_5.bungee.api.chat.BaseComponent; @@ -25,6 +26,12 @@ public class PvpToggleCommand { if (args.length == 1) { if (sender instanceof Player) { Player player = (Player) sender; + + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } + boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); String message = ""; @@ -45,6 +52,14 @@ public class PvpToggleCommand { sender.spigot().sendMessage(component); return; } + + if (sender instanceof Player) { + Player player = (Player) sender; + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } + } try { Player player = Bukkit.getPlayer(args[1]); boolean currentState = TogglePvP.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId()); @@ -79,6 +94,10 @@ public class PvpToggleCommand { if (args.length == 1) { if (sender instanceof Player) { Player player = (Player) sender; + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), true); String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_enabled()); BaseComponent[] component = TextComponent.fromLegacyText(message); @@ -93,6 +112,13 @@ public class PvpToggleCommand { sender.spigot().sendMessage(component); return; } + if (sender instanceof Player) { + Player player = (Player) sender; + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } + } try { Player player = Bukkit.getPlayer(args[1]); String message = TogglePvP.getPlugin().getConfigCache().getPvp_enabled_other(); @@ -120,6 +146,10 @@ public class PvpToggleCommand { if (args.length == 1) { if (sender instanceof Player) { Player player = (Player) sender; + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } TogglePvP.getPlugin().getPlayerManager().setPlayerPvpState(player.getUniqueId(), false); String message = PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getPvp_disabled()); BaseComponent[] component = TextComponent.fromLegacyText(message); @@ -134,6 +164,13 @@ public class PvpToggleCommand { sender.spigot().sendMessage(component); return; } + if (sender instanceof Player) { + Player player = (Player) sender; + if (CombatTimer.isInCombat(player.getUniqueId())) { + sender.sendMessage(PluginMessages.parseMessage(TogglePvP.getPlugin().getConfigCache().getCant_do_that_during_combat())); + return; + } + } try { Player player = Bukkit.getPlayer(args[1]); String message = TogglePvP.getPlugin().getConfigCache().getPvp_disabled_other(); diff --git a/src/main/java/eu/endermite/togglepvp/config/ConfigCache.java b/src/main/java/eu/endermite/togglepvp/config/ConfigCache.java index 0248b04..3100edc 100644 --- a/src/main/java/eu/endermite/togglepvp/config/ConfigCache.java +++ b/src/main/java/eu/endermite/togglepvp/config/ConfigCache.java @@ -27,6 +27,7 @@ public class ConfigCache { @Getter private final String punish_for_combat_logout_message; @Getter private final String entering_combat; @Getter private final String leaving_combat; + @Getter final String cant_do_that_during_combat; public ConfigCache() { @@ -60,6 +61,7 @@ public class ConfigCache { this.pvp_disabled_other = config.getString("messages.pvp_disabled_others", "&cYou've disabled %player%'s PvP."); this.entering_combat = config.getString("messages.entering_combat", "&cEntering combat"); this.leaving_combat = config.getString("messages.leaving_combat", "&cLeaving combat"); + this.cant_do_that_during_combat = config.getString("messages.cant_do_that_during_combat", "&cYou can't do that while in combat!"); } } diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java index 993f0ee..0a14276 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/AreaEffectCloudApplyListener.java @@ -62,7 +62,7 @@ public class AreaEffectCloudApplyListener implements Listener { CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } else if (entity instanceof Wolf) { Wolf victim = (Wolf) entity; - if (victim.getOwner() == null) { + if (victim.getOwner() == null || victim.getOwner() == damager) { return; } ConfigCache config = TogglePvP.getPlugin().getConfigCache(); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java index 27c7333..37fce47 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/FishingListener.java @@ -42,10 +42,10 @@ public class FishingListener implements Listener { CombatTimer.refreshPlayersCombatTime(damager.getUniqueId(), victim.getUniqueId()); } else if (event.getCaught() instanceof Wolf) { Wolf victim = (Wolf) event.getCaught(); - if (victim.getOwner() == null) { + Player damager = event.getPlayer(); + if (victim.getOwner() == null || victim.getOwner() == damager) { return; } - Player damager = event.getPlayer(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); if (!damagerPvpEnabled) { event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java index c177980..a2c175c 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/LavaDumpAndIgniteListener.java @@ -113,7 +113,7 @@ public class LavaDumpAndIgniteListener implements Listener { } } else if (entity instanceof Wolf) { Wolf victim = (Wolf) entity; - if (victim.getOwner() == null) { + if (victim.getOwner() == null || victim.getOwner() == damager) { return; } boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java index 0103d10..478187e 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/unspecific/PlaceWitherRoseListener.java @@ -51,10 +51,10 @@ public class PlaceWitherRoseListener implements Listener { } } else if (entity instanceof Wolf) { Wolf victim = (Wolf) entity; - if (victim.getOwner() == null) { + Player damager = event.getPlayer(); + if (victim.getOwner() == null || victim.getOwner() == damager) { return; } - Player damager = event.getPlayer(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); if (!damagerPvpEnabled) { PluginMessages.sendActionBar(damager, config.getCannot_attack_pets_attacker()); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java index 5ba0f27..2dee979 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/PlayerHitWolfWithProjectile.java @@ -24,10 +24,10 @@ public class PlayerHitWolfWithProjectile implements Listener { Projectile projectile = (Projectile) event.getDamager(); if (projectile.getShooter() instanceof Player) { Wolf victim = (Wolf) event.getEntity(); - if (victim.getOwner() == null) { + Player damager = (Player) projectile.getShooter(); + if (victim.getOwner() == null || victim.getOwner() == damager) { return; } - Player damager = (Player) projectile.getShooter(); ConfigCache config = TogglePvP.getPlugin().getConfigCache(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); boolean victimPvpEnabled = (boolean) SmartCache.getPlayerData(victim.getOwner().getUniqueId()).get("pvpenabled"); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java index 188d098..30ad44c 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByExplosionListener.java @@ -30,6 +30,9 @@ public class WolfHitByExplosionListener implements Listener { } try { UUID damageruuid = UUID.fromString(event.getDamager().getMetadata("PLAYEREXPLODED").get(0).asString()); + if (victim.getOwner().getUniqueId() == damageruuid) { + return; + } ConfigCache config = TogglePvP.getPlugin().getConfigCache(); boolean damagerPvpEnabled = (boolean) SmartCache.getPlayerData(damageruuid).get("pvpenabled"); if (!damagerPvpEnabled) { diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java index e657386..f7dad77 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitByFireworkListener.java @@ -17,12 +17,13 @@ public class WolfHitByFireworkListener implements Listener { public void onFireworkDamage(org.bukkit.event.entity.EntityDamageByEntityEvent event) { if (event.getDamager() instanceof Firework && event.getEntity() instanceof Wolf) { Wolf victim = (Wolf) event.getEntity(); - if (victim.getOwner() == null) { + if (victim.getOwner() == null) return; - } Firework firework = (Firework) event.getDamager(); if (firework.getShooter() instanceof Player) { Player damager = (Player) firework.getShooter(); + if (victim.getOwner() == damager) + return; boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(victim.getOwner().getUniqueId()); if (!damagerPvpEnabled) { event.setCancelled(true); diff --git a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java index bd45739..9f21a84 100644 --- a/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java +++ b/src/main/java/eu/endermite/togglepvp/listeners/wolf/WolfHitBySplashPotionListener.java @@ -48,10 +48,8 @@ public class WolfHitBySplashPotionListener implements Listener { if (entity instanceof Wolf) { Player damager = (Player) event.getEntity().getShooter(); Wolf victim = (Wolf) entity; - - if (victim.getOwner() == null) { - return; - } + if (victim.getOwner() == null || victim.getOwner() == damager) + continue; ConfigCache config = TogglePvP.getPlugin().getConfigCache(); boolean damagerPvpEnabled = TogglePvP.getPlugin().getPlayerManager().getPlayerPvPState(damager.getUniqueId()); diff --git a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java index 805ef09..7c7fd16 100644 --- a/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java +++ b/src/main/java/eu/endermite/togglepvp/util/CombatTimer.java @@ -24,4 +24,16 @@ public class CombatTimer { refreshPlayersCombatTime(victim_uuid); } + public static boolean isInCombat(UUID uuid) { + try { + long combattimer = (long) SmartCache.getPlayerData(uuid).get("combattime"); + long now = Instant.now().getEpochSecond(); + return combattimer > now; + } catch (Exception e) { + return false; + } + + + } + } diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 6a93307..87a5431 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -38,3 +38,4 @@ messages: pvp_disabled_others: "&cYou've disabled %player%'s PvP." entering_combat: "&cEntering combat" leaving_combat: "&cLeaving combat" + cant_do_that_during_combat: "&cYou can't do that while in combat!"