From 583394d22e9af1fd6e4ed6139d556291e78f4bf5 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 01:16:05 -0400 Subject: [PATCH 01/26] part 1 --- src/main/java/dev/plex/Plex.java | 8 ++++ .../java/dev/plex/cmdblocker/BaseCommand.java | 17 +++++++ .../cmdblocker/CommandBlockerManager.java | 46 +++++++++++++++++++ .../dev/plex/cmdblocker/MatchCommand.java | 16 +++++++ .../dev/plex/cmdblocker/RegexCommand.java | 18 ++++++++ .../java/dev/plex/command/impl/PlexCMD.java | 6 ++- .../listener/impl/CmdBlockerListener.java | 19 ++++++++ src/main/resources/commands.yml | 19 ++++++++ src/main/resources/messages.yml | 3 +- 9 files changed, 150 insertions(+), 2 deletions(-) create mode 100644 src/main/java/dev/plex/cmdblocker/BaseCommand.java create mode 100644 src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java create mode 100644 src/main/java/dev/plex/cmdblocker/MatchCommand.java create mode 100644 src/main/java/dev/plex/cmdblocker/RegexCommand.java create mode 100644 src/main/java/dev/plex/listener/impl/CmdBlockerListener.java create mode 100644 src/main/resources/commands.yml diff --git a/src/main/java/dev/plex/Plex.java b/src/main/java/dev/plex/Plex.java index cd19578..cdbf957 100644 --- a/src/main/java/dev/plex/Plex.java +++ b/src/main/java/dev/plex/Plex.java @@ -8,6 +8,7 @@ import dev.plex.cache.player.PlayerCache; import dev.plex.cache.player.SQLPlayerData; import dev.plex.cache.sql.SQLNotes; import dev.plex.cache.sql.SQLPunishment; +import dev.plex.cmdblocker.CommandBlockerManager; import dev.plex.config.Config; import dev.plex.handlers.CommandHandler; import dev.plex.handlers.ListenerHandler; @@ -44,6 +45,7 @@ public class Plex extends JavaPlugin public Config config; public Config messages; public Config indefBans; + public Config blockedCommands; public File modulesFolder; private StorageType storageType = StorageType.SQLITE; @@ -62,6 +64,7 @@ public class Plex extends JavaPlugin private RankManager rankManager; private ServiceManager serviceManager; private PunishmentManager punishmentManager; + private CommandBlockerManager commandBlockerManager; private AdminList adminList; private UpdateChecker updateChecker; @@ -79,6 +82,7 @@ public class Plex extends JavaPlugin config = new Config(this, "config.yml"); messages = new Config(this, "messages.yml"); indefBans = new Config(this, "indefbans.yml"); + blockedCommands = new Config(this, "commands.yml"); build.load(this); modulesFolder = new File(this.getDataFolder() + File.separator + "modules"); @@ -99,6 +103,7 @@ public class Plex extends JavaPlugin messages.load(); // Don't add default entries to indefinite ban file indefBans.load(false); + blockedCommands.load(); sqlConnection = new SQLConnection(); mongoConnection = new MongoConnection(); @@ -158,6 +163,9 @@ public class Plex extends JavaPlugin punishmentManager.mergeIndefiniteBans(); PlexLog.log("Punishment System initialized"); + commandBlockerManager = new CommandBlockerManager(); + PlexLog.log("Command Blocker initialized"); + generateWorlds(); serviceManager = new ServiceManager(); diff --git a/src/main/java/dev/plex/cmdblocker/BaseCommand.java b/src/main/java/dev/plex/cmdblocker/BaseCommand.java new file mode 100644 index 0000000..21d148a --- /dev/null +++ b/src/main/java/dev/plex/cmdblocker/BaseCommand.java @@ -0,0 +1,17 @@ +package dev.plex.cmdblocker; + +import dev.plex.rank.enums.Rank; +import lombok.Getter; + +@Getter +public class BaseCommand +{ + public final Rank rank; + public final String message; + + public BaseCommand(Rank r, String m) + { + rank = r; + message = m; + } +} diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java new file mode 100644 index 0000000..5d56df2 --- /dev/null +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -0,0 +1,46 @@ +package dev.plex.cmdblocker; + +import dev.plex.Plex; +import dev.plex.rank.enums.Rank; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; + +public class CommandBlockerManager +{ + private List blockedCommands = new ArrayList<>(); + + public void syncCommands() + { + blockedCommands.clear(); + + List raw = Plex.get().blockedCommands.getStringList("blockedCommands"); + + for (String cmd : raw) + { + List pieces = new ArrayList<>(); + + int lastDelim = cmd.lastIndexOf(':'); + + String cmdWithoutMsg = cmd.substring(0, lastDelim); + String[] rawPieces = cmdWithoutMsg.split(":", 3); + + pieces.add(rawPieces[0].toLowerCase()); // type + pieces.add(rawPieces[1].toLowerCase()); // rank + pieces.add(rawPieces[2]); // RegEx or match + pieces.add(cmd.substring(lastDelim + 1)); // Message (w/o : in it) + + Rank rank = Plex.get().getRankManager().getRankFromString(pieces.get(1)); + + if (pieces.get(0).equals("r")) + { + blockedCommands.add(new RegexCommand(Pattern.compile(pieces.get(2)), rank, pieces.get(3))); + } + else if (pieces.get(0).equals("m")) + { + blockedCommands.add(new MatchCommand(pieces.get(2), rank, pieces.get(3))); + } + } + } +} diff --git a/src/main/java/dev/plex/cmdblocker/MatchCommand.java b/src/main/java/dev/plex/cmdblocker/MatchCommand.java new file mode 100644 index 0000000..96ec6cf --- /dev/null +++ b/src/main/java/dev/plex/cmdblocker/MatchCommand.java @@ -0,0 +1,16 @@ +package dev.plex.cmdblocker; + +import dev.plex.rank.enums.Rank; +import lombok.Getter; + +@Getter +public class MatchCommand extends BaseCommand +{ + public final String match; + + public MatchCommand(String r1, Rank r2, String m1) + { + super(r2, m1); + match = r1; + } +} diff --git a/src/main/java/dev/plex/cmdblocker/RegexCommand.java b/src/main/java/dev/plex/cmdblocker/RegexCommand.java new file mode 100644 index 0000000..fd2c027 --- /dev/null +++ b/src/main/java/dev/plex/cmdblocker/RegexCommand.java @@ -0,0 +1,18 @@ +package dev.plex.cmdblocker; + +import dev.plex.rank.enums.Rank; +import lombok.Getter; + +import java.util.regex.Pattern; + +@Getter +public class RegexCommand extends BaseCommand +{ + public final Pattern regex; + + public RegexCommand(Pattern r1, Rank r2, String m1) + { + super(r2, m1); + regex = r1; + } +} \ No newline at end of file diff --git a/src/main/java/dev/plex/command/impl/PlexCMD.java b/src/main/java/dev/plex/command/impl/PlexCMD.java index c6baa8e..1bcb86d 100644 --- a/src/main/java/dev/plex/command/impl/PlexCMD.java +++ b/src/main/java/dev/plex/command/impl/PlexCMD.java @@ -18,6 +18,7 @@ import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.Component; import org.apache.commons.lang.StringUtils; +import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.jetbrains.annotations.NotNull; @@ -51,13 +52,16 @@ public class PlexCMD extends PlexCommand plugin.indefBans.load(false); plugin.getPunishmentManager().mergeIndefiniteBans(); send(sender, "Reloaded indefinite bans"); + plugin.blockedCommands.load(); + plugin.getCommandBlockerManager().syncCommands(); + send(sender, "Reloaded blocked commands file"); plugin.getRankManager().importDefaultRanks(); send(sender, "Imported ranks"); - send(sender, "Plex successfully reloaded."); plugin.setSystem(plugin.config.getString("system")); plugin.getServiceManager().endServices(); plugin.getServiceManager().startServices(); PlexLog.debug("Restarted services"); + send(sender, "Plex successfully reloaded."); return null; } else if (args[0].equalsIgnoreCase("redis")) diff --git a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java new file mode 100644 index 0000000..831ab4b --- /dev/null +++ b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java @@ -0,0 +1,19 @@ +package dev.plex.listener.impl; + +import dev.plex.listener.PlexListener; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.EventPriority; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; + +public class CmdBlockerListener extends PlexListener +{ + @EventHandler(priority = EventPriority.HIGHEST) + public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) + { + Player player = event.getPlayer(); + String message = event.getMessage().substring(1); + // check if commands are blocked here + // DEFAULT message is named "commandBlocked" + } +} diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml new file mode 100644 index 0000000..f095f74 --- /dev/null +++ b/src/main/resources/commands.yml @@ -0,0 +1,19 @@ +# +# Command Blocker +# +# Format: +# - "::command name no slash:Block message" +# +# Symbols to use: +# - r for RegEx +# - m for matching +# - The ranks are "e" for everyone, "a" for admin and "s" for senior admin +# - The command is just the command without slashes. Optional arguments are specified as well +# - Finally the block message. MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in +# +# So these would be valid: +# - "m:e:mail sendall:You cannot send messages to everyone on the server" +# - "r:e:(.*:):Plugin specific commands are disabled" +blockedCommands: + - "m:e:mail sendall:You cannot send messages to everyone on the server" + - "r:e:(.*:):Plugin specific commands are disabled" \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 275138d..ac87e6f 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -166,4 +166,5 @@ noRemovedEntities: "No entities were removed." removedMobs: "{0} - Removed {1} mobs" autoWipeDisabled: "Item wiping is currently disabled in the config!" allowDropsDisabled: "No longer allowing drops from players." -allowDropsEnabled: "Now allowing drops from players." \ No newline at end of file +allowDropsEnabled: "Now allowing drops from players." +commandBlocked: "This command is blocked" \ No newline at end of file From dd94613b99ce672ac60791dc1f35facf42fafbb4 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 01:42:05 -0400 Subject: [PATCH 02/26] part 2 --- .../java/dev/plex/cmdblocker/BaseCommand.java | 4 +-- .../cmdblocker/CommandBlockerManager.java | 22 ++++++++++++- .../dev/plex/cmdblocker/MatchCommand.java | 2 +- .../dev/plex/cmdblocker/RegexCommand.java | 2 +- .../listener/impl/CmdBlockerListener.java | 31 +++++++++++++++++++ src/main/resources/commands.yml | 2 +- src/main/resources/messages.yml | 3 +- 7 files changed, 59 insertions(+), 7 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/BaseCommand.java b/src/main/java/dev/plex/cmdblocker/BaseCommand.java index 21d148a..95bc913 100644 --- a/src/main/java/dev/plex/cmdblocker/BaseCommand.java +++ b/src/main/java/dev/plex/cmdblocker/BaseCommand.java @@ -6,8 +6,8 @@ import lombok.Getter; @Getter public class BaseCommand { - public final Rank rank; - public final String message; + private final Rank rank; + private final String message; public BaseCommand(Rank r, String m) { diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 5d56df2..10a13a9 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -2,11 +2,16 @@ package dev.plex.cmdblocker; import dev.plex.Plex; import dev.plex.rank.enums.Rank; +import dev.plex.util.PlexUtils; +import lombok.Getter; +import net.kyori.adventure.text.minimessage.MiniMessage; +import org.bukkit.command.PluginCommand; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; +@Getter public class CommandBlockerManager { private List blockedCommands = new ArrayList<>(); @@ -31,15 +36,30 @@ public class CommandBlockerManager pieces.add(rawPieces[2]); // RegEx or match pieces.add(cmd.substring(lastDelim + 1)); // Message (w/o : in it) + if (pieces.get(3).equals("_")) + { + pieces.set(3, PlexUtils.messageString("commandBlocked")); + } + Rank rank = Plex.get().getRankManager().getRankFromString(pieces.get(1)); if (pieces.get(0).equals("r")) { - blockedCommands.add(new RegexCommand(Pattern.compile(pieces.get(2)), rank, pieces.get(3))); + blockedCommands.add(new RegexCommand(Pattern.compile(pieces.get(2), Pattern.CASE_INSENSITIVE), rank, pieces.get(3))); } else if (pieces.get(0).equals("m")) { blockedCommands.add(new MatchCommand(pieces.get(2), rank, pieces.get(3))); + String blockedArgs = pieces.get(2).substring(pieces.get(2).indexOf(' ') + 1); + PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(pieces.get(2).substring(0, pieces.get(2).indexOf(' '))); + if (pluginCommand != null) + { + List aliases = pluginCommand.getAliases(); + for (String alias : aliases) + { + blockedCommands.add(new MatchCommand(alias + " " + blockedArgs, rank, pieces.get(3))); + } + } } } } diff --git a/src/main/java/dev/plex/cmdblocker/MatchCommand.java b/src/main/java/dev/plex/cmdblocker/MatchCommand.java index 96ec6cf..7d98ed9 100644 --- a/src/main/java/dev/plex/cmdblocker/MatchCommand.java +++ b/src/main/java/dev/plex/cmdblocker/MatchCommand.java @@ -6,7 +6,7 @@ import lombok.Getter; @Getter public class MatchCommand extends BaseCommand { - public final String match; + private final String match; public MatchCommand(String r1, Rank r2, String m1) { diff --git a/src/main/java/dev/plex/cmdblocker/RegexCommand.java b/src/main/java/dev/plex/cmdblocker/RegexCommand.java index fd2c027..84d2e30 100644 --- a/src/main/java/dev/plex/cmdblocker/RegexCommand.java +++ b/src/main/java/dev/plex/cmdblocker/RegexCommand.java @@ -8,7 +8,7 @@ import java.util.regex.Pattern; @Getter public class RegexCommand extends BaseCommand { - public final Pattern regex; + private final Pattern regex; public RegexCommand(Pattern r1, Rank r2, String m1) { diff --git a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java index 831ab4b..b7b1723 100644 --- a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java +++ b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java @@ -1,6 +1,11 @@ package dev.plex.listener.impl; +import dev.plex.cmdblocker.BaseCommand; +import dev.plex.cmdblocker.MatchCommand; +import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; +import dev.plex.util.PlexUtils; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -15,5 +20,31 @@ public class CmdBlockerListener extends PlexListener String message = event.getMessage().substring(1); // check if commands are blocked here // DEFAULT message is named "commandBlocked" + for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { + //first check rank for if it applies + //then check if command is blocked + boolean isBlocked = false; + if (blockedCommand instanceof RegexCommand regexCommand) + { + // regex + if (regexCommand.getRegex().matcher(message).matches()) + { + isBlocked = true; + } + } + else if(blockedCommand instanceof MatchCommand matchCommand) + { + // match command + if (message.equalsIgnoreCase(matchCommand.getMessage()) || message.toLowerCase().startsWith(matchCommand.getMessage().toLowerCase() + " ")) + { + isBlocked = true; + } + } + if (isBlocked) + { + event.setCancelled(true); + player.sendMessage(MiniMessage.miniMessage().deserialize(PlexUtils.messageString("blockedCommandColor") + blockedCommand.getMessage())); + } + } } } diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index f095f74..1e0d279 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -16,4 +16,4 @@ # - "r:e:(.*:):Plugin specific commands are disabled" blockedCommands: - "m:e:mail sendall:You cannot send messages to everyone on the server" - - "r:e:(.*:):Plugin specific commands are disabled" \ No newline at end of file + - "r:e:[^ ]+:.*:Plugin specific commands are disabled" \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index ac87e6f..8fba7d1 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -167,4 +167,5 @@ removedMobs: "{0} - Removed {1} mobs" autoWipeDisabled: "Item wiping is currently disabled in the config!" allowDropsDisabled: "No longer allowing drops from players." allowDropsEnabled: "Now allowing drops from players." -commandBlocked: "This command is blocked" \ No newline at end of file +blockedCommandColor: "" +commandBlocked: "This command is blocked" \ No newline at end of file From 4320e789d4b1b31ef897649da210fd6875b47065 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 02:15:25 -0400 Subject: [PATCH 03/26] part 3...? --- src/main/java/dev/plex/Plex.java | 1 + .../cmdblocker/CommandBlockerManager.java | 33 +++++++++++++++++-- .../listener/impl/CmdBlockerListener.java | 17 ++++++---- .../dev/plex/services/ServiceManager.java | 11 ++++++- src/main/resources/commands.yml | 5 +-- 5 files changed, 55 insertions(+), 12 deletions(-) diff --git a/src/main/java/dev/plex/Plex.java b/src/main/java/dev/plex/Plex.java index cdbf957..8d356e4 100644 --- a/src/main/java/dev/plex/Plex.java +++ b/src/main/java/dev/plex/Plex.java @@ -164,6 +164,7 @@ public class Plex extends JavaPlugin PlexLog.log("Punishment System initialized"); commandBlockerManager = new CommandBlockerManager(); + getServer().getScheduler().scheduleSyncDelayedTask(this, () -> commandBlockerManager.syncCommands()); PlexLog.log("Command Blocker initialized"); generateWorlds(); diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 10a13a9..43fa5f7 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -4,7 +4,6 @@ import dev.plex.Plex; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; import lombok.Getter; -import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.command.PluginCommand; import java.util.ArrayList; @@ -16,6 +15,8 @@ public class CommandBlockerManager { private List blockedCommands = new ArrayList<>(); + public boolean loadedYet = false; + public void syncCommands() { blockedCommands.clear(); @@ -41,7 +42,31 @@ public class CommandBlockerManager pieces.set(3, PlexUtils.messageString("commandBlocked")); } - Rank rank = Plex.get().getRankManager().getRankFromString(pieces.get(1)); + Rank rank; + + switch (pieces.get(1)) + { + case "i": + rank = Rank.IMPOSTOR; + break; + case "n": + rank = Rank.NONOP; + break; + case "o": + rank = Rank.OP; + break; + case "a": + rank = Rank.ADMIN; + break; + case "s": + rank = Rank.SENIOR_ADMIN; + break; + case "e": + rank = Rank.EXECUTIVE; + break; + default: + rank = Rank.EXECUTIVE; + } if (pieces.get(0).equals("r")) { @@ -49,11 +74,11 @@ public class CommandBlockerManager } else if (pieces.get(0).equals("m")) { - blockedCommands.add(new MatchCommand(pieces.get(2), rank, pieces.get(3))); String blockedArgs = pieces.get(2).substring(pieces.get(2).indexOf(' ') + 1); PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(pieces.get(2).substring(0, pieces.get(2).indexOf(' '))); if (pluginCommand != null) { + blockedCommands.add(new MatchCommand(pluginCommand.getName() + " " + blockedArgs, rank, pieces.get(3))); List aliases = pluginCommand.getAliases(); for (String alias : aliases) { @@ -62,5 +87,7 @@ public class CommandBlockerManager } } } + + loadedYet = true; } } diff --git a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java index b7b1723..5576ae3 100644 --- a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java +++ b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java @@ -1,9 +1,11 @@ package dev.plex.listener.impl; +import dev.plex.cache.DataUtils; import dev.plex.cmdblocker.BaseCommand; import dev.plex.cmdblocker.MatchCommand; import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; +import dev.plex.player.PlexPlayer; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.entity.Player; @@ -16,17 +18,21 @@ public class CmdBlockerListener extends PlexListener @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) { + if (!plugin.getCommandBlockerManager().loadedYet) + { + event.setCancelled(true); + return; + } Player player = event.getPlayer(); String message = event.getMessage().substring(1); - // check if commands are blocked here - // DEFAULT message is named "commandBlocked" for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { - //first check rank for if it applies - //then check if command is blocked + if (DataUtils.getPlayer(player.getUniqueId()).getRankFromString().ordinal() > blockedCommand.getRank().ordinal()) + { + return; + } boolean isBlocked = false; if (blockedCommand instanceof RegexCommand regexCommand) { - // regex if (regexCommand.getRegex().matcher(message).matches()) { isBlocked = true; @@ -34,7 +40,6 @@ public class CmdBlockerListener extends PlexListener } else if(blockedCommand instanceof MatchCommand matchCommand) { - // match command if (message.equalsIgnoreCase(matchCommand.getMessage()) || message.toLowerCase().startsWith(matchCommand.getMessage().toLowerCase() + " ")) { isBlocked = true; diff --git a/src/main/java/dev/plex/services/ServiceManager.java b/src/main/java/dev/plex/services/ServiceManager.java index 10e9b83..f822215 100644 --- a/src/main/java/dev/plex/services/ServiceManager.java +++ b/src/main/java/dev/plex/services/ServiceManager.java @@ -45,7 +45,16 @@ public class ServiceManager { if (!service.isRepeating()) { - BukkitTask task = Bukkit.getScheduler().runTask(Plex.get(), service::run); + int time = service.repeatInSeconds(); + BukkitTask task; + if (time == 0) + { + task = Bukkit.getScheduler().runTask(Plex.get(), service::run); + } + else + { + task = Bukkit.getScheduler().runTaskLater(Plex.get(), service::run, time); + } service.setTaskId(task.getTaskId()); } else if (service.isRepeating() && service.isAsynchronous()) diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 1e0d279..6103b84 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -7,7 +7,8 @@ # Symbols to use: # - r for RegEx # - m for matching -# - The ranks are "e" for everyone, "a" for admin and "s" for senior admin +# - The ranks are "e" for executive and below, "a" for admin and below, "s" for senior admin and below, +######## TODO: DOCUMENT ALL OTHER LETTERS!! ^^^^ # - The command is just the command without slashes. Optional arguments are specified as well # - Finally the block message. MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in # @@ -16,4 +17,4 @@ # - "r:e:(.*:):Plugin specific commands are disabled" blockedCommands: - "m:e:mail sendall:You cannot send messages to everyone on the server" - - "r:e:[^ ]+:.*:Plugin specific commands are disabled" \ No newline at end of file + - "r:e:^[^ ]+::Plugin specific commands are disabled" \ No newline at end of file From 9bb316b80befec3cef94275fe964428e848cfbb0 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 02:36:56 -0400 Subject: [PATCH 04/26] part 4.... . .. . incomplete --- src/main/java/dev/plex/Plex.java | 6 +- .../listener/impl/CmdBlockerListener.java | 55 ------------------- .../plex/listener/impl/CommandListener.java | 45 +++++++++++++++ 3 files changed, 50 insertions(+), 56 deletions(-) delete mode 100644 src/main/java/dev/plex/listener/impl/CmdBlockerListener.java diff --git a/src/main/java/dev/plex/Plex.java b/src/main/java/dev/plex/Plex.java index 8d356e4..e127af2 100644 --- a/src/main/java/dev/plex/Plex.java +++ b/src/main/java/dev/plex/Plex.java @@ -164,7 +164,11 @@ public class Plex extends JavaPlugin PlexLog.log("Punishment System initialized"); commandBlockerManager = new CommandBlockerManager(); - getServer().getScheduler().scheduleSyncDelayedTask(this, () -> commandBlockerManager.syncCommands()); + // todo: make this a service lmao --v + getServer().getScheduler().scheduleSyncDelayedTask(this, () -> { + commandBlockerManager.syncCommands(); + PlexLog.log("Command Blocker commands loaded"); + }); PlexLog.log("Command Blocker initialized"); generateWorlds(); diff --git a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java b/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java deleted file mode 100644 index 5576ae3..0000000 --- a/src/main/java/dev/plex/listener/impl/CmdBlockerListener.java +++ /dev/null @@ -1,55 +0,0 @@ -package dev.plex.listener.impl; - -import dev.plex.cache.DataUtils; -import dev.plex.cmdblocker.BaseCommand; -import dev.plex.cmdblocker.MatchCommand; -import dev.plex.cmdblocker.RegexCommand; -import dev.plex.listener.PlexListener; -import dev.plex.player.PlexPlayer; -import dev.plex.util.PlexUtils; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.entity.Player; -import org.bukkit.event.EventHandler; -import org.bukkit.event.EventPriority; -import org.bukkit.event.player.PlayerCommandPreprocessEvent; - -public class CmdBlockerListener extends PlexListener -{ - @EventHandler(priority = EventPriority.HIGHEST) - public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event) - { - if (!plugin.getCommandBlockerManager().loadedYet) - { - event.setCancelled(true); - return; - } - Player player = event.getPlayer(); - String message = event.getMessage().substring(1); - for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { - if (DataUtils.getPlayer(player.getUniqueId()).getRankFromString().ordinal() > blockedCommand.getRank().ordinal()) - { - return; - } - boolean isBlocked = false; - if (blockedCommand instanceof RegexCommand regexCommand) - { - if (regexCommand.getRegex().matcher(message).matches()) - { - isBlocked = true; - } - } - else if(blockedCommand instanceof MatchCommand matchCommand) - { - if (message.equalsIgnoreCase(matchCommand.getMessage()) || message.toLowerCase().startsWith(matchCommand.getMessage().toLowerCase() + " ")) - { - isBlocked = true; - } - } - if (isBlocked) - { - event.setCancelled(true); - player.sendMessage(MiniMessage.miniMessage().deserialize(PlexUtils.messageString("blockedCommandColor") + blockedCommand.getMessage())); - } - } - } -} diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index b393952..9b6270c 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -1,7 +1,13 @@ package dev.plex.listener.impl; +import dev.plex.cache.DataUtils; import dev.plex.cache.player.PlayerCache; +import dev.plex.cmdblocker.BaseCommand; +import dev.plex.cmdblocker.MatchCommand; +import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; +import dev.plex.util.PlexUtils; +import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.entity.Player; @@ -23,5 +29,44 @@ public class CommandListener extends PlexListener pl.sendMessage(ChatColor.GRAY + player.getName() + ": " + command); } }); + + if (!plugin.getCommandBlockerManager().loadedYet) + { + event.setCancelled(true); + return; + } + Player player = event.getPlayer(); + String message = event.getMessage().substring(1); + for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { + if (DataUtils.getPlayer(player.getUniqueId()).getRankFromString().ordinal() > blockedCommand.getRank().ordinal()) + { + continue; + } + boolean isBlocked = false; + if (blockedCommand instanceof RegexCommand regexCommand) + { + System.out.println(regexCommand.getRegex()); + System.out.println(message); + System.out.println(regexCommand.getRegex().matcher(message).results()); + if (regexCommand.getRegex().matcher(message).matches()) + { + isBlocked = true; + } + } + else if(blockedCommand instanceof MatchCommand matchCommand) + { + if (message.equalsIgnoreCase(matchCommand.getMatch()) || message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase() + " ")) + { + isBlocked = true; + } + } + if (isBlocked) + { + System.out.println("BLOCKED?!??!???!!!"); + event.setCancelled(true); + player.sendMessage(MiniMessage.miniMessage().deserialize(PlexUtils.messageString("blockedCommandColor") + blockedCommand.getMessage())); + return; + } + } } } From 78f3127dc91528fca25d62e994d8d1baedb36db4 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 02:49:59 -0400 Subject: [PATCH 05/26] part DONE --- src/main/java/dev/plex/listener/impl/CommandListener.java | 7 +++---- src/main/resources/commands.yml | 1 + 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 9b6270c..b83a8df 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -15,6 +15,8 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import java.util.regex.Matcher; + public class CommandListener extends PlexListener { @EventHandler(priority = EventPriority.HIGHEST) @@ -45,10 +47,7 @@ public class CommandListener extends PlexListener boolean isBlocked = false; if (blockedCommand instanceof RegexCommand regexCommand) { - System.out.println(regexCommand.getRegex()); - System.out.println(message); - System.out.println(regexCommand.getRegex().matcher(message).results()); - if (regexCommand.getRegex().matcher(message).matches()) + if (regexCommand.getRegex().matcher(message).lookingAt()) { isBlocked = true; } diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 6103b84..e02d092 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -17,4 +17,5 @@ # - "r:e:(.*:):Plugin specific commands are disabled" blockedCommands: - "m:e:mail sendall:You cannot send messages to everyone on the server" + - "m:e:mail sendtempall:You cannot send messages to everyone on the server" - "r:e:^[^ ]+::Plugin specific commands are disabled" \ No newline at end of file From 15d9eab91e3f07caf0491bace7033f15695f3a9f Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 02:55:41 -0400 Subject: [PATCH 06/26] final i think update yAY --- src/main/java/dev/plex/Plex.java | 5 ---- .../plex/listener/impl/CommandListener.java | 2 -- .../plex/services/impl/CmdBlockerService.java | 25 +++++++++++++++++++ 3 files changed, 25 insertions(+), 7 deletions(-) create mode 100644 src/main/java/dev/plex/services/impl/CmdBlockerService.java diff --git a/src/main/java/dev/plex/Plex.java b/src/main/java/dev/plex/Plex.java index e127af2..cdbf957 100644 --- a/src/main/java/dev/plex/Plex.java +++ b/src/main/java/dev/plex/Plex.java @@ -164,11 +164,6 @@ public class Plex extends JavaPlugin PlexLog.log("Punishment System initialized"); commandBlockerManager = new CommandBlockerManager(); - // todo: make this a service lmao --v - getServer().getScheduler().scheduleSyncDelayedTask(this, () -> { - commandBlockerManager.syncCommands(); - PlexLog.log("Command Blocker commands loaded"); - }); PlexLog.log("Command Blocker initialized"); generateWorlds(); diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index b83a8df..8d47f4e 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -15,8 +15,6 @@ import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.player.PlayerCommandPreprocessEvent; -import java.util.regex.Matcher; - public class CommandListener extends PlexListener { @EventHandler(priority = EventPriority.HIGHEST) diff --git a/src/main/java/dev/plex/services/impl/CmdBlockerService.java b/src/main/java/dev/plex/services/impl/CmdBlockerService.java new file mode 100644 index 0000000..fc9a4eb --- /dev/null +++ b/src/main/java/dev/plex/services/impl/CmdBlockerService.java @@ -0,0 +1,25 @@ +package dev.plex.services.impl; + +import dev.plex.services.AbstractService; +import dev.plex.util.PlexLog; + +public class CmdBlockerService extends AbstractService +{ + public CmdBlockerService() + { + super(false, true); + } + + @Override + public void run() + { + plugin.getCommandBlockerManager().syncCommands(); + PlexLog.log("Command Blocker commands loaded"); + } + + @Override + public int repeatInSeconds() + { + return 0; + } +} \ No newline at end of file From 92eb900f2224021dad0088c93a5402ae1f8b81ed Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 03:07:47 -0400 Subject: [PATCH 07/26] patch --- src/main/resources/commands.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index e02d092..05df8d5 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -18,4 +18,4 @@ blockedCommands: - "m:e:mail sendall:You cannot send messages to everyone on the server" - "m:e:mail sendtempall:You cannot send messages to everyone on the server" - - "r:e:^[^ ]+::Plugin specific commands are disabled" \ No newline at end of file + - "r:e:^[^ :]+::Plugin specific commands are disabled" \ No newline at end of file From afe178b2c246ad41e95e0b9338958943574ab9c1 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 09:36:52 -0400 Subject: [PATCH 08/26] i forgor to register the service. also removed useless arraylist --- .../cmdblocker/CommandBlockerManager.java | 30 +++++++++---------- .../dev/plex/services/ServiceManager.java | 6 ++-- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 43fa5f7..ebfcbc4 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -25,26 +25,24 @@ public class CommandBlockerManager for (String cmd : raw) { - List pieces = new ArrayList<>(); - int lastDelim = cmd.lastIndexOf(':'); String cmdWithoutMsg = cmd.substring(0, lastDelim); String[] rawPieces = cmdWithoutMsg.split(":", 3); - pieces.add(rawPieces[0].toLowerCase()); // type - pieces.add(rawPieces[1].toLowerCase()); // rank - pieces.add(rawPieces[2]); // RegEx or match - pieces.add(cmd.substring(lastDelim + 1)); // Message (w/o : in it) + String rawType = rawPieces[0].toLowerCase(); + String rawRank = rawPieces[1].toLowerCase(); + String regexOrMatch = rawPieces[2]; + String message = cmd.substring(lastDelim + 1); - if (pieces.get(3).equals("_")) + if (message.equals("_")) { - pieces.set(3, PlexUtils.messageString("commandBlocked")); + message = PlexUtils.messageString("commandBlocked"); } Rank rank; - switch (pieces.get(1)) + switch (rawRank) { case "i": rank = Rank.IMPOSTOR; @@ -68,21 +66,21 @@ public class CommandBlockerManager rank = Rank.EXECUTIVE; } - if (pieces.get(0).equals("r")) + if (rawType.equals("r")) { - blockedCommands.add(new RegexCommand(Pattern.compile(pieces.get(2), Pattern.CASE_INSENSITIVE), rank, pieces.get(3))); + blockedCommands.add(new RegexCommand(Pattern.compile(regexOrMatch, Pattern.CASE_INSENSITIVE), rank, message)); } - else if (pieces.get(0).equals("m")) + else if (rawType.equals("m")) { - String blockedArgs = pieces.get(2).substring(pieces.get(2).indexOf(' ') + 1); - PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(pieces.get(2).substring(0, pieces.get(2).indexOf(' '))); + String blockedArgs = regexOrMatch.substring(regexOrMatch.indexOf(' ') + 1); + PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(regexOrMatch.substring(0, regexOrMatch.indexOf(' '))); if (pluginCommand != null) { - blockedCommands.add(new MatchCommand(pluginCommand.getName() + " " + blockedArgs, rank, pieces.get(3))); + blockedCommands.add(new MatchCommand(pluginCommand.getName() + " " + blockedArgs, rank, message)); List aliases = pluginCommand.getAliases(); for (String alias : aliases) { - blockedCommands.add(new MatchCommand(alias + " " + blockedArgs, rank, pieces.get(3))); + blockedCommands.add(new MatchCommand(alias + " " + blockedArgs, rank, message)); } } } diff --git a/src/main/java/dev/plex/services/ServiceManager.java b/src/main/java/dev/plex/services/ServiceManager.java index f822215..fc73390 100644 --- a/src/main/java/dev/plex/services/ServiceManager.java +++ b/src/main/java/dev/plex/services/ServiceManager.java @@ -2,10 +2,7 @@ package dev.plex.services; import com.google.common.collect.Lists; import dev.plex.Plex; -import dev.plex.services.impl.AutoWipeService; -import dev.plex.services.impl.BanService; -import dev.plex.services.impl.GameRuleService; -import dev.plex.services.impl.UpdateCheckerService; +import dev.plex.services.impl.*; import org.bukkit.Bukkit; import org.bukkit.scheduler.BukkitTask; @@ -21,6 +18,7 @@ public class ServiceManager registerService(new GameRuleService()); registerService(new UpdateCheckerService()); registerService(new AutoWipeService()); + registerService(new CmdBlockerService()); } public void startServices() From 2a23759d34145f9482dfdb424944a9d1f6543ab7 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 09:39:56 -0400 Subject: [PATCH 09/26] remove debug message LMAO --- src/main/java/dev/plex/listener/impl/CommandListener.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 8d47f4e..6051c28 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -59,7 +59,6 @@ public class CommandListener extends PlexListener } if (isBlocked) { - System.out.println("BLOCKED?!??!???!!!"); event.setCancelled(true); player.sendMessage(MiniMessage.miniMessage().deserialize(PlexUtils.messageString("blockedCommandColor") + blockedCommand.getMessage())); return; From af7ca9acef902952c459e8913c1a1f4c92532f99 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 09:43:23 -0400 Subject: [PATCH 10/26] tele was right...this was wrong... match mode now acts simply, as one may intially expect --- src/main/java/dev/plex/listener/impl/CommandListener.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 6051c28..1009f0e 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -52,7 +52,7 @@ public class CommandListener extends PlexListener } else if(blockedCommand instanceof MatchCommand matchCommand) { - if (message.equalsIgnoreCase(matchCommand.getMatch()) || message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase() + " ")) + if (message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase()) /*message.equalsIgnoreCase(matchCommand.getMatch()) || message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase() + " ")*/) { isBlocked = true; } From e84e39b1709b8a7fe97fdc39c69ca6087919e25b Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 09:47:22 -0400 Subject: [PATCH 11/26] update usage for command blocker --- src/main/resources/commands.yml | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 05df8d5..67284fa 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -7,8 +7,7 @@ # Symbols to use: # - r for RegEx # - m for matching -# - The ranks are "e" for executive and below, "a" for admin and below, "s" for senior admin and below, -######## TODO: DOCUMENT ALL OTHER LETTERS!! ^^^^ +# - The ranks are "e" for executive and below, "s" for senior admin and below, "a" for admin and below, "o" for op and below, "n" for nonop and below, and "i" for impostor # - The command is just the command without slashes. Optional arguments are specified as well # - Finally the block message. MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in # @@ -16,6 +15,6 @@ # - "m:e:mail sendall:You cannot send messages to everyone on the server" # - "r:e:(.*:):Plugin specific commands are disabled" blockedCommands: - - "m:e:mail sendall:You cannot send messages to everyone on the server" - - "m:e:mail sendtempall:You cannot send messages to everyone on the server" - - "r:e:^[^ :]+::Plugin specific commands are disabled" \ No newline at end of file + - "m:e:mail sendall:You cannot send messages to everyone on the server." + - "m:e:mail sendtempall:You cannot send messages to everyone on the server." + - "r:e:^[^ :]+::Plugin specific commands are disabled." \ No newline at end of file From 1c4f43187d7b9d516dd372dc2910175bde7e9dcf Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 09:49:35 -0400 Subject: [PATCH 12/26] just in case... --- src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index ebfcbc4..8821876 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -19,6 +19,7 @@ public class CommandBlockerManager public void syncCommands() { + loadedYet = false; blockedCommands.clear(); List raw = Plex.get().blockedCommands.getStringList("blockedCommands"); From 5f7a89d7cd3bab3013a7fd72311cd314c534a871 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 10:17:39 -0400 Subject: [PATCH 13/26] mOre FEATURES!! (+fixes) --- .../cmdblocker/CommandBlockerManager.java | 27 ++++++++++++++++--- .../plex/listener/impl/CommandListener.java | 2 +- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 8821876..7b26bf7 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -4,9 +4,13 @@ import dev.plex.Plex; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; import lombok.Getter; +import org.bukkit.command.Command; import org.bukkit.command.PluginCommand; +import org.bukkit.command.PluginCommandYamlParser; +import org.bukkit.plugin.Plugin; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; @@ -73,15 +77,30 @@ public class CommandBlockerManager } else if (rawType.equals("m")) { - String blockedArgs = regexOrMatch.substring(regexOrMatch.indexOf(' ') + 1); - PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(regexOrMatch.substring(0, regexOrMatch.indexOf(' '))); + int ind = regexOrMatch.indexOf(' '); + if (ind == -1 && regexOrMatch.endsWith(":")) + { + //block all commands from this plugin for the specified rank + Plugin plugin = Arrays.stream(Plex.get().getServer().getPluginManager().getPlugins()).findAny().orElse(null); + if (plugin != null) + { + List commandList = PluginCommandYamlParser.parse(plugin); + for (Command command : commandList) + { + blockedCommands.add(new MatchCommand(command.getName(), rank, message)); + } + } + } + String blockedArgs = ind == -1 ? "" : regexOrMatch.substring(ind + 1); + if (!blockedArgs.isEmpty()) blockedArgs = " " + blockedArgs; // necessary in case no args + PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(ind == -1 ? regexOrMatch : regexOrMatch.substring(0, ind)); if (pluginCommand != null) { - blockedCommands.add(new MatchCommand(pluginCommand.getName() + " " + blockedArgs, rank, message)); + blockedCommands.add(new MatchCommand(pluginCommand.getName() + blockedArgs, rank, message)); List aliases = pluginCommand.getAliases(); for (String alias : aliases) { - blockedCommands.add(new MatchCommand(alias + " " + blockedArgs, rank, message)); + blockedCommands.add(new MatchCommand(alias + blockedArgs, rank, message)); } } } diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 1009f0e..6abb6ff 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -36,7 +36,7 @@ public class CommandListener extends PlexListener return; } Player player = event.getPlayer(); - String message = event.getMessage().substring(1); + String message = event.getMessage().substring(1).stripLeading(); // stripLeading() is VITAL for workaround blocking (/ minecraft:summon) for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { if (DataUtils.getPlayer(player.getUniqueId()).getRankFromString().ordinal() > blockedCommand.getRank().ordinal()) { From 13a458859c23d3e1899bf4c8b4d12f5ca13e30ed Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 10:23:08 -0400 Subject: [PATCH 14/26] me when i dont finish my own code --- src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 7b26bf7..3bd1a44 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -80,8 +80,8 @@ public class CommandBlockerManager int ind = regexOrMatch.indexOf(' '); if (ind == -1 && regexOrMatch.endsWith(":")) { - //block all commands from this plugin for the specified rank - Plugin plugin = Arrays.stream(Plex.get().getServer().getPluginManager().getPlugins()).findAny().orElse(null); + String pluginName = regexOrMatch.substring(0, regexOrMatch.length() - 1); + Plugin plugin = Arrays.stream(Plex.get().getServer().getPluginManager().getPlugins()).filter(pl -> pl.getName().equalsIgnoreCase(pluginName)).findAny().orElse(null); if (plugin != null) { List commandList = PluginCommandYamlParser.parse(plugin); From a784ffbc8ae48306bf7ce5db342da9aac0b7d72a Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 10:29:22 -0400 Subject: [PATCH 15/26] fixes and other things like that --- .../java/dev/plex/cmdblocker/CommandBlockerManager.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 3bd1a44..35ff998 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -88,6 +88,11 @@ public class CommandBlockerManager for (Command command : commandList) { blockedCommands.add(new MatchCommand(command.getName(), rank, message)); + blockedCommands.add(new MatchCommand(pluginName + ":" + command.getName(), rank, message)); + for (String alias : command.getAliases()) { + blockedCommands.add(new MatchCommand(alias, rank, message)); + blockedCommands.add(new MatchCommand(pluginName + ":" + alias, rank, message)); + } } } } @@ -96,11 +101,14 @@ public class CommandBlockerManager PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(ind == -1 ? regexOrMatch : regexOrMatch.substring(0, ind)); if (pluginCommand != null) { + String pluginName = pluginCommand.getPlugin().getName(); blockedCommands.add(new MatchCommand(pluginCommand.getName() + blockedArgs, rank, message)); + blockedCommands.add(new MatchCommand(pluginName + ":" + pluginCommand.getName() + blockedArgs, rank, message)); List aliases = pluginCommand.getAliases(); for (String alias : aliases) { blockedCommands.add(new MatchCommand(alias + blockedArgs, rank, message)); + blockedCommands.add(new MatchCommand(pluginName + ":" + alias + blockedArgs, rank, message)); } } } From 245f7dd4d3bc261e3e91ccb9cf3d887b0c34322f Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 10:41:28 -0400 Subject: [PATCH 16/26] update command blocker usage --- src/main/resources/commands.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 67284fa..16e644e 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -8,7 +8,8 @@ # - r for RegEx # - m for matching # - The ranks are "e" for executive and below, "s" for senior admin and below, "a" for admin and below, "o" for op and below, "n" for nonop and below, and "i" for impostor -# - The command is just the command without slashes. Optional arguments are specified as well +# - MATCHING MODE: The command is just the command without slashes. Optional arguments are specified as well. It also accepts full plugins via specifying the plugin name followed by a ":" (e.g. "viaversion:") +# - REGEX MODE: The command is regex that matches the desired command. It matches case insensitively. # - Finally the block message. MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in # # So these would be valid: From 9f0b8fb56a0b2e92a3a980d965baf50af4c38ef8 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 11:04:55 -0400 Subject: [PATCH 17/26] fix ranks in commandblocker for inactive admins --- src/main/java/dev/plex/listener/impl/CommandListener.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 6abb6ff..e2a67ca 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -6,6 +6,8 @@ import dev.plex.cmdblocker.BaseCommand; import dev.plex.cmdblocker.MatchCommand; import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; +import dev.plex.player.PlexPlayer; +import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; @@ -38,7 +40,8 @@ public class CommandListener extends PlexListener Player player = event.getPlayer(); String message = event.getMessage().substring(1).stripLeading(); // stripLeading() is VITAL for workaround blocking (/ minecraft:summon) for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { - if (DataUtils.getPlayer(player.getUniqueId()).getRankFromString().ordinal() > blockedCommand.getRank().ordinal()) + PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); + if (Math.min(plexPlayer.getRankFromString().ordinal(), (plexPlayer.isAdminActive() ? Rank.EXECUTIVE : Rank.OP).ordinal()) > blockedCommand.getRank().ordinal()) { continue; } From fad5455f768de516971679d85e6a23948b0255c7 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 11:07:11 -0400 Subject: [PATCH 18/26] small changes tweaks, if you will. --- src/main/resources/commands.yml | 4 ++-- src/main/resources/messages.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 16e644e..22d9048 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -16,6 +16,6 @@ # - "m:e:mail sendall:You cannot send messages to everyone on the server" # - "r:e:(.*:):Plugin specific commands are disabled" blockedCommands: + - "r:e:^[^ :]+::Plugin specific commands are disabled." - "m:e:mail sendall:You cannot send messages to everyone on the server." - - "m:e:mail sendtempall:You cannot send messages to everyone on the server." - - "r:e:^[^ :]+::Plugin specific commands are disabled." \ No newline at end of file + - "m:e:mail sendtempall:You cannot send messages to everyone on the server." \ No newline at end of file diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 8fba7d1..878263d 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -168,4 +168,4 @@ autoWipeDisabled: "Item wiping is currently disabled in the config!" allowDropsDisabled: "No longer allowing drops from players." allowDropsEnabled: "Now allowing drops from players." blockedCommandColor: "" -commandBlocked: "This command is blocked" \ No newline at end of file +commandBlocked: "This command is blocked." \ No newline at end of file From 797372f4b6b36f9cc7d4b464d36cdaef77100481 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 11:12:35 -0400 Subject: [PATCH 19/26] AAAAA PANIC CONSISTENCY...GONE... --- src/main/resources/messages.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/messages.yml b/src/main/resources/messages.yml index 878263d..2870cc6 100644 --- a/src/main/resources/messages.yml +++ b/src/main/resources/messages.yml @@ -168,4 +168,4 @@ autoWipeDisabled: "Item wiping is currently disabled in the config!" allowDropsDisabled: "No longer allowing drops from players." allowDropsEnabled: "Now allowing drops from players." blockedCommandColor: "" -commandBlocked: "This command is blocked." \ No newline at end of file +commandBlocked: "That command is blocked." \ No newline at end of file From d756dcb2f45966d89386c4605b220dee006a90c4 Mon Sep 17 00:00:00 2001 From: 9378062 Date: Fri, 8 Apr 2022 12:26:46 -0400 Subject: [PATCH 20/26] final update before looking into... ...reusing preexisting plex code for different parts. dont merge until review has been done. --- src/main/java/dev/plex/cmdblocker/BaseCommand.java | 5 +++++ .../java/dev/plex/cmdblocker/CommandBlockerManager.java | 6 ++++++ src/main/java/dev/plex/cmdblocker/MatchCommand.java | 5 +++++ src/main/java/dev/plex/cmdblocker/RegexCommand.java | 5 +++++ src/main/java/dev/plex/listener/impl/CommandListener.java | 4 ++-- src/main/java/dev/plex/player/PlexPlayer.java | 7 +++++++ src/main/java/dev/plex/rank/enums/Rank.java | 5 +++++ 7 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/BaseCommand.java b/src/main/java/dev/plex/cmdblocker/BaseCommand.java index 95bc913..9618431 100644 --- a/src/main/java/dev/plex/cmdblocker/BaseCommand.java +++ b/src/main/java/dev/plex/cmdblocker/BaseCommand.java @@ -14,4 +14,9 @@ public class BaseCommand rank = r; message = m; } + + public String toString() + { + return "BaseCommand (Rank: " + rank.name() + ", Message: " + message + ")"; + } } diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 35ff998..8dfdd39 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -2,6 +2,7 @@ package dev.plex.cmdblocker; import dev.plex.Plex; import dev.plex.rank.enums.Rank; +import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import lombok.Getter; import org.bukkit.command.Command; @@ -114,6 +115,11 @@ public class CommandBlockerManager } } + PlexLog.debug("Blocked commands:"); + for (BaseCommand blockedCommand : blockedCommands) { + PlexLog.debug(" - {0}", blockedCommand); + } + loadedYet = true; } } diff --git a/src/main/java/dev/plex/cmdblocker/MatchCommand.java b/src/main/java/dev/plex/cmdblocker/MatchCommand.java index 7d98ed9..7b8721a 100644 --- a/src/main/java/dev/plex/cmdblocker/MatchCommand.java +++ b/src/main/java/dev/plex/cmdblocker/MatchCommand.java @@ -13,4 +13,9 @@ public class MatchCommand extends BaseCommand super(r2, m1); match = r1; } + + public String toString() + { + return "MatchCommand (Rank: " + getRank().name() + ", Match: " + match + ", Message: " + getMessage() + ")"; + } } diff --git a/src/main/java/dev/plex/cmdblocker/RegexCommand.java b/src/main/java/dev/plex/cmdblocker/RegexCommand.java index 84d2e30..9ade48f 100644 --- a/src/main/java/dev/plex/cmdblocker/RegexCommand.java +++ b/src/main/java/dev/plex/cmdblocker/RegexCommand.java @@ -15,4 +15,9 @@ public class RegexCommand extends BaseCommand super(r2, m1); regex = r1; } + + public String toString() + { + return "RegexCommand (Rank: " + getRank().name() + ", Regex: " + regex.toString() + ", Message: " + getMessage() + ")"; + } } \ No newline at end of file diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index e2a67ca..60c7f69 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -7,7 +7,6 @@ import dev.plex.cmdblocker.MatchCommand; import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; import dev.plex.player.PlexPlayer; -import dev.plex.rank.enums.Rank; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; @@ -41,10 +40,11 @@ public class CommandListener extends PlexListener String message = event.getMessage().substring(1).stripLeading(); // stripLeading() is VITAL for workaround blocking (/ minecraft:summon) for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); - if (Math.min(plexPlayer.getRankFromString().ordinal(), (plexPlayer.isAdminActive() ? Rank.EXECUTIVE : Rank.OP).ordinal()) > blockedCommand.getRank().ordinal()) + if (!plexPlayer.getRepresentedRank().isAtMost(blockedCommand.getRank())) { continue; } + boolean isBlocked = false; if (blockedCommand instanceof RegexCommand regexCommand) { diff --git a/src/main/java/dev/plex/player/PlexPlayer.java b/src/main/java/dev/plex/player/PlexPlayer.java index 62502b9..1a3657f 100644 --- a/src/main/java/dev/plex/player/PlexPlayer.java +++ b/src/main/java/dev/plex/player/PlexPlayer.java @@ -115,6 +115,13 @@ public class PlexPlayer } } + public Rank getRepresentedRank() + { + int representedLevel = this.getRankFromString().getLevel(); + if (!this.adminActive) representedLevel = Math.min(Rank.ADMIN.getLevel(), representedLevel); + return Rank.values()[representedLevel]; + } + public void loadPunishments() { if (Plex.get().getStorageType() != StorageType.MONGODB) diff --git a/src/main/java/dev/plex/rank/enums/Rank.java b/src/main/java/dev/plex/rank/enums/Rank.java index 177b9a0..8df56a5 100644 --- a/src/main/java/dev/plex/rank/enums/Rank.java +++ b/src/main/java/dev/plex/rank/enums/Rank.java @@ -45,6 +45,11 @@ public enum Rank return this.level >= rank.getLevel(); } + public boolean isAtMost(Rank rank) + { + return this.level <= rank.getLevel(); + } + public Component getPrefix() { return MiniMessage.miniMessage().deserialize(this.prefix); From 15b50ac8ae9b6c8cdc4feff536601f94f9c3f049 Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 14:02:56 -0400 Subject: [PATCH 21/26] fix mistake --- src/main/java/dev/plex/player/PlexPlayer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/dev/plex/player/PlexPlayer.java b/src/main/java/dev/plex/player/PlexPlayer.java index 1a3657f..9e9c3e3 100644 --- a/src/main/java/dev/plex/player/PlexPlayer.java +++ b/src/main/java/dev/plex/player/PlexPlayer.java @@ -118,7 +118,7 @@ public class PlexPlayer public Rank getRepresentedRank() { int representedLevel = this.getRankFromString().getLevel(); - if (!this.adminActive) representedLevel = Math.min(Rank.ADMIN.getLevel(), representedLevel); + if (!this.adminActive) representedLevel = Math.min(Rank.OP.getLevel(), representedLevel); return Rank.values()[representedLevel]; } From 9297eb6703341c6be755794a1c904c2ebd3c3f0e Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Fri, 8 Apr 2022 16:57:09 -0500 Subject: [PATCH 22/26] Try to improve things --- .../cmdblocker/CommandBlockerManager.java | 52 +++++++------------ .../plex/listener/impl/CommandListener.java | 9 ++-- src/main/java/dev/plex/player/PlexPlayer.java | 9 +--- .../dev/plex/services/ServiceManager.java | 2 +- ...ervice.java => CommandBlockerService.java} | 4 +- 5 files changed, 29 insertions(+), 47 deletions(-) rename src/main/java/dev/plex/services/impl/{CmdBlockerService.java => CommandBlockerService.java} (80%) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 8dfdd39..833bda8 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -1,10 +1,12 @@ package dev.plex.cmdblocker; import dev.plex.Plex; +import dev.plex.PlexBase; import dev.plex.rank.enums.Rank; import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import lombok.Getter; +import org.bukkit.Bukkit; import org.bukkit.command.Command; import org.bukkit.command.PluginCommand; import org.bukkit.command.PluginCommandYamlParser; @@ -16,18 +18,18 @@ import java.util.List; import java.util.regex.Pattern; @Getter -public class CommandBlockerManager +public class CommandBlockerManager extends PlexBase { private List blockedCommands = new ArrayList<>(); - public boolean loadedYet = false; + public boolean loadedYet; public void syncCommands() { loadedYet = false; blockedCommands.clear(); - List raw = Plex.get().blockedCommands.getStringList("blockedCommands"); + List raw = plugin.blockedCommands.getStringList("blockedCommands"); for (String cmd : raw) { @@ -46,31 +48,12 @@ public class CommandBlockerManager message = PlexUtils.messageString("commandBlocked"); } - Rank rank; - - switch (rawRank) - { - case "i": - rank = Rank.IMPOSTOR; - break; - case "n": - rank = Rank.NONOP; - break; - case "o": - rank = Rank.OP; - break; - case "a": - rank = Rank.ADMIN; - break; - case "s": - rank = Rank.SENIOR_ADMIN; - break; - case "e": - rank = Rank.EXECUTIVE; - break; - default: - rank = Rank.EXECUTIVE; - } + Rank rank = switch (rawRank) + { + case "e" -> Rank.IMPOSTOR; + case "a" -> Rank.ADMIN; + case "s" -> Rank.SENIOR_ADMIN; + }; if (rawType.equals("r")) { @@ -82,7 +65,7 @@ public class CommandBlockerManager if (ind == -1 && regexOrMatch.endsWith(":")) { String pluginName = regexOrMatch.substring(0, regexOrMatch.length() - 1); - Plugin plugin = Arrays.stream(Plex.get().getServer().getPluginManager().getPlugins()).filter(pl -> pl.getName().equalsIgnoreCase(pluginName)).findAny().orElse(null); + Plugin plugin = Arrays.stream(Bukkit.getServer().getPluginManager().getPlugins()).filter(pl -> pl.getName().equalsIgnoreCase(pluginName)).findAny().orElse(null); if (plugin != null) { List commandList = PluginCommandYamlParser.parse(plugin); @@ -90,7 +73,8 @@ public class CommandBlockerManager { blockedCommands.add(new MatchCommand(command.getName(), rank, message)); blockedCommands.add(new MatchCommand(pluginName + ":" + command.getName(), rank, message)); - for (String alias : command.getAliases()) { + for (String alias : command.getAliases()) + { blockedCommands.add(new MatchCommand(alias, rank, message)); blockedCommands.add(new MatchCommand(pluginName + ":" + alias, rank, message)); } @@ -98,7 +82,10 @@ public class CommandBlockerManager } } String blockedArgs = ind == -1 ? "" : regexOrMatch.substring(ind + 1); - if (!blockedArgs.isEmpty()) blockedArgs = " " + blockedArgs; // necessary in case no args + if (!blockedArgs.isEmpty()) + { + blockedArgs = " " + blockedArgs; // necessary in case no args + } PluginCommand pluginCommand = Plex.get().getServer().getPluginCommand(ind == -1 ? regexOrMatch : regexOrMatch.substring(0, ind)); if (pluginCommand != null) { @@ -116,7 +103,8 @@ public class CommandBlockerManager } PlexLog.debug("Blocked commands:"); - for (BaseCommand blockedCommand : blockedCommands) { + for (BaseCommand blockedCommand : blockedCommands) + { PlexLog.debug(" - {0}", blockedCommand); } diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 60c7f69..0ba5a0a 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -38,9 +38,10 @@ public class CommandListener extends PlexListener } Player player = event.getPlayer(); String message = event.getMessage().substring(1).stripLeading(); // stripLeading() is VITAL for workaround blocking (/ minecraft:summon) - for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { + for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) + { PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); - if (!plexPlayer.getRepresentedRank().isAtMost(blockedCommand.getRank())) + if (!plexPlayer.getRankFromString().isAtMost(blockedCommand.getRank())) { continue; } @@ -53,9 +54,9 @@ public class CommandListener extends PlexListener isBlocked = true; } } - else if(blockedCommand instanceof MatchCommand matchCommand) + else if (blockedCommand instanceof MatchCommand matchCommand) { - if (message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase()) /*message.equalsIgnoreCase(matchCommand.getMatch()) || message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase() + " ")*/) + if (message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase())) { isBlocked = true; } diff --git a/src/main/java/dev/plex/player/PlexPlayer.java b/src/main/java/dev/plex/player/PlexPlayer.java index 9e9c3e3..4ae582b 100644 --- a/src/main/java/dev/plex/player/PlexPlayer.java +++ b/src/main/java/dev/plex/player/PlexPlayer.java @@ -98,7 +98,7 @@ public class PlexPlayer public Rank getRankFromString() { OfflinePlayer player = Bukkit.getOfflinePlayer(uuid); - if (rank.isEmpty()) + if (rank.isEmpty() || !isAdminActive()) { if (player.isOp()) { @@ -115,13 +115,6 @@ public class PlexPlayer } } - public Rank getRepresentedRank() - { - int representedLevel = this.getRankFromString().getLevel(); - if (!this.adminActive) representedLevel = Math.min(Rank.OP.getLevel(), representedLevel); - return Rank.values()[representedLevel]; - } - public void loadPunishments() { if (Plex.get().getStorageType() != StorageType.MONGODB) diff --git a/src/main/java/dev/plex/services/ServiceManager.java b/src/main/java/dev/plex/services/ServiceManager.java index fc73390..2253f48 100644 --- a/src/main/java/dev/plex/services/ServiceManager.java +++ b/src/main/java/dev/plex/services/ServiceManager.java @@ -18,7 +18,7 @@ public class ServiceManager registerService(new GameRuleService()); registerService(new UpdateCheckerService()); registerService(new AutoWipeService()); - registerService(new CmdBlockerService()); + registerService(new CommandBlockerService()); } public void startServices() diff --git a/src/main/java/dev/plex/services/impl/CmdBlockerService.java b/src/main/java/dev/plex/services/impl/CommandBlockerService.java similarity index 80% rename from src/main/java/dev/plex/services/impl/CmdBlockerService.java rename to src/main/java/dev/plex/services/impl/CommandBlockerService.java index fc9a4eb..6116927 100644 --- a/src/main/java/dev/plex/services/impl/CmdBlockerService.java +++ b/src/main/java/dev/plex/services/impl/CommandBlockerService.java @@ -3,9 +3,9 @@ package dev.plex.services.impl; import dev.plex.services.AbstractService; import dev.plex.util.PlexLog; -public class CmdBlockerService extends AbstractService +public class CommandBlockerService extends AbstractService { - public CmdBlockerService() + public CommandBlockerService() { super(false, true); } From 271b8a1df4c954683149c29cb8778a08502f2b73 Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Fri, 8 Apr 2022 18:19:06 -0500 Subject: [PATCH 23/26] idk fix it --- src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java | 1 + src/main/java/dev/plex/listener/impl/CommandListener.java | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 833bda8..2bc1ef4 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -53,6 +53,7 @@ public class CommandBlockerManager extends PlexBase case "e" -> Rank.IMPOSTOR; case "a" -> Rank.ADMIN; case "s" -> Rank.SENIOR_ADMIN; + default -> Rank.IMPOSTOR; }; if (rawType.equals("r")) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 0ba5a0a..80f9d1d 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -41,7 +41,7 @@ public class CommandListener extends PlexListener for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); - if (!plexPlayer.getRankFromString().isAtMost(blockedCommand.getRank())) + if (plexPlayer.getRankFromString().isAtLeast(blockedCommand.getRank())) { continue; } From 79b687c80d73aa19cff34f0b0edf063b2ca00ff1 Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Fri, 8 Apr 2022 18:56:45 -0500 Subject: [PATCH 24/26] add debug --- src/main/java/dev/plex/listener/impl/CommandListener.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 80f9d1d..597c2dc 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -7,6 +7,7 @@ import dev.plex.cmdblocker.MatchCommand; import dev.plex.cmdblocker.RegexCommand; import dev.plex.listener.PlexListener; import dev.plex.player.PlexPlayer; +import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit; @@ -43,6 +44,7 @@ public class CommandListener extends PlexListener PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); if (plexPlayer.getRankFromString().isAtLeast(blockedCommand.getRank())) { + PlexLog.debug("we got here, continuing"); continue; } @@ -51,6 +53,7 @@ public class CommandListener extends PlexListener { if (regexCommand.getRegex().matcher(message).lookingAt()) { + PlexLog.debug("command blocked"); isBlocked = true; } } @@ -58,6 +61,7 @@ public class CommandListener extends PlexListener { if (message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase())) { + PlexLog.debug("command blocked"); isBlocked = true; } } From cf4586363253c3c5d14df8f1717ea99b103b6d2a Mon Sep 17 00:00:00 2001 From: ayunami2000 Date: Fri, 8 Apr 2022 22:13:51 -0400 Subject: [PATCH 25/26] fix and improve :thumbsup: fix ! --- src/main/java/dev/plex/cmdblocker/BaseCommand.java | 2 +- .../java/dev/plex/cmdblocker/CommandBlockerManager.java | 4 ++-- src/main/java/dev/plex/cmdblocker/MatchCommand.java | 2 +- src/main/java/dev/plex/cmdblocker/RegexCommand.java | 2 +- src/main/java/dev/plex/listener/impl/CommandListener.java | 6 ++---- src/main/java/dev/plex/rank/enums/Rank.java | 5 ----- src/main/resources/commands.yml | 2 +- 7 files changed, 8 insertions(+), 15 deletions(-) diff --git a/src/main/java/dev/plex/cmdblocker/BaseCommand.java b/src/main/java/dev/plex/cmdblocker/BaseCommand.java index 9618431..6f5cf2d 100644 --- a/src/main/java/dev/plex/cmdblocker/BaseCommand.java +++ b/src/main/java/dev/plex/cmdblocker/BaseCommand.java @@ -17,6 +17,6 @@ public class BaseCommand public String toString() { - return "BaseCommand (Rank: " + rank.name() + ", Message: " + message + ")"; + return "BaseCommand (Rank: " + (rank == null ? "ALL" : rank.name()) + ", Message: " + message + ")"; } } diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java index 2bc1ef4..5891420 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java @@ -50,10 +50,10 @@ public class CommandBlockerManager extends PlexBase Rank rank = switch (rawRank) { - case "e" -> Rank.IMPOSTOR; + case "e" -> null; case "a" -> Rank.ADMIN; case "s" -> Rank.SENIOR_ADMIN; - default -> Rank.IMPOSTOR; + default -> null; }; if (rawType.equals("r")) diff --git a/src/main/java/dev/plex/cmdblocker/MatchCommand.java b/src/main/java/dev/plex/cmdblocker/MatchCommand.java index 7b8721a..530ae6c 100644 --- a/src/main/java/dev/plex/cmdblocker/MatchCommand.java +++ b/src/main/java/dev/plex/cmdblocker/MatchCommand.java @@ -16,6 +16,6 @@ public class MatchCommand extends BaseCommand public String toString() { - return "MatchCommand (Rank: " + getRank().name() + ", Match: " + match + ", Message: " + getMessage() + ")"; + return "MatchCommand (Rank: " + (getRank() == null ? "ALL" : getRank().name()) + ", Match: " + match + ", Message: " + getMessage() + ")"; } } diff --git a/src/main/java/dev/plex/cmdblocker/RegexCommand.java b/src/main/java/dev/plex/cmdblocker/RegexCommand.java index 9ade48f..8004e9a 100644 --- a/src/main/java/dev/plex/cmdblocker/RegexCommand.java +++ b/src/main/java/dev/plex/cmdblocker/RegexCommand.java @@ -18,6 +18,6 @@ public class RegexCommand extends BaseCommand public String toString() { - return "RegexCommand (Rank: " + getRank().name() + ", Regex: " + regex.toString() + ", Message: " + getMessage() + ")"; + return "RegexCommand (Rank: " + (getRank() == null ? "ALL" : getRank().name()) + ", Regex: " + regex.toString() + ", Message: " + getMessage() + ")"; } } \ No newline at end of file diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 597c2dc..7c2d678 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -42,9 +42,8 @@ public class CommandListener extends PlexListener for (BaseCommand blockedCommand : plugin.getCommandBlockerManager().getBlockedCommands()) { PlexPlayer plexPlayer = DataUtils.getPlayer(player.getUniqueId()); - if (plexPlayer.getRankFromString().isAtLeast(blockedCommand.getRank())) + if (blockedCommand.getRank() != null && plexPlayer.getRankFromString().isAtLeast(blockedCommand.getRank())) { - PlexLog.debug("we got here, continuing"); continue; } @@ -53,7 +52,6 @@ public class CommandListener extends PlexListener { if (regexCommand.getRegex().matcher(message).lookingAt()) { - PlexLog.debug("command blocked"); isBlocked = true; } } @@ -61,13 +59,13 @@ public class CommandListener extends PlexListener { if (message.toLowerCase().startsWith(matchCommand.getMatch().toLowerCase())) { - PlexLog.debug("command blocked"); isBlocked = true; } } if (isBlocked) { event.setCancelled(true); + //PlexLog.debug("Command blocked."); player.sendMessage(MiniMessage.miniMessage().deserialize(PlexUtils.messageString("blockedCommandColor") + blockedCommand.getMessage())); return; } diff --git a/src/main/java/dev/plex/rank/enums/Rank.java b/src/main/java/dev/plex/rank/enums/Rank.java index 8df56a5..177b9a0 100644 --- a/src/main/java/dev/plex/rank/enums/Rank.java +++ b/src/main/java/dev/plex/rank/enums/Rank.java @@ -45,11 +45,6 @@ public enum Rank return this.level >= rank.getLevel(); } - public boolean isAtMost(Rank rank) - { - return this.level <= rank.getLevel(); - } - public Component getPrefix() { return MiniMessage.miniMessage().deserialize(this.prefix); diff --git a/src/main/resources/commands.yml b/src/main/resources/commands.yml index 22d9048..d168eeb 100644 --- a/src/main/resources/commands.yml +++ b/src/main/resources/commands.yml @@ -7,7 +7,7 @@ # Symbols to use: # - r for RegEx # - m for matching -# - The ranks are "e" for executive and below, "s" for senior admin and below, "a" for admin and below, "o" for op and below, "n" for nonop and below, and "i" for impostor +# - The ranks are "e" for everyone, "s" for senior admin, and "a" for admin # - MATCHING MODE: The command is just the command without slashes. Optional arguments are specified as well. It also accepts full plugins via specifying the plugin name followed by a ":" (e.g. "viaversion:") # - REGEX MODE: The command is regex that matches the desired command. It matches case insensitively. # - Finally the block message. MUST NOT CONTAIN ":". Use _ to use the default command blocked message as specified in messages.yml, or you can optionally put your own in From 0f88f7c8fd684d21a635c25b773be46141480ff4 Mon Sep 17 00:00:00 2001 From: Telesphoreo Date: Fri, 8 Apr 2022 21:23:22 -0500 Subject: [PATCH 26/26] Change package name --- src/main/java/dev/plex/Plex.java | 2 +- .../plex/{cmdblocker => command/blocker}/BaseCommand.java | 2 +- .../blocker}/CommandBlockerManager.java | 8 +------- .../{cmdblocker => command/blocker}/MatchCommand.java | 2 +- .../{cmdblocker => command/blocker}/RegexCommand.java | 2 +- src/main/java/dev/plex/listener/impl/CommandListener.java | 7 +++---- 6 files changed, 8 insertions(+), 15 deletions(-) rename src/main/java/dev/plex/{cmdblocker => command/blocker}/BaseCommand.java (92%) rename src/main/java/dev/plex/{cmdblocker => command/blocker}/CommandBlockerManager.java (95%) rename src/main/java/dev/plex/{cmdblocker => command/blocker}/MatchCommand.java (92%) rename src/main/java/dev/plex/{cmdblocker => command/blocker}/RegexCommand.java (93%) diff --git a/src/main/java/dev/plex/Plex.java b/src/main/java/dev/plex/Plex.java index cdbf957..d999dad 100644 --- a/src/main/java/dev/plex/Plex.java +++ b/src/main/java/dev/plex/Plex.java @@ -8,7 +8,7 @@ import dev.plex.cache.player.PlayerCache; import dev.plex.cache.player.SQLPlayerData; import dev.plex.cache.sql.SQLNotes; import dev.plex.cache.sql.SQLPunishment; -import dev.plex.cmdblocker.CommandBlockerManager; +import dev.plex.command.blocker.CommandBlockerManager; import dev.plex.config.Config; import dev.plex.handlers.CommandHandler; import dev.plex.handlers.ListenerHandler; diff --git a/src/main/java/dev/plex/cmdblocker/BaseCommand.java b/src/main/java/dev/plex/command/blocker/BaseCommand.java similarity index 92% rename from src/main/java/dev/plex/cmdblocker/BaseCommand.java rename to src/main/java/dev/plex/command/blocker/BaseCommand.java index 6f5cf2d..ae5850c 100644 --- a/src/main/java/dev/plex/cmdblocker/BaseCommand.java +++ b/src/main/java/dev/plex/command/blocker/BaseCommand.java @@ -1,4 +1,4 @@ -package dev.plex.cmdblocker; +package dev.plex.command.blocker; import dev.plex.rank.enums.Rank; import lombok.Getter; diff --git a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java b/src/main/java/dev/plex/command/blocker/CommandBlockerManager.java similarity index 95% rename from src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java rename to src/main/java/dev/plex/command/blocker/CommandBlockerManager.java index 5891420..9fdf550 100644 --- a/src/main/java/dev/plex/cmdblocker/CommandBlockerManager.java +++ b/src/main/java/dev/plex/command/blocker/CommandBlockerManager.java @@ -1,4 +1,4 @@ -package dev.plex.cmdblocker; +package dev.plex.command.blocker; import dev.plex.Plex; import dev.plex.PlexBase; @@ -103,12 +103,6 @@ public class CommandBlockerManager extends PlexBase } } - PlexLog.debug("Blocked commands:"); - for (BaseCommand blockedCommand : blockedCommands) - { - PlexLog.debug(" - {0}", blockedCommand); - } - loadedYet = true; } } diff --git a/src/main/java/dev/plex/cmdblocker/MatchCommand.java b/src/main/java/dev/plex/command/blocker/MatchCommand.java similarity index 92% rename from src/main/java/dev/plex/cmdblocker/MatchCommand.java rename to src/main/java/dev/plex/command/blocker/MatchCommand.java index 530ae6c..8ad36ae 100644 --- a/src/main/java/dev/plex/cmdblocker/MatchCommand.java +++ b/src/main/java/dev/plex/command/blocker/MatchCommand.java @@ -1,4 +1,4 @@ -package dev.plex.cmdblocker; +package dev.plex.command.blocker; import dev.plex.rank.enums.Rank; import lombok.Getter; diff --git a/src/main/java/dev/plex/cmdblocker/RegexCommand.java b/src/main/java/dev/plex/command/blocker/RegexCommand.java similarity index 93% rename from src/main/java/dev/plex/cmdblocker/RegexCommand.java rename to src/main/java/dev/plex/command/blocker/RegexCommand.java index 8004e9a..ea75e8b 100644 --- a/src/main/java/dev/plex/cmdblocker/RegexCommand.java +++ b/src/main/java/dev/plex/command/blocker/RegexCommand.java @@ -1,4 +1,4 @@ -package dev.plex.cmdblocker; +package dev.plex.command.blocker; import dev.plex.rank.enums.Rank; import lombok.Getter; diff --git a/src/main/java/dev/plex/listener/impl/CommandListener.java b/src/main/java/dev/plex/listener/impl/CommandListener.java index 7c2d678..745eb46 100644 --- a/src/main/java/dev/plex/listener/impl/CommandListener.java +++ b/src/main/java/dev/plex/listener/impl/CommandListener.java @@ -2,12 +2,11 @@ package dev.plex.listener.impl; import dev.plex.cache.DataUtils; import dev.plex.cache.player.PlayerCache; -import dev.plex.cmdblocker.BaseCommand; -import dev.plex.cmdblocker.MatchCommand; -import dev.plex.cmdblocker.RegexCommand; +import dev.plex.command.blocker.BaseCommand; +import dev.plex.command.blocker.MatchCommand; +import dev.plex.command.blocker.RegexCommand; import dev.plex.listener.PlexListener; import dev.plex.player.PlexPlayer; -import dev.plex.util.PlexLog; import dev.plex.util.PlexUtils; import net.kyori.adventure.text.minimessage.MiniMessage; import org.bukkit.Bukkit;