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 284f2b1..bcba85e 100644 --- a/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/CommandWhitelistBukkit.java @@ -1,10 +1,7 @@ package eu.endermite.commandwhitelist.bukkit; import eu.endermite.commandwhitelist.bukkit.command.MainCommandExecutor; -import eu.endermite.commandwhitelist.bukkit.listeners.PacketCommandPreProcessListener; -import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandPreProcessListener; -import eu.endermite.commandwhitelist.bukkit.listeners.PlayerCommandSendListener; -import eu.endermite.commandwhitelist.bukkit.listeners.TabCompleteBlockerListener; +import eu.endermite.commandwhitelist.bukkit.listeners.*; import eu.endermite.commandwhitelist.common.CWGroup; import eu.endermite.commandwhitelist.common.ConfigCache; import net.kyori.adventure.platform.bukkit.BukkitAudiences; @@ -47,7 +44,13 @@ public class CommandWhitelistBukkit extends JavaPlugin { PacketCommandPreProcessListener.protocol(this); getLogger().info(ChatColor.AQUA + "Using ProtocolLib for command filter!"); } - getServer().getPluginManager().registerEvents(new TabCompleteBlockerListener(), this); + try { + Class.forName("com.destroystokyo.paper.event.server.AsyncTabCompleteEvent"); + getServer().getPluginManager().registerEvents(new AsyncTabCompleteBlockerListener(), this); + } catch (ClassNotFoundException e) { + getServer().getPluginManager().registerEvents(new TabCompleteBlockerListener(), this); + } + PluginCommand command = getCommand("commandwhitelist"); if (command != null) { 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 new file mode 100644 index 0000000..9d43914 --- /dev/null +++ b/CommandWhitelistBukkit/src/main/java/eu/endermite/commandwhitelist/bukkit/listeners/AsyncTabCompleteBlockerListener.java @@ -0,0 +1,29 @@ +package eu.endermite.commandwhitelist.bukkit.listeners; + +import com.destroystokyo.paper.event.server.AsyncTabCompleteEvent; +import eu.endermite.commandwhitelist.bukkit.CommandWhitelistBukkit; +import eu.endermite.commandwhitelist.common.CWPermission; +import eu.endermite.commandwhitelist.common.CommandUtil; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.Listener; + +public class AsyncTabCompleteBlockerListener implements Listener { + + @EventHandler(priority = EventPriority.NORMAL) + public void onCommandTabComplete(AsyncTabCompleteEvent event) { + if (!(event.getSender() instanceof Player)) return; + Player player = (Player) event.getSender(); + if (player.hasPermission(CWPermission.BYPASS.permission())) return; + event.setCompletions( + CommandUtil.filterSuggestions( + event.getBuffer(), + event.getCompletions(), + CommandWhitelistBukkit.getSuggestions(player) + ) + ); + event.setHandled(true); + } + +}