diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java index 20dc7bb..8a4baba 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java @@ -20,7 +20,10 @@ import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; import java.io.File; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; import java.util.concurrent.CompletableFuture; public class CommandWhitelistBukkit extends JavaPlugin { @@ -85,7 +88,8 @@ public class CommandWhitelistBukkit extends JavaPlugin { for (Player p : Bukkit.getOnlinePlayers()) { p.updateCommands(); } - } catch (Exception ignored) {} + } catch (Exception ignored) { + } audiences.sender(sender).sendMessage(CWCommand.miniMessage.deserialize(configCache.prefix + configCache.config_reloaded)); }); } diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/AsyncTabCompleteBlockerListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/AsyncTabCompleteBlockerListener.java index 2001da2..ae66fec 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/AsyncTabCompleteBlockerListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/AsyncTabCompleteBlockerListener.java @@ -13,12 +13,13 @@ public class AsyncTabCompleteBlockerListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onCommandTabComplete(AsyncTabCompleteEvent event) { - if (!(event.getSender() instanceof Player)) return; - Player player = (Player) event.getSender(); + if (!(event.getSender() instanceof Player player)) return; if (player.hasPermission(CWPermission.BYPASS.permission())) return; String buffer = event.getBuffer(); - if ((buffer.split(" ").length == 1 && !buffer.endsWith(" ")) || !buffer.startsWith("/")) { - CommandWhitelistBukkit.getConfigCache().debug("Actively prevented "+event.getSender().getName()+"'s tab completion (sus packet)"); + int commandEnd = buffer.indexOf(' '); + if (commandEnd < 0 || buffer.charAt(0) != '/' || !CommandWhitelistBukkit.getCommands(player) + .contains(buffer.substring(1, commandEnd).toLowerCase())) { + CommandWhitelistBukkit.getConfigCache().debug("Actively prevented " + event.getSender().getName() + "'s tab completion (sus packet)"); event.setCancelled(true); return; } diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java index 9ea1088..8161249 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/TabCompleteBlockerListener.java @@ -13,12 +13,13 @@ public class TabCompleteBlockerListener implements Listener { @EventHandler(priority = EventPriority.NORMAL) public void onCommandTabComplete(TabCompleteEvent event) { - if (!(event.getSender() instanceof Player)) return; - Player player = (Player) event.getSender(); + if (!(event.getSender() instanceof Player player)) return; if (player.hasPermission(CWPermission.BYPASS.permission())) return; String buffer = event.getBuffer(); - if ((buffer.split(" ").length == 1 && !buffer.endsWith(" ")) || !buffer.startsWith("/")) { - CommandWhitelistBukkit.getConfigCache().debug("Actively prevented "+event.getSender().getName()+"'s tab completion (sus packet)"); + int commandEnd = buffer.indexOf(' '); + if (commandEnd < 0 || buffer.charAt(0) != '/' || !CommandWhitelistBukkit.getCommands(player) + .contains(buffer.substring(1, commandEnd).toLowerCase())) { + CommandWhitelistBukkit.getConfigCache().debug("Actively prevented " + event.getSender().getName() + "'s tab completion (sus packet)"); event.setCancelled(true); return; } diff --git a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeTabcompleteListener.java b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeTabcompleteListener.java index a9b22ec..4e2fdf8 100644 --- a/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeTabcompleteListener.java +++ b/CommandWhitelistWaterfall/src/main/java/eu/endermite/commandwhitelist/waterfall/listeners/BungeeTabcompleteListener.java @@ -7,19 +7,35 @@ import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.event.EventHandler; +import java.util.List; + public class BungeeTabcompleteListener implements Listener { @EventHandler public void onTabcomplete(net.md_5.bungee.api.event.TabCompleteEvent event) { - if (!(event.getReceiver() instanceof ProxiedPlayer)) return; - ProxiedPlayer player = (ProxiedPlayer) event.getReceiver(); - if (event.getSuggestions().isEmpty()) return; + if (!(event.getSender() instanceof ProxiedPlayer)) return; + ProxiedPlayer player = (ProxiedPlayer) event.getSender(); if (player.hasPermission(CWPermission.BYPASS.permission())) return; - CommandUtil.filterSuggestions( + + String cursor = event.getCursor(); + int commandEnd = cursor.indexOf(' '); + if (commandEnd >= 0 && cursor.charAt(0) == '/') { + String command = cursor.substring(1, commandEnd).toLowerCase(); + if (CommandWhitelistWaterfall.getPlugin().getProxy().getPluginManager().isExecutableCommand(command, player) + && !CommandWhitelistWaterfall.getCommands(player).contains(command)) { + event.setCancelled(true); + return; + } + } + if (event.getSuggestions().isEmpty()) return; + + List suggestions = CommandUtil.filterSuggestions( event.getCursor(), event.getSuggestions(), CommandWhitelistWaterfall.getSuggestions(player) ); + event.getSuggestions().clear(); + event.getSuggestions().addAll(suggestions); } }