Try to improve things

This commit is contained in:
Telesphoreo 2022-04-08 16:57:09 -05:00
parent 15b50ac8ae
commit 9297eb6703
5 changed files with 29 additions and 47 deletions

View File

@ -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<BaseCommand> blockedCommands = new ArrayList<>();
public boolean loadedYet = false;
public boolean loadedYet;
public void syncCommands()
{
loadedYet = false;
blockedCommands.clear();
List<String> raw = Plex.get().blockedCommands.getStringList("blockedCommands");
List<String> 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<Command> 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);
}

View File

@ -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;
}

View File

@ -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)

View File

@ -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()

View File

@ -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);
}