diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java index 732b7e6e..a80af311 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java @@ -28,6 +28,7 @@ import co.aikar.commands.contexts.OnlinePlayer; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.Location; +import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.command.BlockCommandSender; import org.bukkit.command.CommandSender; @@ -38,6 +39,7 @@ import org.jetbrains.annotations.Nullable; import java.util.HashSet; import java.util.Set; +import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -120,6 +122,19 @@ public class BukkitCommandContexts extends CommandContexts { + String name = c.popFirstArg(); + UUID uuid = null; + if (c.hasFlag("uuid")) { + uuid = UUID.fromString(name); + } + OfflinePlayer offlinePlayer = uuid != null ? Bukkit.getOfflinePlayer(uuid) : Bukkit.getOfflinePlayer(name); + if (offlinePlayer == null) { + throw new InvalidCommandArgument(MinecraftMessageKeys.NO_PLAYER_FOUND_OFFLINE, + "{search}", name); + } + return offlinePlayer; + }); registerContext(ChatColor.class, c -> { String first = c.popFirstArg(); Stream colors = Stream.of(ChatColor.values()); diff --git a/bukkit/src/main/java/co/aikar/commands/MinecraftMessageKeys.java b/bukkit/src/main/java/co/aikar/commands/MinecraftMessageKeys.java index 4bddede0..d8f6abc9 100644 --- a/bukkit/src/main/java/co/aikar/commands/MinecraftMessageKeys.java +++ b/bukkit/src/main/java/co/aikar/commands/MinecraftMessageKeys.java @@ -34,6 +34,7 @@ public enum MinecraftMessageKeys implements MessageKeyProvider { IS_NOT_A_VALID_NAME, MULTIPLE_PLAYERS_MATCH, NO_PLAYER_FOUND_SERVER, + NO_PLAYER_FOUND_OFFLINE, NO_PLAYER_FOUND, LOCATION_PLEASE_SPECIFY_WORLD, LOCATION_PLEASE_SPECIFY_XYZ, diff --git a/languages/minecraft/acf-minecraft_en.properties b/languages/minecraft/acf-minecraft_en.properties index e59ee741..48e6099c 100644 --- a/languages/minecraft/acf-minecraft_en.properties +++ b/languages/minecraft/acf-minecraft_en.properties @@ -31,6 +31,7 @@ acf-minecraft.username_too_short = Error: Username too short, must be at least t acf-minecraft.is_not_a_valid_name = Error: {name} is not a valid username. acf-minecraft.multiple_players_match = Error: Multiple players matched {search} ({all}), please be more specific. acf-minecraft.no_player_found_server = No player matching {search} is connected to this server. +acf-minecraft.no_player_found_offline = No player matching {search} could be found. acf-minecraft.no_player_found = No player matching {search} could be found. acf-minecraft.location_please_specify_world = Error: Please specify world. Example: world:x,y,z. acf-minecraft.location_please_specify_xyz = Error: Please x,y,z. Example: world:x,y,z.