Compare commits

...

5 Commits

Author SHA1 Message Date
YouHaveTrouble 9da87b2769 fixed missing ignoreCancelled 2021-05-22 15:53:11 +02:00
YouHaveTrouble 12ed028460 guess what, legacy issues again. 2021-05-16 19:17:45 +02:00
YouHaveTrouble 66e6bff28e no idea how they managed to dispatch player command without / but ok 2021-05-07 00:43:54 +02:00
YouHaveTrouble 332e98f4a0 add fancy server counters 2021-03-30 16:34:34 +02:00
YouHaveTrouble 2085002c59 fix preProcessEvent no being registered in legacy mode 2021-03-26 15:36:05 +01:00
7 changed files with 49 additions and 6 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>eu.endermite</groupId>
<artifactId>CommandWhitelist</artifactId>
<version>1.7.2</version>
<version>1.7.6</version>
<packaging>jar</packaging>
<name>CommandWhitelist</name>
+3
View File
@@ -1,6 +1,9 @@
Command Whitelist is a plugin that allows you to control
precisely what commands players can see and use.
<img src="https://img.shields.io/bstats/servers/8705?label=Spigot%20servers%20using%20CommandWhitelist&style=for-the-badge">
<img src="https://img.shields.io/bstats/servers/8704?label=Proxy%20servers%20using%20CommandWhitelist&style=for-the-badge">
<h3>Plugin Features</h3>
<ul>
@@ -63,4 +63,11 @@ public class CommandsList {
return last;
}
public static String getCommandLabel(String cmd) {
String[] parts = cmd.split(" ");
if (parts[0].startsWith("/"))
parts[0] = parts[0].substring(1);
return parts[0];
}
}
@@ -28,9 +28,10 @@ public class CommandWhitelist extends JavaPlugin {
Plugin protocollib = getServer().getPluginManager().getPlugin("ProtocolLib");
getServer().getPluginManager().registerEvents(new PlayerCommandPreProcessListener(), this);
if (!isLegacy) {
if (!getConfigCache().isUseProtocolLib() || protocollib == null || !protocollib.isEnabled()) {
getServer().getPluginManager().registerEvents(new PlayerCommandPreProcessListener(), this);
getServer().getPluginManager().registerEvents(new PlayerCommandSendListener(), this);
} else {
PacketCommandSendListener.protocol(this);
@@ -19,6 +19,7 @@ public class LegacyPlayerTabChatCompleteListener {
public static void protocol(CommandWhitelist plugin) {
ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
tabCompleteServerBound(protocolManager, plugin);
tabCompleteClientBound(protocolManager, plugin);
}
public static void tabCompleteServerBound(ProtocolManager protocolManager, Plugin plugin) {
@@ -52,4 +53,33 @@ public class LegacyPlayerTabChatCompleteListener {
}
});
}
public static void tabCompleteClientBound(ProtocolManager protocolManager, Plugin plugin) {
protocolManager.addPacketListener(new PacketAdapter(plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.TAB_COMPLETE) {
@Override
public void onPacketReceiving(PacketEvent event) {
try {
Player player = event.getPlayer();
if (player.hasPermission("commandwhitelist.bypass")) {
return;
}
PacketContainer packet = event.getPacket();
String command = packet.getSpecificModifier(String.class).read(0);
String label = CommandsList.getCommandLabel(command);
List<String> commandList = CommandsList.getCommands(player);
if (command.equals("/"))
return;
for (String cmd : commandList) {
if (cmd.startsWith("/"+label+" "))
return;
}
event.setCancelled(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
@@ -13,22 +13,24 @@ import java.util.List;
import java.util.Map;
public class PlayerCommandPreProcessListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void PlayerCommandSendEvent(org.bukkit.event.player.PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
if (player.hasPermission("commandwhitelist.bypass"))
return;
String command = event.getMessage().toLowerCase();
if (command.startsWith("/"))
command = command.substring(1);
for (Map.Entry<String, List<String>> s : CommandWhitelist.getConfigCache().getPermList().entrySet()) {
if (!player.hasPermission("commandwhitelist.commands." + s.getKey()))
continue;
for (String comm : s.getValue()) {
comm = comm.toLowerCase();
if (command.equalsIgnoreCase("/" + comm) || command.startsWith("/" + comm + " ")) {
if (command.equalsIgnoreCase(comm) || command.startsWith(comm + " ")) {
String rawCmd = event.getMessage();
List<String> bannedSubCommands = CommandsList.getSuggestions(player);
for (String bannedSubCommand : bannedSubCommands) {
if (rawCmd.startsWith("/"+bannedSubCommand)) {
if (rawCmd.startsWith(bannedSubCommand)) {
event.setCancelled(true);
ConfigCache config = CommandWhitelist.getConfigCache();
player.sendMessage(ChatColor.translateAlternateColorCodes('&', config.getPrefix() + RandomStuff.getMessage(config.getCommandDeniedList(), config.getSubCommandDenied())));
@@ -8,7 +8,7 @@ import org.bukkit.event.Listener;
import java.util.*;
public class PlayerCommandSendListener implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
public void PlayerCommandSendEvent(org.bukkit.event.player.PlayerCommandSendEvent event) {
Player player = event.getPlayer();
if (player.hasPermission("commandwhitelist.bypass"))