Compare commits

...
15 Commits
Author SHA1 Message Date
rayzsyt 263e3e6896 Removed unnecessary boolean 2025-08-08 04:34:42 +02:00
rayzsyt 26f326668f Fixed commands-update issue when reloading 2025-08-08 04:33:17 +02:00
rayzsyt 74e26a05f3 Update version name 2025-08-08 04:32:58 +02:00
rayzsyt 36145b1ee7 Update version name 2025-08-07 18:26:43 +02:00
rayzsyt 5f457c6e4a Fixed wrong display of blocked command in chat 2025-08-07 18:26:00 +02:00
rayzsyt 65dc540577 Improved performance of getAllCommands method 2025-08-07 01:59:32 +02:00
rayzsyt c338e29ec4 Changed method call 2025-08-07 01:59:08 +02:00
rayzsyt c253f6684b Small refactoring 2025-08-07 01:58:56 +02:00
rayzsyt aa740ffabf Fixed potential Folia incompatibility 2025-08-07 01:58:38 +02:00
rayzsyt e9ffe83a93 Integrated new methods from Loader 2025-08-07 01:58:19 +02:00
rayzsyt c83e83bb06 Integrated new method from Loader 2025-08-07 01:58:04 +02:00
rayzsyt b3c2e014c1 Add new methods 2025-08-07 01:57:54 +02:00
rayzsyt 6631da42e1 Fixed BLACKLIST mode issues 2025-08-07 01:57:44 +02:00
rayzsyt ac5233582f Change version name & integrated new default methods 2025-08-07 01:57:18 +02:00
rayzsyt 32a1f4351a Change version name 2025-08-07 01:57:01 +02:00
15 changed files with 144 additions and 65 deletions

No files matched your search

+1 -1
View File
@@ -6,7 +6,7 @@
<groupId>de.rayzs.pat</groupId>
<artifactId>ProAntiTab</artifactId>
<version>2.0.7</version>
<version>2.0.9</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
@@ -204,6 +204,8 @@ public class Storage {
} else {
Storage.Blacklist.Experimental.forceCacheReset();
if (isVelocity) {
List<UUID> playerIds = Storage.getLoader().getPlayerIds();
@@ -384,6 +386,19 @@ public class Storage {
public static class Blacklist {
public static class Experimental {
public static void forceCacheReset() {
for (Object o : CACHED_SERVER_BLACKLIST.getCache().asMap().keySet()) {
String s = (String) o;
clearServerBlacklists(s);
loadCachedServerBlacklists(s);
}
}
}
public enum BlockType {
CHAT("[CMD]"),
TAB("[TAB]"),
@@ -428,14 +443,9 @@ public class Storage {
BLACKLIST.getConfig().getKeys("global.servers", true).forEach(key -> {
GeneralBlacklist blacklist = BlacklistCreator.createGeneralBlacklist(key);
blacklist.load();
SERVER_BLACKLISTS.put(key, blacklist);
});
loadAllCachedServerBlacklists();
}
private static void loadAllCachedServerBlacklists() {
getServers().forEach(Blacklist::loadCachedServerBlacklists);
}
@@ -443,9 +453,7 @@ public class Storage {
List<GeneralBlacklist> blacklists = SERVER_BLACKLISTS.entrySet().stream()
.filter(entry ->
isServer(entry.getKey(), server)
).map(entry ->
entry.getValue()
).toList();
).map(Map.Entry::getValue).toList();
CACHED_SERVER_BLACKLIST.put(server, blacklists);
}
@@ -550,7 +558,12 @@ public class Storage {
boolean listed = isListed(command, type, server),
turn = ConfigSections.Settings.TURN_BLACKLIST_TO_WHITELIST.ENABLED;
return !(listed && turn);
if (turn) {
return !listed;
} else {
return listed;
}
}
private static boolean isListed(String unmodifiedCommand, BlockType type, String server) {
@@ -35,6 +35,8 @@ import java.util.*;
public class BukkitLoader extends JavaPlugin implements PluginLoader {
private static List<String> commands = new ArrayList<>(), allowedCommands = new ArrayList<>();
private static Plugin plugin;
private static java.util.logging.Logger logger;
private static boolean loaded = false, suggestions = false;
@@ -42,6 +44,7 @@ public class BukkitLoader extends JavaPlugin implements PluginLoader {
private PATSchedulerTask updaterTask;
private final List<String> offlinePlayerNames = new ArrayList<>();
private long lastCommandsLoad = -1;
@Override
public void onLoad() {
@@ -110,12 +113,15 @@ public class BukkitLoader extends JavaPlugin implements PluginLoader {
if (getServer().getPluginManager().getPlugin("ViaVersion") != null)
ViaVersionAdapter.initialize();
if (Storage.USE_SIMPLECLOUD)
if (Storage.USE_SIMPLECLOUD) {
Logger.warning("Detected SimpleCloud. Therefore, MiniMessages are disabled!");
}
ConfigUpdater.broadcastMissingParts();
ActionHandler.initialize();
SubArgsModule.initialize();
PATScheduler.createScheduler(this::loadAllCommands);
}
@Override
@@ -134,6 +140,21 @@ public class BukkitLoader extends JavaPlugin implements PluginLoader {
}
}
@Override
public void handleReload() {
loadAllCommands();
}
@Override
public boolean doesCommandExist(String command) {
if (commandsMap == null)
return false;
loadAllCommands();
return getAllCommands().contains(command);
}
@Override
public Object getConsoleSender() {
return Bukkit.getConsoleSender();
@@ -309,12 +330,12 @@ public class BukkitLoader extends JavaPlugin implements PluginLoader {
PATEventHandler.callReceiveSyncEvents(packetBundle);
}
public static boolean doesCommandExist(String command, boolean replace) {
if (commandsMap == null)
return false;
public static List<String> getAllCommands() {
return new ArrayList<>(commands);
}
if (replace) command = StringUtils.replaceFirst(command, "/", "");
return getAllCommands().contains(command);
public static List<String> getAllowedCommands() {
return new ArrayList<>(allowedCommands);
}
private void loadCommandMap() {
@@ -325,45 +346,65 @@ public class BukkitLoader extends JavaPlugin implements PluginLoader {
SimpleCommandMap simpleCommandMap = (SimpleCommandMap) commandMapField.get(Bukkit.getPluginManager());
Field knownCommandsField = SimpleCommandMap.class.getDeclaredField("knownCommands");
knownCommandsField.setAccessible(true);
commandsMap = (Map<String, Command>)knownCommandsField.get(simpleCommandMap);
commandsMap = (Map<String, Command>) knownCommandsField.get(simpleCommandMap);
}
} catch (Throwable ignored) { }
if(commandsMap == null)
if (commandsMap == null) {
Logger.warning("Failed to get server commands!");
}
}
public static List<String> getNotBlockedCommands() {
List<String> commands = new ArrayList<>();
Bukkit.getHelpMap().getHelpTopics().stream()
.filter(topic -> !topic.getName().contains(":") && topic.getName().startsWith("/") && !Storage.Blacklist.getBlacklist().isListed(topic.getName().replaceFirst("/", "")))
.forEach(topic -> commands.add(topic.getName().replaceFirst("/", "")));
return commands;
}
private void loadAllCommands() {
public static List<String> getAllCommands() {
if (commandsMap == null) return getNotBlockedCommands();
if (lastCommandsLoad != -1 && System.currentTimeMillis() - lastCommandsLoad < 1000)
return;
List<String> result = new LinkedList<>();
for (String command : commandsMap.keySet()) if(!result.contains(command)) result.add(command);
List<String> result = new ArrayList<>();
if(Reflection.getMinor() == 20 && Reflection.getRelease() >= 5 || Reflection.getMinor() >= 21)
for (String s : commandsMap.keySet()) {
if (commandsMap.containsKey(s)) {
if (!commandsMap.get(s).getAliases().isEmpty()) {
for (String alias : commandsMap.get(s).getAliases()) {
if (!result.contains(alias)) result.add(alias);
}
if (commandsMap == null) {
result.addAll(
Bukkit.getHelpMap().getHelpTopics().stream()
.map(topic -> {
String name = topic.getName();
} else if (Bukkit.getServer().getCommandAliases().get(s) != null)
for (String alias : Bukkit.getServer().getCommandAliases().get(s))
if (!result.contains(alias)) result.add(alias);
}
if (name.startsWith("/"))
name = name.substring(1);
return name;
}).toList()
);
return;
}
commandsMap.entrySet().forEach(entry -> {
String key = entry.getKey();
Command command = entry.getValue();
result.add(key);
if (!command.getAliases().isEmpty()) {
result.addAll(command.getAliases());
}
});
boolean turn = Storage.ConfigSections.Settings.TURN_BLACKLIST_TO_WHITELIST.ENABLED;
List<String> allowedCommands = new ArrayList<>(result).stream().filter(command -> {
if (turn) {
return Storage.Blacklist.getBlacklist().isListed(command);
} else {
return !Storage.Blacklist.getBlacklist().isListed(command);
}
return result;
}
}).toList();
lastCommandsLoad = System.currentTimeMillis();
BukkitLoader.commands = result;
BukkitLoader.allowedCommands = allowedCommands;
}
public static boolean useSuggestions() {
return suggestions;
@@ -33,7 +33,6 @@ public class BungeeLoader extends Plugin implements PluginLoader {
private static Plugin plugin;
private static java.util.logging.Logger logger;
private static boolean checkUpdate = false;
private static final HashMap<String, CommandsCache> commandsCacheMap = new HashMap<>();
@Override
@@ -113,6 +112,14 @@ public class BungeeLoader extends Plugin implements PluginLoader {
}
}
@Override
public void handleReload() {}
@Override
public boolean doesCommandExist(String command) {
return false;
}
@Override
public Object getConsoleSender() {
return ProxyServer.getInstance().getConsole();
@@ -8,6 +8,9 @@ import java.util.UUID;
public interface PluginLoader {
void handleReload();
boolean doesCommandExist(String command);
HashMap<String, CommandsCache> getCommandsCacheMap();
void updateCommandCache();
@@ -38,7 +38,7 @@ import java.util.*;
@Plugin(name = "ProAntiTab",
id = "proantitab",
version = "2.0.7",
version = "2.0.9",
authors = "Rayzs_YT",
description = "Hide more than just your plugins. Hide almost everything!",
url = "https://www.rayzs.de/products/proantitab/page",
@@ -58,7 +58,6 @@ public class VelocityLoader implements PluginLoader {
private ScheduledTask updaterTask;
private static final HashMap<String, CommandsCache> commandsCacheMap = new HashMap<>();
private static boolean checkUpdate = false;
@Inject
public VelocityLoader(ProxyServer server, org.slf4j.Logger logger, VelocityMetrics.Factory metricsFactory) {
@@ -145,6 +144,14 @@ public class VelocityLoader implements PluginLoader {
}).delay(1, TimeUnit.SECONDS).schedule();
}
@Override
public void handleReload() {}
@Override
public boolean doesCommandExist(String command) {
return false;
}
@Override
public Object getConsoleSender() {
return server.getConsoleCommandSource();
@@ -13,7 +13,6 @@ import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import de.rayzs.pat.api.event.PATEventHandler;
import de.rayzs.pat.api.event.events.ExecuteCommandEvent;
import de.rayzs.pat.api.storage.Storage;
import de.rayzs.pat.plugin.BukkitLoader;
import de.rayzs.pat.plugin.logger.Logger;
import de.rayzs.pat.utils.StringUtils;
import de.rayzs.pat.utils.message.MessageTranslator;
@@ -25,14 +24,20 @@ public class BukkitBlockCommandListener implements Listener {
public void onUnknownCommandRecognition(PlayerCommandPreprocessEvent event) {
Player player = event.getPlayer();
World world = player.getWorld();
String rawCommand = StringUtils.getFirstArg(event.getMessage()),
command = rawCommand.substring(1);
if (!Storage.ConfigSections.Settings.CUSTOM_UNKNOWN_COMMAND.ENABLED || event.isCancelled()) return;
if (PermissionUtil.hasBypassPermission(player)) return;
//if (BukkitLoader.doesCommandExist(command, false)) return;
if (Bukkit.getHelpMap().getHelpTopic(rawCommand) != null) return;
if (PermissionUtil.hasBypassPermission(player))
return;
if (Storage.getLoader().doesCommandExist(command))
return;
if (Bukkit.getHelpMap().getHelpTopic(rawCommand) != null)
return;
event.setCancelled(true);
MessageTranslator.send(player, Storage.ConfigSections.Settings.CUSTOM_UNKNOWN_COMMAND.MESSAGE, "%command%", command, "%world%", world.getName());
@@ -65,9 +70,7 @@ public class BukkitBlockCommandListener implements Listener {
command = command.substring(1);
command = StringUtils.getFirstArg(command);
final String displayName = command;
command = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
final String displayName = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
command = command.toLowerCase();
List<String> notificationMessage = MessageTranslator.replaceMessageList(
@@ -36,9 +36,8 @@ public class BungeeBlockCommandListener implements Listener {
command = command.startsWith("/") ? command.substring(1) : command;
command = StringUtils.getFirstArg(command);
final String displayCommand = command;
final String displayCommand = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
command = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
command = command.toLowerCase();
List<String> notificationMessage = MessageTranslator.replaceMessageList(
@@ -39,9 +39,8 @@ public class VelocityBlockCommandListener {
if (bypassPermission)
return event;
final String displayCommand = command;
final String displayCommand = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
command = StringUtils.replaceTriggers(command, "", "\\", "<", ">", "&");
command = command.toLowerCase();
@@ -1,5 +1,6 @@
package de.rayzs.pat.plugin.metrics.impl;
import de.rayzs.pat.utils.scheduler.PATScheduler;
import org.bukkit.configuration.file.YamlConfiguration;
import java.nio.charset.StandardCharsets;
import javax.net.ssl.HttpsURLConnection;
@@ -171,7 +172,7 @@ public class BukkitMetrics {
}
// Nevertheless we want our code to run in the Bukkit main thread, so we have to use the Bukkit scheduler
// Don't be afraid! The connection to the bStats server is still async, only the stats collection is sync ;)
Bukkit.getScheduler().runTask(plugin, this::submitData);
PATScheduler.createScheduler(this::submitData);
};
// Many servers tend to restart at a fixed time at xx:00 which causes an uneven distribution of requests on the
@@ -23,7 +23,10 @@ public class ExecuteCommand extends ExecuteCommandEvent {
? command.substring(1)
: command;
final String displayCommand = StringUtils.getFirstArg(command);
final String displayCommand = StringUtils.replaceTriggers(
command, "",
"\\", "<", ">", "&"
);
CommandSender sender = CommandSenderHandler.from(event.getSenderObj());
@@ -37,7 +40,7 @@ public class ExecuteCommand extends ExecuteCommandEvent {
MessageTranslator.send(
event.getSenderObj(),
Storage.ConfigSections.Settings.CUSTOM_PLUGIN.MESSAGE,
"%command%", displayCommand
"%command%", StringUtils.getFirstArg(displayCommand)
);
event.setBlocked(true);
@@ -51,7 +54,7 @@ public class ExecuteCommand extends ExecuteCommandEvent {
MessageTranslator.send(
event.getSenderObj(),
Storage.ConfigSections.Settings.CUSTOM_VERSION.MESSAGE,
"%command%", displayCommand
"%command%", StringUtils.getFirstArg(displayCommand)
);
event.setBlocked(true);
@@ -66,7 +69,7 @@ public class ExecuteCommand extends ExecuteCommandEvent {
MessageTranslator.send(event.getSenderObj(),
ResponseHandler.getResponse(uuid, event.getCommand()),
"%command%", command);
"%command%", displayCommand);
return;
}
@@ -79,7 +82,7 @@ public class ExecuteCommand extends ExecuteCommandEvent {
MessageTranslator.send(
event.getSenderObj(),
ResponseHandler.getResponse(uuid, event.getCommand(), Storage.ConfigSections.Settings.CANCEL_COMMAND.BASE_COMMAND_RESPONSE.getLines()),
"%command%", displayCommand
"%command%", StringUtils.getFirstArg(displayCommand)
);
}
@@ -107,7 +107,7 @@ public class AddCommand extends ProCommand {
if (Reflection.isProxyServer())
return null;
return BukkitLoader.getNotBlockedCommands();
return BukkitLoader.getAllowedCommands();
}
String fullString = String.join(" ", args);
@@ -2,6 +2,7 @@ package de.rayzs.pat.plugin.process.impl.local.system;
import de.rayzs.pat.api.communication.BackendUpdater;
import de.rayzs.pat.api.brand.CustomServerBrand;
import de.rayzs.pat.api.storage.blacklist.impl.GeneralBlacklist;
import de.rayzs.pat.utils.configuration.updater.ConfigUpdater;
import de.rayzs.pat.utils.group.GroupManager;
import de.rayzs.pat.api.command.ProCommand;
@@ -26,6 +27,7 @@ public class ReloadCommand extends ProCommand {
sender.sendMessage(Storage.ConfigSections.Messages.RELOAD.LOADING);
Storage.loadAll(Reflection.isProxyServer() || !backend);
CustomServerBrand.initialize();
GroupManager.clearAllGroups();
GroupManager.initialize();
@@ -42,6 +44,7 @@ public class ReloadCommand extends ProCommand {
}
ConfigUpdater.initialize();
Storage.getLoader().handleReload();
sender.sendMessage(Storage.ConfigSections.Messages.RELOAD.DONE);
return true;
+1 -1
View File
@@ -3,7 +3,7 @@ description: Hide more than just your plugins. Hide almost everything!
website: https://www.rayzs.de/products/proantitab/page
author: Rayzs_YT
version: 2.0.7
version: 2.0.9
main: de.rayzs.pat.plugin.BungeeLoader
softDepends: [LuckPerms, PAPIProxyBridge]
+1 -1
View File
@@ -3,7 +3,7 @@ description: Hide more than just your plugins. Hide almost everything!
website: https://www.rayzs.de/products/proantitab/page
author: Rayzs_YT
version: 2.0.7
version: 2.0.9
api-version: 1.13
folia-supported: true
main: de.rayzs.pat.plugin.BukkitLoader