From 5e4d20cf61d627701d1fe6a6efbf89c8fa0e286a Mon Sep 17 00:00:00 2001 From: Aikar Date: Sat, 17 Jun 2017 21:14:17 -0400 Subject: [PATCH] add OnlinePlayer[] Bukkit Context --- .../aikar/commands/BukkitCommandContexts.java | 43 +++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java index 0fe3ecb3..853ac64e 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java @@ -32,7 +32,10 @@ import org.bukkit.command.CommandSender; import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.PlayerInventory; +import org.jetbrains.annotations.Nullable; +import java.util.HashSet; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -44,17 +47,28 @@ public class BukkitCommandContexts extends CommandContexts { - final String playercheck = c.popFirstArg(); - Player player = ACFBukkitUtil.findPlayerSmart(c.getSender(), playercheck); - if (player == null) { - if (c.hasAnnotation(Optional.class)) { - return null; + registerContext(OnlinePlayer.class, c -> getOnlinePlayer(c.getSender(), c.popFirstArg(), c.hasAnnotation(Optional.class))); + registerContext(OnlinePlayer[].class, (c) -> { + CommandSender sender = c.getSender(); + final String input = c.popFirstArg(); + boolean allowMissing = c.hasFlag("allowmissing"); + Set players = new HashSet<>(); + Pattern split = ACFPatterns.COMMA; + String splitter = c.getFlagValue("splitter", (String) null); + if (splitter != null) { + split = Pattern.compile(Pattern.quote(splitter)); + } + for (String lookup : split.split(input)) { + OnlinePlayer player = getOnlinePlayer(sender, lookup, allowMissing); + if (player != null) { + players.add(player); } - ACFBukkitUtil.sendMsg(c.getSender(), "&cCould not find a player by the name " + playercheck); + } + if (players.isEmpty() && !c.hasFlag("allowempty")) { + ACFBukkitUtil.sendMsg(sender, "&cCould not find any players by " + input); throw new InvalidCommandArgument(false); } - return new OnlinePlayer(player); + return players.toArray(new OnlinePlayer[players.size()]); }); registerSenderAwareContext(World.class, (c) -> { String firstArg = c.getFirstArg(); @@ -116,4 +130,17 @@ public class BukkitCommandContexts extends CommandContexts