Fix toLowerCase/toUpperCase locale sensitivity

This commit is contained in:
Luck 2021-08-25 20:09:20 +01:00
parent 062fca3f75
commit 9cd33d26f2
No known key found for this signature in database
GPG Key ID: EFA9B3EC5FD90F8B
110 changed files with 310 additions and 184 deletions

View File

@ -31,6 +31,8 @@ import net.luckperms.api.node.types.SuffixNode;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
/** /**
* Represents a type of chat meta * Represents a type of chat meta
*/ */
@ -70,7 +72,7 @@ public enum ChatMetaType {
private final NodeType<? extends ChatMetaNode<?, ?>> nodeType; private final NodeType<? extends ChatMetaNode<?, ?>> nodeType;
ChatMetaType(NodeType<? extends ChatMetaNode<?, ?>> nodeType) { ChatMetaType(NodeType<? extends ChatMetaNode<?, ?>> nodeType) {
this.name = nodeType.name().toLowerCase(); this.name = nodeType.name().toLowerCase(Locale.ROOT);
this.nodeType = nodeType; this.nodeType = nodeType;
} }

View File

@ -27,6 +27,7 @@ package net.luckperms.api.node.metadata;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
final class SimpleNodeMetadataKey<T> implements NodeMetadataKey<T> { final class SimpleNodeMetadataKey<T> implements NodeMetadataKey<T> {
@ -34,7 +35,7 @@ final class SimpleNodeMetadataKey<T> implements NodeMetadataKey<T> {
private final Class<T> type; private final Class<T> type;
SimpleNodeMetadataKey(String name, Class<T> type) { SimpleNodeMetadataKey(String name, Class<T> type) {
this.name = name.toLowerCase(); this.name = name.toLowerCase(Locale.ROOT);
this.type = type; this.type = type;
} }

View File

@ -27,6 +27,7 @@ package net.luckperms.api.query;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
final class SimpleOptionKey<T> implements OptionKey<T> { final class SimpleOptionKey<T> implements OptionKey<T> {
@ -35,7 +36,7 @@ final class SimpleOptionKey<T> implements OptionKey<T> {
private final int hashCode; private final int hashCode;
SimpleOptionKey(String name, Class<T> type) { SimpleOptionKey(String name, Class<T> type) {
this.name = name.toLowerCase(); this.name = name.toLowerCase(Locale.ROOT);
this.type = type; this.type = type;
this.hashCode = Objects.hash(this.name, this.type); // cache hashcode this.hashCode = Objects.hash(this.name, this.type); // cache hashcode
} }

View File

@ -46,6 +46,7 @@ import java.lang.reflect.Field;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -239,7 +240,7 @@ public class LuckPermsPermissionAttachment extends PermissionAttachment {
Objects.requireNonNull(name, "name is null"); Objects.requireNonNull(name, "name is null");
Preconditions.checkArgument(!name.isEmpty(), "name is empty"); Preconditions.checkArgument(!name.isEmpty(), "name is empty");
String permission = name.toLowerCase(); String permission = name.toLowerCase(Locale.ROOT);
Boolean previous = this.perms.put(permission, value); Boolean previous = this.perms.put(permission, value);
if (previous != null && previous == value) { if (previous != null && previous == value) {
@ -264,7 +265,7 @@ public class LuckPermsPermissionAttachment extends PermissionAttachment {
Objects.requireNonNull(name, "name is null"); Objects.requireNonNull(name, "name is null");
Preconditions.checkArgument(!name.isEmpty(), "name is empty"); Preconditions.checkArgument(!name.isEmpty(), "name is empty");
String permission = name.toLowerCase(); String permission = name.toLowerCase(Locale.ROOT);
Boolean previous = this.perms.remove(permission); Boolean previous = this.perms.remove(permission);
if (previous == null) { if (previous == null) {

View File

@ -43,6 +43,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -140,7 +141,7 @@ public final class LuckPermsDefaultsMap implements Map<Boolean, Set<Permission>>
protected @NonNull Map<String, Boolean> supply() { protected @NonNull Map<String, Boolean> supply() {
Map<String, Boolean> builder = new HashMap<>(); Map<String, Boolean> builder = new HashMap<>();
for (Permission perm : LuckPermsDefaultsMap.this.get(this.op)) { for (Permission perm : LuckPermsDefaultsMap.this.get(this.op)) {
String name = perm.getName().toLowerCase(); String name = perm.getName().toLowerCase(Locale.ROOT);
builder.put(name, true); builder.put(name, true);
for (Map.Entry<String, Boolean> child : LuckPermsDefaultsMap.this.plugin.getPermissionMap().getChildPermissions(name, true).entrySet()) { for (Map.Entry<String, Boolean> child : LuckPermsDefaultsMap.this.plugin.getPermissionMap().getChildPermissions(name, true).entrySet()) {
builder.putIfAbsent(child.getKey(), child.getValue()); builder.putIfAbsent(child.getKey(), child.getValue());

View File

@ -40,6 +40,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -180,7 +181,7 @@ public final class LuckPermsPermissionMap extends ForwardingMap<String, Permissi
continue; continue;
} }
String key = e.getKey().toLowerCase(); String key = e.getKey().toLowerCase(Locale.ROOT);
if (accumulator.containsKey(key)) { if (accumulator.containsKey(key)) {
continue; // Prevent infinite loops continue; // Prevent infinite loops

View File

@ -38,6 +38,7 @@ import org.bukkit.event.server.PluginEnableEvent;
import org.bukkit.event.server.RemoteServerCommandEvent; import org.bukkit.event.server.RemoteServerCommandEvent;
import org.bukkit.event.server.ServerCommandEvent; import org.bukkit.event.server.ServerCommandEvent;
import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class BukkitPlatformListener implements Listener { public class BukkitPlatformListener implements Listener {
@ -51,17 +52,17 @@ public class BukkitPlatformListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerCommand(PlayerCommandPreprocessEvent e) { public void onPlayerCommand(PlayerCommandPreprocessEvent e) {
handleCommand(e.getPlayer(), e.getMessage().toLowerCase(), e); handleCommand(e.getPlayer(), e.getMessage().toLowerCase(Locale.ROOT), e);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onServerCommand(ServerCommandEvent e) { public void onServerCommand(ServerCommandEvent e) {
handleCommand(e.getSender(), e.getCommand().toLowerCase(), e); handleCommand(e.getSender(), e.getCommand().toLowerCase(Locale.ROOT), e);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onRemoteServerCommand(RemoteServerCommandEvent e) { public void onRemoteServerCommand(RemoteServerCommandEvent e) {
handleCommand(e.getSender(), e.getCommand().toLowerCase(), e); handleCommand(e.getSender(), e.getCommand().toLowerCase(Locale.ROOT), e);
} }
private void handleCommand(CommandSender sender, String cmdLine, Cancellable event) { private void handleCommand(CommandSender sender, String cmdLine, Cancellable event) {

View File

@ -49,6 +49,7 @@ import net.luckperms.api.query.Flag;
import net.luckperms.api.query.QueryOptions; import net.luckperms.api.query.QueryOptions;
import net.milkbowl.vault.chat.Chat; import net.milkbowl.vault.chat.Chat;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
@ -254,7 +255,7 @@ public class LuckPermsVaultChat extends AbstractVaultChat {
private void setMeta(PermissionHolder holder, String key, Object value, String world) { private void setMeta(PermissionHolder holder, String key, Object value, String world) {
if (key.equalsIgnoreCase(Prefix.NODE_KEY) || key.equalsIgnoreCase(Suffix.NODE_KEY)) { if (key.equalsIgnoreCase(Prefix.NODE_KEY) || key.equalsIgnoreCase(Suffix.NODE_KEY)) {
setChatMeta(holder, ChatMetaType.valueOf(key.toUpperCase()), value == null ? null : value.toString(), world); setChatMeta(holder, ChatMetaType.valueOf(key.toUpperCase(Locale.ROOT)), value == null ? null : value.toString(), world);
return; return;
} }
@ -277,7 +278,7 @@ public class LuckPermsVaultChat extends AbstractVaultChat {
private QueryOptions createQueryOptionsForWorldSet(String world) { private QueryOptions createQueryOptionsForWorldSet(String world) {
ImmutableContextSet.Builder context = new ImmutableContextSetImpl.BuilderImpl(); ImmutableContextSet.Builder context = new ImmutableContextSetImpl.BuilderImpl();
if (world != null && !world.isEmpty() && !world.equalsIgnoreCase("global")) { if (world != null && !world.isEmpty() && !world.equalsIgnoreCase("global")) {
context.add(DefaultContextKeys.WORLD_KEY, world.toLowerCase()); context.add(DefaultContextKeys.WORLD_KEY, world.toLowerCase(Locale.ROOT));
} }
context.add(DefaultContextKeys.SERVER_KEY, this.vaultPermission.getVaultServer()); context.add(DefaultContextKeys.SERVER_KEY, this.vaultPermission.getVaultServer());

View File

@ -59,6 +59,7 @@ import net.milkbowl.vault.permission.Permission;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
@ -348,7 +349,7 @@ public class LuckPermsVaultPermission extends AbstractVaultPermission {
// remove already accumulated worlds // remove already accumulated worlds
context.removeAll(DefaultContextKeys.WORLD_KEY); context.removeAll(DefaultContextKeys.WORLD_KEY);
// add the vault world // add the vault world
context.add(DefaultContextKeys.WORLD_KEY, world.toLowerCase()); context.add(DefaultContextKeys.WORLD_KEY, world.toLowerCase(Locale.ROOT));
} }
// if we're using a special vault server // if we're using a special vault server

View File

@ -47,6 +47,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
@ -126,10 +127,10 @@ public class LoggedAction implements Action {
} }
public boolean matchesSearch(String query) { public boolean matchesSearch(String query) {
query = Objects.requireNonNull(query, "query").toLowerCase(); query = Objects.requireNonNull(query, "query").toLowerCase(Locale.ROOT);
return this.source.name.toLowerCase().contains(query) || return this.source.name.toLowerCase(Locale.ROOT).contains(query) ||
this.target.name.toLowerCase().contains(query) || this.target.name.toLowerCase(Locale.ROOT).contains(query) ||
this.description.toLowerCase().contains(query); this.description.toLowerCase(Locale.ROOT).contains(query);
} }
public void submit(LuckPermsPlugin plugin, Sender sender) { public void submit(LuckPermsPlugin plugin, Sender sender) {

View File

@ -31,6 +31,7 @@ import me.lucko.luckperms.common.config.ConfigKeys;
import me.lucko.luckperms.common.plugin.LuckPermsPlugin; import me.lucko.luckperms.common.plugin.LuckPermsPlugin;
import me.lucko.luckperms.common.storage.misc.DataConstraints; import me.lucko.luckperms.common.storage.misc.DataConstraints;
import java.util.Locale;
import java.util.function.Predicate; import java.util.function.Predicate;
public final class ApiUtils { public final class ApiUtils {
@ -55,7 +56,7 @@ public final class ApiUtils {
} }
Preconditions.checkArgument(DataConstraints.GROUP_NAME_TEST.test(s), "Invalid name entry: " + s); Preconditions.checkArgument(DataConstraints.GROUP_NAME_TEST.test(s), "Invalid name entry: " + s);
return s.toLowerCase(); return s.toLowerCase(Locale.ROOT);
} }
} }

View File

@ -38,6 +38,7 @@ import net.luckperms.api.node.NodeEqualityPredicate;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
@ -83,11 +84,11 @@ public class ApiUser extends ApiPermissionHolder implements net.luckperms.api.mo
return DataMutateResult.FAIL_ALREADY_HAS; return DataMutateResult.FAIL_ALREADY_HAS;
} }
if (!this.handle.hasNode(DataType.NORMAL, Inheritance.builder(group.toLowerCase()).build(), NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) { if (!this.handle.hasNode(DataType.NORMAL, Inheritance.builder(group.toLowerCase(Locale.ROOT)).build(), NodeEqualityPredicate.IGNORE_EXPIRY_TIME_AND_VALUE).asBoolean()) {
return DataMutateResult.FAIL; return DataMutateResult.FAIL;
} }
this.handle.getPrimaryGroup().setStoredValue(group.toLowerCase()); this.handle.getPrimaryGroup().setStoredValue(group.toLowerCase(Locale.ROOT));
return DataMutateResult.SUCCESS; return DataMutateResult.SUCCESS;
} }

View File

@ -50,6 +50,7 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
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.UUID; import java.util.UUID;
@ -167,7 +168,7 @@ public class Importer implements Runnable {
for (JsonElement holderElement : holdersArray) { for (JsonElement holderElement : holdersArray) {
JsonObject jsonData = holderElement.getAsJsonObject(); JsonObject jsonData = holderElement.getAsJsonObject();
HolderType type = HolderType.valueOf(jsonData.get("type").getAsString().toUpperCase()); HolderType type = HolderType.valueOf(jsonData.get("type").getAsString().toUpperCase(Locale.ROOT));
String id = jsonData.get("id").getAsString(); String id = jsonData.get("id").getAsString();
if (type == HolderType.GROUP) { if (type == HolderType.GROUP) {

View File

@ -25,6 +25,8 @@
package me.lucko.luckperms.common.bulkupdate.query; package me.lucko.luckperms.common.bulkupdate.query;
import java.util.Locale;
/** /**
* Represents a field being used in an update * Represents a field being used in an update
*/ */
@ -38,7 +40,7 @@ public enum QueryField {
public static QueryField of(String s) { public static QueryField of(String s) {
try { try {
return valueOf(s.toUpperCase()); return valueOf(s.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
return null; return null;
} }

View File

@ -45,6 +45,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.SortedMap; import java.util.SortedMap;
@ -108,7 +109,7 @@ public class SimpleMetaCache extends UsageTracked implements CachedMetaData {
public String getMetaValue(String key, MetaCheckEvent.Origin origin) { public String getMetaValue(String key, MetaCheckEvent.Origin origin) {
Objects.requireNonNull(key, "key"); Objects.requireNonNull(key, "key");
return this.flattenedMeta.get(key.toLowerCase()); return this.flattenedMeta.get(key.toLowerCase(Locale.ROOT));
} }
@Override @Override
@ -205,7 +206,7 @@ public class SimpleMetaCache extends UsageTracked implements CachedMetaData {
} }
String key = (String) k; String key = (String) k;
return super.get(key.toLowerCase()); return super.get(key.toLowerCase(Locale.ROOT));
} }
} }

View File

@ -30,6 +30,7 @@ import net.luckperms.api.query.meta.MetaValueSelector;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class SimpleMetaValueSelector implements MetaValueSelector { public class SimpleMetaValueSelector implements MetaValueSelector {
@ -81,7 +82,7 @@ public class SimpleMetaValueSelector implements MetaValueSelector {
public static Strategy parse(String s) { public static Strategy parse(String s) {
try { try {
return Strategy.valueOf(s.replace('-', '_').toUpperCase()); return Strategy.valueOf(s.replace('-', '_').toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
return null; return null;
} }

View File

@ -35,6 +35,7 @@ import me.lucko.luckperms.common.verbose.event.PermissionCheckEvent;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collection; import java.util.Collection;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@ -85,7 +86,7 @@ public class PermissionCalculator implements Function<String, TristateResult> {
public TristateResult apply(@NonNull String permission) { public TristateResult apply(@NonNull String permission) {
// convert the permission to lowercase, as all values in the backing map are also lowercase. // convert the permission to lowercase, as all values in the backing map are also lowercase.
// this allows fast case insensitive lookups // this allows fast case insensitive lookups
permission = permission.toLowerCase(); permission = permission.toLowerCase(Locale.ROOT);
// offer the permission to the permission vault // offer the permission to the permission vault
// we only need to do this once per permission, so it doesn't matter // we only need to do this once per permission, so it doesn't matter

View File

@ -75,6 +75,7 @@ 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.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
@ -130,7 +131,7 @@ public class CommandManager {
.add(new ListTracks()) .add(new ListTracks())
.build() .build()
.stream() .stream()
.collect(ImmutableCollectors.toMap(c -> c.getName().toLowerCase(), Function.identity())); .collect(ImmutableCollectors.toMap(c -> c.getName().toLowerCase(Locale.ROOT), Function.identity()));
} }
public LuckPermsPlugin getPlugin() { public LuckPermsPlugin getPlugin() {
@ -235,7 +236,7 @@ public class CommandManager {
} }
// Look for the main command. // Look for the main command.
Command<?> main = this.mainCommands.get(arguments.get(0).toLowerCase()); Command<?> main = this.mainCommands.get(arguments.get(0).toLowerCase(Locale.ROOT));
// Main command not found // Main command not found
if (main == null) { if (main == null) {
@ -276,7 +277,7 @@ public class CommandManager {
.collect(Collectors.toList()); .collect(Collectors.toList());
return TabCompleter.create() return TabCompleter.create()
.at(0, CompletionSupplier.startsWith(() -> mains.stream().map(c -> c.getName().toLowerCase()))) .at(0, CompletionSupplier.startsWith(() -> mains.stream().map(c -> c.getName().toLowerCase(Locale.ROOT))))
.from(1, partial -> mains.stream() .from(1, partial -> mains.stream()
.filter(m -> m.getName().equalsIgnoreCase(arguments.get(0))) .filter(m -> m.getName().equalsIgnoreCase(arguments.get(0)))
.findFirst() .findFirst()
@ -333,7 +334,7 @@ public class CommandManager {
// '/lp user Luck p set --> /lp user Luck permission set' etc // '/lp user Luck p set --> /lp user Luck permission set' etc
// ^ ^^^^^^^^^^ // ^ ^^^^^^^^^^
if (args.size() >= 3 && (rewriteLastArgument || args.size() >= 4)) { if (args.size() >= 3 && (rewriteLastArgument || args.size() >= 4)) {
String arg0 = args.get(0).toLowerCase(); String arg0 = args.get(0).toLowerCase(Locale.ROOT);
if (arg0.equals("user") || arg0.equals("group")) { if (arg0.equals("user") || arg0.equals("group")) {
replaceArgs(args, 2, arg -> { replaceArgs(args, 2, arg -> {
switch (arg) { switch (arg) {
@ -353,7 +354,7 @@ public class CommandManager {
// '/lp user Luck permission i' --> '/lp user Luck permission info' etc // '/lp user Luck permission i' --> '/lp user Luck permission info' etc
// ^ ^^^^ // ^ ^^^^
if (args.size() >= 4 && (rewriteLastArgument || args.size() >= 5)) { if (args.size() >= 4 && (rewriteLastArgument || args.size() >= 5)) {
String arg2 = args.get(2).toLowerCase(); String arg2 = args.get(2).toLowerCase(Locale.ROOT);
if (arg2.equals("permission") || arg2.equals("parent") || arg2.equals("meta")) { if (arg2.equals("permission") || arg2.equals("parent") || arg2.equals("meta")) {
replaceArgs(args, 3, arg -> arg.equals("i") ? "info" : null); replaceArgs(args, 3, arg -> arg.equals("i") ? "info" : null);
} }
@ -363,7 +364,7 @@ public class CommandManager {
} }
private static void replaceArgs(List<String> args, int i, Function<String, String> rewrites) { private static void replaceArgs(List<String> args, int i, Function<String, String> rewrites) {
String arg = args.get(i).toLowerCase(); String arg = args.get(i).toLowerCase(Locale.ROOT);
String rewrite = rewrites.apply(arg); String rewrite = rewrites.apply(arg);
if (rewrite != null) { if (rewrite != null) {
args.remove(i); args.remove(i);

View File

@ -36,6 +36,7 @@ import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -58,7 +59,7 @@ public abstract class ChildCommand<T> extends Command<T> {
TextComponent.Builder builder = Component.text() TextComponent.Builder builder = Component.text()
.append(Component.text('>', NamedTextColor.DARK_AQUA)) .append(Component.text('>', NamedTextColor.DARK_AQUA))
.append(Component.space()) .append(Component.space())
.append(Component.text(getName().toLowerCase(), NamedTextColor.GREEN)); .append(Component.text(getName().toLowerCase(Locale.ROOT), NamedTextColor.GREEN));
if (getArgs().isPresent()) { if (getArgs().isPresent()) {
List<Component> argUsages = getArgs().get().stream() List<Component> argUsages = getArgs().get().stream()

View File

@ -41,6 +41,7 @@ import net.kyori.adventure.text.format.NamedTextColor;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -106,7 +107,7 @@ public abstract class GenericChildCommand {
TextComponent.Builder builder = Component.text() TextComponent.Builder builder = Component.text()
.append(Component.text('>', NamedTextColor.DARK_AQUA)) .append(Component.text('>', NamedTextColor.DARK_AQUA))
.append(Component.space()) .append(Component.space())
.append(Component.text(getName().toLowerCase(), NamedTextColor.GREEN)); .append(Component.text(getName().toLowerCase(Locale.ROOT), NamedTextColor.GREEN));
if (getArgs() != null) { if (getArgs() != null) {
List<Component> argUsages = getArgs().stream() List<Component> argUsages = getArgs().stream()

View File

@ -38,6 +38,7 @@ import me.lucko.luckperms.common.util.Predicates;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -96,7 +97,7 @@ public class GenericParentCommand<T extends PermissionHolder> extends ChildComma
return TabCompleter.create() return TabCompleter.create()
.at(0, CompletionSupplier.startsWith(() -> this.children.stream() .at(0, CompletionSupplier.startsWith(() -> this.children.stream()
.filter(s -> s.isAuthorized(sender, this.type)) .filter(s -> s.isAuthorized(sender, this.type))
.map(s -> s.getName().toLowerCase()) .map(s -> s.getName().toLowerCase(Locale.ROOT))
)) ))
.from(1, partial -> this.children.stream() .from(1, partial -> this.children.stream()
.filter(s -> s.isAuthorized(sender, this.type)) .filter(s -> s.isAuthorized(sender, this.type))
@ -121,10 +122,10 @@ public class GenericParentCommand<T extends PermissionHolder> extends ChildComma
if (!subs.isEmpty()) { if (!subs.isEmpty()) {
switch (this.type) { switch (this.type) {
case USER: case USER:
Message.MAIN_COMMAND_USAGE_HEADER.send(sender, getName(), String.format("/%s user <user> " + getName().toLowerCase(), label)); Message.MAIN_COMMAND_USAGE_HEADER.send(sender, getName(), String.format("/%s user <user> " + getName().toLowerCase(Locale.ROOT), label));
break; break;
case GROUP: case GROUP:
Message.MAIN_COMMAND_USAGE_HEADER.send(sender, getName(), String.format("/%s group <group> " + getName().toLowerCase(), label)); Message.MAIN_COMMAND_USAGE_HEADER.send(sender, getName(), String.format("/%s group <group> " + getName().toLowerCase(Locale.ROOT), label));
break; break;
default: default:
throw new AssertionError(this.type); throw new AssertionError(this.type);

View File

@ -38,6 +38,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -123,7 +124,7 @@ public abstract class ParentCommand<T, I> extends Command<Void> {
.at(0, CompletionSupplier.startsWith(() -> getTargets(plugin).stream())) .at(0, CompletionSupplier.startsWith(() -> getTargets(plugin).stream()))
.at(1, CompletionSupplier.startsWith(() -> getChildren().stream() .at(1, CompletionSupplier.startsWith(() -> getChildren().stream()
.filter(s -> s.isAuthorized(sender)) .filter(s -> s.isAuthorized(sender))
.map(s -> s.getName().toLowerCase()) .map(s -> s.getName().toLowerCase(Locale.ROOT))
)) ))
.from(2, partial -> getChildren().stream() .from(2, partial -> getChildren().stream()
.filter(s -> s.isAuthorized(sender)) .filter(s -> s.isAuthorized(sender))
@ -137,7 +138,7 @@ public abstract class ParentCommand<T, I> extends Command<Void> {
return TabCompleter.create() return TabCompleter.create()
.at(0, CompletionSupplier.startsWith(() -> getChildren().stream() .at(0, CompletionSupplier.startsWith(() -> getChildren().stream()
.filter(s -> s.isAuthorized(sender)) .filter(s -> s.isAuthorized(sender))
.map(s -> s.getName().toLowerCase()) .map(s -> s.getName().toLowerCase(Locale.ROOT))
)) ))
.from(1, partial -> getChildren().stream() .from(1, partial -> getChildren().stream()
.filter(s -> s.isAuthorized(sender)) .filter(s -> s.isAuthorized(sender))

View File

@ -38,6 +38,7 @@ import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.NamedTextColor;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -62,7 +63,7 @@ public abstract class SingleCommand extends Command<Void> {
TextComponent.Builder builder = Component.text() TextComponent.Builder builder = Component.text()
.append(Component.text('>', NamedTextColor.DARK_AQUA)) .append(Component.text('>', NamedTextColor.DARK_AQUA))
.append(Component.space()) .append(Component.space())
.append(Component.text(getName().toLowerCase(), NamedTextColor.GREEN)); .append(Component.text(getName().toLowerCase(Locale.ROOT), NamedTextColor.GREEN));
if (getArgs().isPresent()) { if (getArgs().isPresent()) {
List<Component> argUsages = getArgs().get().stream() List<Component> argUsages = getArgs().get().stream()

View File

@ -31,6 +31,7 @@ import net.kyori.adventure.text.Component;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Locale;
/** /**
* An enumeration of the command defintion/usage messages used in the plugin. * An enumeration of the command defintion/usage messages used in the plugin.
@ -437,7 +438,7 @@ public enum CommandSpec {
} }
public String key() { public String key() {
return name().toLowerCase().replace('_', '-'); return name().toLowerCase(Locale.ROOT).replace('_', '-');
} }
private static PartialArgument arg(String id, String name, boolean required) { private static PartialArgument arg(String id, String name, boolean required) {

View File

@ -29,6 +29,7 @@ import com.google.common.base.Preconditions;
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.function.Predicate; import java.util.function.Predicate;
@ -112,7 +113,7 @@ public class TabCompleter {
if (string.length() < substring.length()) { if (string.length() < substring.length()) {
return false; return false;
} }
return string.toLowerCase().contains(substring.toLowerCase()); return string.toLowerCase(Locale.ROOT).contains(substring.toLowerCase(Locale.ROOT));
}; };
} }

View File

@ -36,6 +36,7 @@ import net.luckperms.api.context.ImmutableContextSet;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -57,7 +58,7 @@ public final class TabCompletions {
this.permissions = partial -> { this.permissions = partial -> {
PermissionRegistry cache = plugin.getPermissionRegistry(); PermissionRegistry cache = plugin.getPermissionRegistry();
String start = partial.toLowerCase(); String start = partial.toLowerCase(Locale.ROOT);
List<String> parts = new ArrayList<>(Splitter.on('.').splitToList(start)); List<String> parts = new ArrayList<>(Splitter.on('.').splitToList(start));
TreeNode root = cache.getRootNode(); TreeNode root = cache.getRootNode();

View File

@ -47,6 +47,7 @@ import java.time.Duration;
import java.time.Instant; import java.time.Instant;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
import java.util.UUID; import java.util.UUID;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -101,7 +102,7 @@ public class ArgumentList extends ForwardingList<String> {
} }
public String getLowercase(int index, Predicate<? super String> test) throws ArgumentException.DetailedUsage { public String getLowercase(int index, Predicate<? super String> test) throws ArgumentException.DetailedUsage {
String arg = get(index).toLowerCase(); String arg = get(index).toLowerCase(Locale.ROOT);
if (!test.test(arg)) { if (!test.test(arg)) {
throw new ArgumentException.DetailedUsage(); throw new ArgumentException.DetailedUsage();
} }
@ -188,7 +189,7 @@ public class ArgumentList extends ForwardingList<String> {
} }
private static TemporaryNodeMergeStrategy parseTemporaryModifier(String s) { private static TemporaryNodeMergeStrategy parseTemporaryModifier(String s) {
switch (s.toLowerCase()) { switch (s.toLowerCase(Locale.ROOT)) {
case "accumulate": case "accumulate":
return TemporaryNodeMergeStrategy.ADD_NEW_DURATION_TO_EXISTING; return TemporaryNodeMergeStrategy.ADD_NEW_DURATION_TO_EXISTING;
case "replace": case "replace":

View File

@ -25,6 +25,8 @@
package me.lucko.luckperms.common.command.utils; package me.lucko.luckperms.common.command.utils;
import java.util.Locale;
public enum SortType { public enum SortType {
PRIORITY, PRIORITY,
@ -32,6 +34,6 @@ public enum SortType {
@Override @Override
public String toString() { public String toString() {
return name().toLowerCase(); return name().toLowerCase(Locale.ROOT);
} }
} }

View File

@ -47,6 +47,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType; import net.luckperms.api.node.ChatMetaType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MetaAddChatMeta extends GenericChildCommand { public class MetaAddChatMeta extends GenericChildCommand {
@ -99,7 +100,7 @@ public class MetaAddChatMeta extends GenericChildCommand {
Message.ADD_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context); Message.ADD_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "add" + this.type.name().toLowerCase(), priority, meta, context) .description("meta" , "add" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -50,6 +50,7 @@ import net.luckperms.api.node.ChatMetaType;
import java.time.Duration; import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MetaAddTempChatMeta extends GenericChildCommand { public class MetaAddTempChatMeta extends GenericChildCommand {
@ -107,7 +108,7 @@ public class MetaAddTempChatMeta extends GenericChildCommand {
Message.ADD_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, duration, context); Message.ADD_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, duration, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "addtemp" + this.type.name().toLowerCase(), priority, meta, duration, context) .description("meta" , "addtemp" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, duration, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -46,6 +46,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType; import net.luckperms.api.node.NodeType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MetaClear extends GenericChildCommand { public class MetaClear extends GenericChildCommand {
public MetaClear() { public MetaClear() {
@ -61,7 +62,7 @@ public class MetaClear extends GenericChildCommand {
NodeType<?> type = null; NodeType<?> type = null;
if (!args.isEmpty()) { if (!args.isEmpty()) {
String typeId = args.get(0).toLowerCase(); String typeId = args.get(0).toLowerCase(Locale.ROOT);
if (typeId.equals("any") || typeId.equals("all") || typeId.equals("*")) { if (typeId.equals("any") || typeId.equals("all") || typeId.equals("*")) {
type = NodeType.META_OR_CHAT_META; type = NodeType.META_OR_CHAT_META;
} }
@ -104,7 +105,7 @@ public class MetaClear extends GenericChildCommand {
} }
int changed = before - target.normalData().size(); int changed = before - target.normalData().size();
Message.META_CLEAR_SUCCESS.send(sender, target, type.name().toLowerCase(), context, changed); Message.META_CLEAR_SUCCESS.send(sender, target, type.name().toLowerCase(Locale.ROOT), context, changed);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta", "clear", context) .description("meta", "clear", context)

View File

@ -47,6 +47,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType; import net.luckperms.api.node.ChatMetaType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MetaRemoveChatMeta extends GenericChildCommand { public class MetaRemoveChatMeta extends GenericChildCommand {
@ -100,7 +101,7 @@ public class MetaRemoveChatMeta extends GenericChildCommand {
Message.BULK_REMOVE_CHATMETA_SUCCESS.send(sender, target, this.type, priority, context); Message.BULK_REMOVE_CHATMETA_SUCCESS.send(sender, target, this.type, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "remove" + this.type.name().toLowerCase(), priority, "*", context) .description("meta" , "remove" + this.type.name().toLowerCase(Locale.ROOT), priority, "*", context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);
@ -113,7 +114,7 @@ public class MetaRemoveChatMeta extends GenericChildCommand {
Message.REMOVE_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context); Message.REMOVE_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "remove" + this.type.name().toLowerCase(), priority, meta, context) .description("meta" , "remove" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -47,6 +47,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType; import net.luckperms.api.node.ChatMetaType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class MetaRemoveTempChatMeta extends GenericChildCommand { public class MetaRemoveTempChatMeta extends GenericChildCommand {
@ -100,7 +101,7 @@ public class MetaRemoveTempChatMeta extends GenericChildCommand {
Message.BULK_REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, priority, context); Message.BULK_REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "removetemp" + this.type.name().toLowerCase(), priority, "*", context) .description("meta" , "removetemp" + this.type.name().toLowerCase(Locale.ROOT), priority, "*", context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);
@ -113,7 +114,7 @@ public class MetaRemoveTempChatMeta extends GenericChildCommand {
Message.REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context); Message.REMOVE_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "removetemp" + this.type.name().toLowerCase(), priority, meta, context) .description("meta" , "removetemp" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -50,6 +50,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.ChatMetaType; import net.luckperms.api.node.ChatMetaType;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.OptionalInt; import java.util.OptionalInt;
public class MetaSetChatMeta extends GenericChildCommand { public class MetaSetChatMeta extends GenericChildCommand {
@ -134,7 +135,7 @@ public class MetaSetChatMeta extends GenericChildCommand {
Message.ADD_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context); Message.ADD_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "set" + this.type.name().toLowerCase(), priority, meta, context) .description("meta" , "set" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -53,6 +53,7 @@ import net.luckperms.api.node.ChatMetaType;
import java.time.Duration; import java.time.Duration;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.OptionalInt; import java.util.OptionalInt;
public class MetaSetTempChatMeta extends GenericChildCommand { public class MetaSetTempChatMeta extends GenericChildCommand {
@ -146,7 +147,7 @@ public class MetaSetTempChatMeta extends GenericChildCommand {
Message.ADD_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, duration, context); Message.ADD_TEMP_CHATMETA_SUCCESS.send(sender, target, this.type, meta, priority, duration, context);
LoggedAction.build().source(sender).target(target) LoggedAction.build().source(sender).target(target)
.description("meta" , "settemp" + this.type.name().toLowerCase(), priority, meta, duration, context) .description("meta" , "settemp" + this.type.name().toLowerCase(Locale.ROOT), priority, meta, duration, context)
.build().submit(plugin, sender); .build().submit(plugin, sender);
StorageAssistant.save(target, sender, plugin); StorageAssistant.save(target, sender, plugin);

View File

@ -50,6 +50,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType; import net.luckperms.api.node.NodeType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class ParentClearTrack extends GenericChildCommand { public class ParentClearTrack extends GenericChildCommand {
public ParentClearTrack() { public ParentClearTrack() {
@ -63,7 +64,7 @@ public class ParentClearTrack extends GenericChildCommand {
return; return;
} }
final String trackName = args.get(0).toLowerCase(); final String trackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, trackName); Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return; return;

View File

@ -50,6 +50,7 @@ import net.luckperms.api.model.data.DataType;
import net.luckperms.api.node.NodeType; import net.luckperms.api.node.NodeType;
import java.util.List; import java.util.List;
import java.util.Locale;
public class ParentSetTrack extends GenericChildCommand { public class ParentSetTrack extends GenericChildCommand {
public ParentSetTrack() { public ParentSetTrack() {
@ -63,7 +64,7 @@ public class ParentSetTrack extends GenericChildCommand {
return; return;
} }
final String trackName = args.get(0).toLowerCase(); final String trackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, trackName); Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return; return;

View File

@ -51,6 +51,7 @@ import net.luckperms.api.node.Node;
import net.luckperms.api.node.NodeEqualityPredicate; import net.luckperms.api.node.NodeEqualityPredicate;
import java.util.List; import java.util.List;
import java.util.Locale;
public class UserSwitchPrimaryGroup extends GenericChildCommand { public class UserSwitchPrimaryGroup extends GenericChildCommand {
public UserSwitchPrimaryGroup() { public UserSwitchPrimaryGroup() {
@ -74,9 +75,9 @@ public class UserSwitchPrimaryGroup extends GenericChildCommand {
Message.USER_PRIMARYGROUP_WARN_OPTION.send(sender, opt); Message.USER_PRIMARYGROUP_WARN_OPTION.send(sender, opt);
} }
Group group = plugin.getGroupManager().getIfLoaded(args.get(0).toLowerCase()); Group group = plugin.getGroupManager().getIfLoaded(args.get(0).toLowerCase(Locale.ROOT));
if (group == null) { if (group == null) {
Message.DOES_NOT_EXIST.send(sender, args.get(0).toLowerCase()); Message.DOES_NOT_EXIST.send(sender, args.get(0).toLowerCase(Locale.ROOT));
return; return;
} }

View File

@ -46,6 +46,8 @@ import net.luckperms.api.actionlog.Action;
import net.luckperms.api.event.cause.CreationCause; import net.luckperms.api.event.cause.CreationCause;
import net.luckperms.api.model.data.DataType; import net.luckperms.api.model.data.DataType;
import java.util.Locale;
public class CreateGroup extends SingleCommand { public class CreateGroup extends SingleCommand {
public CreateGroup() { public CreateGroup() {
super(CommandSpec.CREATE_GROUP, "CreateGroup", CommandPermission.CREATE_GROUP, Predicates.notInRange(1, 3)); super(CommandSpec.CREATE_GROUP, "CreateGroup", CommandPermission.CREATE_GROUP, Predicates.notInRange(1, 3));
@ -58,7 +60,7 @@ public class CreateGroup extends SingleCommand {
return; return;
} }
String groupName = args.get(0).toLowerCase(); String groupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) {
Message.GROUP_INVALID_ENTRY.send(sender, groupName); Message.GROUP_INVALID_ENTRY.send(sender, groupName);
return; return;

View File

@ -56,6 +56,7 @@ import net.luckperms.api.actionlog.Action;
import net.luckperms.api.event.cause.DeletionCause; import net.luckperms.api.event.cause.DeletionCause;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
public class DeleteGroup extends SingleCommand { public class DeleteGroup extends SingleCommand {
@ -70,7 +71,7 @@ public class DeleteGroup extends SingleCommand {
return; return;
} }
String groupName = args.get(0).toLowerCase(); String groupName = args.get(0).toLowerCase(Locale.ROOT);
if (groupName.equalsIgnoreCase(GroupManager.DEFAULT_GROUP_NAME)) { if (groupName.equalsIgnoreCase(GroupManager.DEFAULT_GROUP_NAME)) {
Message.DELETE_GROUP_ERROR_DEFAULT.send(sender); Message.DELETE_GROUP_ERROR_DEFAULT.send(sender);

View File

@ -42,6 +42,8 @@ import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.event.cause.CreationCause; import net.luckperms.api.event.cause.CreationCause;
import net.luckperms.api.model.data.DataType; import net.luckperms.api.model.data.DataType;
import java.util.Locale;
public class GroupClone extends ChildCommand<Group> { public class GroupClone extends ChildCommand<Group> {
public GroupClone() { public GroupClone() {
super(CommandSpec.GROUP_CLONE, "clone", CommandPermission.GROUP_CLONE, Predicates.not(1)); super(CommandSpec.GROUP_CLONE, "clone", CommandPermission.GROUP_CLONE, Predicates.not(1));
@ -54,7 +56,7 @@ public class GroupClone extends ChildCommand<Group> {
return; return;
} }
String newGroupName = args.get(0).toLowerCase(); String newGroupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) {
Message.GROUP_INVALID_ENTRY.send(sender, newGroupName); Message.GROUP_INVALID_ENTRY.send(sender, newGroupName);
return; return;

View File

@ -46,6 +46,7 @@ import me.lucko.luckperms.common.util.CaffeineFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@ -83,7 +84,7 @@ public class GroupParentCommand extends ParentCommand<Group, String> {
if (group != null) { if (group != null) {
return group.getName(); return group.getName();
} else { } else {
return target.toLowerCase(); return target.toLowerCase(Locale.ROOT);
} }
} }

View File

@ -55,6 +55,7 @@ import net.luckperms.api.event.cause.DeletionCause;
import net.luckperms.api.model.data.DataType; import net.luckperms.api.model.data.DataType;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletableFuture;
public class GroupRename extends ChildCommand<Group> { public class GroupRename extends ChildCommand<Group> {
@ -69,7 +70,7 @@ public class GroupRename extends ChildCommand<Group> {
return; return;
} }
String newGroupName = args.get(0).toLowerCase(); String newGroupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(newGroupName)) {
Message.GROUP_INVALID_ENTRY.send(sender, newGroupName); Message.GROUP_INVALID_ENTRY.send(sender, newGroupName);
return; return;

View File

@ -41,6 +41,7 @@ import me.lucko.luckperms.common.util.Paginated;
import me.lucko.luckperms.common.util.Predicates; import me.lucko.luckperms.common.util.Predicates;
import java.util.List; import java.util.List;
import java.util.Locale;
public class LogGroupHistory extends ChildCommand<Log> { public class LogGroupHistory extends ChildCommand<Log> {
private static final int ENTRIES_PER_PAGE = 10; private static final int ENTRIES_PER_PAGE = 10;
@ -51,7 +52,7 @@ public class LogGroupHistory extends ChildCommand<Log> {
@Override @Override
public void execute(LuckPermsPlugin plugin, Sender sender, Log log, ArgumentList args, String label) { public void execute(LuckPermsPlugin plugin, Sender sender, Log log, ArgumentList args, String label) {
String group = args.get(0).toLowerCase(); String group = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(group)) { if (!DataConstraints.GROUP_NAME_TEST.test(group)) {
Message.GROUP_INVALID_ENTRY.send(sender, group); Message.GROUP_INVALID_ENTRY.send(sender, group);
return; return;

View File

@ -41,6 +41,7 @@ import me.lucko.luckperms.common.util.Paginated;
import me.lucko.luckperms.common.util.Predicates; import me.lucko.luckperms.common.util.Predicates;
import java.util.List; import java.util.List;
import java.util.Locale;
public class LogTrackHistory extends ChildCommand<Log> { public class LogTrackHistory extends ChildCommand<Log> {
private static final int ENTRIES_PER_PAGE = 10; private static final int ENTRIES_PER_PAGE = 10;
@ -51,7 +52,7 @@ public class LogTrackHistory extends ChildCommand<Log> {
@Override @Override
public void execute(LuckPermsPlugin plugin, Sender sender, Log log, ArgumentList args, String label) { public void execute(LuckPermsPlugin plugin, Sender sender, Log log, ArgumentList args, String label) {
String track = args.get(0).toLowerCase(); String track = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(track)) { if (!DataConstraints.TRACK_NAME_TEST.test(track)) {
Message.TRACK_INVALID_ENTRY.send(sender, track); Message.TRACK_INVALID_ENTRY.send(sender, track);
return; return;

View File

@ -51,6 +51,7 @@ import me.lucko.luckperms.common.sender.Sender;
import me.lucko.luckperms.common.util.CaffeineFactory; import me.lucko.luckperms.common.util.CaffeineFactory;
import me.lucko.luckperms.common.util.Predicates; import me.lucko.luckperms.common.util.Predicates;
import java.util.Locale;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -90,13 +91,13 @@ public class BulkUpdateCommand extends SingleCommand {
bulkUpdateBuilder.trackStatistics(!args.remove("-s")); bulkUpdateBuilder.trackStatistics(!args.remove("-s"));
try { try {
bulkUpdateBuilder.dataType(DataType.valueOf(args.remove(0).toUpperCase())); bulkUpdateBuilder.dataType(DataType.valueOf(args.remove(0).toUpperCase(Locale.ROOT)));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
Message.BULK_UPDATE_INVALID_DATA_TYPE.send(sender); Message.BULK_UPDATE_INVALID_DATA_TYPE.send(sender);
return; return;
} }
String action = args.remove(0).toLowerCase(); String action = args.remove(0).toLowerCase(Locale.ROOT);
switch (action) { switch (action) {
case "delete": case "delete":
bulkUpdateBuilder.action(DeleteAction.create()); bulkUpdateBuilder.action(DeleteAction.create());

View File

@ -45,6 +45,7 @@ import net.luckperms.api.node.Node;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
public class EditorCommand extends SingleCommand { public class EditorCommand extends SingleCommand {
public EditorCommand() { public EditorCommand() {
@ -60,7 +61,7 @@ public class EditorCommand extends SingleCommand {
String arg0 = args.getOrDefault(0, null); String arg0 = args.getOrDefault(0, null);
if (arg0 != null) { if (arg0 != null) {
try { try {
type = Type.valueOf(arg0.toUpperCase()); type = Type.valueOf(arg0.toUpperCase(Locale.ROOT));
} catch (IllegalArgumentException e) { } catch (IllegalArgumentException e) {
// assume they meant it as a filter // assume they meant it as a filter
filter = arg0; filter = arg0;

View File

@ -45,6 +45,7 @@ import me.lucko.luckperms.common.verbose.VerboseListener;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
public class VerboseCommand extends SingleCommand { public class VerboseCommand extends SingleCommand {
public VerboseCommand() { public VerboseCommand() {
@ -59,7 +60,7 @@ public class VerboseCommand extends SingleCommand {
} }
VerboseHandler verboseHandler = plugin.getVerboseHandler(); VerboseHandler verboseHandler = plugin.getVerboseHandler();
String mode = args.get(0).toLowerCase(); String mode = args.get(0).toLowerCase(Locale.ROOT);
if (mode.equals("command") || mode.equals("cmd")) { if (mode.equals("command") || mode.equals("cmd")) {
if (args.size() < 3) { if (args.size() < 3) {

View File

@ -40,6 +40,8 @@ import net.kyori.adventure.text.Component;
import net.luckperms.api.actionlog.Action; import net.luckperms.api.actionlog.Action;
import net.luckperms.api.event.cause.CreationCause; import net.luckperms.api.event.cause.CreationCause;
import java.util.Locale;
public class CreateTrack extends SingleCommand { public class CreateTrack extends SingleCommand {
public CreateTrack() { public CreateTrack() {
super(CommandSpec.CREATE_TRACK, "CreateTrack", CommandPermission.CREATE_TRACK, Predicates.not(1)); super(CommandSpec.CREATE_TRACK, "CreateTrack", CommandPermission.CREATE_TRACK, Predicates.not(1));
@ -52,7 +54,7 @@ public class CreateTrack extends SingleCommand {
return; return;
} }
String trackName = args.get(0).toLowerCase(); String trackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, trackName); Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return; return;

View File

@ -44,6 +44,7 @@ import net.luckperms.api.actionlog.Action;
import net.luckperms.api.event.cause.DeletionCause; import net.luckperms.api.event.cause.DeletionCause;
import java.util.List; import java.util.List;
import java.util.Locale;
public class DeleteTrack extends SingleCommand { public class DeleteTrack extends SingleCommand {
public DeleteTrack() { public DeleteTrack() {
@ -57,7 +58,7 @@ public class DeleteTrack extends SingleCommand {
return; return;
} }
String trackName = args.get(0).toLowerCase(); String trackName = args.get(0).toLowerCase(Locale.ROOT);
Track track = plugin.getStorage().loadTrack(trackName).join().orElse(null); Track track = plugin.getStorage().loadTrack(trackName).join().orElse(null);
if (track == null) { if (track == null) {
Message.TRACK_LOAD_ERROR.send(sender); Message.TRACK_LOAD_ERROR.send(sender);

View File

@ -45,6 +45,7 @@ import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.model.data.DataMutateResult; import net.luckperms.api.model.data.DataMutateResult;
import java.util.List; import java.util.List;
import java.util.Locale;
public class TrackAppend extends ChildCommand<Track> { public class TrackAppend extends ChildCommand<Track> {
public TrackAppend() { public TrackAppend() {
@ -58,7 +59,7 @@ public class TrackAppend extends ChildCommand<Track> {
return; return;
} }
String groupName = args.get(0).toLowerCase(); String groupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) {
sendDetailedUsage(sender, label); sendDetailedUsage(sender, label);
return; return;

View File

@ -42,6 +42,8 @@ import me.lucko.luckperms.common.util.Predicates;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.luckperms.api.event.cause.CreationCause; import net.luckperms.api.event.cause.CreationCause;
import java.util.Locale;
public class TrackClone extends ChildCommand<Track> { public class TrackClone extends ChildCommand<Track> {
public TrackClone() { public TrackClone() {
super(CommandSpec.TRACK_CLONE, "clone", CommandPermission.TRACK_CLONE, Predicates.not(1)); super(CommandSpec.TRACK_CLONE, "clone", CommandPermission.TRACK_CLONE, Predicates.not(1));
@ -54,7 +56,7 @@ public class TrackClone extends ChildCommand<Track> {
return; return;
} }
String newTrackName = args.get(0).toLowerCase(); String newTrackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(newTrackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(newTrackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, newTrackName); Message.TRACK_INVALID_ENTRY.send(sender, newTrackName);
return; return;

View File

@ -45,6 +45,7 @@ import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.model.data.DataMutateResult; import net.luckperms.api.model.data.DataMutateResult;
import java.util.List; import java.util.List;
import java.util.Locale;
public class TrackInsert extends ChildCommand<Track> { public class TrackInsert extends ChildCommand<Track> {
public TrackInsert() { public TrackInsert() {
@ -58,7 +59,7 @@ public class TrackInsert extends ChildCommand<Track> {
return; return;
} }
String groupName = args.get(0).toLowerCase(); String groupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) {
sendDetailedUsage(sender, label); sendDetailedUsage(sender, label);
return; return;

View File

@ -39,6 +39,7 @@ import me.lucko.luckperms.common.util.CaffeineFactory;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@ -68,7 +69,7 @@ public class TrackParentCommand extends ParentCommand<Track, String> {
@Override @Override
protected String parseTarget(String target, LuckPermsPlugin plugin, Sender sender) { protected String parseTarget(String target, LuckPermsPlugin plugin, Sender sender) {
return target.toLowerCase(); return target.toLowerCase(Locale.ROOT);
} }
@Override @Override

View File

@ -44,6 +44,7 @@ import me.lucko.luckperms.common.util.Predicates;
import net.luckperms.api.model.data.DataMutateResult; import net.luckperms.api.model.data.DataMutateResult;
import java.util.List; import java.util.List;
import java.util.Locale;
public class TrackRemove extends ChildCommand<Track> { public class TrackRemove extends ChildCommand<Track> {
public TrackRemove() { public TrackRemove() {
@ -57,7 +58,7 @@ public class TrackRemove extends ChildCommand<Track> {
return; return;
} }
String groupName = args.get(0).toLowerCase(); String groupName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) { if (!DataConstraints.GROUP_NAME_TEST.test(groupName)) {
sendDetailedUsage(sender, label); sendDetailedUsage(sender, label);
return; return;

View File

@ -43,6 +43,8 @@ import net.kyori.adventure.text.Component;
import net.luckperms.api.event.cause.CreationCause; import net.luckperms.api.event.cause.CreationCause;
import net.luckperms.api.event.cause.DeletionCause; import net.luckperms.api.event.cause.DeletionCause;
import java.util.Locale;
public class TrackRename extends ChildCommand<Track> { public class TrackRename extends ChildCommand<Track> {
public TrackRename() { public TrackRename() {
super(CommandSpec.TRACK_RENAME, "rename", CommandPermission.TRACK_RENAME, Predicates.not(1)); super(CommandSpec.TRACK_RENAME, "rename", CommandPermission.TRACK_RENAME, Predicates.not(1));
@ -55,7 +57,7 @@ public class TrackRename extends ChildCommand<Track> {
return; return;
} }
String newTrackName = args.get(0).toLowerCase(); String newTrackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(newTrackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(newTrackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, newTrackName); Message.TRACK_INVALID_ENTRY.send(sender, newTrackName);
return; return;

View File

@ -47,6 +47,7 @@ import net.luckperms.api.context.MutableContextSet;
import net.luckperms.api.track.DemotionResult; import net.luckperms.api.track.DemotionResult;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -77,7 +78,7 @@ public class UserDemote extends ChildCommand<User> {
} }
} }
final String trackName = args.get(0).toLowerCase(); final String trackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, trackName); Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return; return;

View File

@ -47,6 +47,7 @@ import net.luckperms.api.context.MutableContextSet;
import net.luckperms.api.track.PromotionResult; import net.luckperms.api.track.PromotionResult;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
@ -77,7 +78,7 @@ public class UserPromote extends ChildCommand<User> {
} }
} }
final String trackName = args.get(0).toLowerCase(); final String trackName = args.get(0).toLowerCase(Locale.ROOT);
if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) { if (!DataConstraints.TRACK_NAME_TEST.test(trackName)) {
Message.TRACK_INVALID_ENTRY.send(sender, trackName); Message.TRACK_INVALID_ENTRY.send(sender, trackName);
return; return;

View File

@ -59,6 +59,7 @@ import java.util.ArrayList;
import java.util.EnumMap; import java.util.EnumMap;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -86,9 +87,9 @@ public final class ConfigKeys {
* The name of the server * The name of the server
*/ */
public static final ConfigKey<String> SERVER = key(c -> { public static final ConfigKey<String> SERVER = key(c -> {
String server = c.getString("server", "global").toLowerCase(); String server = c.getString("server", "global").toLowerCase(Locale.ROOT);
if (server.equals("load-from-system-property")) { if (server.equals("load-from-system-property")) {
server = System.getProperty("luckperms.server", "global").toLowerCase(); server = System.getProperty("luckperms.server", "global").toLowerCase(Locale.ROOT);
} }
return server; return server;
}); });
@ -191,7 +192,7 @@ public final class ConfigKeys {
*/ */
public static final ConfigKey<TemporaryNodeMergeStrategy> TEMPORARY_ADD_BEHAVIOUR = key(c -> { public static final ConfigKey<TemporaryNodeMergeStrategy> TEMPORARY_ADD_BEHAVIOUR = key(c -> {
String value = c.getString("temporary-add-behaviour", "deny"); String value = c.getString("temporary-add-behaviour", "deny");
switch (value.toLowerCase()) { switch (value.toLowerCase(Locale.ROOT)) {
case "accumulate": case "accumulate":
return TemporaryNodeMergeStrategy.ADD_NEW_DURATION_TO_EXISTING; return TemporaryNodeMergeStrategy.ADD_NEW_DURATION_TO_EXISTING;
case "replace": case "replace":
@ -205,7 +206,7 @@ public final class ConfigKeys {
* How primary groups should be calculated. * How primary groups should be calculated.
*/ */
public static final ConfigKey<String> PRIMARY_GROUP_CALCULATION_METHOD = notReloadable(key(c -> { public static final ConfigKey<String> PRIMARY_GROUP_CALCULATION_METHOD = notReloadable(key(c -> {
String option = c.getString("primary-group-calculation", "stored").toLowerCase(); String option = c.getString("primary-group-calculation", "stored").toLowerCase(Locale.ROOT);
if (!option.equals("stored") && !option.equals("parents-by-weight") && !option.equals("all-parents-by-weight")) { if (!option.equals("stored") && !option.equals("parents-by-weight") && !option.equals("all-parents-by-weight")) {
option = "stored"; option = "stored";
} }
@ -318,7 +319,7 @@ public final class ConfigKeys {
*/ */
public static final ConfigKey<TraversalAlgorithm> INHERITANCE_TRAVERSAL_ALGORITHM = key(c -> { public static final ConfigKey<TraversalAlgorithm> INHERITANCE_TRAVERSAL_ALGORITHM = key(c -> {
String value = c.getString("inheritance-traversal-algorithm", "depth-first-pre-order"); String value = c.getString("inheritance-traversal-algorithm", "depth-first-pre-order");
switch (value.toLowerCase()) { switch (value.toLowerCase(Locale.ROOT)) {
case "breadth-first": case "breadth-first":
return TraversalAlgorithm.BREADTH_FIRST; return TraversalAlgorithm.BREADTH_FIRST;
case "depth-first-post-order": case "depth-first-post-order":
@ -355,7 +356,7 @@ public final class ConfigKeys {
*/ */
public static final ConfigKey<Map<String, Integer>> GROUP_WEIGHTS = key(c -> { public static final ConfigKey<Map<String, Integer>> GROUP_WEIGHTS = key(c -> {
return c.getStringMap("group-weight", ImmutableMap.of()).entrySet().stream().collect(ImmutableCollectors.toMap( return c.getStringMap("group-weight", ImmutableMap.of()).entrySet().stream().collect(ImmutableCollectors.toMap(
e -> e.getKey().toLowerCase(), e -> e.getKey().toLowerCase(Locale.ROOT),
e -> { e -> {
try { try {
return Integer.parseInt(e.getValue()); return Integer.parseInt(e.getValue());
@ -378,7 +379,7 @@ public final class ConfigKeys {
String middleSpacer = l.getString("meta-formatting.prefix.middle-spacer", " "); String middleSpacer = l.getString("meta-formatting.prefix.middle-spacer", " ");
String endSpacer = l.getString("meta-formatting.prefix.end-spacer", ""); String endSpacer = l.getString("meta-formatting.prefix.end-spacer", "");
DuplicateRemovalFunction duplicateRemovalFunction; DuplicateRemovalFunction duplicateRemovalFunction;
switch (l.getString("meta-formatting.prefix.duplicates", "").toLowerCase()) { switch (l.getString("meta-formatting.prefix.duplicates", "").toLowerCase(Locale.ROOT)) {
case "first-only": case "first-only":
duplicateRemovalFunction = DuplicateRemovalFunction.FIRST_ONLY; duplicateRemovalFunction = DuplicateRemovalFunction.FIRST_ONLY;
break; break;
@ -405,7 +406,7 @@ public final class ConfigKeys {
String middleSpacer = l.getString("meta-formatting.suffix.middle-spacer", " "); String middleSpacer = l.getString("meta-formatting.suffix.middle-spacer", " ");
String endSpacer = l.getString("meta-formatting.suffix.end-spacer", ""); String endSpacer = l.getString("meta-formatting.suffix.end-spacer", "");
DuplicateRemovalFunction duplicateRemovalFunction; DuplicateRemovalFunction duplicateRemovalFunction;
switch (l.getString("meta-formatting.prefix.duplicates", "").toLowerCase()) { switch (l.getString("meta-formatting.prefix.duplicates", "").toLowerCase(Locale.ROOT)) {
case "first-only": case "first-only":
duplicateRemovalFunction = DuplicateRemovalFunction.FIRST_ONLY; duplicateRemovalFunction = DuplicateRemovalFunction.FIRST_ONLY;
break; break;
@ -493,7 +494,7 @@ public final class ConfigKeys {
public static final ConfigKey<String> VAULT_SERVER = key(c -> { public static final ConfigKey<String> VAULT_SERVER = key(c -> {
// default to true for backwards compatibility // default to true for backwards compatibility
if (USE_VAULT_SERVER.get(c)) { if (USE_VAULT_SERVER.get(c)) {
return c.getString("vault-server", "global").toLowerCase(); return c.getString("vault-server", "global").toLowerCase(Locale.ROOT);
} else { } else {
return SERVER.get(c); return SERVER.get(c);
} }
@ -520,8 +521,8 @@ public final class ConfigKeys {
public static final ConfigKey<WorldNameRewriter> WORLD_REWRITES = key(c -> { public static final ConfigKey<WorldNameRewriter> WORLD_REWRITES = key(c -> {
return WorldNameRewriter.of(c.getStringMap("world-rewrite", ImmutableMap.of()).entrySet().stream() return WorldNameRewriter.of(c.getStringMap("world-rewrite", ImmutableMap.of()).entrySet().stream()
.collect(ImmutableCollectors.toMap( .collect(ImmutableCollectors.toMap(
e -> e.getKey().toLowerCase(), e -> e.getKey().toLowerCase(Locale.ROOT),
e -> e.getValue().toLowerCase() e -> e.getValue().toLowerCase(Locale.ROOT)
))); )));
}); });

View File

@ -29,6 +29,7 @@ import com.google.common.collect.ImmutableMap;
import me.lucko.luckperms.common.config.generic.adapter.ConfigurationAdapter; import me.lucko.luckperms.common.config.generic.adapter.ConfigurationAdapter;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@ -36,7 +37,7 @@ public interface ConfigKeyFactory<T> {
ConfigKeyFactory<Boolean> BOOLEAN = ConfigurationAdapter::getBoolean; ConfigKeyFactory<Boolean> BOOLEAN = ConfigurationAdapter::getBoolean;
ConfigKeyFactory<String> STRING = ConfigurationAdapter::getString; ConfigKeyFactory<String> STRING = ConfigurationAdapter::getString;
ConfigKeyFactory<String> LOWERCASE_STRING = (adapter, path, def) -> adapter.getString(path, def).toLowerCase(); ConfigKeyFactory<String> LOWERCASE_STRING = (adapter, path, def) -> adapter.getString(path, def).toLowerCase(Locale.ROOT);
ConfigKeyFactory<Map<String, String>> STRING_MAP = (config, path, def) -> ImmutableMap.copyOf(config.getStringMap(path, ImmutableMap.of())); ConfigKeyFactory<Map<String, String>> STRING_MAP = (config, path, def) -> ImmutableMap.copyOf(config.getStringMap(path, ImmutableMap.of()));
static <T> SimpleConfigKey<T> key(Function<ConfigurationAdapter, T> function) { static <T> SimpleConfigKey<T> key(Function<ConfigurationAdapter, T> function) {

View File

@ -32,6 +32,7 @@ import net.luckperms.api.context.ContextConsumer;
import net.luckperms.api.context.DefaultContextKeys; import net.luckperms.api.context.DefaultContextKeys;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -69,7 +70,7 @@ public interface WorldNameRewriter {
@Override @Override
public void rewriteAndSubmit(String worldName, ContextConsumer consumer) { public void rewriteAndSubmit(String worldName, ContextConsumer consumer) {
Set<String> seen = new HashSet<>(); Set<String> seen = new HashSet<>();
worldName = worldName.toLowerCase(); worldName = worldName.toLowerCase(Locale.ROOT);
while (Context.isValidValue(worldName) && seen.add(worldName)) { while (Context.isValidValue(worldName) && seen.add(worldName)) {
consumer.accept(DefaultContextKeys.WORLD_KEY, worldName); consumer.accept(DefaultContextKeys.WORLD_KEY, worldName);

View File

@ -39,6 +39,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.Spliterator; import java.util.Spliterator;
@ -127,7 +128,7 @@ public abstract class AbstractContextSet implements ContextSet {
if (!Context.isValidKey(key)) { if (!Context.isValidKey(key)) {
throw new IllegalArgumentException("key is (effectively) empty"); throw new IllegalArgumentException("key is (effectively) empty");
} }
return key.toLowerCase(); return key.toLowerCase(Locale.ROOT);
} }
static String sanitizeValue(String value) { static String sanitizeValue(String value) {
@ -135,7 +136,7 @@ public abstract class AbstractContextSet implements ContextSet {
if (!Context.isValidValue(value)) { if (!Context.isValidValue(value)) {
throw new IllegalArgumentException("value is (effectively) empty"); throw new IllegalArgumentException("value is (effectively) empty");
} }
return value.toLowerCase(); return value.toLowerCase(Locale.ROOT);
} }
public static boolean isGlobalServerWorldEntry(String key, String value) { public static boolean isGlobalServerWorldEntry(String key, String value) {

View File

@ -35,6 +35,7 @@ import java.security.NoSuchAlgorithmException;
import java.util.Arrays; import java.util.Arrays;
import java.util.Base64; import java.util.Base64;
import java.util.List; import java.util.List;
import java.util.Locale;
/** /**
* The dependencies used by LuckPerms. * The dependencies used by LuckPerms.
@ -314,7 +315,7 @@ public enum Dependency {
} }
public String getFileName(String classifier) { public String getFileName(String classifier) {
String name = name().toLowerCase().replace('_', '-'); String name = name().toLowerCase(Locale.ROOT).replace('_', '-');
String extra = classifier == null || classifier.isEmpty() String extra = classifier == null || classifier.isEmpty()
? "" ? ""
: "-" + classifier; : "-" + classifier;

View File

@ -42,6 +42,8 @@ import net.luckperms.api.messenger.MessengerProvider;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
public class MessagingFactory<P extends LuckPermsPlugin> { public class MessagingFactory<P extends LuckPermsPlugin> {
private final P plugin; private final P plugin;
@ -82,7 +84,7 @@ public class MessagingFactory<P extends LuckPermsPlugin> {
return null; return null;
} }
this.plugin.getLogger().info("Loading messaging service... [" + messagingType.toUpperCase() + "]"); this.plugin.getLogger().info("Loading messaging service... [" + messagingType.toUpperCase(Locale.ROOT) + "]");
InternalMessagingService service = getServiceFor(messagingType); InternalMessagingService service = getServiceFor(messagingType);
if (service != null) { if (service != null) {

View File

@ -39,6 +39,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
/** /**
@ -48,7 +49,7 @@ public final class StandardStackElements {
private StandardStackElements() {} private StandardStackElements() {}
public static MetaStackElement parseFromString(LuckPermsPlugin plugin, String s) { public static MetaStackElement parseFromString(LuckPermsPlugin plugin, String s) {
s = s.toLowerCase(); s = s.toLowerCase(Locale.ROOT);
// static // static
if (s.equals("highest")) return HIGHEST; if (s.equals("highest")) return HIGHEST;

View File

@ -40,6 +40,7 @@ import net.luckperms.api.query.QueryOptions;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
import java.util.OptionalInt; import java.util.OptionalInt;
@ -68,7 +69,7 @@ public class Group extends PermissionHolder {
public Group(String name, LuckPermsPlugin plugin) { public Group(String name, LuckPermsPlugin plugin) {
super(plugin); super(plugin);
this.name = name.toLowerCase(); this.name = name.toLowerCase(Locale.ROOT);
this.cachedData = new GroupCachedDataManager(this); this.cachedData = new GroupCachedDataManager(this);
getPlugin().getEventDispatcher().dispatchGroupCacheLoad(this, this.cachedData); getPlugin().getEventDispatcher().dispatchGroupCacheLoad(this, this.cachedData);

View File

@ -25,12 +25,14 @@
package me.lucko.luckperms.common.model; package me.lucko.luckperms.common.model;
import java.util.Locale;
public enum HolderType { public enum HolderType {
USER, USER,
GROUP; GROUP;
@Override @Override
public String toString() { public String toString() {
return name().toLowerCase(); return name().toLowerCase(Locale.ROOT);
} }
} }

View File

@ -63,6 +63,7 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.OptionalInt; import java.util.OptionalInt;
import java.util.SortedSet; import java.util.SortedSet;
@ -363,7 +364,7 @@ public abstract class PermissionHolder {
private static void processExportedPermissions(Map<String, Boolean> accumulator, List<Node> entries, boolean convertToLowercase, boolean resolveShorthand) { private static void processExportedPermissions(Map<String, Boolean> accumulator, List<Node> entries, boolean convertToLowercase, boolean resolveShorthand) {
for (Node node : entries) { for (Node node : entries) {
if (convertToLowercase) { if (convertToLowercase) {
accumulator.putIfAbsent(node.getKey().toLowerCase(), node.getValue()); accumulator.putIfAbsent(node.getKey().toLowerCase(Locale.ROOT), node.getValue());
} else { } else {
accumulator.putIfAbsent(node.getKey(), node.getValue()); accumulator.putIfAbsent(node.getKey(), node.getValue());
} }
@ -374,7 +375,7 @@ public abstract class PermissionHolder {
Collection<String> shorthand = node.resolveShorthand(); Collection<String> shorthand = node.resolveShorthand();
for (String s : shorthand) { for (String s : shorthand) {
if (convertToLowercase) { if (convertToLowercase) {
accumulator.putIfAbsent(s.toLowerCase(), node.getValue()); accumulator.putIfAbsent(s.toLowerCase(Locale.ROOT), node.getValue());
} else { } else {
accumulator.putIfAbsent(s, node.getValue()); accumulator.putIfAbsent(s, node.getValue());
} }

View File

@ -32,6 +32,7 @@ import net.luckperms.api.node.types.InheritanceNode;
import net.luckperms.api.query.QueryOptions; import net.luckperms.api.query.QueryOptions;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -90,7 +91,7 @@ public interface PrimaryGroupHolder {
if (value == null || value.isEmpty()) { if (value == null || value.isEmpty()) {
this.value = null; this.value = null;
} else { } else {
this.value = value.toLowerCase(); this.value = value.toLowerCase(Locale.ROOT);
} }
} }
} }

View File

@ -34,6 +34,7 @@ import net.luckperms.api.node.types.WeightNode;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.OptionalInt; import java.util.OptionalInt;
@ -62,7 +63,7 @@ public class WeightCache extends Cache<OptionalInt> {
if (!seen) { if (!seen) {
Map<String, Integer> configWeights = this.group.getPlugin().getConfiguration().get(ConfigKeys.GROUP_WEIGHTS); Map<String, Integer> configWeights = this.group.getPlugin().getConfiguration().get(ConfigKeys.GROUP_WEIGHTS);
Integer value = configWeights.get(this.group.getObjectName().toLowerCase()); Integer value = configWeights.get(this.group.getObjectName().toLowerCase(Locale.ROOT));
if (value != null) { if (value != null) {
seen = true; seen = true;
weight = value; weight = value;

View File

@ -28,6 +28,7 @@ package me.lucko.luckperms.common.model.manager.group;
import me.lucko.luckperms.common.model.Group; import me.lucko.luckperms.common.model.Group;
import me.lucko.luckperms.common.model.manager.AbstractManager; import me.lucko.luckperms.common.model.manager.AbstractManager;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
public abstract class AbstractGroupManager<T extends Group> extends AbstractManager<String, Group, T> implements GroupManager<T> { public abstract class AbstractGroupManager<T extends Group> extends AbstractManager<String, Group, T> implements GroupManager<T> {
@ -61,7 +62,7 @@ public abstract class AbstractGroupManager<T extends Group> extends AbstractMana
@Override @Override
protected String sanitizeIdentifier(String s) { protected String sanitizeIdentifier(String s) {
return s.toLowerCase(); return s.toLowerCase(Locale.ROOT);
} }
@Override @Override

View File

@ -28,10 +28,12 @@ package me.lucko.luckperms.common.model.manager.track;
import me.lucko.luckperms.common.model.Track; import me.lucko.luckperms.common.model.Track;
import me.lucko.luckperms.common.model.manager.AbstractManager; import me.lucko.luckperms.common.model.manager.AbstractManager;
import java.util.Locale;
public abstract class AbstractTrackManager<T extends Track> extends AbstractManager<String, Track, T> implements TrackManager<T> { public abstract class AbstractTrackManager<T extends Track> extends AbstractManager<String, Track, T> implements TrackManager<T> {
@Override @Override
protected String sanitizeIdentifier(String s) { protected String sanitizeIdentifier(String s) {
return s.toLowerCase(); return s.toLowerCase(Locale.ROOT);
} }
} }

View File

@ -35,6 +35,7 @@ import net.luckperms.api.node.types.DisplayNameNode;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -72,7 +73,7 @@ public class DisplayName extends AbstractNode<DisplayNameNode, DisplayNameNode.B
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
if (!key.toLowerCase().startsWith(NODE_MARKER)) { if (!key.toLowerCase(Locale.ROOT).startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -36,6 +36,7 @@ import net.luckperms.api.node.types.InheritanceNode;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -44,7 +45,7 @@ public class Inheritance extends AbstractNode<InheritanceNode, InheritanceNode.B
private static final String NODE_MARKER = NODE_KEY + "."; private static final String NODE_MARKER = NODE_KEY + ".";
public static String key(String groupName) { public static String key(String groupName) {
return NODE_MARKER + groupName.toLowerCase(); return NODE_MARKER + groupName.toLowerCase(Locale.ROOT);
} }
public static Builder builder() { public static Builder builder() {
@ -59,7 +60,7 @@ public class Inheritance extends AbstractNode<InheritanceNode, InheritanceNode.B
public Inheritance(String groupName, boolean value, long expireAt, ImmutableContextSet contexts, Map<NodeMetadataKey<?>, Object> metadata) { public Inheritance(String groupName, boolean value, long expireAt, ImmutableContextSet contexts, Map<NodeMetadataKey<?>, Object> metadata) {
super(key(groupName), value, expireAt, contexts, metadata); super(key(groupName), value, expireAt, contexts, metadata);
this.groupName = groupName.toLowerCase(); this.groupName = groupName.toLowerCase(Locale.ROOT);
} }
@Override @Override
@ -73,7 +74,7 @@ public class Inheritance extends AbstractNode<InheritanceNode, InheritanceNode.B
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
key = key.toLowerCase(); key = key.toLowerCase(Locale.ROOT);
if (!key.startsWith(NODE_MARKER)) { if (!key.startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -37,6 +37,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -45,7 +46,7 @@ public class Meta extends AbstractNode<MetaNode, MetaNode.Builder> implements Me
private static final String NODE_MARKER = NODE_KEY + "."; private static final String NODE_MARKER = NODE_KEY + ".";
public static String key(String key, String value) { public static String key(String key, String value) {
return NODE_MARKER + Delimiters.escapeCharacters(key).toLowerCase() + AbstractNode.NODE_SEPARATOR + Delimiters.escapeCharacters(value); return NODE_MARKER + Delimiters.escapeCharacters(key).toLowerCase(Locale.ROOT) + AbstractNode.NODE_SEPARATOR + Delimiters.escapeCharacters(value);
} }
public static Builder builder() { public static Builder builder() {
@ -61,7 +62,7 @@ public class Meta extends AbstractNode<MetaNode, MetaNode.Builder> implements Me
public Meta(String metaKey, String metaValue, boolean value, long expireAt, ImmutableContextSet contexts, Map<NodeMetadataKey<?>, Object> metadata) { public Meta(String metaKey, String metaValue, boolean value, long expireAt, ImmutableContextSet contexts, Map<NodeMetadataKey<?>, Object> metadata) {
super(key(metaKey, metaValue), value, expireAt, contexts, metadata); super(key(metaKey, metaValue), value, expireAt, contexts, metadata);
this.metaKey = metaKey.toLowerCase(); this.metaKey = metaKey.toLowerCase(Locale.ROOT);
this.metaValue = metaValue; this.metaValue = metaValue;
} }
@ -81,7 +82,7 @@ public class Meta extends AbstractNode<MetaNode, MetaNode.Builder> implements Me
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
if (!key.toLowerCase().startsWith(NODE_MARKER)) { if (!key.toLowerCase(Locale.ROOT).startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -38,6 +38,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -87,7 +88,7 @@ public class Prefix extends AbstractNode<PrefixNode, PrefixNode.Builder> impleme
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
if (!key.toLowerCase().startsWith(NODE_MARKER)) { if (!key.toLowerCase(Locale.ROOT).startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -38,6 +38,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
@ -87,7 +88,7 @@ public class Suffix extends AbstractNode<SuffixNode, SuffixNode.Builder> impleme
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
if (!key.toLowerCase().startsWith(NODE_MARKER)) { if (!key.toLowerCase(Locale.ROOT).startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -35,6 +35,7 @@ import net.luckperms.api.node.types.WeightNode;
import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import java.util.Locale;
import java.util.Map; import java.util.Map;
public class Weight extends AbstractNode<WeightNode, WeightNode.Builder> implements WeightNode { public class Weight extends AbstractNode<WeightNode, WeightNode.Builder> implements WeightNode {
@ -71,7 +72,7 @@ public class Weight extends AbstractNode<WeightNode, WeightNode.Builder> impleme
} }
public static @Nullable Builder parse(String key) { public static @Nullable Builder parse(String key) {
if (!key.toLowerCase().startsWith(NODE_MARKER)) { if (!key.toLowerCase(Locale.ROOT).startsWith(NODE_MARKER)) {
return null; return null;
} }

View File

@ -38,6 +38,7 @@ import net.luckperms.api.node.NodeBuilder;
import java.time.Instant; import java.time.Instant;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Locale;
import java.util.Set; import java.util.Set;
public class NodeJsonSerializer { public class NodeJsonSerializer {
@ -51,7 +52,7 @@ public class NodeJsonSerializer {
for (Node node : nodes) { for (Node node : nodes) {
JsonObject attributes = new JsonObject(); JsonObject attributes = new JsonObject();
attributes.addProperty("type", node.getType().name().toLowerCase()); attributes.addProperty("type", node.getType().name().toLowerCase(Locale.ROOT));
attributes.addProperty("key", node.getKey()); attributes.addProperty("key", node.getKey());
attributes.addProperty("value", node.getValue()); attributes.addProperty("value", node.getValue());

View File

@ -71,6 +71,7 @@ import java.time.Instant;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.Month; import java.time.Month;
import java.util.EnumSet; import java.util.EnumSet;
import java.util.Locale;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -336,7 +337,7 @@ public abstract class AbstractLuckPermsPlugin implements LuckPermsPlugin {
@Override @Override
public Optional<UUID> lookupUniqueId(String username) { public Optional<UUID> lookupUniqueId(String username) {
// get a result from the DB cache // get a result from the DB cache
UUID uniqueId = getStorage().getPlayerUniqueId(username.toLowerCase()).join(); UUID uniqueId = getStorage().getPlayerUniqueId(username.toLowerCase(Locale.ROOT)).join();
// fire the event // fire the event
uniqueId = getEventDispatcher().dispatchUniqueIdLookup(username, uniqueId); uniqueId = getEventDispatcher().dispatchUniqueIdLookup(username, uniqueId);

View File

@ -49,6 +49,7 @@ import net.luckperms.api.node.Node;
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.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@ -171,7 +172,7 @@ public class Storage {
public CompletableFuture<Group> createAndLoadGroup(String name, CreationCause cause) { public CompletableFuture<Group> createAndLoadGroup(String name, CreationCause cause) {
return future(() -> { return future(() -> {
Group group = this.implementation.createAndLoadGroup(name.toLowerCase()); Group group = this.implementation.createAndLoadGroup(name.toLowerCase(Locale.ROOT));
if (group != null) { if (group != null) {
this.plugin.getEventDispatcher().dispatchGroupCreate(group, cause); this.plugin.getEventDispatcher().dispatchGroupCreate(group, cause);
} }
@ -181,7 +182,7 @@ public class Storage {
public CompletableFuture<Optional<Group>> loadGroup(String name) { public CompletableFuture<Optional<Group>> loadGroup(String name) {
return future(() -> { return future(() -> {
Optional<Group> group = this.implementation.loadGroup(name.toLowerCase()); Optional<Group> group = this.implementation.loadGroup(name.toLowerCase(Locale.ROOT));
if (group.isPresent()) { if (group.isPresent()) {
this.plugin.getEventDispatcher().dispatchGroupLoad(group.get()); this.plugin.getEventDispatcher().dispatchGroupLoad(group.get());
} }
@ -217,7 +218,7 @@ public class Storage {
public CompletableFuture<Track> createAndLoadTrack(String name, CreationCause cause) { public CompletableFuture<Track> createAndLoadTrack(String name, CreationCause cause) {
return future(() -> { return future(() -> {
Track track = this.implementation.createAndLoadTrack(name.toLowerCase()); Track track = this.implementation.createAndLoadTrack(name.toLowerCase(Locale.ROOT));
if (track != null) { if (track != null) {
this.plugin.getEventDispatcher().dispatchTrackCreate(track, cause); this.plugin.getEventDispatcher().dispatchTrackCreate(track, cause);
} }
@ -227,7 +228,7 @@ public class Storage {
public CompletableFuture<Optional<Track>> loadTrack(String name) { public CompletableFuture<Optional<Track>> loadTrack(String name) {
return future(() -> { return future(() -> {
Optional<Track> track = this.implementation.loadTrack(name.toLowerCase()); Optional<Track> track = this.implementation.loadTrack(name.toLowerCase(Locale.ROOT));
if (track.isPresent()) { if (track.isPresent()) {
this.plugin.getEventDispatcher().dispatchTrackLoad(track.get()); this.plugin.getEventDispatcher().dispatchTrackLoad(track.get());
} }

View File

@ -46,6 +46,7 @@ import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import java.util.UUID; import java.util.UUID;
@ -200,11 +201,11 @@ public class FileUuidCache {
// existing might be null // existing might be null
if (!value.equalsIgnoreCase(existing)) { if (!value.equalsIgnoreCase(existing)) {
if (existing != null) { if (existing != null) {
this.reverse.remove(existing.toLowerCase(), key); this.reverse.remove(existing.toLowerCase(Locale.ROOT), key);
} }
} }
this.reverse.put(value.toLowerCase(), key); this.reverse.put(value.toLowerCase(Locale.ROOT), key);
return existing; return existing;
} }
@ -213,7 +214,7 @@ public class FileUuidCache {
UUID key = (UUID) k; UUID key = (UUID) k;
String username = super.remove(key); String username = super.remove(key);
if (username != null) { if (username != null) {
this.reverse.remove(username.toLowerCase(), key); this.reverse.remove(username.toLowerCase(Locale.ROOT), key);
} }
return username; return username;
} }
@ -223,7 +224,7 @@ public class FileUuidCache {
} }
public Set<UUID> lookupUuid(String name) { public Set<UUID> lookupUuid(String name) {
return this.reverse.get(name.toLowerCase()); return this.reverse.get(name.toLowerCase(Locale.ROOT));
} }
} }

View File

@ -75,6 +75,7 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
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;
@ -521,7 +522,7 @@ public class MongoStorage implements StorageImplementation {
@Override @Override
public PlayerSaveResult savePlayerData(UUID uniqueId, String username) { public PlayerSaveResult savePlayerData(UUID uniqueId, String username) {
username = username.toLowerCase(); username = username.toLowerCase(Locale.ROOT);
MongoCollection<Document> c = this.database.getCollection(this.prefix + "uuid"); MongoCollection<Document> c = this.database.getCollection(this.prefix + "uuid");
// find any existing mapping // find any existing mapping
@ -560,7 +561,7 @@ public class MongoStorage implements StorageImplementation {
@Override @Override
public UUID getPlayerUniqueId(String username) { public UUID getPlayerUniqueId(String username) {
MongoCollection<Document> c = this.database.getCollection(this.prefix + "uuid"); MongoCollection<Document> c = this.database.getCollection(this.prefix + "uuid");
Document doc = c.find(new Document("name", username.toLowerCase())).first(); Document doc = c.find(new Document("name", username.toLowerCase(Locale.ROOT))).first();
if (doc != null) { if (doc != null) {
return getDocumentId(doc); return getDocumentId(doc);
} }

View File

@ -46,6 +46,7 @@ import net.luckperms.api.node.Node;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
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;
@ -114,7 +115,7 @@ public class SplitStorage implements StorageImplementation {
meta.put( meta.put(
Component.translatable("luckperms.command.info.storage.meta.split-types-key"), Component.translatable("luckperms.command.info.storage.meta.split-types-key"),
Message.formatStringList(this.types.entrySet().stream() Message.formatStringList(this.types.entrySet().stream()
.map(e -> e.getKey().toString().toLowerCase() + "->" + e.getValue().getName().toLowerCase()) .map(e -> e.getKey().toString().toLowerCase(Locale.ROOT) + "->" + e.getValue().getName().toLowerCase(Locale.ROOT))
.collect(Collectors.toList())) .collect(Collectors.toList()))
); );
for (StorageImplementation backing : this.implementations.values()) { for (StorageImplementation backing : this.implementations.values()) {

View File

@ -72,6 +72,7 @@ import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
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;
@ -173,7 +174,7 @@ public class SqlStorage implements StorageImplementation {
private void applySchema() throws IOException, SQLException { private void applySchema() throws IOException, SQLException {
List<String> statements; List<String> statements;
String schemaFileName = "me/lucko/luckperms/schema/" + this.connectionFactory.getImplementationName().toLowerCase() + ".sql"; String schemaFileName = "me/lucko/luckperms/schema/" + this.connectionFactory.getImplementationName().toLowerCase(Locale.ROOT) + ".sql";
try (InputStream is = this.plugin.getBootstrap().getResourceStream(schemaFileName)) { try (InputStream is = this.plugin.getBootstrap().getResourceStream(schemaFileName)) {
if (is == null) { if (is == null) {
throw new IOException("Couldn't locate schema file for " + this.connectionFactory.getImplementationName()); throw new IOException("Couldn't locate schema file for " + this.connectionFactory.getImplementationName());
@ -375,7 +376,7 @@ public class SqlStorage implements StorageImplementation {
updateUserPermissions(c, user.getUniqueId(), changes.getAdded(), changes.getRemoved()); updateUserPermissions(c, user.getUniqueId(), changes.getAdded(), changes.getRemoved());
insertPlayerData(c, user.getUniqueId(), new SqlPlayerData( insertPlayerData(c, user.getUniqueId(), new SqlPlayerData(
user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME), user.getPrimaryGroup().getStoredValue().orElse(GroupManager.DEFAULT_GROUP_NAME),
user.getUsername().orElse("null").toLowerCase() user.getUsername().orElse("null").toLowerCase(Locale.ROOT)
)); ));
} }
} }
@ -605,7 +606,7 @@ public class SqlStorage implements StorageImplementation {
@Override @Override
public PlayerSaveResult savePlayerData(UUID uniqueId, String username) throws SQLException { public PlayerSaveResult savePlayerData(UUID uniqueId, String username) throws SQLException {
username = username.toLowerCase(); username = username.toLowerCase(Locale.ROOT);
// find any existing mapping // find any existing mapping
String oldUsername = getPlayerName(uniqueId); String oldUsername = getPlayerName(uniqueId);
@ -672,7 +673,7 @@ public class SqlStorage implements StorageImplementation {
@Override @Override
public UUID getPlayerUniqueId(String username) throws SQLException { public UUID getPlayerUniqueId(String username) throws SQLException {
username = username.toLowerCase(); username = username.toLowerCase(Locale.ROOT);
try (Connection c = this.connectionFactory.getConnection()) { try (Connection c = this.connectionFactory.getConnection()) {
try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_UUID_BY_USERNAME))) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(PLAYER_SELECT_UUID_BY_USERNAME))) {
ps.setString(1, username); ps.setString(1, username);
@ -907,7 +908,7 @@ public class SqlStorage implements StorageImplementation {
try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(GROUP_SELECT_ALL))) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(GROUP_SELECT_ALL))) {
try (ResultSet rs = ps.executeQuery()) { try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) { while (rs.next()) {
groups.add(rs.getString("name").toLowerCase()); groups.add(rs.getString("name").toLowerCase(Locale.ROOT));
} }
} }
} }
@ -992,7 +993,7 @@ public class SqlStorage implements StorageImplementation {
try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(TRACK_SELECT_ALL))) { try (PreparedStatement ps = c.prepareStatement(this.statementProcessor.apply(TRACK_SELECT_ALL))) {
try (ResultSet rs = ps.executeQuery()) { try (ResultSet rs = ps.executeQuery()) {
while (rs.next()) { while (rs.next()) {
tracks.add(rs.getString("name").toLowerCase()); tracks.add(rs.getString("name").toLowerCase(Locale.ROOT));
} }
} }
} }

View File

@ -32,6 +32,7 @@ import me.lucko.luckperms.common.plugin.scheduler.SchedulerTask;
import me.lucko.luckperms.common.util.ImmutableCollectors; import me.lucko.luckperms.common.util.ImmutableCollectors;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Queue; import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
@ -93,7 +94,7 @@ public class PermissionRegistry implements AutoCloseable {
} }
private void doInsert(String permission) { private void doInsert(String permission) {
permission = permission.toLowerCase(); permission = permission.toLowerCase(Locale.ROOT);
// split the permission up into parts // split the permission up into parts
Iterable<String> parts = DOT_SPLIT.split(permission); Iterable<String> parts = DOT_SPLIT.split(permission);

View File

@ -46,6 +46,7 @@ import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
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.zip.GZIPOutputStream; import java.util.zip.GZIPOutputStream;
@ -160,7 +161,7 @@ public class TreeView {
checks = new JObject(); checks = new JObject();
for (Map.Entry<Integer, String> node : this.view.getNodeEndings()) { for (Map.Entry<Integer, String> node : this.view.getNodeEndings()) {
String permission = prefix + node.getValue(); String permission = prefix + node.getValue();
checks.add(permission, checker.checkPermission(permission, PermissionCheckEvent.Origin.INTERNAL).result().name().toLowerCase()); checks.add(permission, checker.checkPermission(permission, PermissionCheckEvent.Origin.INTERNAL).result().name().toLowerCase(Locale.ROOT));
} }
} else { } else {
checks = null; checks = null;

View File

@ -34,6 +34,7 @@ import net.kyori.adventure.text.serializer.plain.PlainComponentSerializer;
import java.time.Duration; import java.time.Duration;
import java.time.temporal.ChronoUnit; import java.time.temporal.ChronoUnit;
import java.util.Locale;
/** /**
* Formats durations to a readable form * Formats durations to a readable form
@ -115,7 +116,7 @@ public class DurationFormatter {
private TranslatableComponent formatPart(long amount, ChronoUnit unit) { private TranslatableComponent formatPart(long amount, ChronoUnit unit) {
String format = this.concise ? "short" : amount == 1 ? "singular" : "plural"; String format = this.concise ? "short" : amount == 1 ? "singular" : "plural";
String translationKey = "luckperms.duration.unit." + unit.name().toLowerCase() + "." + format; String translationKey = "luckperms.duration.unit." + unit.name().toLowerCase(Locale.ROOT) + "." + format;
return Component.translatable(translationKey, Component.text(amount)); return Component.translatable(translationKey, Component.text(amount));
} }

View File

@ -26,6 +26,7 @@
package me.lucko.luckperms.common.util; package me.lucko.luckperms.common.util;
import java.util.Collections; import java.util.Collections;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.function.Function; import java.util.function.Function;
@ -35,7 +36,7 @@ import java.util.function.Function;
* @param <E> the enum type * @param <E> the enum type
*/ */
public class EnumNamer<E extends Enum<E>> { public class EnumNamer<E extends Enum<E>> {
public static final Function<Enum<?>, String> LOWER_CASE_NAME = value -> value.name().toLowerCase(); public static final Function<Enum<?>, String> LOWER_CASE_NAME = value -> value.name().toLowerCase(Locale.ROOT);
private final String[] names; private final String[] names;
private final Function<? super E, String> namingFunction; private final Function<? super E, String> namingFunction;

View File

@ -30,6 +30,8 @@ import me.lucko.luckperms.common.verbose.VerboseCheckTarget;
import net.luckperms.api.query.QueryOptions; import net.luckperms.api.query.QueryOptions;
import java.util.Locale;
public class MetaCheckEvent extends VerboseEvent { public class MetaCheckEvent extends VerboseEvent {
/** /**
@ -71,14 +73,14 @@ public class MetaCheckEvent extends VerboseEvent {
object.add("type", "meta") object.add("type", "meta")
.add("key", this.key) .add("key", this.key)
.add("result", this.result) .add("result", this.result)
.add("origin", this.origin.name().toLowerCase()); .add("origin", this.origin.name().toLowerCase(Locale.ROOT));
} }
@Override @Override
public boolean eval(String variable) { public boolean eval(String variable) {
return variable.equals("meta") || return variable.equals("meta") ||
getCheckTarget().describe().equalsIgnoreCase(variable) || getCheckTarget().describe().equalsIgnoreCase(variable) ||
getKey().toLowerCase().startsWith(variable.toLowerCase()) || getKey().toLowerCase(Locale.ROOT).startsWith(variable.toLowerCase(Locale.ROOT)) ||
getResult().equalsIgnoreCase(variable); getResult().equalsIgnoreCase(variable);
} }

View File

@ -31,6 +31,8 @@ import me.lucko.luckperms.common.verbose.VerboseCheckTarget;
import net.luckperms.api.query.QueryOptions; import net.luckperms.api.query.QueryOptions;
import java.util.Locale;
public class PermissionCheckEvent extends VerboseEvent { public class PermissionCheckEvent extends VerboseEvent {
/** /**
@ -72,7 +74,7 @@ public class PermissionCheckEvent extends VerboseEvent {
object.add("type", "permission"); object.add("type", "permission");
object.add("permission", this.permission); object.add("permission", this.permission);
object.add("result", this.result.result().name().toLowerCase()); object.add("result", this.result.result().name().toLowerCase(Locale.ROOT));
if (this.result.processorClass() != null || this.result.cause() != null) { if (this.result.processorClass() != null || this.result.cause() != null) {
JObject resultInfo = new JObject(); JObject resultInfo = new JObject();
if (this.result.processorClass() != null) { if (this.result.processorClass() != null) {
@ -84,14 +86,14 @@ public class PermissionCheckEvent extends VerboseEvent {
object.add("resultInfo", resultInfo); object.add("resultInfo", resultInfo);
} }
object.add("origin", this.origin.name().toLowerCase()); object.add("origin", this.origin.name().toLowerCase(Locale.ROOT));
} }
@Override @Override
public boolean eval(String variable) { public boolean eval(String variable) {
return variable.equals("permission") || return variable.equals("permission") ||
getCheckTarget().describe().equalsIgnoreCase(variable) || getCheckTarget().describe().equalsIgnoreCase(variable) ||
getPermission().toLowerCase().startsWith(variable.toLowerCase()) || getPermission().toLowerCase(Locale.ROOT).startsWith(variable.toLowerCase(Locale.ROOT)) ||
getResult().result().name().equalsIgnoreCase(variable); getResult().result().name().equalsIgnoreCase(variable);
} }

View File

@ -37,6 +37,7 @@ import net.luckperms.api.context.Context;
import net.luckperms.api.query.QueryMode; import net.luckperms.api.query.QueryMode;
import net.luckperms.api.query.QueryOptions; import net.luckperms.api.query.QueryOptions;
import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.UUID; import java.util.UUID;
@ -113,7 +114,7 @@ public abstract class VerboseEvent implements VariableEvaluator {
} }
}) })
) )
.add("queryMode", this.checkQueryOptions.mode().name().toLowerCase()) .add("queryMode", this.checkQueryOptions.mode().name().toLowerCase(Locale.ROOT))
.consume(obj -> { .consume(obj -> {
if (this.checkQueryOptions.mode() == QueryMode.CONTEXTUAL) { if (this.checkQueryOptions.mode() == QueryMode.CONTEXTUAL) {
obj.add("context", new JArray() obj.add("context", new JArray()

View File

@ -29,6 +29,8 @@ import com.google.common.collect.ImmutableMap;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import java.util.Locale;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
public class EnumNamerTest { public class EnumNamerTest {
@ -38,7 +40,7 @@ public class EnumNamerTest {
EnumNamer<TestEnum> namer = new EnumNamer<>( EnumNamer<TestEnum> namer = new EnumNamer<>(
TestEnum.class, TestEnum.class,
ImmutableMap.of(TestEnum.THING, "hi"), ImmutableMap.of(TestEnum.THING, "hi"),
v -> v.name().toLowerCase().replace('_', '-') v -> v.name().toLowerCase(Locale.ROOT).replace('_', '-')
); );
assertEquals("test", namer.name(TestEnum.TEST)); assertEquals("test", namer.name(TestEnum.TEST));

View File

@ -47,6 +47,7 @@ import cn.nukkit.event.entity.EntityLevelChangeEvent;
import cn.nukkit.event.player.PlayerGameModeChangeEvent; import cn.nukkit.event.player.PlayerGameModeChangeEvent;
import cn.nukkit.level.Level; import cn.nukkit.level.Level;
import java.util.Locale;
import java.util.Set; import java.util.Set;
public class NukkitPlayerCalculator implements ContextCalculator<Player>, Listener { public class NukkitPlayerCalculator implements ContextCalculator<Player>, Listener {
@ -111,7 +112,7 @@ public class NukkitPlayerCalculator implements ContextCalculator<Player>, Listen
case Player.CREATIVE: return "creative"; case Player.CREATIVE: return "creative";
case Player.ADVENTURE: return "adventure"; case Player.ADVENTURE: return "adventure";
case Player.SPECTATOR: return "spectator"; case Player.SPECTATOR: return "spectator";
default: return Server.getGamemodeString(mode, true).toLowerCase(); default: return Server.getGamemodeString(mode, true).toLowerCase(Locale.ROOT);
} }
} }

View File

@ -30,6 +30,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
import cn.nukkit.permission.Permission; import cn.nukkit.permission.Permission;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
/** /**
@ -84,7 +85,7 @@ public enum PermissionDefault {
* @return Specified value, or null if not found * @return Specified value, or null if not found
*/ */
public static @Nullable PermissionDefault getByName(String name) { public static @Nullable PermissionDefault getByName(String name) {
return LOOKUP.get(name.toLowerCase().replaceAll("[^a-z!]", "")); return LOOKUP.get(name.toLowerCase(Locale.ROOT).replaceAll("[^a-z!]", ""));
} }
public static @Nullable PermissionDefault fromPermission(@Nullable Permission permission) { public static @Nullable PermissionDefault fromPermission(@Nullable Permission permission) {

View File

@ -47,6 +47,7 @@ import java.util.Collection;
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.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -238,7 +239,7 @@ public class LuckPermsPermissionAttachment extends PermissionAttachment {
Objects.requireNonNull(name, "name is null"); Objects.requireNonNull(name, "name is null");
Preconditions.checkArgument(!name.isEmpty(), "name is empty"); Preconditions.checkArgument(!name.isEmpty(), "name is empty");
String permission = name.toLowerCase(); String permission = name.toLowerCase(Locale.ROOT);
Boolean previous = this.perms.put(permission, value); Boolean previous = this.perms.put(permission, value);
if (previous != null && previous == value) { if (previous != null && previous == value) {
@ -275,7 +276,7 @@ public class LuckPermsPermissionAttachment extends PermissionAttachment {
Objects.requireNonNull(name, "name is null"); Objects.requireNonNull(name, "name is null");
Preconditions.checkArgument(!name.isEmpty(), "name is empty"); Preconditions.checkArgument(!name.isEmpty(), "name is empty");
String permission = name.toLowerCase(); String permission = name.toLowerCase(Locale.ROOT);
Boolean previous = this.perms.remove(permission); Boolean previous = this.perms.remove(permission);
if (previous == null) { if (previous == null) {

View File

@ -40,6 +40,7 @@ import cn.nukkit.plugin.PluginManager;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -159,7 +160,7 @@ public final class LuckPermsDefaultsMap {
protected @NonNull Map<String, Boolean> supply() { protected @NonNull Map<String, Boolean> supply() {
Map<String, Boolean> builder = new HashMap<>(); Map<String, Boolean> builder = new HashMap<>();
for (Permission perm : LuckPermsDefaultsMap.this.get(this.op).values()) { for (Permission perm : LuckPermsDefaultsMap.this.get(this.op).values()) {
String name = perm.getName().toLowerCase(); String name = perm.getName().toLowerCase(Locale.ROOT);
builder.put(name, true); builder.put(name, true);
for (Map.Entry<String, Boolean> child : LuckPermsDefaultsMap.this.plugin.getPermissionMap().getChildPermissions(name, true).entrySet()) { for (Map.Entry<String, Boolean> child : LuckPermsDefaultsMap.this.plugin.getPermissionMap().getChildPermissions(name, true).entrySet()) {
builder.putIfAbsent(child.getKey(), child.getValue()); builder.putIfAbsent(child.getKey(), child.getValue());

View File

@ -41,6 +41,7 @@ import cn.nukkit.plugin.PluginManager;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
@ -180,7 +181,7 @@ public final class LuckPermsPermissionMap extends ForwardingMap<String, Permissi
continue; continue;
} }
String key = e.getKey().toLowerCase(); String key = e.getKey().toLowerCase(Locale.ROOT);
if (accumulator.containsKey(key)) { if (accumulator.containsKey(key)) {
continue; // Prevent infinite loops continue; // Prevent infinite loops

View File

@ -37,6 +37,7 @@ import cn.nukkit.event.player.PlayerCommandPreprocessEvent;
import cn.nukkit.event.server.RemoteServerCommandEvent; import cn.nukkit.event.server.RemoteServerCommandEvent;
import cn.nukkit.event.server.ServerCommandEvent; import cn.nukkit.event.server.ServerCommandEvent;
import java.util.Locale;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class NukkitPlatformListener implements Listener { public class NukkitPlatformListener implements Listener {
@ -50,17 +51,17 @@ public class NukkitPlatformListener implements Listener {
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onPlayerCommand(PlayerCommandPreprocessEvent e) { public void onPlayerCommand(PlayerCommandPreprocessEvent e) {
handleCommand(e.getPlayer(), e.getMessage().toLowerCase(), e); handleCommand(e.getPlayer(), e.getMessage().toLowerCase(Locale.ROOT), e);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onServerCommand(ServerCommandEvent e) { public void onServerCommand(ServerCommandEvent e) {
handleCommand(e.getSender(), e.getCommand().toLowerCase(), e); handleCommand(e.getSender(), e.getCommand().toLowerCase(Locale.ROOT), e);
} }
@EventHandler(ignoreCancelled = true) @EventHandler(ignoreCancelled = true)
public void onRemoteServerCommand(RemoteServerCommandEvent e) { public void onRemoteServerCommand(RemoteServerCommandEvent e) {
handleCommand(e.getSender(), e.getCommand().toLowerCase(), e); handleCommand(e.getSender(), e.getCommand().toLowerCase(Locale.ROOT), e);
} }
private void handleCommand(CommandSender sender, String cmdLine, Cancellable event) { private void handleCommand(CommandSender sender, String cmdLine, Cancellable event) {

View File

@ -44,6 +44,7 @@ import org.spongepowered.api.service.permission.SubjectCollection;
import org.spongepowered.api.service.permission.SubjectReference; import org.spongepowered.api.service.permission.SubjectReference;
import java.util.Collection; import java.util.Collection;
import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@ -85,12 +86,12 @@ public final class PermissionServiceProxy implements PermissionService, ProxiedS
@Override @Override
public @NonNull Optional<SubjectCollection> getCollection(String s) { public @NonNull Optional<SubjectCollection> getCollection(String s) {
return Optional.ofNullable(this.handle.getLoadedCollections().get(s.toLowerCase())).map(LPSubjectCollection::sponge); return Optional.ofNullable(this.handle.getLoadedCollections().get(s.toLowerCase(Locale.ROOT))).map(LPSubjectCollection::sponge);
} }
@Override @Override
public CompletableFuture<Boolean> hasCollection(String s) { public CompletableFuture<Boolean> hasCollection(String s) {
return CompletableFuture.completedFuture(this.handle.getLoadedCollections().containsKey(s.toLowerCase())); return CompletableFuture.completedFuture(this.handle.getLoadedCollections().containsKey(s.toLowerCase(Locale.ROOT)));
} }
@Override @Override
@ -113,7 +114,7 @@ public final class PermissionServiceProxy implements PermissionService, ProxiedS
Objects.requireNonNull(subjectIdentifier, "subjectIdentifier"); Objects.requireNonNull(subjectIdentifier, "subjectIdentifier");
// test the identifiers // test the identifiers
String collection = collectionIdentifier.toLowerCase(); String collection = collectionIdentifier.toLowerCase(Locale.ROOT);
if (collection.equals("user") && !this.handle.getUserSubjects().getIdentifierValidityPredicate().test(subjectIdentifier)) { if (collection.equals("user") && !this.handle.getUserSubjects().getIdentifierValidityPredicate().test(subjectIdentifier)) {
throw new IllegalArgumentException("Subject identifier '" + subjectIdentifier + "' does not pass the validity predicate for the user subject collection"); throw new IllegalArgumentException("Subject identifier '" + subjectIdentifier + "' does not pass the validity predicate for the user subject collection");
} else if (collection.equals("group") && !this.handle.getGroupSubjects().getIdentifierValidityPredicate().test(subjectIdentifier)) { } else if (collection.equals("group") && !this.handle.getGroupSubjects().getIdentifierValidityPredicate().test(subjectIdentifier)) {

Some files were not shown because too many files have changed in this diff Show More