forked from kaboomserver/extras
Limit selectors to 3 in broadcast commands (#345)
This commit is contained in:
parent
7fabfdae1a
commit
1c3864e608
1 changed files with 27 additions and 0 deletions
|
@ -19,6 +19,7 @@ import java.util.regex.Pattern;
|
||||||
public final class ServerCommand implements Listener {
|
public final class ServerCommand implements Listener {
|
||||||
private static final Pattern AS_AT_PATTERN = Pattern.compile(
|
private static final Pattern AS_AT_PATTERN = Pattern.compile(
|
||||||
"\\b(as|at|facing entity) @[ae]\\b");
|
"\\b(as|at|facing entity) @[ae]\\b");
|
||||||
|
private static final Pattern SELECTOR_PATTERN = Pattern.compile("(?>\\s)*@[aepsr](?>\\s)*");
|
||||||
private static final Logger LOGGER = JavaPlugin.getPlugin(Main.class).getLogger();
|
private static final Logger LOGGER = JavaPlugin.getPlugin(Main.class).getLogger();
|
||||||
|
|
||||||
public static boolean checkExecuteCommand(final String cmd) {
|
public static boolean checkExecuteCommand(final String cmd) {
|
||||||
|
@ -50,6 +51,19 @@ public final class ServerCommand implements Listener {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String checkSelectors(final String[] arr) {
|
||||||
|
final String[] args = Arrays.copyOfRange(arr, 1, arr.length);
|
||||||
|
final String str = String.join(" ", args);
|
||||||
|
final Matcher matcher = SELECTOR_PATTERN.matcher(str);
|
||||||
|
final long count = matcher.results().count();
|
||||||
|
|
||||||
|
if (count > 3) {
|
||||||
|
return "cancel";
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public static String checkCommand(final CommandSender sender, final String command,
|
public static String checkCommand(final CommandSender sender, final String command,
|
||||||
final boolean isConsoleCommand) {
|
final boolean isConsoleCommand) {
|
||||||
return checkCommand(sender, command, isConsoleCommand, 1);
|
return checkCommand(sender, command, isConsoleCommand, 1);
|
||||||
|
@ -146,6 +160,19 @@ public final class ServerCommand implements Listener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "/minecraft:ban":
|
||||||
|
case "/ban":
|
||||||
|
case "/minecraft:kick":
|
||||||
|
case "/kick":
|
||||||
|
case "/minecraft:tell":
|
||||||
|
case "/tell":
|
||||||
|
case "/minecraft:msg":
|
||||||
|
case "/msg":
|
||||||
|
case "/minecraft:w":
|
||||||
|
case "/w":
|
||||||
|
case "/minecraft:say":
|
||||||
|
case "/say":
|
||||||
|
return checkSelectors(arr);
|
||||||
case "/minecraft:spreadplayers":
|
case "/minecraft:spreadplayers":
|
||||||
case "/spreadplayers":
|
case "/spreadplayers":
|
||||||
if (arr.length == 7 && (arr[6].contains("@e") || arr[6].contains("@a"))) {
|
if (arr.length == 7 && (arr[6].contains("@e") || arr[6].contains("@a"))) {
|
||||||
|
|
Loading…
Reference in a new issue