Skip to content

Commit 14d8ad7

Browse files
authored
Merge pull request #3346 from Multiverse/fix/locale-lowercase
Fix issues with lower/uppercasing string when server is of non-english locale
2 parents 33e0df9 + 1883edb commit 14d8ad7

12 files changed

Lines changed: 31 additions & 27 deletions

File tree

src/main/java/org/mvplugins/multiverse/core/PlaceholderExpansionHook.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package org.mvplugins.multiverse.core;
22

33
import com.google.common.collect.Lists;
4-
import io.vavr.control.Option;
54
import jakarta.annotation.PostConstruct;
65
import jakarta.inject.Inject;
76
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
@@ -20,9 +19,8 @@
2019
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
2120
import org.mvplugins.multiverse.core.world.WorldManager;
2221

23-
import java.util.ArrayList;
24-
import java.util.Arrays;
2522
import java.util.List;
23+
import java.util.Locale;
2624

2725
@Service
2826
final class PlaceholderExpansionHook extends PlaceholderExpansion {
@@ -123,7 +121,7 @@ public boolean persist() {
123121
@NotNull List<String> placeholderParams,
124122
@NotNull LoadedMultiverseWorld world) {
125123
// Switch to find what specific placeholder we want
126-
switch (placeholder.toLowerCase()) {
124+
switch (placeholder.toLowerCase(Locale.ENGLISH)) {
127125
case "alias" -> {
128126
return world.getAliasOrName();
129127
}

src/main/java/org/mvplugins/multiverse/core/command/MVCommandCompletions.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Collections;
77
import java.util.EnumSet;
88
import java.util.List;
9+
import java.util.Locale;
910
import java.util.Map;
1011
import java.util.stream.Collectors;
1112

@@ -176,7 +177,7 @@ private Collection<String> completeWithPreconditions(
176177
public <T extends Enum<T>> Collection<String> suggestEnums(Class<T> enumClass) {
177178
return EnumSet.allOf(enumClass).stream()
178179
.map(Enum::name)
179-
.map(String::toLowerCase)
180+
.map(name -> name.toLowerCase(Locale.ENGLISH))
180181
.toList();
181182
}
182183

src/main/java/org/mvplugins/multiverse/core/command/flag/CommandValueFlag.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Arrays;
44
import java.util.Collection;
55
import java.util.List;
6+
import java.util.Locale;
67
import java.util.function.Function;
78

89
import co.aikar.commands.InvalidCommandArgument;
@@ -220,7 +221,7 @@ public EnumBuilder(@NotNull String key, @NotNull Class<T> type) {
220221
private void setEnumContext() {
221222
this.context = (String value) -> {
222223
try {
223-
return Enum.valueOf(type, value.toUpperCase());
224+
return Enum.valueOf(type, value.toUpperCase(Locale.ENGLISH));
224225
} catch (IllegalArgumentException e) {
225226
throw new InvalidCommandArgument("Invalid value for argument " + key + ": " + value);
226227
}
@@ -229,7 +230,7 @@ private void setEnumContext() {
229230

230231
private void setEnumCompletion() {
231232
List<String> types = Arrays.stream(type.getEnumConstants())
232-
.map(typeClass -> typeClass.name().toLowerCase())
233+
.map(typeClass -> typeClass.name().toLowerCase(Locale.ENGLISH))
233234
.toList();
234235

235236
this.completion = (input) -> types;

src/main/java/org/mvplugins/multiverse/core/config/node/functions/DefaultStringParserProvider.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.mvplugins.multiverse.core.config.node.functions;
22

33
import java.util.HashMap;
4+
import java.util.Locale;
45
import java.util.Map;
56

67
import co.aikar.commands.ACFUtil;
@@ -41,13 +42,13 @@ public static <T> NodeStringParser<T> getDefaultStringParser(Class<T> clazz) {
4142
}
4243

4344
private static final NodeStringParser<Enum> ENUM_STRING_PARSER = (input, type) -> Try.of(
44-
() -> Enum.valueOf(type, input.toUpperCase()));
45+
() -> Enum.valueOf(type, input.toUpperCase(Locale.ENGLISH)));
4546

4647
private static final NodeStringParser<String> STRING_STRING_PARSER = (input, type) -> Try.of(
4748
() -> input);
4849

4950
private static final NodeStringParser<Boolean> BOOLEAN_STRING_PARSER = (input, type) -> Try.of(
50-
() -> switch (String.valueOf(input).toLowerCase()) {
51+
() -> switch (String.valueOf(input).toLowerCase(Locale.ENGLISH)) {
5152
case "t", "true", "on", "y", "yes", "1", "allow" -> true;
5253
case "f", "false", "off", "n", "no", "0", "deny" -> false;
5354
default -> throw new MultiverseException("Unable to convert '" + input + "' to boolean. Please use 'true' or 'false'");

src/main/java/org/mvplugins/multiverse/core/config/node/functions/DefaultSuggesterProvider.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.util.Arrays;
44
import java.util.HashMap;
55
import java.util.List;
6+
import java.util.Locale;
67
import java.util.Map;
78
import java.util.stream.Collectors;
89
import java.util.stream.IntStream;
@@ -43,7 +44,7 @@ public static void addDefaultSuggester(Class<?> clazz, NodeSuggester suggester)
4344
private static NodeSuggester enumSuggester(Class<?> clazz) {
4445
return input -> Arrays.stream(clazz.getEnumConstants())
4546
.map(Object::toString)
46-
.map(String::toLowerCase)
47+
.map(name -> name.toLowerCase(Locale.ENGLISH))
4748
.collect(Collectors.toList());
4849
}
4950

src/main/java/org/mvplugins/multiverse/core/config/node/serializer/DefaultSerializerProvider.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,12 +48,12 @@ public Enum<?> deserialize(Object object, Class<Enum> type) {
4848
if (type.isInstance(object)) {
4949
return (Enum<?>) object;
5050
}
51-
return Enum.valueOf(type, String.valueOf(object).toUpperCase());
51+
return Enum.valueOf(type, String.valueOf(object).toUpperCase(Locale.ENGLISH));
5252
}
5353

5454
@Override
5555
public Object serialize(Enum object, Class<Enum> type) {
56-
return object.name().toLowerCase();
56+
return object.name().toLowerCase(Locale.ENGLISH);
5757
}
5858
};
5959

@@ -80,7 +80,7 @@ public Boolean deserialize(Object object, Class<Boolean> type) {
8080
}
8181
String input = String.valueOf(object);
8282
//todo: this is a copy from string parser
83-
return switch (input.toLowerCase()) {
83+
return switch (input.toLowerCase(Locale.ENGLISH)) {
8484
case "t", "true", "on", "y", "yes", "1", "allow" -> true;
8585
case "f", "false", "off", "n", "no", "0", "deny" -> false;
8686
default -> throw new RuntimeException("Unable to convert '" + input + "' to boolean.");

src/main/java/org/mvplugins/multiverse/core/module/MultiverseModule.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,16 @@
1010
import org.jetbrains.annotations.ApiStatus;
1111
import org.jvnet.hk2.annotations.Contract;
1212
import org.mvplugins.multiverse.core.MultiverseCore;
13-
import org.mvplugins.multiverse.core.MultiverseCoreApi;
1413
import org.mvplugins.multiverse.core.command.MVCommandManager;
1514
import org.mvplugins.multiverse.core.command.MultiverseCommand;
16-
import org.mvplugins.multiverse.core.commands.CoreCommand;
1715
import org.mvplugins.multiverse.core.dynamiclistener.DynamicListener;
1816
import org.mvplugins.multiverse.core.dynamiclistener.DynamicListenerRegistration;
1917
import org.mvplugins.multiverse.core.inject.PluginServiceLocator;
2018
import org.mvplugins.multiverse.core.inject.PluginServiceLocatorFactory;
21-
import org.mvplugins.multiverse.core.inject.binder.PluginBinder;
22-
import org.mvplugins.multiverse.core.listeners.CoreListener;
2319
import org.mvplugins.multiverse.core.utils.REPatterns;
2420

21+
import java.util.Locale;
22+
2523
/**
2624
* Common plugin class for all Multiverse plugins.
2725
*/
@@ -151,7 +149,7 @@ protected void setUpLocales() {
151149
.andThen(pluginLocales -> {
152150
pluginLocales.addFileResClassLoader(this);
153151
pluginLocales.addBundleClassLoader(this.getClassLoader());
154-
pluginLocales.addMessageBundles(this.getDescription().getName().toLowerCase());
152+
pluginLocales.addMessageBundles(this.getName().toLowerCase(Locale.ENGLISH));
155153
})
156154
.onFailure(e -> {
157155
Logging.severe("Failed to register locales");

src/main/java/org/mvplugins/multiverse/core/teleportation/LocationManipulation.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ public float getYaw(String orientation) {
228228
if (orientation == null) {
229229
return 0;
230230
}
231-
if (ORIENTATION_INTS.containsKey(orientation.toLowerCase())) {
232-
return ORIENTATION_INTS.get(orientation.toLowerCase());
231+
if (ORIENTATION_INTS.containsKey(orientation.toLowerCase(Locale.ENGLISH))) {
232+
return ORIENTATION_INTS.get(orientation.toLowerCase(Locale.ENGLISH));
233233
}
234234
return 0;
235235
}

src/main/java/org/mvplugins/multiverse/core/world/WorldConfig.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.mvplugins.multiverse.core.world;
22

33
import java.util.List;
4+
import java.util.Locale;
45
import java.util.concurrent.atomic.AtomicReference;
56

67
import com.dumptruckman.minecraft.util.Logging;
@@ -417,15 +418,15 @@ public void migrate(ConfigurationSection config) {
417418

418419
if (alias.get().isEmpty()) return;
419420

420-
Try.of(() -> Enum.valueOf(EnglishChatColor.class, color.toUpperCase()))
421+
Try.of(() -> Enum.valueOf(EnglishChatColor.class, color.toUpperCase(Locale.ENGLISH)))
421422
.map(c -> c.color)
422423
.onSuccess(c -> {
423424
if (c != ChatColor.WHITE) {
424425
alias.set("&" + c.getChar() + alias.get());
425426
}
426427
});
427428

428-
Try.of(() -> Enum.valueOf(EnglishChatStyle.class, style.toUpperCase()))
429+
Try.of(() -> Enum.valueOf(EnglishChatStyle.class, style.toUpperCase(Locale.ENGLISH)))
429430
.map(c -> c.color)
430431
.onSuccess(s -> {
431432
if (s != null) {

src/main/java/org/mvplugins/multiverse/core/world/biomeprovider/SingleBiomeProviderParser.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Arrays;
88
import java.util.Collection;
99
import java.util.List;
10+
import java.util.Locale;
1011

1112
/**
1213
* A parser for {@link SingleBiomeProvider}
@@ -17,13 +18,13 @@ final class SingleBiomeProviderParser implements BiomeProviderParser {
1718

1819
@Override
1920
public BiomeProvider parseBiomeProvider(@NotNull String worldName, @NotNull String params) {
20-
return new SingleBiomeProvider(Biome.valueOf(params.toUpperCase()));
21+
return new SingleBiomeProvider(Biome.valueOf(params.toUpperCase(Locale.ENGLISH)));
2122
}
2223

2324
@Override
2425
public Collection<String> suggestParams(@NotNull String currentInput) {
2526
if (biomes == null) {
26-
biomes = Arrays.stream(Biome.values()).map(biome -> biome.toString().toLowerCase()).toList();
27+
biomes = Arrays.stream(Biome.values()).map(biome -> biome.toString().toLowerCase(Locale.ENGLISH)).toList();
2728
}
2829
return biomes;
2930
}

0 commit comments

Comments
 (0)