From 409d11533784015fbb35f69525ea1aa3a2e9e3fc Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Sun, 12 May 2024 14:17:59 +0200 Subject: [PATCH] stop specified commands from being able to execute in combat --- .../preventstabby/config/ConfigCache.java | 13 +++++++------ .../preventstabby/listeners/PvpListener.java | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java index 16b537b..b34dfc3 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java +++ b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java @@ -7,10 +7,7 @@ import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; public class ConfigCache { @@ -66,12 +63,14 @@ public class ConfigCache { List.of("Should killing of a player that logged out of combat be announced?") ); - this.combatBlockedCommands.addAll(getList( + List commandsBlockedInCombat = getList( "settings.block_in_combat.commands", List.of("spawn", "tpa", "home"), List.of("Commands to block when player is in combat") - ) ); + for (String command : commandsBlockedInCombat) { + this.combatBlockedCommands.add(command.toLowerCase(Locale.ENGLISH)); + } this.block_teleports_in_combat = getBoolean( "settings.block_in_combat.teleports", @@ -126,6 +125,8 @@ public class ConfigCache { List.of("Distance from the player where placing dangerous blocks will be disallowed") ); + + // Messages this.pvp_enabled = getString("messages.pvp_enabled", "You enabled PvP!"); this.pvp_disabled = getString("messages.pvp_disabled", "You disabled PvP!"); diff --git a/src/main/java/me/youhavetrouble/preventstabby/listeners/PvpListener.java b/src/main/java/me/youhavetrouble/preventstabby/listeners/PvpListener.java index 9b20776..e82b54f 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/listeners/PvpListener.java +++ b/src/main/java/me/youhavetrouble/preventstabby/listeners/PvpListener.java @@ -12,10 +12,13 @@ import org.bukkit.event.Listener; import org.bukkit.event.entity.AreaEffectCloudApplyEvent; import org.bukkit.event.entity.EntityDamageByEntityEvent; import org.bukkit.event.entity.PotionSplashEvent; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerFishEvent; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; +import java.util.Locale; + public class PvpListener implements Listener { private final PreventStabby plugin; @@ -93,4 +96,19 @@ public class PvpListener implements Listener { plugin.getPlayerManager().handleDamageCheck(result); } + @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) + public void onCommandInCombat(PlayerCommandPreprocessEvent event) { + Player player = event.getPlayer(); + if (!plugin.getPlayerManager().getPlayer(player.getUniqueId()).isInCombat()) return; + String message = event.getMessage().toLowerCase(Locale.ROOT); + if (message.startsWith("/")) { + message = message.substring(1); + } + message = message.split(" ")[0]; + if (!plugin.getConfigCache().getCombatBlockedCommands().contains(message)) return; + + event.setCancelled(true); + player.sendMessage(plugin.getConfigCache().cant_do_that_during_combat); + } + }