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())); + } + }); + } + +}