diff --git a/CommandWhitelistBukkit/pom.xml b/CommandWhitelistBukkit/pom.xml
index 2d1b65f..4e2d1cd 100644
--- a/CommandWhitelistBukkit/pom.xml
+++ b/CommandWhitelistBukkit/pom.xml
@@ -113,5 +113,11 @@
2.2.1
compile
+
+ com.mojang
+ brigadier
+ 1.0.17
+ provided
+
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 ed1f64b..d2d759d 100644
--- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java
@@ -2,6 +2,8 @@ package eu.endermite.commandwhitelist.bukkit;
import eu.endermite.commandwhitelist.bukkit.command.MainCommandExecutor;
import eu.endermite.commandwhitelist.bukkit.listeners.*;
+import eu.endermite.commandwhitelist.bukkit.listeners.protocollib.PacketCommandPreProcessListener;
+import eu.endermite.commandwhitelist.bukkit.listeners.protocollib.PacketCommandSendListener;
import eu.endermite.commandwhitelist.common.CWGroup;
import eu.endermite.commandwhitelist.common.ConfigCache;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
@@ -39,11 +41,12 @@ public class CommandWhitelistBukkit extends JavaPlugin {
if (!getConfigCache().useProtocolLib || protocollib == null || !protocollib.isEnabled()) {
getServer().getPluginManager().registerEvents(new PlayerCommandPreProcessListener(), this);
+ getServer().getPluginManager().registerEvents(new PlayerCommandSendListener(), this);
} else {
PacketCommandPreProcessListener.protocol(this);
+ PacketCommandSendListener.protocol(this);
getLogger().info(ChatColor.AQUA + "Using ProtocolLib for command filter!");
}
- getServer().getPluginManager().registerEvents(new PlayerCommandSendListener(), this);
try {
// Use paper's async tab completions if possible
Class.forName("com.destroystokyo.paper.event.server.AsyncTabCompleteEvent");
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandPreProcessListener.java
similarity index 97%
rename from CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java
rename to CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandPreProcessListener.java
index 639ca4c..09e0d34 100644
--- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/PacketCommandPreProcessListener.java
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandPreProcessListener.java
@@ -1,4 +1,4 @@
-package eu.endermite.commandwhitelist.bukkit.listeners;
+package eu.endermite.commandwhitelist.bukkit.listeners.protocollib;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
diff --git a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandSendListener.java b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandSendListener.java
new file mode 100644
index 0000000..97f57de
--- /dev/null
+++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/protocollib/PacketCommandSendListener.java
@@ -0,0 +1,40 @@
+package eu.endermite.commandwhitelist.bukkit.listeners.protocollib;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
+import com.comphenix.protocol.events.ListenerPriority;
+import com.comphenix.protocol.events.PacketAdapter;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.events.PacketEvent;
+import com.mojang.brigadier.tree.RootCommandNode;
+import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit;
+import eu.endermite.commandwhitelist.common.CWPermission;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+import java.util.HashSet;
+
+public class PacketCommandSendListener {
+
+ public static void protocol(CommandWhitelistBukkit plugin) {
+ ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
+ commandSendListener(protocolManager, plugin);
+ }
+
+ public static void commandSendListener(ProtocolManager protocolManager, Plugin plugin) {
+ protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.HIGHEST, PacketType.Play.Server.COMMANDS) {
+ @Override
+ public void onPacketSending(PacketEvent event) {
+ Player player = event.getPlayer();
+ if (player.hasPermission(CWPermission.BYPASS.permission())) return;
+
+ HashSet commandList = CommandWhitelistBukkit.getCommands(player);
+ PacketContainer packet = event.getPacket();
+ RootCommandNode> node = (RootCommandNode>) packet.getModifier().getValues().get(0);
+ node.getChildren().removeIf((cmd) -> !commandList.contains(cmd.getName()));
+ }
+ });
+ }
+
+}