Add --null option for parse command

This commit is contained in:
Andre601 2022-02-05 13:57:05 +01:00
parent 666ab468a1
commit 50d4e14333
12 changed files with 45 additions and 68 deletions

View File

@ -22,6 +22,7 @@ package me.clip.placeholderapi;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
@ -185,7 +186,7 @@ public final class PlaceholderAPI {
continue; continue;
} }
String identifier = format.substring(0, index).toLowerCase(); String identifier = format.substring(0, index).toLowerCase(Locale.ROOT);
String params = format.substring(index + 1); String params = format.substring(index + 1);
final PlaceholderExpansion expansion = PlaceholderAPIPlugin.getInstance() final PlaceholderExpansion expansion = PlaceholderAPIPlugin.getInstance()
.getLocalExpansionManager().getExpansion(identifier); .getLocalExpansionManager().getExpansion(identifier);

View File

@ -23,6 +23,7 @@ package me.clip.placeholderapi.commands;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.PlaceholderAPIPlugin;
@ -61,7 +62,7 @@ public abstract class PlaceholderCommand {
if (parameter == null) { if (parameter == null) {
possible.forEach(suggestions::add); possible.forEach(suggestions::add);
} else { } else {
possible.filter(suggestion -> suggestion.toLowerCase().startsWith(parameter.toLowerCase())) possible.filter(suggestion -> suggestion.toLowerCase(Locale.ROOT).startsWith(parameter.toLowerCase(Locale.ROOT)))
.forEach(suggestions::add); .forEach(suggestions::add);
} }
} }

View File

@ -27,11 +27,20 @@ import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.stream.Stream; import java.util.stream.Stream;
import me.clip.placeholderapi.PlaceholderAPIPlugin; import me.clip.placeholderapi.PlaceholderAPIPlugin;
import me.clip.placeholderapi.commands.impl.cloud.CommandECloud; import me.clip.placeholderapi.commands.impl.cloud.CommandECloud;
import me.clip.placeholderapi.commands.impl.local.*; import me.clip.placeholderapi.commands.impl.local.CommandDump;
import me.clip.placeholderapi.commands.impl.local.CommandExpansionRegister;
import me.clip.placeholderapi.commands.impl.local.CommandExpansionUnregister;
import me.clip.placeholderapi.commands.impl.local.CommandHelp;
import me.clip.placeholderapi.commands.impl.local.CommandInfo;
import me.clip.placeholderapi.commands.impl.local.CommandList;
import me.clip.placeholderapi.commands.impl.local.CommandParse;
import me.clip.placeholderapi.commands.impl.local.CommandReload;
import me.clip.placeholderapi.commands.impl.local.CommandVersion;
import me.clip.placeholderapi.util.Msg; import me.clip.placeholderapi.util.Msg;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandExecutor;
@ -87,7 +96,7 @@ public final class PlaceholderCommandRouter implements CommandExecutor, TabCompl
return true; return true;
} }
final String search = args[0].toLowerCase(); final String search = args[0].toLowerCase(Locale.ROOT);
final PlaceholderCommand target = commands.get(search); final PlaceholderCommand target = commands.get(search);
if (target == null) { if (target == null) {
@ -113,10 +122,10 @@ public final class PlaceholderCommandRouter implements CommandExecutor, TabCompl
final List<String> suggestions = new ArrayList<>(); final List<String> suggestions = new ArrayList<>();
if (args.length > 1) { if (args.length > 1) {
final PlaceholderCommand target = this.commands.get(args[0].toLowerCase()); final PlaceholderCommand target = this.commands.get(args[0].toLowerCase(Locale.ROOT));
if (target != null) { if (target != null) {
target.complete(plugin, sender, args[0].toLowerCase(), target.complete(plugin, sender, args[0].toLowerCase(Locale.ROOT),
Arrays.asList(Arrays.copyOfRange(args, 1, args.length)), suggestions); Arrays.asList(Arrays.copyOfRange(args, 1, args.length)), suggestions);
} }

View File

@ -100,7 +100,7 @@ public final class CommandECloud extends PlaceholderCommand {
return; return;
} }
final String search = params.get(0).toLowerCase(); final String search = params.get(0).toLowerCase(Locale.ROOT);
final PlaceholderCommand target = commands.get(search); final PlaceholderCommand target = commands.get(search);
if (target == null) { if (target == null) {
@ -136,7 +136,7 @@ public final class CommandECloud extends PlaceholderCommand {
return; // send sub commands return; // send sub commands
} }
final String search = params.get(0).toLowerCase(); final String search = params.get(0).toLowerCase(Locale.ROOT);
final PlaceholderCommand target = commands.get(search); final PlaceholderCommand target = commands.get(search);
if (target == null) { if (target == null) {

View File

@ -87,7 +87,7 @@ public final class CommandECloudExpansionList extends PlaceholderCommand {
@NotNull @NotNull
private static Collection<CloudExpansion> getExpansions(@NotNull final String target, private static Collection<CloudExpansion> getExpansions(@NotNull final String target,
@NotNull final PlaceholderAPIPlugin plugin) { @NotNull final PlaceholderAPIPlugin plugin) {
switch (target.toLowerCase()) { switch (target.toLowerCase(Locale.ROOT)) {
case "all": case "all":
return plugin.getCloudExpansionManager().getCloudExpansions().values(); return plugin.getCloudExpansionManager().getCloudExpansions().values();
case "installed": case "installed":
@ -112,7 +112,7 @@ public final class CommandECloudExpansionList extends PlaceholderCommand {
public static void addExpansionTitle(@NotNull final StringBuilder builder, public static void addExpansionTitle(@NotNull final StringBuilder builder,
@NotNull final String target, final int page) { @NotNull final String target, final int page) {
switch (target.toLowerCase()) { switch (target.toLowerCase(Locale.ROOT)) {
case "all": case "all":
builder.append("&bAll Expansions"); builder.append("&bAll Expansions");
break; break;

View File

@ -41,7 +41,7 @@ public final class CommandECloudToggle extends PlaceholderCommand {
final boolean desiredState; final boolean desiredState;
final boolean currentState = plugin.getPlaceholderAPIConfig().isCloudEnabled(); final boolean currentState = plugin.getPlaceholderAPIConfig().isCloudEnabled();
switch (alias.toLowerCase()) { switch (alias.toLowerCase(Locale.ROOT)) {
case "enable": case "enable":
desiredState = true; desiredState = true;
break; break;

View File

@ -128,7 +128,7 @@ public final class CommandECloudUpdate extends PlaceholderCommand {
installed.removeIf(expansion -> !expansion.shouldUpdate()); installed.removeIf(expansion -> !expansion.shouldUpdate());
if (!installed.isEmpty() && (params.isEmpty() || "all" if (!installed.isEmpty() && (params.isEmpty() || "all"
.startsWith(params.get(0).toLowerCase()))) { .startsWith(params.get(0).toLowerCase(Locale.ROOT)))) {
suggestions.add("all"); suggestions.add("all");
} }

View File

@ -165,7 +165,7 @@ public final class CommandDump extends PlaceholderCommand {
final String[] jars = plugin.getLocalExpansionManager() final String[] jars = plugin.getLocalExpansionManager()
.getExpansionsFolder() .getExpansionsFolder()
.list((dir, name) -> name.toLowerCase().endsWith(".jar")); .list((dir, name) -> name.toLowerCase(Locale.ROOT).endsWith(".jar"));
for (final String jar : jars) { for (final String jar : jars) {
builder.append(" ") builder.append(" ")

View File

@ -22,6 +22,7 @@ package me.clip.placeholderapi.commands.impl.local;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.stream.Stream; import java.util.stream.Stream;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
@ -49,7 +50,7 @@ public final class CommandParse extends PlaceholderCommand {
public void evaluate(@NotNull final PlaceholderAPIPlugin plugin, public void evaluate(@NotNull final PlaceholderAPIPlugin plugin,
@NotNull final CommandSender sender, @NotNull final String alias, @NotNull final CommandSender sender, @NotNull final String alias,
@NotNull @Unmodifiable final List<String> params) { @NotNull @Unmodifiable final List<String> params) {
switch (alias.toLowerCase()) { switch (alias.toLowerCase(Locale.ROOT)) {
case "parserel": case "parserel":
evaluateParseRelation(sender, params); evaluateParseRelation(sender, params);
break; break;
@ -69,7 +70,7 @@ public final class CommandParse extends PlaceholderCommand {
public void complete(@NotNull final PlaceholderAPIPlugin plugin, public void complete(@NotNull final PlaceholderAPIPlugin plugin,
@NotNull final CommandSender sender, @NotNull final String alias, @NotNull final CommandSender sender, @NotNull final String alias,
@NotNull @Unmodifiable final List<String> params, @NotNull final List<String> suggestions) { @NotNull @Unmodifiable final List<String> params, @NotNull final List<String> suggestions) {
switch (alias.toLowerCase()) { switch (alias.toLowerCase(Locale.ROOT)) {
case "parserel": case "parserel":
completeParseRelation(params, suggestions); completeParseRelation(params, suggestions);
break; break;
@ -92,7 +93,7 @@ public final class CommandParse extends PlaceholderCommand {
return; return;
} }
@NotNull final OfflinePlayer player; OfflinePlayer player;
if ("me".equalsIgnoreCase(params.get(0))) { if ("me".equalsIgnoreCase(params.get(0))) {
if (!(sender instanceof Player)) { if (!(sender instanceof Player)) {
@ -101,6 +102,8 @@ public final class CommandParse extends PlaceholderCommand {
} }
player = ((Player) sender); player = ((Player) sender);
} else if ("--null".equalsIgnoreCase(params.get(0))) {
player = null;
} else { } else {
final OfflinePlayer target = resolvePlayer(params.get(0)); final OfflinePlayer target = resolvePlayer(params.get(0));
if (target == null) { if (target == null) {
@ -161,10 +164,14 @@ public final class CommandParse extends PlaceholderCommand {
@NotNull @Unmodifiable final List<String> params, @NotNull final List<String> suggestions) { @NotNull @Unmodifiable final List<String> params, @NotNull final List<String> suggestions) {
if (params.size() <= 1) { if (params.size() <= 1) {
if (sender instanceof Player && (params.isEmpty() || "me" if (sender instanceof Player && (params.isEmpty() || "me"
.startsWith(params.get(0).toLowerCase()))) { .startsWith(params.get(0).toLowerCase(Locale.ROOT)))) {
suggestions.add("me"); suggestions.add("me");
} }
if ("--null".startsWith(params.get(0).toLowerCase(Locale.ROOT))) {
suggestions.add("--null");
}
final Stream<String> names = Bukkit.getOnlinePlayers().stream().map(Player::getName); final Stream<String> names = Bukkit.getOnlinePlayers().stream().map(Player::getName);
suggestByParameter(names, suggestions, params.isEmpty() ? null : params.get(0)); suggestByParameter(names, suggestions, params.isEmpty() ? null : params.get(0));

View File

@ -37,6 +37,7 @@ import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -88,7 +89,7 @@ public final class CloudExpansionManager {
@NotNull @NotNull
private static String toIndexName(@NotNull final String name) { private static String toIndexName(@NotNull final String name) {
return name.toLowerCase().replace(' ', '_'); return name.toLowerCase(Locale.ROOT).replace(' ', '_');
} }
@NotNull @NotNull

View File

@ -125,7 +125,7 @@ public final class LocalExpansionManager implements Listener {
public PlaceholderExpansion getExpansion(@NotNull final String identifier) { public PlaceholderExpansion getExpansion(@NotNull final String identifier) {
expansionsLock.lock(); expansionsLock.lock();
try { try {
return expansions.get(identifier.toLowerCase()); return expansions.get(identifier.toLowerCase(Locale.ROOT));
} finally { } finally {
expansionsLock.unlock(); expansionsLock.unlock();
} }
@ -193,7 +193,7 @@ public final class LocalExpansionManager implements Listener {
@ApiStatus.Internal @ApiStatus.Internal
public boolean register(@NotNull final PlaceholderExpansion expansion) { public boolean register(@NotNull final PlaceholderExpansion expansion) {
final String identifier = expansion.getIdentifier().toLowerCase(); final String identifier = expansion.getIdentifier().toLowerCase(Locale.ROOT);
if (!expansion.canRegister()) { if (!expansion.canRegister()) {
return false; return false;

View File

@ -20,6 +20,7 @@
package me.clip.placeholderapi.replacer; package me.clip.placeholderapi.replacer;
import java.util.Locale;
import java.util.function.Function; import java.util.function.Function;
import me.clip.placeholderapi.expansion.PlaceholderExpansion; import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
@ -49,49 +50,6 @@ public final class CharsReplacer implements Replacer {
for (int i = 0; i < chars.length; i++) { for (int i = 0; i < chars.length; i++) {
final char l = chars[i]; final char l = chars[i];
if (l == '&' && ++i < chars.length) {
final char c = Character.toLowerCase(chars[i]);
if (c != '0' && c != '1' && c != '2' && c != '3' && c != '4' && c != '5' && c != '6'
&& c != '7' && c != '8' && c != '9' && c != 'a' && c != 'b' && c != 'c' && c != 'd'
&& c != 'e' && c != 'f' && c != 'k' && c != 'l' && c != 'm' && c != 'n' && c != 'o' && c != 'r'
&& c != 'x') {
builder.append(l).append(chars[i]);
} else {
builder.append(ChatColor.COLOR_CHAR);
if (c != 'x') {
builder.append(chars[i]);
continue;
}
if ((i > 1 && chars[i - 2] == '\\') /*allow escaping &x*/) {
builder.setLength(builder.length() - 2);
builder.append('&').append(chars[i]);
continue;
}
builder.append(c);
int j = 0;
while (++j <= 6) {
if (i + j >= chars.length) {
break;
}
final char x = chars[i + j];
builder.append(ChatColor.COLOR_CHAR).append(x);
}
if (j == 7) {
i += 6;
} else {
builder.setLength(builder.length() - (j * 2)); // undo &x parsing
}
}
continue;
}
if (l != closure.head || i + 1 >= chars.length) { if (l != closure.head || i + 1 >= chars.length) {
builder.append(l); builder.append(l);
@ -99,7 +57,7 @@ public final class CharsReplacer implements Replacer {
} }
boolean identified = false; boolean identified = false;
boolean oopsitsbad = true; boolean invalid = true;
boolean hadSpace = false; boolean hadSpace = false;
while (++i < chars.length) { while (++i < chars.length) {
@ -110,7 +68,7 @@ public final class CharsReplacer implements Replacer {
break; break;
} }
if (p == closure.tail) { if (p == closure.tail) {
oopsitsbad = false; invalid = false;
break; break;
} }
@ -127,13 +85,13 @@ public final class CharsReplacer implements Replacer {
} }
final String identifierString = identifier.toString(); final String identifierString = identifier.toString();
final String lowercaseIdentifierString = identifierString.toLowerCase(); final String lowercaseIdentifierString = identifierString.toLowerCase(Locale.ROOT);
final String parametersString = parameters.toString(); final String parametersString = parameters.toString();
identifier.setLength(0); identifier.setLength(0);
parameters.setLength(0); parameters.setLength(0);
if (oopsitsbad) { if (invalid) {
builder.append(closure.head).append(identifierString); builder.append(closure.head).append(identifierString);
if (identified) { if (identified) {