Optimize OfflinePlayer context (#306)

* Only allow valid usernames in OfflinePlayer context resolver

* optimize OfflinePlayer context resolver
This commit is contained in:
JOO200
2021-01-26 19:14:44 +01:00
committed by GitHub
parent 6c632eb028
commit a28e0f5ce2
@@ -43,6 +43,8 @@ import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import static co.aikar.commands.ACFBukkitUtil.isValidName;
@SuppressWarnings("WeakerAccess")
public class BukkitCommandContexts extends CommandContexts<BukkitCommandExecutionContext> {
@@ -129,11 +131,22 @@ public class BukkitCommandContexts extends CommandContexts<BukkitCommandExecutio
});
registerContext(OfflinePlayer.class, c -> {
String name = c.popFirstArg();
UUID uuid = null;
OfflinePlayer offlinePlayer;
if (c.hasFlag("uuid")) {
uuid = UUID.fromString(name);
UUID uuid;
try {
uuid = UUID.fromString(name);
} catch (IllegalArgumentException e) {
throw new InvalidCommandArgument(MinecraftMessageKeys.NO_PLAYER_FOUND_OFFLINE,
"{search}", name);
}
offlinePlayer = Bukkit.getOfflinePlayer(uuid);
} else {
if (!isValidName(name)) {
throw new InvalidCommandArgument(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
}
offlinePlayer = Bukkit.getOfflinePlayer(name);
}
OfflinePlayer offlinePlayer = uuid != null ? Bukkit.getOfflinePlayer(uuid) : Bukkit.getOfflinePlayer(name);
if (offlinePlayer == null || (!offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline())) {
throw new InvalidCommandArgument(MinecraftMessageKeys.NO_PLAYER_FOUND_OFFLINE,
"{search}", name);