From e9ca4fcd6544fc1c202de8531ab280f347163d86 Mon Sep 17 00:00:00 2001 From: chickeneer Date: Sun, 2 Apr 2023 16:41:26 -0500 Subject: [PATCH] Change valid name checking to a configurable predicate #382 I see the value in allowing acf users to disable the valid name check. I think others may want to go a step further and create their own valid name verification. Those that want to truly accept all names can simply do `CommandManager#setValidNamePredicate(name -> true)` with the new API. Another solution I considered was having users override the isValidName method on their CommandManager, but this functionality seemed more friendly. --- .../java/co/aikar/commands/ACFBukkitUtil.java | 12 +- .../aikar/commands/BukkitCommandContexts.java | 2 +- .../aikar/commands/BukkitCommandManager.java | 4 +- .../java/co/aikar/commands/ACFBungeeUtil.java | 12 +- .../aikar/commands/BungeeCommandManager.java | 2 + .../co/aikar/commands/CommandManager.java | 17 +- .../co/aikar/commands/ACFBukkitUtil.html | 59 +- .../aikar/commands/BukkitCommandManager.html | 24 +- .../co/aikar/commands/ACFBukkitUtil.html | 568 ++++----- .../aikar/commands/BukkitCommandContexts.html | 2 +- .../aikar/commands/BukkitCommandManager.html | 188 +-- .../co/aikar/commands/ACFBungeeUtil.html | 31 +- .../aikar/commands/BungeeCommandManager.html | 40 +- .../co/aikar/commands/ACFBungeeUtil.html | 267 +++-- .../aikar/commands/BungeeCommandManager.html | 314 ++--- .../co/aikar/commands/CommandManager.html | 221 ++-- docs/acf-core/index-all.html | 8 + docs/acf-core/member-search-index.js | 2 +- .../co/aikar/commands/CommandManager.html | 1040 +++++++++-------- .../aikar/commands/PaperCommandManager.html | 2 +- .../co/aikar/commands/ACFSpongeUtil.html | 13 +- .../aikar/commands/SpongeCommandManager.html | 34 +- .../co/aikar/commands/ACFSpongeUtil.html | 187 +-- .../aikar/commands/SpongeCommandManager.html | 282 ++--- .../co/aikar/commands/ACFVelocityUtil.html | 7 +- .../commands/VelocityCommandManager.html | 44 +- .../co/aikar/commands/ACFVelocityUtil.html | 119 +- .../commands/VelocityCommandManager.html | 344 +++--- .../java/co/aikar/commands/ACFSpongeUtil.java | 11 +- .../aikar/commands/SpongeCommandManager.java | 2 + .../co/aikar/commands/ACFVelocityUtil.java | 14 +- .../commands/VelocityCommandManager.java | 2 + 32 files changed, 1968 insertions(+), 1906 deletions(-) diff --git a/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java b/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java index 1751893e..a32c4f9d 100644 --- a/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java +++ b/bukkit/src/main/java/co/aikar/commands/ACFBukkitUtil.java @@ -33,6 +33,7 @@ import org.bukkit.entity.Entity; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Iterator; @@ -282,7 +283,7 @@ public class ACFBukkitUtil { //noinspection Duplicates if (matches.isEmpty()) { - if (!isValidName(name, issuer.getManager())) { + if (!issuer.getManager().isValidName(name)) { issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); return null; } @@ -318,13 +319,8 @@ public class ACFBukkitUtil { } } - @Deprecated - public static boolean isValidName(String name) { - return isValidName(name, null); - } - - public static boolean isValidName(String name, CommandManager manager) { - return name != null && !name.isEmpty() && ((manager != null && manager.isAllowInvalidName()) || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches()); + public static boolean isValidName(@Nullable String name) { + return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); } static boolean isValidItem(ItemStack item) { diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java index 38a968f7..de5c77cc 100644 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandContexts.java @@ -145,7 +145,7 @@ public class BukkitCommandContexts extends CommandContexts T validate(T object, String message, Object... values) { diff --git a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java index f8884531..c48dbe65 100644 --- a/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java +++ b/bungee/src/main/java/co/aikar/commands/BungeeCommandManager.java @@ -66,6 +66,8 @@ public class BungeeCommandManager extends CommandManager< getLocales(); // auto load locales + this.validNamePredicate = ACFBungeeUtil::isValidName; + plugin.getProxy().getPluginManager().registerListener(plugin, new ACFBungeeListener(this, plugin)); //BungeeCord has no event for listening for client setting changes diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 9458139e..ae4ab8d3 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -45,6 +45,7 @@ import java.util.Set; import java.util.Stack; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; @SuppressWarnings("WeakerAccess") @@ -75,9 +76,9 @@ public abstract class CommandManager< protected CommandHelpFormatter helpFormatter = new CommandHelpFormatter(this); protected boolean usePerIssuerLocale = false; - protected boolean allowInvalidName = false; protected List> localeChangedCallbacks = new ArrayList<>(); protected Set supportedLanguages = new HashSet<>(Arrays.asList(Locales.ENGLISH, Locales.DUTCH, Locales.GERMAN, Locales.SPANISH, Locales.FRENCH, Locales.CZECH, Locales.PORTUGUESE, Locales.SWEDISH, Locales.NORWEGIAN_BOKMAAL, Locales.NORWEGIAN_NYNORSK, Locales.RUSSIAN, Locales.BULGARIAN, Locales.HUNGARIAN, Locales.TURKISH, Locales.JAPANESE, Locales.CHINESE, Locales.SIMPLIFIED_CHINESE, Locales.TRADITIONAL_CHINESE, Locales.KOREAN)); + protected Predicate validNamePredicate = name -> true; protected Map formatters = new IdentityHashMap<>(); protected MF defaultFormatter; protected int defaultHelpPerPage = 10; @@ -274,14 +275,16 @@ public abstract class CommandManager< return old; } - public boolean isAllowInvalidName() { - return allowInvalidName; + public boolean isValidName(@NotNull String name) { + return validNamePredicate.test(name); } - public boolean allowInvalidName(boolean setting) { - boolean old = allowInvalidName; - allowInvalidName = setting; - return old; + public @NotNull Predicate getValidNamePredicate() { + return validNamePredicate; + } + + public void setValidNamePredicate(@NotNull Predicate isValidName) { + this.validNamePredicate = isValidName; } public ConditionContext createConditionContext(CommandIssuer issuer, String config) { diff --git a/docs/acf-bukkit/co/aikar/commands/ACFBukkitUtil.html b/docs/acf-bukkit/co/aikar/commands/ACFBukkitUtil.html index 13053121..a7ad0685 100644 --- a/docs/acf-bukkit/co/aikar/commands/ACFBukkitUtil.html +++ b/docs/acf-bukkit/co/aikar/commands/ACFBukkitUtil.html @@ -76,7 +76,7 @@ loadScripts(document, 'script');

-
public class ACFBukkitUtil +
public class ACFBukkitUtil extends Object
@@ -174,7 +174,7 @@ loadScripts(document, 'script'); double addY)
 
static boolean
- +
isValidName(@Nullable String name)
 
static boolean
isWithinDistance(@NotNull org.bukkit.entity.Player p1, @@ -232,7 +232,7 @@ loadScripts(document, 'script');
  • ACFBukkitUtil

    -
    public ACFBukkitUtil()
    +
    public ACFBukkitUtil()
  • @@ -246,20 +246,20 @@ loadScripts(document, 'script');
  • formatLocation

    -
    public static String formatLocation(org.bukkit.Location loc)
    +
    public static String formatLocation(org.bukkit.Location loc)
  • color

    -
    public static String color(String message)
    +
    public static String color(String message)
  • sendMsg

    @Deprecated -public static void sendMsg(org.bukkit.command.CommandSender player, +public static void sendMsg(org.bukkit.command.CommandSender player, String message)
    Deprecated.
    Move to Message Keys on the CommandIssuer
    @@ -268,38 +268,38 @@ loadScripts(document, 'script');
  • stringToLocation

    -
    public static org.bukkit.Location stringToLocation(String storedLoc)
    +
    public static org.bukkit.Location stringToLocation(String storedLoc)
  • stringToLocation

    -
    public static org.bukkit.Location stringToLocation(String storedLoc, +
    public static org.bukkit.Location stringToLocation(String storedLoc, org.bukkit.World forcedWorld)
  • fullLocationToString

    -
    public static String fullLocationToString(org.bukkit.Location loc)
    +
    public static String fullLocationToString(org.bukkit.Location loc)
  • fullBlockLocationToString

    -
    public static String fullBlockLocationToString(org.bukkit.Location loc)
    +
    public static String fullBlockLocationToString(org.bukkit.Location loc)
  • blockLocationToString

    -
    public static String blockLocationToString(org.bukkit.Location loc)
    +
    public static String blockLocationToString(org.bukkit.Location loc)
  • distance

    -
    public static double distance(@NotNull +
    public static double distance(@NotNull @NotNull org.bukkit.entity.Entity e1, @NotNull @NotNull org.bukkit.entity.Entity e2)
    @@ -308,7 +308,7 @@ loadScripts(document, 'script');
  • distance2d

    -
    public static double distance2d(@NotNull +
    public static double distance2d(@NotNull @NotNull org.bukkit.entity.Entity e1, @NotNull @NotNull org.bukkit.entity.Entity e2)
    @@ -317,7 +317,7 @@ loadScripts(document, 'script');
  • distance2d

    -
    public static double distance2d(@NotNull +
    public static double distance2d(@NotNull @NotNull org.bukkit.Location loc1, @NotNull @NotNull org.bukkit.Location loc2)
    @@ -326,7 +326,7 @@ loadScripts(document, 'script');
  • distance

    -
    public static double distance(@NotNull +
    public static double distance(@NotNull @NotNull org.bukkit.Location loc1, @NotNull @NotNull org.bukkit.Location loc2)
    @@ -335,20 +335,20 @@ loadScripts(document, 'script');
  • getTargetLoc

    -
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player)
    +
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player)
  • getTargetLoc

    -
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player, +
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player, int maxDist)
  • getTargetLoc

    -
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player, +
    public static org.bukkit.Location getTargetLoc(org.bukkit.entity.Player player, int maxDist, double addY)
    @@ -356,14 +356,14 @@ loadScripts(document, 'script');
  • getRandLoc

    -
    public static org.bukkit.Location getRandLoc(org.bukkit.Location loc, +
    public static org.bukkit.Location getRandLoc(org.bukkit.Location loc, int radius)
  • getRandLoc

    -
    public static org.bukkit.Location getRandLoc(org.bukkit.Location loc, +
    public static org.bukkit.Location getRandLoc(org.bukkit.Location loc, int xzRadius, int yRadius)
    @@ -372,7 +372,7 @@ loadScripts(document, 'script');

    getRandLoc

    @NotNull -public static @NotNull org.bukkit.Location getRandLoc(org.bukkit.Location loc, +public static @NotNull org.bukkit.Location getRandLoc(org.bukkit.Location loc, int xRadius, int yRadius, int zRadius)
    @@ -381,13 +381,13 @@ loadScripts(document, 'script');
  • removeColors

    -
    public static String removeColors(String msg)
    +
    public static String removeColors(String msg)
  • replaceChatString

    -
    public static String replaceChatString(String message, +
    public static String replaceChatString(String message, String replace, String with)
    @@ -395,7 +395,7 @@ loadScripts(document, 'script');
  • replaceChatString

    -
    public static String replaceChatString(String message, +
    public static String replaceChatString(String message, Pattern replace, String with)
    @@ -403,7 +403,7 @@ loadScripts(document, 'script');
  • isWithinDistance

    -
    public static boolean isWithinDistance(@NotNull +
    public static boolean isWithinDistance(@NotNull @NotNull org.bukkit.entity.Player p1, @NotNull @NotNull org.bukkit.entity.Player p2, @@ -413,7 +413,7 @@ loadScripts(document, 'script');
  • isWithinDistance

    -
    public static boolean isWithinDistance(@NotNull +
    public static boolean isWithinDistance(@NotNull @NotNull org.bukkit.Location loc1, @NotNull @NotNull org.bukkit.Location loc2, @@ -423,7 +423,7 @@ loadScripts(document, 'script');
  • findPlayerSmart

    -
    public static org.bukkit.entity.Player findPlayerSmart(org.bukkit.command.CommandSender requester, +
    public static org.bukkit.entity.Player findPlayerSmart(org.bukkit.command.CommandSender requester, String search)
    Deprecated.
    Please move to the CommandIssuer version
    @@ -432,14 +432,15 @@ loadScripts(document, 'script');
  • findPlayerSmart

    -
    public static org.bukkit.entity.Player findPlayerSmart(co.aikar.commands.CommandIssuer issuer, +
    public static org.bukkit.entity.Player findPlayerSmart(co.aikar.commands.CommandIssuer issuer, String search)
  • isValidName

    -
    public static boolean isValidName(String name)
    +
    public static boolean isValidName(@Nullable + @Nullable String name)
  • diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html index 46c01d5f..a6aa30ab 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html @@ -78,7 +78,7 @@ loadScripts(document, 'script');

    -
    public class BukkitCommandManager +
    public class BukkitCommandManager extends co.aikar.commands.CommandManager<org.bukkit.command.CommandSender,BukkitCommandIssuer,org.bukkit.ChatColor,BukkitMessageFormatter,BukkitCommandExecutionContext,BukkitConditionContext>
    @@ -278,61 +278,61 @@ loadScripts(document, 'script');
  • plugin

    -
    protected final org.bukkit.plugin.Plugin plugin
    +
    protected final org.bukkit.plugin.Plugin plugin
  • mcMinorVersion

    -
    public final Integer mcMinorVersion
    +
    public final Integer mcMinorVersion
  • mcPatchVersion

    -
    public final Integer mcPatchVersion
    +
    public final Integer mcPatchVersion
  • knownCommands

    -
    protected Map<String,org.bukkit.command.Command> knownCommands
    +
    protected Map<String,org.bukkit.command.Command> knownCommands
  • registeredCommands

    - +
  • contexts

    - +
  • completions

    - +
  • locales

    - +
  • issuersLocaleString

    - +
  • autoDetectFromClient

    -
    protected boolean autoDetectFromClient
    +
    protected boolean autoDetectFromClient
  • @@ -346,7 +346,7 @@ loadScripts(document, 'script');
  • BukkitCommandManager

    -
    public BukkitCommandManager(org.bukkit.plugin.Plugin plugin)
    +
    public BukkitCommandManager(org.bukkit.plugin.Plugin plugin)
  • diff --git a/docs/acf-bukkit/src-html/co/aikar/commands/ACFBukkitUtil.html b/docs/acf-bukkit/src-html/co/aikar/commands/ACFBukkitUtil.html index a9894995..8e450cb2 100644 --- a/docs/acf-bukkit/src-html/co/aikar/commands/ACFBukkitUtil.html +++ b/docs/acf-bukkit/src-html/co/aikar/commands/ACFBukkitUtil.html @@ -46,293 +46,293 @@ 033import org.bukkit.entity.Player; 034import org.bukkit.inventory.ItemStack; 035import org.jetbrains.annotations.NotNull; -036 -037import java.util.ArrayList; -038import java.util.Iterator; -039import java.util.List; -040import java.util.Set; -041import java.util.regex.Pattern; -042import java.util.stream.Collectors; -043 -044public class ACFBukkitUtil { -045 -046 public static String formatLocation(Location loc) { -047 if (loc == null) { -048 return null; -049 } -050 return loc.getWorld().getName() + -051 ":" + -052 loc.getBlockX() + -053 "," + -054 loc.getBlockY() + -055 "," + -056 loc.getBlockZ(); -057 } -058 -059 public static String color(String message) { -060 return ChatColor.translateAlternateColorCodes('&', message); -061 } -062 -063 /** -064 * Move to Message Keys on the CommandIssuer -065 * -066 * @deprecated -067 */ -068 @Deprecated -069 public static void sendMsg(CommandSender player, String message) { -070 message = color(message); -071 for (String msg : ACFPatterns.NEWLINE.split(message)) { -072 player.sendMessage(msg); -073 } -074 } -075 -076 public static Location stringToLocation(String storedLoc) { -077 return stringToLocation(storedLoc, null); -078 } -079 -080 public static Location stringToLocation(String storedLoc, World forcedWorld) { -081 if (storedLoc == null) { -082 return null; -083 } -084 String[] args = ACFPatterns.COLON.split(storedLoc); -085 if (args.length >= 4 || (args.length == 3 && forcedWorld != null)) { -086 String world = forcedWorld != null ? forcedWorld.getName() : args[0]; -087 int i = args.length == 3 ? 0 : 1; -088 double x = Double.parseDouble(args[i]); -089 double y = Double.parseDouble(args[i + 1]); -090 double z = Double.parseDouble(args[i + 2]); -091 Location loc = new Location(Bukkit.getWorld(world), x, y, z); -092 if (args.length >= 6) { -093 loc.setPitch(Float.parseFloat(args[4])); -094 loc.setYaw(Float.parseFloat(args[5])); -095 } -096 return loc; -097 } else if (args.length == 2) { -098 String[] args2 = ACFPatterns.COMMA.split(args[1]); -099 if (args2.length == 3) { -100 String world = forcedWorld != null ? forcedWorld.getName() : args[0]; -101 double x = Double.parseDouble(args2[0]); -102 double y = Double.parseDouble(args2[1]); -103 double z = Double.parseDouble(args2[2]); -104 return new Location(Bukkit.getWorld(world), x, y, z); -105 } -106 } -107 return null; -108 } -109 -110 public static String fullLocationToString(Location loc) { -111 if (loc == null) { -112 return null; -113 } -114 return (new StringBuilder(64)) -115 .append(loc.getWorld().getName()) -116 .append(':') -117 .append(ACFUtil.precision(loc.getX(), 4)) -118 .append(':') -119 .append(ACFUtil.precision(loc.getY(), 4)) -120 .append(':') -121 .append(ACFUtil.precision(loc.getZ(), 4)) -122 .append(':') -123 .append(ACFUtil.precision(loc.getPitch(), 4)) -124 .append(':') -125 .append(ACFUtil.precision(loc.getYaw(), 4)) -126 .toString(); -127 } -128 -129 public static String fullBlockLocationToString(Location loc) { -130 if (loc == null) { -131 return null; -132 } -133 return (new StringBuilder(64)) -134 .append(loc.getWorld().getName()) -135 .append(':') -136 .append(loc.getBlockX()) -137 .append(':') -138 .append(loc.getBlockY()) -139 .append(':') -140 .append(loc.getBlockZ()) -141 .append(':') -142 .append(ACFUtil.precision(loc.getPitch(), 4)) -143 .append(':') -144 .append(ACFUtil.precision(loc.getYaw(), 4)) -145 .toString(); -146 } -147 -148 public static String blockLocationToString(Location loc) { -149 if (loc == null) { -150 return null; -151 } -152 -153 return (new StringBuilder(32)) -154 .append(loc.getWorld().getName()) -155 .append(':') -156 .append(loc.getBlockX()) -157 .append(':') -158 .append(loc.getBlockY()) -159 .append(':') -160 .append(loc.getBlockZ()) -161 .toString(); -162 } -163 -164 public static double distance(@NotNull Entity e1, @NotNull Entity e2) { -165 return distance(e1.getLocation(), e2.getLocation()); -166 } -167 -168 public static double distance2d(@NotNull Entity e1, @NotNull Entity e2) { -169 return distance2d(e1.getLocation(), e2.getLocation()); -170 } -171 -172 public static double distance2d(@NotNull Location loc1, @NotNull Location loc2) { -173 loc1 = loc1.clone(); -174 loc1.setY(loc2.getY()); -175 return distance(loc1, loc2); -176 } -177 -178 public static double distance(@NotNull Location loc1, @NotNull Location loc2) { -179 if (loc1.getWorld() != loc2.getWorld()) { -180 return 0; -181 } -182 return loc1.distance(loc2); -183 } -184 -185 public static Location getTargetLoc(Player player) { -186 return getTargetLoc(player, 128); -187 } -188 -189 public static Location getTargetLoc(Player player, int maxDist) { -190 return getTargetLoc(player, maxDist, 1.5); -191 } -192 -193 public static Location getTargetLoc(Player player, int maxDist, double addY) { -194 try { -195 Location target = player.getTargetBlock((Set<Material>) null, maxDist).getLocation(); -196 target.setY(target.getY() + addY); -197 return target; -198 } catch (Exception ignored) { -199 return null; -200 } -201 } -202 -203 public static Location getRandLoc(Location loc, int radius) { -204 return getRandLoc(loc, radius, radius, radius); -205 } -206 -207 public static Location getRandLoc(Location loc, int xzRadius, int yRadius) { -208 return getRandLoc(loc, xzRadius, yRadius, xzRadius); -209 } -210 -211 @NotNull -212 public static Location getRandLoc(Location loc, int xRadius, int yRadius, int zRadius) { -213 Location newLoc = loc.clone(); -214 newLoc.setX(ACFUtil.rand(loc.getX() - xRadius, loc.getX() + xRadius)); -215 newLoc.setY(ACFUtil.rand(loc.getY() - yRadius, loc.getY() + yRadius)); -216 newLoc.setZ(ACFUtil.rand(loc.getZ() - zRadius, loc.getZ() + zRadius)); -217 return newLoc; -218 } -219 +036import org.jetbrains.annotations.Nullable; +037 +038import java.util.ArrayList; +039import java.util.Iterator; +040import java.util.List; +041import java.util.Set; +042import java.util.regex.Pattern; +043import java.util.stream.Collectors; +044 +045public class ACFBukkitUtil { +046 +047 public static String formatLocation(Location loc) { +048 if (loc == null) { +049 return null; +050 } +051 return loc.getWorld().getName() + +052 ":" + +053 loc.getBlockX() + +054 "," + +055 loc.getBlockY() + +056 "," + +057 loc.getBlockZ(); +058 } +059 +060 public static String color(String message) { +061 return ChatColor.translateAlternateColorCodes('&', message); +062 } +063 +064 /** +065 * Move to Message Keys on the CommandIssuer +066 * +067 * @deprecated +068 */ +069 @Deprecated +070 public static void sendMsg(CommandSender player, String message) { +071 message = color(message); +072 for (String msg : ACFPatterns.NEWLINE.split(message)) { +073 player.sendMessage(msg); +074 } +075 } +076 +077 public static Location stringToLocation(String storedLoc) { +078 return stringToLocation(storedLoc, null); +079 } +080 +081 public static Location stringToLocation(String storedLoc, World forcedWorld) { +082 if (storedLoc == null) { +083 return null; +084 } +085 String[] args = ACFPatterns.COLON.split(storedLoc); +086 if (args.length >= 4 || (args.length == 3 && forcedWorld != null)) { +087 String world = forcedWorld != null ? forcedWorld.getName() : args[0]; +088 int i = args.length == 3 ? 0 : 1; +089 double x = Double.parseDouble(args[i]); +090 double y = Double.parseDouble(args[i + 1]); +091 double z = Double.parseDouble(args[i + 2]); +092 Location loc = new Location(Bukkit.getWorld(world), x, y, z); +093 if (args.length >= 6) { +094 loc.setPitch(Float.parseFloat(args[4])); +095 loc.setYaw(Float.parseFloat(args[5])); +096 } +097 return loc; +098 } else if (args.length == 2) { +099 String[] args2 = ACFPatterns.COMMA.split(args[1]); +100 if (args2.length == 3) { +101 String world = forcedWorld != null ? forcedWorld.getName() : args[0]; +102 double x = Double.parseDouble(args2[0]); +103 double y = Double.parseDouble(args2[1]); +104 double z = Double.parseDouble(args2[2]); +105 return new Location(Bukkit.getWorld(world), x, y, z); +106 } +107 } +108 return null; +109 } +110 +111 public static String fullLocationToString(Location loc) { +112 if (loc == null) { +113 return null; +114 } +115 return (new StringBuilder(64)) +116 .append(loc.getWorld().getName()) +117 .append(':') +118 .append(ACFUtil.precision(loc.getX(), 4)) +119 .append(':') +120 .append(ACFUtil.precision(loc.getY(), 4)) +121 .append(':') +122 .append(ACFUtil.precision(loc.getZ(), 4)) +123 .append(':') +124 .append(ACFUtil.precision(loc.getPitch(), 4)) +125 .append(':') +126 .append(ACFUtil.precision(loc.getYaw(), 4)) +127 .toString(); +128 } +129 +130 public static String fullBlockLocationToString(Location loc) { +131 if (loc == null) { +132 return null; +133 } +134 return (new StringBuilder(64)) +135 .append(loc.getWorld().getName()) +136 .append(':') +137 .append(loc.getBlockX()) +138 .append(':') +139 .append(loc.getBlockY()) +140 .append(':') +141 .append(loc.getBlockZ()) +142 .append(':') +143 .append(ACFUtil.precision(loc.getPitch(), 4)) +144 .append(':') +145 .append(ACFUtil.precision(loc.getYaw(), 4)) +146 .toString(); +147 } +148 +149 public static String blockLocationToString(Location loc) { +150 if (loc == null) { +151 return null; +152 } +153 +154 return (new StringBuilder(32)) +155 .append(loc.getWorld().getName()) +156 .append(':') +157 .append(loc.getBlockX()) +158 .append(':') +159 .append(loc.getBlockY()) +160 .append(':') +161 .append(loc.getBlockZ()) +162 .toString(); +163 } +164 +165 public static double distance(@NotNull Entity e1, @NotNull Entity e2) { +166 return distance(e1.getLocation(), e2.getLocation()); +167 } +168 +169 public static double distance2d(@NotNull Entity e1, @NotNull Entity e2) { +170 return distance2d(e1.getLocation(), e2.getLocation()); +171 } +172 +173 public static double distance2d(@NotNull Location loc1, @NotNull Location loc2) { +174 loc1 = loc1.clone(); +175 loc1.setY(loc2.getY()); +176 return distance(loc1, loc2); +177 } +178 +179 public static double distance(@NotNull Location loc1, @NotNull Location loc2) { +180 if (loc1.getWorld() != loc2.getWorld()) { +181 return 0; +182 } +183 return loc1.distance(loc2); +184 } +185 +186 public static Location getTargetLoc(Player player) { +187 return getTargetLoc(player, 128); +188 } +189 +190 public static Location getTargetLoc(Player player, int maxDist) { +191 return getTargetLoc(player, maxDist, 1.5); +192 } +193 +194 public static Location getTargetLoc(Player player, int maxDist, double addY) { +195 try { +196 Location target = player.getTargetBlock((Set<Material>) null, maxDist).getLocation(); +197 target.setY(target.getY() + addY); +198 return target; +199 } catch (Exception ignored) { +200 return null; +201 } +202 } +203 +204 public static Location getRandLoc(Location loc, int radius) { +205 return getRandLoc(loc, radius, radius, radius); +206 } +207 +208 public static Location getRandLoc(Location loc, int xzRadius, int yRadius) { +209 return getRandLoc(loc, xzRadius, yRadius, xzRadius); +210 } +211 +212 @NotNull +213 public static Location getRandLoc(Location loc, int xRadius, int yRadius, int zRadius) { +214 Location newLoc = loc.clone(); +215 newLoc.setX(ACFUtil.rand(loc.getX() - xRadius, loc.getX() + xRadius)); +216 newLoc.setY(ACFUtil.rand(loc.getY() - yRadius, loc.getY() + yRadius)); +217 newLoc.setZ(ACFUtil.rand(loc.getZ() - zRadius, loc.getZ() + zRadius)); +218 return newLoc; +219 } 220 -221 public static String removeColors(String msg) { -222 return ChatColor.stripColor(color(msg)); -223 } -224 -225 public static String replaceChatString(String message, String replace, String with) { -226 return replaceChatString(message, Pattern.compile(Pattern.quote(replace), Pattern.CASE_INSENSITIVE), with); -227 } -228 -229 public static String replaceChatString(String message, Pattern replace, String with) { -230 final String[] split = replace.split(message + "1"); -231 -232 if (split.length < 2) { -233 return replace.matcher(message).replaceAll(with); -234 } -235 message = split[0]; -236 -237 for (int i = 1; i < split.length; i++) { -238 final String prev = ChatColor.getLastColors(message); -239 message += with + prev + split[i]; -240 } -241 return message.substring(0, message.length() - 1); -242 } -243 -244 public static boolean isWithinDistance(@NotNull Player p1, @NotNull Player p2, int dist) { -245 return isWithinDistance(p1.getLocation(), p2.getLocation(), dist); -246 } -247 -248 public static boolean isWithinDistance(@NotNull Location loc1, @NotNull Location loc2, int dist) { -249 return loc1.getWorld() == loc2.getWorld() && loc1.distance(loc2) <= dist; -250 } -251 -252 /** -253 * Please move to the CommandIssuer version -254 * -255 * @deprecated -256 */ -257 public static Player findPlayerSmart(CommandSender requester, String search) { -258 CommandManager manager = CommandManager.getCurrentCommandManager(); -259 if (manager != null) { -260 return findPlayerSmart(manager.getCommandIssuer(requester), search); -261 } -262 throw new IllegalStateException("You may not use the ACFBukkitUtil#findPlayerSmart(CommandSender) async to the command execution."); -263 } -264 -265 public static Player findPlayerSmart(CommandIssuer issuer, String search) { -266 CommandSender requester = issuer.getIssuer(); -267 if (search == null) { -268 return null; -269 } -270 String name = ACFUtil.replace(search, ":confirm", ""); -271 List<Player> matches = Bukkit.getServer().matchPlayer(name); -272 List<Player> confirmList = new ArrayList<>(); -273 findMatches(search, requester, matches, confirmList); -274 +221 +222 public static String removeColors(String msg) { +223 return ChatColor.stripColor(color(msg)); +224 } +225 +226 public static String replaceChatString(String message, String replace, String with) { +227 return replaceChatString(message, Pattern.compile(Pattern.quote(replace), Pattern.CASE_INSENSITIVE), with); +228 } +229 +230 public static String replaceChatString(String message, Pattern replace, String with) { +231 final String[] split = replace.split(message + "1"); +232 +233 if (split.length < 2) { +234 return replace.matcher(message).replaceAll(with); +235 } +236 message = split[0]; +237 +238 for (int i = 1; i < split.length; i++) { +239 final String prev = ChatColor.getLastColors(message); +240 message += with + prev + split[i]; +241 } +242 return message.substring(0, message.length() - 1); +243 } +244 +245 public static boolean isWithinDistance(@NotNull Player p1, @NotNull Player p2, int dist) { +246 return isWithinDistance(p1.getLocation(), p2.getLocation(), dist); +247 } +248 +249 public static boolean isWithinDistance(@NotNull Location loc1, @NotNull Location loc2, int dist) { +250 return loc1.getWorld() == loc2.getWorld() && loc1.distance(loc2) <= dist; +251 } +252 +253 /** +254 * Please move to the CommandIssuer version +255 * +256 * @deprecated +257 */ +258 public static Player findPlayerSmart(CommandSender requester, String search) { +259 CommandManager manager = CommandManager.getCurrentCommandManager(); +260 if (manager != null) { +261 return findPlayerSmart(manager.getCommandIssuer(requester), search); +262 } +263 throw new IllegalStateException("You may not use the ACFBukkitUtil#findPlayerSmart(CommandSender) async to the command execution."); +264 } +265 +266 public static Player findPlayerSmart(CommandIssuer issuer, String search) { +267 CommandSender requester = issuer.getIssuer(); +268 if (search == null) { +269 return null; +270 } +271 String name = ACFUtil.replace(search, ":confirm", ""); +272 List<Player> matches = Bukkit.getServer().matchPlayer(name); +273 List<Player> confirmList = new ArrayList<>(); +274 findMatches(search, requester, matches, confirmList); 275 -276 if (matches.size() > 1 || confirmList.size() > 1) { -277 String allMatches = matches.stream().map(Player::getName).collect(Collectors.joining(", ")); -278 issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, -279 "{search}", name, "{all}", allMatches); -280 return null; -281 } -282 -283 //noinspection Duplicates -284 if (matches.isEmpty()) { -285 if (!isValidName(name)) { -286 issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); -287 return null; -288 } -289 Player player = ACFUtil.getFirstElement(confirmList); -290 if (player == null) { -291 issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name); -292 return null; -293 } else { -294 issuer.sendInfo(MinecraftMessageKeys.PLAYER_IS_VANISHED_CONFIRM, "{vanished}", player.getName()); -295 return null; -296 } -297 } -298 -299 return matches.get(0); -300 } -301 -302 private static void findMatches(String search, CommandSender requester, List<Player> matches, List<Player> confirmList) { -303 // Remove vanished players from smart matching. -304 Iterator<Player> iter = matches.iterator(); -305 //noinspection Duplicates -306 while (iter.hasNext()) { -307 Player player = iter.next(); -308 if (requester instanceof Player && !((Player) requester).canSee(player)) { -309 if (requester.hasPermission("acf.seevanish")) { -310 if (!search.endsWith(":confirm")) { -311 confirmList.add(player); -312 iter.remove(); -313 } -314 } else { -315 iter.remove(); -316 } -317 } -318 } -319 } -320 +276 +277 if (matches.size() > 1 || confirmList.size() > 1) { +278 String allMatches = matches.stream().map(Player::getName).collect(Collectors.joining(", ")); +279 issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, +280 "{search}", name, "{all}", allMatches); +281 return null; +282 } +283 +284 //noinspection Duplicates +285 if (matches.isEmpty()) { +286 if (!issuer.getManager().isValidName(name)) { +287 issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); +288 return null; +289 } +290 Player player = ACFUtil.getFirstElement(confirmList); +291 if (player == null) { +292 issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name); +293 return null; +294 } else { +295 issuer.sendInfo(MinecraftMessageKeys.PLAYER_IS_VANISHED_CONFIRM, "{vanished}", player.getName()); +296 return null; +297 } +298 } +299 +300 return matches.get(0); +301 } +302 +303 private static void findMatches(String search, CommandSender requester, List<Player> matches, List<Player> confirmList) { +304 // Remove vanished players from smart matching. +305 Iterator<Player> iter = matches.iterator(); +306 //noinspection Duplicates +307 while (iter.hasNext()) { +308 Player player = iter.next(); +309 if (requester instanceof Player && !((Player) requester).canSee(player)) { +310 if (requester.hasPermission("acf.seevanish")) { +311 if (!search.endsWith(":confirm")) { +312 confirmList.add(player); +313 iter.remove(); +314 } +315 } else { +316 iter.remove(); +317 } +318 } +319 } +320 } 321 -322 public static boolean isValidName(String name) { +322 public static boolean isValidName(@Nullable String name) { 323 return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); 324 } 325 diff --git a/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandContexts.html b/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandContexts.html index beee70ef..aa866c93 100644 --- a/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandContexts.html +++ b/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandContexts.html @@ -158,7 +158,7 @@ 145 offlinePlayer = Bukkit.getOfflinePlayer(name); 146 } 147 if (offlinePlayer == null || (!offlinePlayer.hasPlayedBefore() && !offlinePlayer.isOnline())) { -148 if (!c.hasFlag("uuid") && !isValidName(name)) { +148 if (!c.hasFlag("uuid") && !manager.isValidName(name)) { 149 throw new InvalidCommandArgument(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); 150 } 151 throw new InvalidCommandArgument(MinecraftMessageKeys.NO_PLAYER_FOUND_OFFLINE, diff --git a/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandManager.html b/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandManager.html index 588dd2d2..75c6f254 100644 --- a/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandManager.html +++ b/docs/acf-bukkit/src-html/co/aikar/commands/BukkitCommandManager.html @@ -55,101 +55,101 @@ 042import org.bukkit.plugin.PluginDescriptionFile; 043import org.bukkit.plugin.PluginManager; 044import org.bukkit.plugin.java.JavaPlugin; -045import org.bukkit.scheduler.BukkitScheduler; -046import org.bukkit.scheduler.BukkitTask; -047import org.bukkit.scoreboard.ScoreboardManager; -048import org.jetbrains.annotations.NotNull; -049 -050import java.lang.reflect.Field; -051import java.lang.reflect.Method; -052import java.util.Collection; -053import java.util.Collections; -054import java.util.HashMap; -055import java.util.HashSet; -056import java.util.List; -057import java.util.Locale; -058import java.util.Map; -059import java.util.Objects; -060import java.util.UUID; -061import java.util.concurrent.ConcurrentHashMap; -062import java.util.logging.Level; -063import java.util.logging.Logger; -064import java.util.regex.Matcher; -065import java.util.regex.Pattern; -066 -067@SuppressWarnings("WeakerAccess") -068public class BukkitCommandManager extends CommandManager< -069 CommandSender, -070 BukkitCommandIssuer, -071 ChatColor, -072 BukkitMessageFormatter, -073 BukkitCommandExecutionContext, -074 BukkitConditionContext -075 > { -076 -077 @SuppressWarnings("WeakerAccess") -078 protected final Plugin plugin; -079 private final CommandMap commandMap; -080 @Deprecated -081 private final TimingManager timingManager; -082 private ACFBukkitScheduler scheduler; -083 private final Logger logger; -084 public final Integer mcMinorVersion; -085 public final Integer mcPatchVersion; -086 protected Map<String, Command> knownCommands = new HashMap<>(); -087 protected Map<String, BukkitRootCommand> registeredCommands = new HashMap<>(); -088 protected BukkitCommandContexts contexts; -089 protected BukkitCommandCompletions completions; -090 protected BukkitLocales locales; -091 protected Map<UUID, String> issuersLocaleString = new ConcurrentHashMap<>(); -092 private boolean cantReadLocale = false; -093 protected boolean autoDetectFromClient = true; -094 -095 public BukkitCommandManager(Plugin plugin) { -096 this.plugin = plugin; -097 -098 //See what schedule we should use, bukkit or folia -099 try { -100 Class.forName("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); -101 this.scheduler = new ACFFoliaScheduler(); -102 } catch (ClassNotFoundException ignored) { -103 this.scheduler = new ACFBukkitScheduler(); -104 } -105 -106 String prefix = this.plugin.getDescription().getPrefix(); -107 this.logger = Logger.getLogger(prefix != null ? prefix : this.plugin.getName()); -108 this.timingManager = TimingManager.of(plugin); -109 this.commandMap = hookCommandMap(); -110 this.formatters.put(MessageType.ERROR, defaultFormatter = new BukkitMessageFormatter(ChatColor.RED, ChatColor.YELLOW, ChatColor.RED)); -111 this.formatters.put(MessageType.SYNTAX, new BukkitMessageFormatter(ChatColor.YELLOW, ChatColor.GREEN, ChatColor.WHITE)); -112 this.formatters.put(MessageType.INFO, new BukkitMessageFormatter(ChatColor.BLUE, ChatColor.DARK_GREEN, ChatColor.GREEN)); -113 this.formatters.put(MessageType.HELP, new BukkitMessageFormatter(ChatColor.AQUA, ChatColor.GREEN, ChatColor.YELLOW)); -114 Pattern versionPattern = Pattern.compile("\\(MC: (\\d)\\.(\\d+)\\.?(\\d+?)?\\)"); -115 Matcher matcher = versionPattern.matcher(Bukkit.getVersion()); -116 if (matcher.find()) { -117 this.mcMinorVersion = ACFUtil.parseInt(matcher.toMatchResult().group(2), 0); -118 this.mcPatchVersion = ACFUtil.parseInt(matcher.toMatchResult().group(3), 0); -119 } else { -120 this.mcMinorVersion = -1; -121 this.mcPatchVersion = -1; -122 } -123 Bukkit.getHelpMap().registerHelpTopicFactory(BukkitRootCommand.class, command -> { -124 if (hasUnstableAPI("help")) { -125 return new ACFBukkitHelpTopic(this, (BukkitRootCommand) command); -126 } else { -127 return new GenericCommandHelpTopic(command); -128 } -129 }); +045import org.bukkit.scoreboard.ScoreboardManager; +046import org.jetbrains.annotations.NotNull; +047 +048import java.lang.reflect.Field; +049import java.lang.reflect.Method; +050import java.util.Collection; +051import java.util.Collections; +052import java.util.HashMap; +053import java.util.HashSet; +054import java.util.List; +055import java.util.Locale; +056import java.util.Map; +057import java.util.Objects; +058import java.util.UUID; +059import java.util.concurrent.ConcurrentHashMap; +060import java.util.logging.Level; +061import java.util.logging.Logger; +062import java.util.regex.Matcher; +063import java.util.regex.Pattern; +064 +065@SuppressWarnings("WeakerAccess") +066public class BukkitCommandManager extends CommandManager< +067 CommandSender, +068 BukkitCommandIssuer, +069 ChatColor, +070 BukkitMessageFormatter, +071 BukkitCommandExecutionContext, +072 BukkitConditionContext +073 > { +074 +075 @SuppressWarnings("WeakerAccess") +076 protected final Plugin plugin; +077 private final CommandMap commandMap; +078 @Deprecated +079 private final TimingManager timingManager; +080 private ACFBukkitScheduler scheduler; +081 private final Logger logger; +082 public final Integer mcMinorVersion; +083 public final Integer mcPatchVersion; +084 protected Map<String, Command> knownCommands = new HashMap<>(); +085 protected Map<String, BukkitRootCommand> registeredCommands = new HashMap<>(); +086 protected BukkitCommandContexts contexts; +087 protected BukkitCommandCompletions completions; +088 protected BukkitLocales locales; +089 protected Map<UUID, String> issuersLocaleString = new ConcurrentHashMap<>(); +090 private boolean cantReadLocale = false; +091 protected boolean autoDetectFromClient = true; +092 +093 public BukkitCommandManager(Plugin plugin) { +094 this.plugin = plugin; +095 +096 //See what schedule we should use, bukkit or folia +097 try { +098 Class.forName("io.papermc.paper.threadedregions.scheduler.AsyncScheduler"); +099 this.scheduler = new ACFFoliaScheduler(); +100 } catch (ClassNotFoundException ignored) { +101 this.scheduler = new ACFBukkitScheduler(); +102 } +103 +104 String prefix = this.plugin.getDescription().getPrefix(); +105 this.logger = Logger.getLogger(prefix != null ? prefix : this.plugin.getName()); +106 this.timingManager = TimingManager.of(plugin); +107 this.commandMap = hookCommandMap(); +108 this.formatters.put(MessageType.ERROR, defaultFormatter = new BukkitMessageFormatter(ChatColor.RED, ChatColor.YELLOW, ChatColor.RED)); +109 this.formatters.put(MessageType.SYNTAX, new BukkitMessageFormatter(ChatColor.YELLOW, ChatColor.GREEN, ChatColor.WHITE)); +110 this.formatters.put(MessageType.INFO, new BukkitMessageFormatter(ChatColor.BLUE, ChatColor.DARK_GREEN, ChatColor.GREEN)); +111 this.formatters.put(MessageType.HELP, new BukkitMessageFormatter(ChatColor.AQUA, ChatColor.GREEN, ChatColor.YELLOW)); +112 Pattern versionPattern = Pattern.compile("\\(MC: (\\d)\\.(\\d+)\\.?(\\d+?)?\\)"); +113 Matcher matcher = versionPattern.matcher(Bukkit.getVersion()); +114 if (matcher.find()) { +115 this.mcMinorVersion = ACFUtil.parseInt(matcher.toMatchResult().group(2), 0); +116 this.mcPatchVersion = ACFUtil.parseInt(matcher.toMatchResult().group(3), 0); +117 } else { +118 this.mcMinorVersion = -1; +119 this.mcPatchVersion = -1; +120 } +121 Bukkit.getHelpMap().registerHelpTopicFactory(BukkitRootCommand.class, command -> { +122 if (hasUnstableAPI("help")) { +123 return new ACFBukkitHelpTopic(this, (BukkitRootCommand) command); +124 } else { +125 return new GenericCommandHelpTopic(command); +126 } +127 }); +128 +129 Bukkit.getPluginManager().registerEvents(new ACFBukkitListener(this, plugin), plugin); 130 -131 Bukkit.getPluginManager().registerEvents(new ACFBukkitListener(this, plugin), plugin); -132 -133 getLocales(); // auto load locales -134 scheduler.createLocaleTask(plugin, () -> { -135 if (this.cantReadLocale || !this.autoDetectFromClient) { -136 return; -137 } -138 Bukkit.getOnlinePlayers().forEach(this::readPlayerLocale); -139 }, 30, 30); +131 getLocales(); // auto load locales +132 scheduler.createLocaleTask(plugin, () -> { +133 if (this.cantReadLocale || !this.autoDetectFromClient) { +134 return; +135 } +136 Bukkit.getOnlinePlayers().forEach(this::readPlayerLocale); +137 }, 30, 30); +138 +139 this.validNamePredicate = ACFBukkitUtil::isValidName; 140 141 registerDependency(plugin.getClass(), plugin); 142 registerDependency(Logger.class, plugin.getLogger()); diff --git a/docs/acf-bungee/co/aikar/commands/ACFBungeeUtil.html b/docs/acf-bungee/co/aikar/commands/ACFBungeeUtil.html index dca6230e..eb7dbdf4 100644 --- a/docs/acf-bungee/co/aikar/commands/ACFBungeeUtil.html +++ b/docs/acf-bungee/co/aikar/commands/ACFBungeeUtil.html @@ -76,7 +76,7 @@ loadScripts(document, 'script');

  • -
    public class ACFBungeeUtil +
    public class ACFBungeeUtil extends Object
    @@ -140,7 +140,7 @@ loadScripts(document, 'script');
    isChatColorAColor(net.md_5.bungee.api.ChatColor chatColor)
     
    static boolean
    - +
    isValidName(@Nullable String name)
     
    static String
    @@ -186,7 +186,7 @@ loadScripts(document, 'script');
  • COLOR_CHAR

    -
    public static final char COLOR_CHAR
    +
    public static final char COLOR_CHAR
    See Also:
    @@ -208,7 +208,7 @@ loadScripts(document, 'script');
  • ACFBungeeUtil

    -
    public ACFBungeeUtil()
    +
    public ACFBungeeUtil()
  • @@ -222,14 +222,14 @@ loadScripts(document, 'script');
  • color

    -
    public static String color(String message)
    +
    public static String color(String message)
  • sendMsg

    @Deprecated -public static void sendMsg(net.md_5.bungee.api.CommandSender player, +public static void sendMsg(net.md_5.bungee.api.CommandSender player, String message)
    Deprecated.
    Move to Message Keys on the CommandIssuer
    @@ -238,13 +238,13 @@ loadScripts(document, 'script');
  • removeColors

    -
    public static String removeColors(String msg)
    +
    public static String removeColors(String msg)
  • replaceChatString

    -
    public static String replaceChatString(String message, +
    public static String replaceChatString(String message, String replace, String with)
    @@ -252,7 +252,7 @@ loadScripts(document, 'script');
  • replaceChatString

    -
    public static String replaceChatString(String message, +
    public static String replaceChatString(String message, Pattern replace, String with)
    @@ -260,26 +260,26 @@ loadScripts(document, 'script');
  • getLastColors

    -
    public static String getLastColors(String input)
    +
    public static String getLastColors(String input)
  • isChatColorAColor

    -
    public static boolean isChatColorAColor(net.md_5.bungee.api.ChatColor chatColor)
    +
    public static boolean isChatColorAColor(net.md_5.bungee.api.ChatColor chatColor)
  • findPlayerSmart

    -
    public static net.md_5.bungee.api.connection.ProxiedPlayer findPlayerSmart(co.aikar.commands.CommandIssuer issuer, +
    public static net.md_5.bungee.api.connection.ProxiedPlayer findPlayerSmart(co.aikar.commands.CommandIssuer issuer, String search)
  • findPlayerSmart

    -
    public static net.md_5.bungee.api.connection.ProxiedPlayer findPlayerSmart(net.md_5.bungee.api.CommandSender requester, +
    public static net.md_5.bungee.api.connection.ProxiedPlayer findPlayerSmart(net.md_5.bungee.api.CommandSender requester, String search)
    Deprecated.
    Please move to the CommandIssuer version
    @@ -288,13 +288,14 @@ loadScripts(document, 'script');
  • isValidName

    -
    public static boolean isValidName(String name)
    +
    public static boolean isValidName(@Nullable + @Nullable String name)
  • validate

    -
    public static <T> T validate(T object, +
    public static <T> T validate(T object, String message, Object... values)
    diff --git a/docs/acf-bungee/co/aikar/commands/BungeeCommandManager.html b/docs/acf-bungee/co/aikar/commands/BungeeCommandManager.html index 760fdf00..0b1f1600 100644 --- a/docs/acf-bungee/co/aikar/commands/BungeeCommandManager.html +++ b/docs/acf-bungee/co/aikar/commands/BungeeCommandManager.html @@ -287,13 +287,13 @@ loadScripts(document, 'script');
  • getPlugin

    -
    public net.md_5.bungee.api.plugin.Plugin getPlugin()
    +
    public net.md_5.bungee.api.plugin.Plugin getPlugin()
  • getCommandContexts

    -
    public co.aikar.commands.CommandContexts<BungeeCommandExecutionContext> getCommandContexts()
    +
    public co.aikar.commands.CommandContexts<BungeeCommandExecutionContext> getCommandContexts()
    Specified by:
    getCommandContexts in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -303,7 +303,7 @@ loadScripts(document, 'script');
  • getCommandCompletions

    -
    public co.aikar.commands.CommandCompletions<BungeeCommandCompletionContext> getCommandCompletions()
    +
    public co.aikar.commands.CommandCompletions<BungeeCommandCompletionContext> getCommandCompletions()
    Specified by:
    getCommandCompletions in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -313,7 +313,7 @@ loadScripts(document, 'script');
  • getLocales

    - +
    Specified by:
    getLocales in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -323,13 +323,13 @@ loadScripts(document, 'script');
  • readLocale

    -
    public void readLocale(net.md_5.bungee.api.connection.ProxiedPlayer player)
    +
    public void readLocale(net.md_5.bungee.api.connection.ProxiedPlayer player)
  • registerCommand

    -
    public void registerCommand(co.aikar.commands.BaseCommand command)
    +
    public void registerCommand(co.aikar.commands.BaseCommand command)
    Specified by:
    registerCommand in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -339,25 +339,25 @@ loadScripts(document, 'script');
  • unregisterCommand

    -
    public void unregisterCommand(co.aikar.commands.BaseCommand command)
    +
    public void unregisterCommand(co.aikar.commands.BaseCommand command)
  • unregisterCommand

    -
    public void unregisterCommand(BungeeRootCommand command)
    +
    public void unregisterCommand(BungeeRootCommand command)
  • unregisterCommands

    -
    public void unregisterCommands()
    +
    public void unregisterCommands()
  • hasRegisteredCommands

    -
    public boolean hasRegisteredCommands()
    +
    public boolean hasRegisteredCommands()
    Specified by:
    hasRegisteredCommands in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -367,7 +367,7 @@ loadScripts(document, 'script');
  • isCommandIssuer

    -
    public boolean isCommandIssuer(Class<?> aClass)
    +
    public boolean isCommandIssuer(Class<?> aClass)
    Specified by:
    isCommandIssuer in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -377,7 +377,7 @@ loadScripts(document, 'script');
  • getCommandIssuer

    - +
    Specified by:
    getCommandIssuer in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -387,7 +387,7 @@ loadScripts(document, 'script');
  • createRootCommand

    -
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    +
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    Specified by:
    createRootCommand in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -397,7 +397,7 @@ loadScripts(document, 'script');
  • getRegisteredRootCommands

    -
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    +
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    Specified by:
    getRegisteredRootCommands in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    @@ -407,7 +407,7 @@ loadScripts(document, 'script');
  • createCommandContext

    -
    public BungeeCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, +
    public BungeeCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandParameter parameter, co.aikar.commands.CommandIssuer sender, List<String> args, @@ -422,7 +422,7 @@ loadScripts(document, 'script');
  • createCompletionContext

    -
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, +
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandIssuer sender, String input, String config, @@ -436,7 +436,7 @@ loadScripts(document, 'script');
  • createRegisteredCommand

    -
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, +
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, String cmdName, Method method, String prefSubCommand)
    @@ -449,7 +449,7 @@ loadScripts(document, 'script');
  • createConditionContext

    -
    public BungeeConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, +
    public BungeeConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, String config)
    Overrides:
    @@ -460,7 +460,7 @@ loadScripts(document, 'script');
  • log

    -
    public void log(co.aikar.commands.LogLevel level, +
    public void log(co.aikar.commands.LogLevel level, String message, Throwable throwable)
    @@ -472,7 +472,7 @@ loadScripts(document, 'script');
  • getCommandPrefix

    -
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    +
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    Overrides:
    getCommandPrefix in class co.aikar.commands.CommandManager<net.md_5.bungee.api.CommandSender,BungeeCommandIssuer,net.md_5.bungee.api.ChatColor,BungeeMessageFormatter,BungeeCommandExecutionContext,BungeeConditionContext>
    diff --git a/docs/acf-bungee/src-html/co/aikar/commands/ACFBungeeUtil.html b/docs/acf-bungee/src-html/co/aikar/commands/ACFBungeeUtil.html index 1cbcb0df..dd1b035f 100644 --- a/docs/acf-bungee/src-html/co/aikar/commands/ACFBungeeUtil.html +++ b/docs/acf-bungee/src-html/co/aikar/commands/ACFBungeeUtil.html @@ -40,141 +40,140 @@ 027import net.md_5.bungee.api.CommandSender; 028import net.md_5.bungee.api.ProxyServer; 029import net.md_5.bungee.api.connection.ProxiedPlayer; -030 -031import java.util.ArrayList; -032import java.util.List; -033import java.util.regex.Pattern; -034import java.util.stream.Collectors; -035 -036public class ACFBungeeUtil { -037 -038 public static String color(String message) { -039 return ChatColor.translateAlternateColorCodes('&', message); -040 } -041 -042 /** -043 * Move to Message Keys on the CommandIssuer -044 * -045 * @deprecated -046 */ -047 @Deprecated -048 public static void sendMsg(CommandSender player, String message) { -049 message = color(message); -050 for (String msg : ACFPatterns.NEWLINE.split(message)) { -051 player.sendMessage(msg); -052 } -053 } -054 -055 public static String removeColors(String msg) { -056 return ChatColor.stripColor(color(msg)); -057 } -058 -059 public static String replaceChatString(String message, String replace, String with) { -060 return replaceChatString(message, Pattern.compile(Pattern.quote(replace), Pattern.CASE_INSENSITIVE), with); -061 } -062 -063 public static String replaceChatString(String message, Pattern replace, String with) { -064 final String[] split = replace.split(message + "1"); -065 -066 if (split.length < 2) { -067 return replace.matcher(message).replaceAll(with); -068 } -069 message = split[0]; -070 -071 for (int i = 1; i < split.length; i++) { -072 final String prev = getLastColors(message); -073 message += with + prev + split[i]; -074 } -075 return message.substring(0, message.length() - 1); -076 } -077 -078 //Imported from org.bukkit.ChatColor -079 -080 public static final char COLOR_CHAR = '\u00A7'; -081 -082 public static String getLastColors(String input) { -083 StringBuilder result = new StringBuilder(); -084 int length = input.length(); -085 -086 // Search backwards from the end as it is faster -087 for (int index = length - 1; index > -1; index--) { -088 char section = input.charAt(index); -089 if (section == COLOR_CHAR && index < length - 1) { -090 char c = input.charAt(index + 1); -091 ChatColor color = ChatColor.getByChar(c); -092 -093 if (color != null) { -094 result.insert(0, color.toString()); -095 -096 // Once we find a color or reset we can stop searching -097 if (isChatColorAColor(color) || color.equals(ChatColor.RESET)) { -098 break; -099 } -100 } -101 } -102 } -103 return result.toString(); -104 } -105 -106 public static boolean isChatColorAColor(ChatColor chatColor) { -107 return chatColor != ChatColor.MAGIC && chatColor != ChatColor.BOLD -108 && chatColor != ChatColor.STRIKETHROUGH && chatColor != ChatColor.UNDERLINE -109 && chatColor != ChatColor.ITALIC; -110 } -111 +030import org.jetbrains.annotations.Nullable; +031 +032import java.util.ArrayList; +033import java.util.List; +034import java.util.regex.Pattern; +035import java.util.stream.Collectors; +036 +037public class ACFBungeeUtil { +038 +039 public static String color(String message) { +040 return ChatColor.translateAlternateColorCodes('&', message); +041 } +042 +043 /** +044 * Move to Message Keys on the CommandIssuer +045 * +046 * @deprecated +047 */ +048 @Deprecated +049 public static void sendMsg(CommandSender player, String message) { +050 message = color(message); +051 for (String msg : ACFPatterns.NEWLINE.split(message)) { +052 player.sendMessage(msg); +053 } +054 } +055 +056 public static String removeColors(String msg) { +057 return ChatColor.stripColor(color(msg)); +058 } +059 +060 public static String replaceChatString(String message, String replace, String with) { +061 return replaceChatString(message, Pattern.compile(Pattern.quote(replace), Pattern.CASE_INSENSITIVE), with); +062 } +063 +064 public static String replaceChatString(String message, Pattern replace, String with) { +065 final String[] split = replace.split(message + "1"); +066 +067 if (split.length < 2) { +068 return replace.matcher(message).replaceAll(with); +069 } +070 message = split[0]; +071 +072 for (int i = 1; i < split.length; i++) { +073 final String prev = getLastColors(message); +074 message += with + prev + split[i]; +075 } +076 return message.substring(0, message.length() - 1); +077 } +078 +079 //Imported from org.bukkit.ChatColor +080 +081 public static final char COLOR_CHAR = '\u00A7'; +082 +083 public static String getLastColors(String input) { +084 StringBuilder result = new StringBuilder(); +085 int length = input.length(); +086 +087 // Search backwards from the end as it is faster +088 for (int index = length - 1; index > -1; index--) { +089 char section = input.charAt(index); +090 if (section == COLOR_CHAR && index < length - 1) { +091 char c = input.charAt(index + 1); +092 ChatColor color = ChatColor.getByChar(c); +093 +094 if (color != null) { +095 result.insert(0, color.toString()); +096 +097 // Once we find a color or reset we can stop searching +098 if (isChatColorAColor(color) || color.equals(ChatColor.RESET)) { +099 break; +100 } +101 } +102 } +103 } +104 return result.toString(); +105 } +106 +107 public static boolean isChatColorAColor(ChatColor chatColor) { +108 return chatColor != ChatColor.MAGIC && chatColor != ChatColor.BOLD +109 && chatColor != ChatColor.STRIKETHROUGH && chatColor != ChatColor.UNDERLINE +110 && chatColor != ChatColor.ITALIC; +111 } 112 -113 public static ProxiedPlayer findPlayerSmart(CommandIssuer issuer, String search) { -114 CommandSender requester = issuer.getIssuer(); -115 String name = ACFUtil.replace(search, ":confirm", ""); -116 -117 List<ProxiedPlayer> matches = new ArrayList<>(ProxyServer.getInstance().matchPlayer(name)); -118 -119 if (matches.size() > 1) { -120 String allMatches = matches.stream().map(ProxiedPlayer::getName).collect(Collectors.joining(", ")); -121 issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, -122 "{search}", name, "{all}", allMatches); -123 return null; -124 } -125 -126 if (matches.isEmpty()) { -127 if (!isValidName(name)) { -128 issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); -129 return null; -130 } -131 issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, -132 "{search}", name); -133 return null; -134 } -135 -136 return matches.get(0); -137 } -138 -139 /** -140 * Please move to the CommandIssuer version -141 * -142 * @deprecated -143 */ -144 public static ProxiedPlayer findPlayerSmart(CommandSender requester, String search) { -145 CommandManager manager = CommandManager.getCurrentCommandManager(); -146 if (manager != null) { -147 return findPlayerSmart(manager.getCommandIssuer(requester), search); -148 } -149 throw new IllegalStateException("You may not use the ACFBungeeUtil#findPlayerSmart(CommandSender) async to the command execution."); -150 } -151 -152 public static boolean isValidName(String name) { -153 return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); -154 } -155 -156 public static <T> T validate(T object, String message, Object... values) { -157 if (object == null) { -158 throw new NullPointerException(String.format(message, values)); -159 } -160 return object; -161 } -162 -163 -164} +113 +114 public static ProxiedPlayer findPlayerSmart(CommandIssuer issuer, String search) { +115 CommandSender requester = issuer.getIssuer(); +116 String name = ACFUtil.replace(search, ":confirm", ""); +117 +118 List<ProxiedPlayer> matches = new ArrayList<>(ProxyServer.getInstance().matchPlayer(name)); +119 +120 if (matches.size() > 1) { +121 String allMatches = matches.stream().map(ProxiedPlayer::getName).collect(Collectors.joining(", ")); +122 issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, +123 "{search}", name, "{all}", allMatches); +124 return null; +125 } +126 +127 if (matches.isEmpty()) { +128 if (!issuer.getManager().isValidName(name)) { +129 issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name); +130 return null; +131 } +132 issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, +133 "{search}", name); +134 return null; +135 } +136 +137 return matches.get(0); +138 } +139 +140 /** +141 * Please move to the CommandIssuer version +142 * +143 * @deprecated +144 */ +145 public static ProxiedPlayer findPlayerSmart(CommandSender requester, String search) { +146 CommandManager manager = CommandManager.getCurrentCommandManager(); +147 if (manager != null) { +148 return findPlayerSmart(manager.getCommandIssuer(requester), search); +149 } +150 throw new IllegalStateException("You may not use the ACFBungeeUtil#findPlayerSmart(CommandSender) async to the command execution."); +151 } +152 +153 public static boolean isValidName(@Nullable String name) { +154 return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches(); +155 } +156 +157 public static <T> T validate(T object, String message, Object... values) { +158 if (object == null) { +159 throw new NullPointerException(String.format(message, values)); +160 } +161 return object; +162 } +163} diff --git a/docs/acf-bungee/src-html/co/aikar/commands/BungeeCommandManager.html b/docs/acf-bungee/src-html/co/aikar/commands/BungeeCommandManager.html index 18211de0..298eb2dd 100644 --- a/docs/acf-bungee/src-html/co/aikar/commands/BungeeCommandManager.html +++ b/docs/acf-bungee/src-html/co/aikar/commands/BungeeCommandManager.html @@ -79,163 +79,165 @@ 066 067 getLocales(); // auto load locales 068 -069 plugin.getProxy().getPluginManager().registerListener(plugin, new ACFBungeeListener(this, plugin)); +069 this.validNamePredicate = ACFBungeeUtil::isValidName; 070 -071 //BungeeCord has no event for listening for client setting changes -072 plugin.getProxy().getScheduler().schedule(plugin, () -> { -073 ProxyServer.getInstance().getPlayers().forEach(this::readLocale); -074 }, 5, 5, TimeUnit.SECONDS); -075 -076 // TODO more default dependencies for bungee -077 registerDependency(plugin.getClass(), plugin); -078 registerDependency(Plugin.class, plugin); -079 registerDependency(PluginDescription.class, plugin.getDescription()); -080 } -081 -082 public Plugin getPlugin() { -083 return this.plugin; -084 } -085 -086 @Override -087 public synchronized CommandContexts<BungeeCommandExecutionContext> getCommandContexts() { -088 if (this.contexts == null) { -089 this.contexts = new BungeeCommandContexts(this); -090 } -091 return contexts; -092 } -093 -094 @Override -095 public synchronized CommandCompletions<BungeeCommandCompletionContext> getCommandCompletions() { -096 if (this.completions == null) { -097 this.completions = new BungeeCommandCompletions(this); -098 } -099 return completions; -100 } -101 -102 @Override -103 public BungeeLocales getLocales() { -104 if (this.locales == null) { -105 this.locales = new BungeeLocales(this); -106 this.locales.loadLanguages(); -107 } -108 return locales; -109 } -110 -111 public void readLocale(ProxiedPlayer player) { -112 if (!player.isConnected()) { -113 return; -114 } -115 -116 //This can be null if we didn't receive a settings packet -117 Locale locale = player.getLocale(); -118 if (locale != null) { -119 setIssuerLocale(player, player.getLocale()); -120 } -121 } -122 -123 @Override -124 public void registerCommand(BaseCommand command) { -125 command.onRegister(this); -126 for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) { -127 String commandName = entry.getKey().toLowerCase(Locale.ENGLISH); -128 BungeeRootCommand bungeeCommand = (BungeeRootCommand) entry.getValue(); -129 if (!bungeeCommand.isRegistered) { -130 this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, bungeeCommand); -131 } -132 bungeeCommand.isRegistered = true; -133 registeredCommands.put(commandName, bungeeCommand); -134 } -135 } -136 -137 public void unregisterCommand(BaseCommand command) { -138 for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) { -139 String commandName = entry.getKey().toLowerCase(Locale.ENGLISH); -140 BungeeRootCommand bungeeCommand = (BungeeRootCommand) entry.getValue(); -141 bungeeCommand.getSubCommands().values().removeAll(command.subCommands.values()); -142 if (bungeeCommand.getSubCommands().isEmpty() && bungeeCommand.isRegistered) { -143 unregisterCommand(bungeeCommand); -144 bungeeCommand.isRegistered = false; -145 registeredCommands.remove(commandName); -146 } -147 } -148 } -149 -150 public void unregisterCommand(BungeeRootCommand command) { -151 this.plugin.getProxy().getPluginManager().unregisterCommand(command); -152 } -153 -154 public void unregisterCommands() { -155 for (Map.Entry<String, BungeeRootCommand> entry : registeredCommands.entrySet()) { -156 unregisterCommand(entry.getValue()); -157 } -158 } -159 -160 @Override -161 public boolean hasRegisteredCommands() { -162 return !registeredCommands.isEmpty(); -163 } -164 -165 @Override -166 public boolean isCommandIssuer(Class<?> aClass) { -167 return CommandSender.class.isAssignableFrom(aClass); -168 } -169 -170 @Override -171 public BungeeCommandIssuer getCommandIssuer(Object issuer) { -172 if (!(issuer instanceof CommandSender)) { -173 throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer."); -174 } -175 return new BungeeCommandIssuer(this, (CommandSender) issuer); -176 } -177 -178 @Override -179 public RootCommand createRootCommand(String cmd) { -180 return new BungeeRootCommand(this, cmd); -181 } -182 -183 @Override -184 public Collection<RootCommand> getRegisteredRootCommands() { -185 return Collections.unmodifiableCollection(registeredCommands.values()); -186 } -187 -188 @Override -189 public BungeeCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) { -190 return new BungeeCommandExecutionContext(command, parameter, (BungeeCommandIssuer) sender, args, i, passedArgs); -191 } -192 -193 @Override -194 public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) { -195 return new BungeeCommandCompletionContext(command, (BungeeCommandIssuer) sender, input, config, args); -196 } -197 -198 @Override -199 public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) { -200 return new RegisteredCommand(command, cmdName, method, prefSubCommand); -201 } -202 -203 @Override -204 public BungeeConditionContext createConditionContext(CommandIssuer issuer, String config) { -205 return new BungeeConditionContext((BungeeCommandIssuer) issuer, config); -206 } -207 -208 @Override -209 public void log(LogLevel level, String message, Throwable throwable) { -210 Logger logger = this.plugin.getLogger(); -211 Level logLevel = level == LogLevel.INFO ? Level.INFO : Level.SEVERE; -212 logger.log(logLevel, LogLevel.LOG_PREFIX + message); -213 if (throwable != null) { -214 for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) { -215 logger.log(logLevel, LogLevel.LOG_PREFIX + line); -216 } -217 } -218 } -219 -220 -221 @Override -222 public String getCommandPrefix(CommandIssuer issuer) { -223 return issuer.isPlayer() ? "/" : ""; -224 } -225} +071 plugin.getProxy().getPluginManager().registerListener(plugin, new ACFBungeeListener(this, plugin)); +072 +073 //BungeeCord has no event for listening for client setting changes +074 plugin.getProxy().getScheduler().schedule(plugin, () -> { +075 ProxyServer.getInstance().getPlayers().forEach(this::readLocale); +076 }, 5, 5, TimeUnit.SECONDS); +077 +078 // TODO more default dependencies for bungee +079 registerDependency(plugin.getClass(), plugin); +080 registerDependency(Plugin.class, plugin); +081 registerDependency(PluginDescription.class, plugin.getDescription()); +082 } +083 +084 public Plugin getPlugin() { +085 return this.plugin; +086 } +087 +088 @Override +089 public synchronized CommandContexts<BungeeCommandExecutionContext> getCommandContexts() { +090 if (this.contexts == null) { +091 this.contexts = new BungeeCommandContexts(this); +092 } +093 return contexts; +094 } +095 +096 @Override +097 public synchronized CommandCompletions<BungeeCommandCompletionContext> getCommandCompletions() { +098 if (this.completions == null) { +099 this.completions = new BungeeCommandCompletions(this); +100 } +101 return completions; +102 } +103 +104 @Override +105 public BungeeLocales getLocales() { +106 if (this.locales == null) { +107 this.locales = new BungeeLocales(this); +108 this.locales.loadLanguages(); +109 } +110 return locales; +111 } +112 +113 public void readLocale(ProxiedPlayer player) { +114 if (!player.isConnected()) { +115 return; +116 } +117 +118 //This can be null if we didn't receive a settings packet +119 Locale locale = player.getLocale(); +120 if (locale != null) { +121 setIssuerLocale(player, player.getLocale()); +122 } +123 } +124 +125 @Override +126 public void registerCommand(BaseCommand command) { +127 command.onRegister(this); +128 for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) { +129 String commandName = entry.getKey().toLowerCase(Locale.ENGLISH); +130 BungeeRootCommand bungeeCommand = (BungeeRootCommand) entry.getValue(); +131 if (!bungeeCommand.isRegistered) { +132 this.plugin.getProxy().getPluginManager().registerCommand(this.plugin, bungeeCommand); +133 } +134 bungeeCommand.isRegistered = true; +135 registeredCommands.put(commandName, bungeeCommand); +136 } +137 } +138 +139 public void unregisterCommand(BaseCommand command) { +140 for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) { +141 String commandName = entry.getKey().toLowerCase(Locale.ENGLISH); +142 BungeeRootCommand bungeeCommand = (BungeeRootCommand) entry.getValue(); +143 bungeeCommand.getSubCommands().values().removeAll(command.subCommands.values()); +144 if (bungeeCommand.getSubCommands().isEmpty() && bungeeCommand.isRegistered) { +145 unregisterCommand(bungeeCommand); +146 bungeeCommand.isRegistered = false; +147 registeredCommands.remove(commandName); +148 } +149 } +150 } +151 +152 public void unregisterCommand(BungeeRootCommand command) { +153 this.plugin.getProxy().getPluginManager().unregisterCommand(command); +154 } +155 +156 public void unregisterCommands() { +157 for (Map.Entry<String, BungeeRootCommand> entry : registeredCommands.entrySet()) { +158 unregisterCommand(entry.getValue()); +159 } +160 } +161 +162 @Override +163 public boolean hasRegisteredCommands() { +164 return !registeredCommands.isEmpty(); +165 } +166 +167 @Override +168 public boolean isCommandIssuer(Class<?> aClass) { +169 return CommandSender.class.isAssignableFrom(aClass); +170 } +171 +172 @Override +173 public BungeeCommandIssuer getCommandIssuer(Object issuer) { +174 if (!(issuer instanceof CommandSender)) { +175 throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer."); +176 } +177 return new BungeeCommandIssuer(this, (CommandSender) issuer); +178 } +179 +180 @Override +181 public RootCommand createRootCommand(String cmd) { +182 return new BungeeRootCommand(this, cmd); +183 } +184 +185 @Override +186 public Collection<RootCommand> getRegisteredRootCommands() { +187 return Collections.unmodifiableCollection(registeredCommands.values()); +188 } +189 +190 @Override +191 public BungeeCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) { +192 return new BungeeCommandExecutionContext(command, parameter, (BungeeCommandIssuer) sender, args, i, passedArgs); +193 } +194 +195 @Override +196 public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) { +197 return new BungeeCommandCompletionContext(command, (BungeeCommandIssuer) sender, input, config, args); +198 } +199 +200 @Override +201 public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) { +202 return new RegisteredCommand(command, cmdName, method, prefSubCommand); +203 } +204 +205 @Override +206 public BungeeConditionContext createConditionContext(CommandIssuer issuer, String config) { +207 return new BungeeConditionContext((BungeeCommandIssuer) issuer, config); +208 } +209 +210 @Override +211 public void log(LogLevel level, String message, Throwable throwable) { +212 Logger logger = this.plugin.getLogger(); +213 Level logLevel = level == LogLevel.INFO ? Level.INFO : Level.SEVERE; +214 logger.log(logLevel, LogLevel.LOG_PREFIX + message); +215 if (throwable != null) { +216 for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) { +217 logger.log(logLevel, LogLevel.LOG_PREFIX + line); +218 } +219 } +220 } +221 +222 +223 @Override +224 public String getCommandPrefix(CommandIssuer issuer) { +225 return issuer.isPlayer() ? "/" : ""; +226 } +227} diff --git a/docs/acf-core/co/aikar/commands/CommandManager.html b/docs/acf-core/co/aikar/commands/CommandManager.html index 5d7d9034..5fab8b89 100644 --- a/docs/acf-core/co/aikar/commands/CommandManager.html +++ b/docs/acf-core/co/aikar/commands/CommandManager.html @@ -76,7 +76,7 @@ loadScripts(document, 'script');

  • -
    public abstract class CommandManager<IT,I extends CommandIssuer,FT,MF extends MessageFormatter<FT>,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>> +
    public abstract class CommandManager<IT,I extends CommandIssuer,FT,MF extends MessageFormatter<FT>,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>> extends Object
    @@ -129,6 +129,9 @@ loadScripts(document, 'script');
    protected boolean
     
    +
    protected Predicate<String>
    + +
     
  • @@ -311,29 +314,35 @@ loadScripts(document, 'script');
    Gets a list of all currently supported languages for this manager.
    -
    protected boolean
    -
    handleUncaughtException(BaseCommand scope, +
    @NotNull Predicate<String>
    + +
     
    +
    protected boolean
    + -
     
    -
    boolean
    -
    hasPermission(CommandIssuer issuer, - String permission)
     
    boolean
    -
    hasPermission(CommandIssuer issuer, - Set<String> permissions)
    +
    hasPermission(CommandIssuer issuer, + String permission)
     
    -
    abstract boolean
    - -
     
    -
    abstract boolean
    - -
     
    boolean
    - +
    hasPermission(CommandIssuer issuer, + Set<String> permissions)
    +
     
    +
    abstract boolean
    + +
     
    +
    abstract boolean
    + +
     
    +
    boolean
    + +
     
    +
    boolean
    +
    isValidName(@NotNull String name)
     
    void
    log(co.aikar.commands.LogLevel level, @@ -434,12 +443,15 @@ loadScripts(document, 'script');
    setIssuerLocale(IT issuer, Locale locale)
     
    -
    boolean
    -
    usePerIssuerLocale(boolean setting)
    +
    void
    +
    setValidNamePredicate(@NotNull Predicate<String> isValidName)
     
    boolean
    - +
    usePerIssuerLocale(boolean setting)
     
    +
    boolean
    + +
     
    @@ -460,79 +472,85 @@ loadScripts(document, 'script');
  • rootCommands

    - +
  • replacements

    - +
  • conditions

    - +
  • defaultExceptionHandler

    - +
  • dependencies

    -
    protected co.aikar.util.Table<Class<?>,String,Object> dependencies
    +
    protected co.aikar.util.Table<Class<?>,String,Object> dependencies
  • helpFormatter

    - +
  • usePerIssuerLocale

    -
    protected boolean usePerIssuerLocale
    +
    protected boolean usePerIssuerLocale
  • localeChangedCallbacks

    - +
  • supportedLanguages

    - + +
    +
  • +
  • +
    +

    validNamePredicate

    +
  • formatters

    - +
  • defaultFormatter

    -
    protected MF extends MessageFormatter<FT> defaultFormatter
    +
    protected MF extends MessageFormatter<FT> defaultFormatter
  • defaultHelpPerPage

    -
    protected int defaultHelpPerPage
    +
    protected int defaultHelpPerPage
  • issuersLocale

    - +
  • @@ -546,7 +564,7 @@ loadScripts(document, 'script');
  • CommandManager

    -
    public CommandManager()
    +
    public CommandManager()
  • @@ -560,45 +578,45 @@ loadScripts(document, 'script');
  • getCurrentCommandOperationContext

    - +
  • getCurrentCommandIssuer

    - +
  • getCurrentCommandManager

    - +
  • setFormat

    -
    public MF setFormat(MessageType type, +
    public MF setFormat(MessageType type, MF formatter)
  • getFormat

    -
    public MF getFormat(MessageType type)
    +
    public MF getFormat(MessageType type)
  • setFormat

    -
    public void setFormat(MessageType type, +
    public void setFormat(MessageType type, FT... colors)
  • setFormat

    -
    public void setFormat(MessageType type, +
    public void setFormat(MessageType type, int i, FT color)
    @@ -606,25 +624,25 @@ loadScripts(document, 'script');
  • getDefaultFormatter

    - +
  • setDefaultFormatter

    -
    public void setDefaultFormatter(MF defaultFormatter)
    +
    public void setDefaultFormatter(MF defaultFormatter)
  • getCommandConditions

    - +
  • getCommandContexts

    -
    public abstract CommandContexts<?> getCommandContexts()
    +
    public abstract CommandContexts<?> getCommandContexts()
    Gets the command contexts manager
    Returns:
    @@ -635,7 +653,7 @@ loadScripts(document, 'script');
  • getCommandCompletions

    - +
    Gets the command completions manager
    Returns:
    @@ -647,7 +665,7 @@ loadScripts(document, 'script');

    generateCommandHelp

    @Deprecated -public CommandHelp generateCommandHelp(@NotNull +public CommandHelp generateCommandHelp(@NotNull @NotNull String command)
    Deprecated.
    Unstable API
    @@ -658,7 +676,7 @@ loadScripts(document, 'script');

    generateCommandHelp

    @Deprecated -public CommandHelp generateCommandHelp(CommandIssuer issuer, +public CommandHelp generateCommandHelp(CommandIssuer issuer, @NotNull @NotNull String command)
    Deprecated. @@ -670,7 +688,7 @@ loadScripts(document, 'script');

    generateCommandHelp

    +public CommandHelp generateCommandHelp()
    Deprecated.
    Unstable API
    @@ -680,7 +698,7 @@ loadScripts(document, 'script');

    generateCommandHelp

    Deprecated.
    Unstable API
    @@ -691,7 +709,7 @@ loadScripts(document, 'script');

    getDefaultHelpPerPage

    +public int getDefaultHelpPerPage()
    Deprecated.
    Unstable API
    @@ -701,7 +719,7 @@ loadScripts(document, 'script');

    setDefaultHelpPerPage

    @Deprecated -public void setDefaultHelpPerPage(int defaultHelpPerPage)
    +public void setDefaultHelpPerPage(int defaultHelpPerPage)
    Deprecated.
    Unstable API
    @@ -711,7 +729,7 @@ loadScripts(document, 'script');

    setHelpFormatter

    @Deprecated -public void setHelpFormatter(CommandHelpFormatter helpFormatter)
    +public void setHelpFormatter(CommandHelpFormatter helpFormatter)
  • Deprecated.
    Unstable API
    @@ -721,7 +739,7 @@ loadScripts(document, 'script');

    getHelpFormatter

    +public CommandHelpFormatter getHelpFormatter()
    Deprecated.
    Unstable API
    @@ -730,7 +748,7 @@ loadScripts(document, 'script');
  • registerCommand

    -
    public abstract void registerCommand(BaseCommand command)
    +
    public abstract void registerCommand(BaseCommand command)
    Registers a command with ACF
    Parameters:
    @@ -741,31 +759,31 @@ loadScripts(document, 'script');
  • hasRegisteredCommands

    -
    public abstract boolean hasRegisteredCommands()
    +
    public abstract boolean hasRegisteredCommands()
  • isCommandIssuer

    -
    public abstract boolean isCommandIssuer(Class<?> type)
    +
    public abstract boolean isCommandIssuer(Class<?> type)
  • getCommandIssuer

    -
    public abstract I getCommandIssuer(Object issuer)
    +
    public abstract I getCommandIssuer(Object issuer)
  • createRootCommand

    -
    public abstract RootCommand createRootCommand(String cmd)
    +
    public abstract RootCommand createRootCommand(String cmd)
  • getLocales

    -
    public abstract Locales getLocales()
    +
    public abstract Locales getLocales()
    Returns a Locales Manager to add and modify language tables for your commands.
    Returns:
    @@ -775,26 +793,47 @@ loadScripts(document, 'script');
  • usingPerIssuerLocale

    -
    public boolean usingPerIssuerLocale()
    +
    public boolean usingPerIssuerLocale()
  • usePerIssuerLocale

    -
    public boolean usePerIssuerLocale(boolean setting)
    +
    public boolean usePerIssuerLocale(boolean setting)
    +
    +
  • +
  • +
    +

    isValidName

    +
    public boolean isValidName(@NotNull + @NotNull String name)
    +
    +
  • +
  • +
    +

    getValidNamePredicate

    +
    @NotNull +public @NotNull Predicate<String> getValidNamePredicate()
    +
    +
  • +
  • +
    +

    setValidNamePredicate

    +
    public void setValidNamePredicate(@NotNull + @NotNull Predicate<String> isValidName)
  • createConditionContext

    -
  • createCommandContext

    -
    public abstract CommandExecutionContext createCommandContext(RegisteredCommand command, +
    public abstract CommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, @@ -805,7 +844,7 @@ loadScripts(document, 'script');
  • createCompletionContext

    -
    public abstract CommandCompletionContext createCompletionContext(RegisteredCommand command, +
    public abstract CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, @@ -815,7 +854,7 @@ loadScripts(document, 'script');
  • log

    -
    public abstract void log(co.aikar.commands.LogLevel level, +
    public abstract void log(co.aikar.commands.LogLevel level, String message, Throwable throwable)
    @@ -823,14 +862,14 @@ loadScripts(document, 'script');
  • log

    -
    public void log(co.aikar.commands.LogLevel level, +
    public void log(co.aikar.commands.LogLevel level, String message)
  • getCommandReplacements

    - +
    Lets you add custom string replacements that can be applied to annotation values, to reduce duplication/repetition of common values such as permission nodes and command prefixes.

    @@ -846,41 +885,41 @@ loadScripts(document, 'script');

  • hasPermission

    -
    public boolean hasPermission(CommandIssuer issuer, +
    public boolean hasPermission(CommandIssuer issuer, Set<String> permissions)
  • hasPermission

    -
    public boolean hasPermission(CommandIssuer issuer, +
    public boolean hasPermission(CommandIssuer issuer, String permission)
  • getRootCommand

    -
    public RootCommand getRootCommand(@NotNull +
    public RootCommand getRootCommand(@NotNull @NotNull String cmd)
  • obtainRootCommand

    -
    public RootCommand obtainRootCommand(@NotNull +
    public RootCommand obtainRootCommand(@NotNull @NotNull String cmd)
  • getRegisteredRootCommands

    - +
  • createRegisteredCommand

    -
    public RegisteredCommand createRegisteredCommand(BaseCommand command, +
    public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand)
    @@ -889,7 +928,7 @@ loadScripts(document, 'script');
  • setDefaultExceptionHandler

    -
    public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler)
    +
    public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler)
    Sets the default ExceptionHandler that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered.
    Parameters:
    @@ -900,7 +939,7 @@ loadScripts(document, 'script');
  • setDefaultExceptionHandler

    -
    public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler, +
    public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler, boolean logExceptions)
    Sets the default ExceptionHandler that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered, and lets you control if ACF should also log the exception still.

    @@ -915,13 +954,13 @@ loadScripts(document, 'script');

  • isLoggingUnhandledExceptions

    -
    public boolean isLoggingUnhandledExceptions()
    +
    public boolean isLoggingUnhandledExceptions()
  • getDefaultExceptionHandler

    - +
    Gets the current default exception handler, might be null.
    Returns:
    @@ -932,7 +971,7 @@ loadScripts(document, 'script');
  • handleUncaughtException

    -
    protected boolean handleUncaughtException(BaseCommand scope, +
    protected boolean handleUncaughtException(BaseCommand scope, RegisteredCommand registeredCommand, CommandIssuer sender, List<String> args, @@ -942,7 +981,7 @@ loadScripts(document, 'script');
  • sendMessage

    -
    public void sendMessage(IT issuerArg, +
    public void sendMessage(IT issuerArg, MessageType type, co.aikar.locales.MessageKeyProvider key, String... replacements)
    @@ -951,7 +990,7 @@ loadScripts(document, 'script');
  • sendMessage

    -
    public void sendMessage(CommandIssuer issuer, +
    public void sendMessage(CommandIssuer issuer, MessageType type, co.aikar.locales.MessageKeyProvider key, String... replacements)
    @@ -960,7 +999,7 @@ loadScripts(document, 'script');
  • formatMessage

    -
    public String formatMessage(CommandIssuer issuer, +
    public String formatMessage(CommandIssuer issuer, MessageType type, co.aikar.locales.MessageKeyProvider key, String... replacements)
    @@ -969,13 +1008,13 @@ loadScripts(document, 'script');
  • onLocaleChange

    -
    public void onLocaleChange(IssuerLocaleChangedCallback<I> onChange)
    +
    public void onLocaleChange(IssuerLocaleChangedCallback<I> onChange)
  • notifyLocaleChange

    -
    public void notifyLocaleChange(I issuer, +
    public void notifyLocaleChange(I issuer, Locale oldLocale, Locale newLocale)
    @@ -983,20 +1022,20 @@ loadScripts(document, 'script');
  • setIssuerLocale

    -
    public Locale setIssuerLocale(IT issuer, +
    public Locale setIssuerLocale(IT issuer, Locale locale)
  • getIssuerLocale

    - +
  • getSupportedLanguages

    - +
    Gets a list of all currently supported languages for this manager. These locales will be automatically loaded from
    @@ -1007,7 +1046,7 @@ loadScripts(document, 'script');
  • addSupportedLanguage

    -
    public void addSupportedLanguage(Locale locale)
    +
    public void addSupportedLanguage(Locale locale)
    Adds a new locale to the list of automatic Locales to load Message Bundles for. All bundles loaded under the previous supported languages will now automatically load for this new locale too.
    @@ -1019,7 +1058,7 @@ loadScripts(document, 'script');
  • registerDependency

    -
    public <T> void registerDependency(Class<? extends T> clazz, +
    public <T> void registerDependency(Class<? extends T> clazz, T instance)
    Registers an instance of a class to be registered as an injectable dependency.
    The command manager will attempt to inject all fields in a command class that are annotated with @@ -1036,7 +1075,7 @@ loadScripts(document, 'script');
  • registerDependency

    -
    public <T> void registerDependency(Class<? extends T> clazz, +
    public <T> void registerDependency(Class<? extends T> clazz, String key, T instance)
    Registers an instance of a class to be registered as an injectable dependency.
    @@ -1056,7 +1095,7 @@ loadScripts(document, 'script');

    enableUnstableAPI

    @Deprecated -public void enableUnstableAPI(String api)
    +public void enableUnstableAPI(String api)
    Deprecated.
    Use this with caution! If you enable and use Unstable API's, your next compile using ACF may require you to update your implementation to those unstable API's
    @@ -1066,7 +1105,7 @@ loadScripts(document, 'script');
  • getCommandPrefix

    - +
  • diff --git a/docs/acf-core/index-all.html b/docs/acf-core/index-all.html index 93746157..ff7a5b6e 100644 --- a/docs/acf-core/index-all.html +++ b/docs/acf-core/index-all.html @@ -908,6 +908,8 @@ loadScripts(document, 'script');
     
    getUsage() - Method in interface co.aikar.commands.RootCommand
     
    +
    getValidNamePredicate() - Method in class co.aikar.commands.CommandManager
    +
     
    getValues() - Method in class co.aikar.commands.CommandParameter
     
    GREEK - Static variable in class co.aikar.commands.Locales
    @@ -1152,6 +1154,8 @@ loadScripts(document, 'script');
  • isTruthy(String) - Static method in class co.aikar.commands.ACFUtil
     
    +
    isValidName(String) - Method in class co.aikar.commands.CommandManager
    +
     
    ITALIAN - Static variable in class co.aikar.commands.Locales
     
    @@ -1792,6 +1796,8 @@ loadScripts(document, 'script');
     
    setSyntax(String) - Method in class co.aikar.commands.CommandParameter
     
    +
    setValidNamePredicate(Predicate<String>) - Method in class co.aikar.commands.CommandManager
    +
     
    setValues(String[]) - Method in class co.aikar.commands.CommandParameter
     
    shouldShow() - Method in class co.aikar.commands.HelpEntry
    @@ -1924,6 +1930,8 @@ loadScripts(document, 'script');
     
    validateCondition(ConditionContext<I>, CEC, P) - Method in interface co.aikar.commands.CommandConditions.ParameterCondition
     
    +
    validNamePredicate - Variable in class co.aikar.commands.CommandManager
    +
     
    value() - Element in annotation type co.aikar.commands.annotation.CommandAlias
     
    value() - Element in annotation type co.aikar.commands.annotation.CommandCompletion
    diff --git a/docs/acf-core/member-search-index.js b/docs/acf-core/member-search-index.js index 3195e93a..9f0ec7b2 100644 --- a/docs/acf-core/member-search-index.js +++ b/docs/acf-core/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"addAll(T[], T...)","u":"addAll(T[],T...)"},{"p":"co.aikar.commands","c":"Locales","l":"addBundleClassLoader(ClassLoader)","u":"addBundleClassLoader(java.lang.ClassLoader)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"addCauseMethodName(String)","u":"addCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChildShared(List, SetMultimap, BaseCommand)","u":"addChildShared(java.util.List,com.google.common.collect.SetMultimap,co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"CommandConditions","l":"addCondition(Class

    , String, CommandConditions.ParameterCondition)","u":"addCondition(java.lang.Class,java.lang.String,co.aikar.commands.CommandConditions.ParameterCondition)"},{"p":"co.aikar.commands","c":"CommandConditions","l":"addCondition(String, CommandConditions.Condition)","u":"addCondition(java.lang.String,co.aikar.commands.CommandConditions.Condition)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessage(Locale, MessageKeyProvider, String)","u":"addMessage(java.util.Locale,co.aikar.locales.MessageKeyProvider,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(ClassLoader, String, Locale)","u":"addMessageBundle(java.lang.ClassLoader,java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(String, Locale)","u":"addMessageBundle(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundles(String...)","u":"addMessageBundles(java.lang.String...)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessages(Locale, Map)","u":"addMessages(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageStrings(Locale, Map)","u":"addMessageStrings(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacement(String, String)","u":"addReplacement(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacements(String...)","u":"addReplacements(java.lang.String...)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommand(String)","u":"addSubcommand(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommands(Collection)","u":"addSubcommands(java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandManager","l":"addSupportedLanguage(Locale)","u":"addSupportedLanguage(java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"AFRIKAANS"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"ApacheCommonsExceptionUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"ApacheCommonsLangUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"Locales","l":"ARABIC"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"BULGARIAN"},{"p":"co.aikar.commands","c":"CommandParameter","l":"canConsumeInput()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"canExecute(CommandIssuer, RegisteredCommand)","u":"canExecute(co.aikar.commands.CommandIssuer,co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"canExecuteWithoutInput()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"canOverridePlayerContext()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalize(String)","u":"capitalize(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalize(String, char...)","u":"capitalize(java.lang.String,char...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalize(String, char[])","u":"capitalize(java.lang.String,char[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String)","u":"capitalizeFirst(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String, char)","u":"capitalizeFirst(java.lang.String,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String)","u":"capitalizeFully(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String, char...)","u":"capitalizeFully(java.lang.String,char...)"},{"p":"co.aikar.commands","c":"Locales","l":"CHINESE"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"clone(T[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"combine(String[])","u":"combine(java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"combine(String[], int)","u":"combine(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"CommandCompletions(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"CommandHelp(CommandManager, RootCommand, CommandIssuer)","u":"%3Cinit%3E(co.aikar.commands.CommandManager,co.aikar.commands.RootCommand,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"CommandHelpFormatter(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"CommandManager()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"CommandParameter(RegisteredCommand, Parameter, int, boolean)","u":"%3Cinit%3E(co.aikar.commands.RegisteredCommand,java.lang.reflect.Parameter,int,boolean)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKey, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKeyProvider, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"conditions"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"ConditionsProcessor()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"CommandContexts","l":"contextMap"},{"p":"co.aikar.commands","c":"MessageKeys","l":"COULD_NOT_FIND_PLAYER"},{"p":"co.aikar.commands","c":"CommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","u":"createCommandContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandParameter,co.aikar.commands.CommandIssuer,java.util.List,int,java.util.Map)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","u":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","u":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"CZECH"},{"p":"co.aikar.commands","c":"Locales","l":"DANISH"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultExceptionHandler"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultFormatter"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultHelpPerPage"},{"p":"co.aikar.commands","c":"CommandManager","l":"dependencies"},{"p":"co.aikar.commands","c":"BaseCommand","l":"doHelp(CommandIssuer, String...)","u":"doHelp(co.aikar.commands.CommandIssuer,java.lang.String...)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"doHelp(Object, String...)","u":"doHelp(java.lang.Object,java.lang.String...)"},{"p":"co.aikar.commands","c":"Locales","l":"DUTCH"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"EMPTY"},{"p":"co.aikar.commands","c":"CommandManager","l":"enableUnstableAPI(String)","u":"enableUnstableAPI(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ENGLISH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Class>)","u":"enumNames(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Enum[])","u":"enumNames(java.lang.Enum[])"},{"p":"co.aikar.commands","c":"MessageType","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"MessageType","l":"ERROR"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_GENERIC_LOGGED"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_PERFORMING_COMMAND"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_PREFIX"},{"p":"co.aikar.commands","c":"ExceptionHandler","l":"execute(BaseCommand, RegisteredCommand, CommandIssuer, List, Throwable)","u":"execute(co.aikar.commands.BaseCommand,co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.util.List,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"execute(CommandIssuer, CommandRouter.CommandRouteResult)","u":"execute(co.aikar.commands.CommandIssuer,co.aikar.commands.CommandRouter.CommandRouteResult)"},{"p":"co.aikar.commands","c":"RootCommand","l":"execute(CommandIssuer, String, String[])","u":"execute(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"Locales","l":"FINNISH"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"format(int, String)","u":"format(int,java.lang.String)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"format(String)","u":"format(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"formatMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","u":"formatMessage(co.aikar.commands.CommandIssuer,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"formatNumber(Integer)","u":"formatNumber(java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"formatters"},{"p":"co.aikar.commands","c":"Locales","l":"FRENCH"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp()"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(CommandIssuer, RootCommand)","u":"generateCommandHelp(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(CommandIssuer, String)","u":"generateCommandHelp(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(String)","u":"generateCommandHelp(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"GERMAN"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class)","u":"getAnnotationValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class)","u":"getAnnotationValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class, int)","u":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class, int)","u":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"getApplicableParameters()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getArgs()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getArgs()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getBooleanFlagValue(String)","u":"getBooleanFlagValue(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getBooleanFlagValue(String, Boolean)","u":"getBooleanFlagValue(java.lang.String,java.lang.Boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getCause()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable)","u":"getCause(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable, String[])","u":"getCause(java.lang.Throwable,java.lang.String[])"},{"p":"co.aikar.commands","c":"RootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getCmd()"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"getColor(int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommand()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getCommand()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getCommand()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandConditions()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCommandHelp()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandLabel()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandManager()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getCommandName()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getCommandPrefix()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getCommandPrefix()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandReplacements()"},{"p":"co.aikar.commands","c":"CommandCompletions.CommandCompletionHandler","l":"getCompletions(C)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getConditions()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfig()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig(String)","u":"getConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig(String, String)","u":"getConfig(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfigs()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, Integer)","u":"getConfigValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, String)","u":"getConfigValue(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands.contexts","c":"ContextResolver","l":"getContext(C)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getContextFlags(Class)","u":"getContextFlags(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class)","u":"getContextValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class, Integer)","u":"getContextValue(java.lang.Class,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValueByName(Class, String)","u":"getContextValueByName(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCurrentCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandIssuer()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCurrentCommandManager()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandManager()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandOperationContext()"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"getDefaultColor()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultExceptionHandler()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultFormatter()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultHelpPerPage()"},{"p":"co.aikar.commands","c":"Locales","l":"getDefaultLocale()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getDefaultRegisteredCommand()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDefaultRegisteredCommand()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDefaultValue()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDescription()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getDescription()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDescription()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDisplayName(CommandIssuer)","u":"getDisplayName(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getDoubleFlagValue(String, Number)","u":"getDoubleFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getEntryFormatReplacements(CommandHelp, HelpEntry)","u":"getEntryFormatReplacements(co.aikar.commands.CommandHelp,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String)","u":"getEnumFromName(T[],java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String, T)","u":"getEnumFromName(T[],java.lang.String,T)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromOrdinal(T[], int)","u":"getEnumFromOrdinal(T[],int)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExceptionHandler()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExecCommandLabel()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExecSubcommand()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFirstArg()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getFirstElement(Iterable)","u":"getFirstElement(java.lang.Iterable)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlags()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getFlags()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Double)","u":"getFlagValue(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Float)","u":"getFlagValue(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Integer)","u":"getFlagValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Long)","u":"getFlagValue(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Number)","u":"getFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, String)","u":"getFlagValue(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFloatFlagValue(String, Number)","u":"getFloatFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getFormat(MessageType)","u":"getFormat(co.aikar.commands.MessageType)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getFullStackTrace(Throwable)","u":"getFullStackTrace(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getHeaderFooterFormatReplacements(CommandHelp)","u":"getHeaderFooterFormatReplacements(co.aikar.commands.CommandHelp)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getHelpEntries()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getHelpFormatter()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getHelpText()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIndex()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getInput()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIntFlagValue(String, Number)","u":"getIntFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getIssuerLocale(CommandIssuer)","u":"getIssuerLocale(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getLastArg()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getLastCommandOperationContext()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getLastCommandOperationContext()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getLongFlagValue(String, Number)","u":"getLongFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getManager()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getManager()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getManager()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessage()"},{"p":"co.aikar.commands","c":"Locales","l":"getMessage(CommandIssuer, MessageKeyProvider)","u":"getMessage(co.aikar.commands.CommandIssuer,co.aikar.locales.MessageKeyProvider)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessage(int)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessages()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getName()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getName()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getNextParam()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getNumParams()"},{"p":"co.aikar.commands","c":"Locales","l":"getOptionalMessage(CommandIssuer, MessageKey)","u":"getOptionalMessage(co.aikar.commands.CommandIssuer,co.aikar.locales.MessageKey)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getOrigArgs()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getPage()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getParam()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getParameter()"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getParameterFormatReplacements(CommandHelp, CommandParameter, HelpEntry)","u":"getParameterFormatReplacements(co.aikar.commands.CommandHelp,co.aikar.commands.CommandParameter,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getParameterPermissions()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameters()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameterSyntax()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameterSyntax(CommandIssuer)","u":"getParameterSyntax(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getParamIndex()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getPassedArgs()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getPermission()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getPerPage()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getPrefSubCommand()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getRegisteredCommand()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getRegisteredCommands()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getRegisteredCommands()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(Class...)","u":"getResolvedArg(java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String)","u":"getResolvedArg(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String, Class...)","u":"getResolvedArg(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getResolver()"},{"p":"co.aikar.commands","c":"CommandContexts","l":"getResolver(Class)","u":"getResolver(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getRootCause(Throwable)","u":"getRootCause(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getRootCommand(String)","u":"getRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getSearch()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getSearchScore()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getSearchTags()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getSelectedEntry()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getStackTrace(Throwable)","u":"getStackTrace(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getSupportedLanguages()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getSyntax()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getSyntax(CommandIssuer)","u":"getSyntax(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText(CommandIssuer)","u":"getSyntaxText(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[])","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean)","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean, boolean)","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean,boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowable(int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowableCount()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowableCount(Throwable)","u":"getThrowableCount(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowableList(Throwable)","u":"getThrowableList(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowables()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowables(Throwable)","u":"getThrowables(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getTotalPages()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getTotalResults()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getType()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getUniquePermission()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getUsage()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getValues()"},{"p":"co.aikar.commands","c":"Locales","l":"GREEK"},{"p":"co.aikar.commands","c":"CommandManager","l":"handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List, Throwable)","u":"handleUncaughtException(co.aikar.commands.BaseCommand,co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.util.List,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"hasAnnotation(Class)","u":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasAnnotation(Class)","u":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RootCommand","l":"hasAnyPermission(CommandIssuer)","u":"hasAnyPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"hasConfig(String)","u":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"hasConfig(String)","u":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasFlag(String)","u":"hasFlag(java.lang.String)"},{"p":"co.aikar.commands","c":"MessageType","l":"hashCode()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"hasIntersection(Collection, Collection)","u":"hasIntersection(java.util.Collection,java.util.Collection)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(CommandIssuer)","u":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(CommandIssuer)","u":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, Set)","u":"hasPermission(co.aikar.commands.CommandIssuer,java.util.Set)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, String)","u":"hasPermission(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(Object)","u":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(Object)","u":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"Locales","l":"HEBREW"},{"p":"co.aikar.commands","c":"MessageType","l":"HELP"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_COMMAND_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_HEADER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_PARAMETER_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_HEADER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_NO_RESULTS"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_PAGE_INFORMATION"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_SEARCH_HEADER"},{"p":"co.aikar.commands","c":"BaseCommand","l":"help(CommandIssuer, String[])","u":"help(co.aikar.commands.CommandIssuer,java.lang.String[])"},{"p":"co.aikar.commands","c":"BaseCommand","l":"help(Object, String[])","u":"help(java.lang.Object,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandManager","l":"helpFormatter"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"helpSearchTags"},{"p":"co.aikar.commands","c":"Locales","l":"HINDI"},{"p":"co.aikar.commands","c":"Locales","l":"HUNGARIAN"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"INDEX_NOT_FOUND"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"indexOf(Object[], Object)","u":"indexOf(java.lang.Object[],java.lang.Object)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"indexOf(Object[], Object, int)","u":"indexOf(java.lang.Object[],java.lang.Object,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"indexOf(String, String[])","u":"indexOf(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class)","u":"indexOfThrowable(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class, int)","u":"indexOfThrowable(java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class)","u":"indexOfThrowable(java.lang.Throwable,java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class, int)","u":"indexOfThrowable(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class)","u":"indexOfType(java.lang.Throwable,java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class, int)","u":"indexOfType(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands","c":"MessageType","l":"INFO"},{"p":"co.aikar.commands","c":"MessageKeys","l":"INFO_MESSAGE"},{"p":"co.aikar.commands","c":"ACFUtil","l":"intersection(Collection, Collection)","u":"intersection(java.util.Collection,java.util.Collection)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"intToRoman(int)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"INVALID_SYNTAX"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(boolean)","u":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, boolean, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, boolean, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String, boolean)","u":"%3Cinit%3E(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"isAsync()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"isAsync()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isBetween(float, double, double)","u":"isBetween(float,double,double)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isCauseMethodName(String)","u":"isCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isDelimiter(char, char[])","u":"isDelimiter(char,char[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isDouble(String)","u":"isDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isFloat(String)","u":"isFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isInteger(String)","u":"isInteger(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isLast()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"isLastArg()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"isLastPage()"},{"p":"co.aikar.commands","c":"CommandManager","l":"isLoggingUnhandledExceptions()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isNestedThrowable(Throwable)","u":"isNestedThrowable(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isNumber(String)","u":"isNumber(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isNumeric(CharSequence)","u":"isNumeric(java.lang.CharSequence)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"isOnlyPage()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"isOptional()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptional()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptionalInput()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptionalResolver()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"isPrivate()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"issuer"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"issuer"},{"p":"co.aikar.commands","c":"CommandManager","l":"issuersLocale"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isThrowableNested()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isTruthy(String)","u":"isTruthy(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ITALIAN"},{"p":"co.aikar.commands","c":"Locales","l":"JAPANESE"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(byte[], char)","u":"join(byte[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(byte[], char, int, int)","u":"join(byte[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char)","u":"join(char[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char, int, int)","u":"join(char[],char,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection)","u":"join(java.util.Collection)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection, String)","u":"join(java.util.Collection,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char)","u":"join(double[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char, int, int)","u":"join(double[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char)","u":"join(float[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char, int, int)","u":"join(float[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char)","u":"join(int[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char, int, int)","u":"join(int[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, char)","u":"join(java.lang.Iterable,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, String)","u":"join(java.lang.Iterable,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, char)","u":"join(java.util.Iterator,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, String)","u":"join(java.util.Iterator,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char)","u":"join(long[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char, int, int)","u":"join(long[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char)","u":"join(java.lang.Object[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char, int, int)","u":"join(java.lang.Object[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String)","u":"join(java.lang.Object[],java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String, int, int)","u":"join(java.lang.Object[],java.lang.String,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char)","u":"join(short[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char, int, int)","u":"join(short[],char,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[])","u":"join(java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], char)","u":"join(java.lang.String[],char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int)","u":"join(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int, char)","u":"join(java.lang.String[],int,char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], String)","u":"join(java.lang.String[],java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(T...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"joinArgs()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"joinArgs(String)","u":"joinArgs(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"KOREAN"},{"p":"co.aikar.commands","c":"Locales","l":"LATIN"},{"p":"co.aikar.commands","c":"ACFUtil","l":"limit(String, int)","u":"limit(java.lang.String,int)"},{"p":"co.aikar.commands","c":"Locales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"Locales","l":"loadMissingBundles()"},{"p":"co.aikar.commands","c":"CommandManager","l":"localeChangedCallbacks"},{"p":"co.aikar.commands","c":"Locales","l":"Locales(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String)","u":"log(co.aikar.commands.LogLevel,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"ltrim(String)","u":"ltrim(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"manager"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"MessageFormatter(FT...)","u":"%3Cinit%3E(FT...)"},{"p":"co.aikar.commands","c":"MessageType","l":"MessageType()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_A_NUMBER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_MAX_LENGTH"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_MIN_LENGTH"},{"p":"co.aikar.commands","c":"MessageKeys","l":"NO_COMMAND_MATCHED_SEARCH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"normalize(String)","u":"normalize(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"NORWEGIAN_BOKMAAL"},{"p":"co.aikar.commands","c":"Locales","l":"NORWEGIAN_NYNORSK"},{"p":"co.aikar.commands","c":"MessageKeys","l":"NOT_ALLOWED_ON_CONSOLE"},{"p":"co.aikar.commands","c":"CommandManager","l":"notifyLocaleChange(I, Locale, Locale)","u":"notifyLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"nullDefault(Object, Object)","u":"nullDefault(java.lang.Object,java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandManager","l":"obtainRootCommand(String)","u":"obtainRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onBaseCommandRegister(BaseCommand, T)","u":"onBaseCommandRegister(co.aikar.commands.BaseCommand,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onCommandRegistered(RegisteredCommand, T)","u":"onCommandRegistered(co.aikar.commands.RegisteredCommand,T)"},{"p":"co.aikar.commands","c":"IssuerLocaleChangedCallback","l":"onIssuerLocaleChange(I, Locale, Locale)","u":"onIssuerLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandManager","l":"onLocaleChange(IssuerLocaleChangedCallback)","u":"onLocaleChange(co.aikar.commands.IssuerLocaleChangedCallback)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onParameterRegistered(RegisteredCommand, int, Parameter, T)","u":"onParameterRegistered(co.aikar.commands.RegisteredCommand,int,java.lang.reflect.Parameter,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostComand(CommandOperationContext)","u":"onPostComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","u":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","u":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreComand(CommandOperationContext)","u":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPreComand(CommandOperationContext)","u":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreContextResolution(CommandExecutionContext)","u":"onPreContextResolution(co.aikar.commands.CommandExecutionContext)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padLeft(String, int)","u":"padLeft(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padRight(String, int)","u":"padRight(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseBigNumber(String, boolean)","u":"parseBigNumber(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String)","u":"parseDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String, Double)","u":"parseDouble(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String)","u":"parseFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String, Float)","u":"parseFloat(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String)","u":"parseInt(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String, Integer)","u":"parseInt(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String)","u":"parseLong(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String, Long)","u":"parseLong(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseNumber(String, boolean)","u":"parseNumber(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PERMISSION_DENIED"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PERMISSION_DENIED_PARAMETER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_AT_LEAST"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_AT_MOST"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_ONE_OF"},{"p":"co.aikar.commands","c":"Locales","l":"POLISH"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"popFirstArg()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"popLastArg()"},{"p":"co.aikar.commands","c":"Locales","l":"PORTUGUESE"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"precision(double, int)","u":"precision(double,int)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"preformOnImmutable(List, Consumer>)","u":"preformOnImmutable(java.util.List,java.util.function.Consumer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpFooter(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpHeader(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedParameter(CommandHelp, CommandIssuer, HelpEntry, CommandParameter)","u":"printDetailedParameter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry,co.aikar.commands.CommandParameter)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpCommand(CommandHelp, CommandIssuer, HelpEntry)","u":"printHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpFooter(CommandHelp, CommandIssuer)","u":"printHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpHeader(CommandHelp, CommandIssuer)","u":"printHelpHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printPartialStackTrace(PrintWriter)","u":"printPartialStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchEntry(CommandHelp, CommandIssuer, HelpEntry)","u":"printSearchEntry(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchFooter(CommandHelp, CommandIssuer)","u":"printSearchFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchHeader(CommandHelp, CommandIssuer)","u":"printSearchHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintStream)","u":"printStackTrace(java.io.PrintStream)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintWriter)","u":"printStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(double, double)","u":"rand(double,double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int)","u":"rand(int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int, int, int)","u":"rand(int,int,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"randBool()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"RANDOM"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(Class)","u":"random(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(List)","u":"random(java.util.List)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(T[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler)","u":"registerAsyncCompletion(java.lang.String,co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerCompletion(String, CommandCompletions.CommandCompletionHandler)","u":"registerCompletion(java.lang.String,co.aikar.commands.CommandCompletions.CommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerContext(Class, ContextResolver)","u":"registerContext(java.lang.Class,co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, String, T)","u":"registerDependency(java.lang.Class,java.lang.String,T)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, T)","u":"registerDependency(java.lang.Class,T)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerAwareContext(Class, IssuerAwareContextResolver)","u":"registerIssuerAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerOnlyContext(Class, IssuerOnlyContextResolver)","u":"registerIssuerOnlyContext(java.lang.Class,co.aikar.commands.contexts.IssuerOnlyContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerOptionalContext(Class, OptionalContextResolver)","u":"registerOptionalContext(java.lang.Class,co.aikar.commands.contexts.OptionalContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerSenderAwareContext(Class, IssuerAwareContextResolver)","u":"registerSenderAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Collection)","u":"registerStaticCompletion(java.lang.String,java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String)","u":"registerStaticCompletion(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String[])","u":"registerStaticCompletion(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Supplier>)","u":"registerStaticCompletion(java.lang.String,java.util.function.Supplier)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCauseMethodName(String)","u":"removeCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCommonFrames(List, List)","u":"removeCommonFrames(java.util.List,java.util.List)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"replace(String)","u":"replace(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, Pattern, String)","u":"replace(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, String, String)","u":"replace(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"replaceI18NStrings(String)","u":"replaceI18NStrings(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"replacements"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, Pattern, String)","u":"replacePattern(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, String, String)","u":"replacePattern(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, Pattern, String)","u":"replacePatternMatch(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, String, String)","u":"replacePatternMatch(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatterns(String, String...)","u":"replacePatterns(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replaceStrings(String, String...)","u":"replaceStrings(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"requiresInput()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ROMANIAN"},{"p":"co.aikar.commands","c":"CommandManager","l":"rootCommands"},{"p":"co.aikar.commands","c":"ACFUtil","l":"round(double, int)","u":"round(double,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"roundUp(int, int)","u":"roundUp(int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rtrim(String)","u":"rtrim(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"RUSSIAN"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKey, String...)","u":"sendError(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKeyProvider, String...)","u":"sendError(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKey, String...)","u":"sendInfo(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKeyProvider, String...)","u":"sendInfo(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"sendMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","u":"sendMessage(co.aikar.commands.CommandIssuer,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"sendMessage(IT, MessageType, MessageKeyProvider, String...)","u":"sendMessage(IT,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKey, String...)","u":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKeyProvider, String...)","u":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(String)","u":"sendMessage(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKey, String...)","u":"sendSyntax(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKeyProvider, String...)","u":"sendSyntax(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setCanConsumeInput(boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"setCause(Throwable, Throwable)","u":"setCause(java.lang.Throwable,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"setColor(int, FT)","u":"setColor(int,FT)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setCommandIssuer(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setConditions(String)","u":"setConditions(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setContextFlags(Class, String)","u":"setContextFlags(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"setDefaultCompletion(String, Class...)","u":"setDefaultCompletion(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler)","u":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler, boolean)","u":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler,boolean)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultFormatter(MF)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultHelpPerPage(int)"},{"p":"co.aikar.commands","c":"Locales","l":"setDefaultLocale(Locale)","u":"setDefaultLocale(java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDefaultValue(String)","u":"setDefaultValue(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDescription(String)","u":"setDescription(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setExceptionHandler(ExceptionHandler)","u":"setExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setFlags(Map)","u":"setFlags(java.util.Map)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, FT...)","u":"setFormat(co.aikar.commands.MessageType,FT...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, int, FT)","u":"setFormat(co.aikar.commands.MessageType,int,FT)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, MF)","u":"setFormat(co.aikar.commands.MessageType,MF)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setHelpFormatter(CommandHelpFormatter)","u":"setHelpFormatter(co.aikar.commands.CommandHelpFormatter)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setIssuerLocale(IT, Locale)","u":"setIssuerLocale(IT,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setNextParam(CommandParameter)","u":"setNextParam(co.aikar.commands.CommandParameter)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setOptional(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setOptionalResolver(boolean)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPage(int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPage(int, int)","u":"setPage(int,int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPerPage(int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"setRegisteredCommand(RegisteredCommand)","u":"setRegisteredCommand(co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setRequiresInput(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setResolver(ContextResolver)","u":"setResolver(co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setSearch(List)","u":"setSearch(java.util.List)"},{"p":"co.aikar.commands","c":"HelpEntry","l":"setSearchScore(int)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setSyntax(String)","u":"setSyntax(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setValues(String[])","u":"setValues(java.lang.String[])"},{"p":"co.aikar.commands","c":"HelpEntry","l":"shouldShow()"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showAllResults(CommandHelp, List)","u":"showAllResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showCommandHelp()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(boolean)","u":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(List)","u":"%3Cinit%3E(java.util.List)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showDetailedHelp(CommandHelp, HelpEntry)","u":"showDetailedHelp(co.aikar.commands.CommandHelp,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"showHelp()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"showHelp(CommandIssuer)","u":"showHelp(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showSearchResults(CommandHelp, List)","u":"showSearchResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showSyntax(CommandIssuer, RegisteredCommand)","u":"showSyntax(co.aikar.commands.CommandIssuer,co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"simpleMatch(Class>, String)","u":"simpleMatch(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"SIMPLIFIED_CHINESE"},{"p":"co.aikar.commands","c":"ACFUtil","l":"simplifyString(String)","u":"simplifyString(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"sneaky(Throwable)","u":"sneaky(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"Locales","l":"SPANISH"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWith(CharSequence, CharSequence)","u":"startsWith(java.lang.CharSequence,java.lang.CharSequence)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWithIgnoreCase(CharSequence, CharSequence)","u":"startsWithIgnoreCase(java.lang.CharSequence,java.lang.CharSequence)"},{"p":"co.aikar.commands","c":"CommandManager","l":"supportedLanguages"},{"p":"co.aikar.commands","c":"Locales","l":"SWEDISH"},{"p":"co.aikar.commands","c":"CommandCompletions.SyncCompletionRequired","l":"SyncCompletionRequired()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"MessageType","l":"SYNTAX"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"tabComplete(CommandIssuer, RootCommand, String[], boolean)","u":"tabComplete(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[])","u":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[], boolean)","u":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"testExactMatch(String)","u":"testExactMatch(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"THAI"},{"p":"co.aikar.commands","c":"Locales","l":"TRADITIONAL_CHINESE"},{"p":"co.aikar.commands","c":"Locales","l":"TURKISH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"ucfirst(String)","u":"ucfirst(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"UKRANIAN"},{"p":"co.aikar.commands","c":"MessageKeys","l":"UNKNOWN_COMMAND"},{"p":"co.aikar.commands","c":"CommandHelp","l":"updateSearchScore(HelpEntry)","u":"updateSearchScore(co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandManager","l":"usePerIssuerLocale"},{"p":"co.aikar.commands","c":"CommandManager","l":"usePerIssuerLocale(boolean)"},{"p":"co.aikar.commands","c":"CommandManager","l":"usingPerIssuerLocale()"},{"p":"co.aikar.commands","c":"CommandConditions.Condition","l":"validateCondition(ConditionContext)","u":"validateCondition(co.aikar.commands.ConditionContext)"},{"p":"co.aikar.commands","c":"CommandConditions.ParameterCondition","l":"validateCondition(ConditionContext, CEC, P)","u":"validateCondition(co.aikar.commands.ConditionContext,CEC,P)"},{"p":"co.aikar.commands.annotation","c":"CommandAlias","l":"value()"},{"p":"co.aikar.commands.annotation","c":"CommandCompletion","l":"value()"},{"p":"co.aikar.commands.annotation","c":"CommandPermission","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Conditions","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Default","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Dependency","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Description","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Flags","l":"value()"},{"p":"co.aikar.commands.annotation","c":"HelpCommand","l":"value()"},{"p":"co.aikar.commands.annotation","c":"HelpSearchTags","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Name","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Split","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Subcommand","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Syntax","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Values","l":"value()"},{"p":"co.aikar.commands","c":"MessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"Locales","l":"VIETNAMESE"},{"p":"co.aikar.commands","c":"Locales","l":"WELSH"}];updateSearchResults(); \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"addAll(T[], T...)","u":"addAll(T[],T...)"},{"p":"co.aikar.commands","c":"Locales","l":"addBundleClassLoader(ClassLoader)","u":"addBundleClassLoader(java.lang.ClassLoader)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"addCauseMethodName(String)","u":"addCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChildShared(List, SetMultimap, BaseCommand)","u":"addChildShared(java.util.List,com.google.common.collect.SetMultimap,co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"CommandConditions","l":"addCondition(Class

    , String, CommandConditions.ParameterCondition)","u":"addCondition(java.lang.Class,java.lang.String,co.aikar.commands.CommandConditions.ParameterCondition)"},{"p":"co.aikar.commands","c":"CommandConditions","l":"addCondition(String, CommandConditions.Condition)","u":"addCondition(java.lang.String,co.aikar.commands.CommandConditions.Condition)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessage(Locale, MessageKeyProvider, String)","u":"addMessage(java.util.Locale,co.aikar.locales.MessageKeyProvider,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(ClassLoader, String, Locale)","u":"addMessageBundle(java.lang.ClassLoader,java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(String, Locale)","u":"addMessageBundle(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundles(String...)","u":"addMessageBundles(java.lang.String...)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessages(Locale, Map)","u":"addMessages(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageStrings(Locale, Map)","u":"addMessageStrings(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacement(String, String)","u":"addReplacement(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacements(String...)","u":"addReplacements(java.lang.String...)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommand(String)","u":"addSubcommand(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommands(Collection)","u":"addSubcommands(java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandManager","l":"addSupportedLanguage(Locale)","u":"addSupportedLanguage(java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"AFRIKAANS"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"ApacheCommonsExceptionUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"ApacheCommonsLangUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"Locales","l":"ARABIC"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"BULGARIAN"},{"p":"co.aikar.commands","c":"CommandParameter","l":"canConsumeInput()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"canExecute(CommandIssuer, RegisteredCommand)","u":"canExecute(co.aikar.commands.CommandIssuer,co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"canExecuteWithoutInput()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"canOverridePlayerContext()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalize(String)","u":"capitalize(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalize(String, char...)","u":"capitalize(java.lang.String,char...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalize(String, char[])","u":"capitalize(java.lang.String,char[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String)","u":"capitalizeFirst(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String, char)","u":"capitalizeFirst(java.lang.String,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String)","u":"capitalizeFully(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String, char...)","u":"capitalizeFully(java.lang.String,char...)"},{"p":"co.aikar.commands","c":"Locales","l":"CHINESE"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"clone(T[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"combine(String[])","u":"combine(java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"combine(String[], int)","u":"combine(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"CommandCompletions(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"CommandHelp(CommandManager, RootCommand, CommandIssuer)","u":"%3Cinit%3E(co.aikar.commands.CommandManager,co.aikar.commands.RootCommand,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"CommandHelpFormatter(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"CommandManager()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"CommandParameter(RegisteredCommand, Parameter, int, boolean)","u":"%3Cinit%3E(co.aikar.commands.RegisteredCommand,java.lang.reflect.Parameter,int,boolean)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKey, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKeyProvider, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"conditions"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"ConditionsProcessor()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"CommandContexts","l":"contextMap"},{"p":"co.aikar.commands","c":"MessageKeys","l":"COULD_NOT_FIND_PLAYER"},{"p":"co.aikar.commands","c":"CommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","u":"createCommandContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandParameter,co.aikar.commands.CommandIssuer,java.util.List,int,java.util.Map)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","u":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","u":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"CZECH"},{"p":"co.aikar.commands","c":"Locales","l":"DANISH"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultExceptionHandler"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultFormatter"},{"p":"co.aikar.commands","c":"CommandManager","l":"defaultHelpPerPage"},{"p":"co.aikar.commands","c":"CommandManager","l":"dependencies"},{"p":"co.aikar.commands","c":"BaseCommand","l":"doHelp(CommandIssuer, String...)","u":"doHelp(co.aikar.commands.CommandIssuer,java.lang.String...)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"doHelp(Object, String...)","u":"doHelp(java.lang.Object,java.lang.String...)"},{"p":"co.aikar.commands","c":"Locales","l":"DUTCH"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"EMPTY"},{"p":"co.aikar.commands","c":"CommandManager","l":"enableUnstableAPI(String)","u":"enableUnstableAPI(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ENGLISH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Class>)","u":"enumNames(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Enum[])","u":"enumNames(java.lang.Enum[])"},{"p":"co.aikar.commands","c":"MessageType","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"MessageType","l":"ERROR"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_GENERIC_LOGGED"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_PERFORMING_COMMAND"},{"p":"co.aikar.commands","c":"MessageKeys","l":"ERROR_PREFIX"},{"p":"co.aikar.commands","c":"ExceptionHandler","l":"execute(BaseCommand, RegisteredCommand, CommandIssuer, List, Throwable)","u":"execute(co.aikar.commands.BaseCommand,co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.util.List,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"execute(CommandIssuer, CommandRouter.CommandRouteResult)","u":"execute(co.aikar.commands.CommandIssuer,co.aikar.commands.CommandRouter.CommandRouteResult)"},{"p":"co.aikar.commands","c":"RootCommand","l":"execute(CommandIssuer, String, String[])","u":"execute(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"Locales","l":"FINNISH"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"format(int, String)","u":"format(int,java.lang.String)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"format(String)","u":"format(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"formatMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","u":"formatMessage(co.aikar.commands.CommandIssuer,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"formatNumber(Integer)","u":"formatNumber(java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"formatters"},{"p":"co.aikar.commands","c":"Locales","l":"FRENCH"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp()"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(CommandIssuer, RootCommand)","u":"generateCommandHelp(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(CommandIssuer, String)","u":"generateCommandHelp(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(String)","u":"generateCommandHelp(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"GERMAN"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getAnnotation(Class)","u":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class)","u":"getAnnotationValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class)","u":"getAnnotationValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class, int)","u":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class, int)","u":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"getApplicableParameters()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getArgs()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getArgs()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getBooleanFlagValue(String)","u":"getBooleanFlagValue(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getBooleanFlagValue(String, Boolean)","u":"getBooleanFlagValue(java.lang.String,java.lang.Boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getCause()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable)","u":"getCause(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable, String[])","u":"getCause(java.lang.Throwable,java.lang.String[])"},{"p":"co.aikar.commands","c":"RootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getCmd()"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"getColor(int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommand()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getCommand()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getCommand()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandConditions()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCommandHelp()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandLabel()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getCommandManager()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getCommandName()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getCommandPrefix()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getCommandPrefix()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCommandReplacements()"},{"p":"co.aikar.commands","c":"CommandCompletions.CommandCompletionHandler","l":"getCompletions(C)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getConditions()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfig()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig(String)","u":"getConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig(String, String)","u":"getConfig(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfigs()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, Integer)","u":"getConfigValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, String)","u":"getConfigValue(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands.contexts","c":"ContextResolver","l":"getContext(C)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getContextFlags(Class)","u":"getContextFlags(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class)","u":"getContextValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class, Integer)","u":"getContextValue(java.lang.Class,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValueByName(Class, String)","u":"getContextValueByName(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCurrentCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandIssuer()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getCurrentCommandManager()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandManager()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getCurrentCommandOperationContext()"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"getDefaultColor()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultExceptionHandler()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultFormatter()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getDefaultHelpPerPage()"},{"p":"co.aikar.commands","c":"Locales","l":"getDefaultLocale()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getDefaultRegisteredCommand()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDefaultRegisteredCommand()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDefaultValue()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDescription()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getDescription()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getDescription()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getDisplayName(CommandIssuer)","u":"getDisplayName(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getDoubleFlagValue(String, Number)","u":"getDoubleFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getEntryFormatReplacements(CommandHelp, HelpEntry)","u":"getEntryFormatReplacements(co.aikar.commands.CommandHelp,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String)","u":"getEnumFromName(T[],java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String, T)","u":"getEnumFromName(T[],java.lang.String,T)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromOrdinal(T[], int)","u":"getEnumFromOrdinal(T[],int)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExceptionHandler()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExecCommandLabel()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getExecSubcommand()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFirstArg()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getFirstElement(Iterable)","u":"getFirstElement(java.lang.Iterable)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlags()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getFlags()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Double)","u":"getFlagValue(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Float)","u":"getFlagValue(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Integer)","u":"getFlagValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Long)","u":"getFlagValue(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Number)","u":"getFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, String)","u":"getFlagValue(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFloatFlagValue(String, Number)","u":"getFloatFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getFormat(MessageType)","u":"getFormat(co.aikar.commands.MessageType)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getFullStackTrace(Throwable)","u":"getFullStackTrace(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getHeaderFooterFormatReplacements(CommandHelp)","u":"getHeaderFooterFormatReplacements(co.aikar.commands.CommandHelp)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getHelpEntries()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getHelpFormatter()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getHelpText()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIndex()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getInput()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIntFlagValue(String, Number)","u":"getIntFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getIssuerLocale(CommandIssuer)","u":"getIssuerLocale(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getLastArg()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getLastCommandOperationContext()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getLastCommandOperationContext()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getLongFlagValue(String, Number)","u":"getLongFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getManager()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getManager()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getManager()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessage()"},{"p":"co.aikar.commands","c":"Locales","l":"getMessage(CommandIssuer, MessageKeyProvider)","u":"getMessage(co.aikar.commands.CommandIssuer,co.aikar.locales.MessageKeyProvider)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessage(int)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getMessages()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getName()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getName()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getNextParam()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getNumParams()"},{"p":"co.aikar.commands","c":"Locales","l":"getOptionalMessage(CommandIssuer, MessageKey)","u":"getOptionalMessage(co.aikar.commands.CommandIssuer,co.aikar.locales.MessageKey)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getOrigArgs()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getPage()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getParam()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getParameter()"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getParameterFormatReplacements(CommandHelp, CommandParameter, HelpEntry)","u":"getParameterFormatReplacements(co.aikar.commands.CommandHelp,co.aikar.commands.CommandParameter,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getParameterPermissions()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameters()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameterSyntax()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getParameterSyntax(CommandIssuer)","u":"getParameterSyntax(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getParamIndex()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getPassedArgs()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getPermission()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getPerPage()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getPrefSubCommand()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getRegisteredCommand()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getRegisteredCommands()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getRegisteredCommands()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getRequiredPermissions()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(Class...)","u":"getResolvedArg(java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String)","u":"getResolvedArg(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String, Class...)","u":"getResolvedArg(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getResolver()"},{"p":"co.aikar.commands","c":"CommandContexts","l":"getResolver(Class)","u":"getResolver(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getRootCause(Throwable)","u":"getRootCause(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getRootCommand(String)","u":"getRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getSearch()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getSearchScore()"},{"p":"co.aikar.commands","c":"HelpEntry","l":"getSearchTags()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getSelectedEntry()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getStackTrace(Throwable)","u":"getStackTrace(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getSupportedLanguages()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getSyntax()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getSyntax(CommandIssuer)","u":"getSyntax(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText(CommandIssuer)","u":"getSyntaxText(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[])","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean)","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean, boolean)","u":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean,boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowable(int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowableCount()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowableCount(Throwable)","u":"getThrowableCount(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowableList(Throwable)","u":"getThrowableList(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowables()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowables(Throwable)","u":"getThrowables(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getTotalPages()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"getTotalResults()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getType()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getUniquePermission()"},{"p":"co.aikar.commands","c":"RootCommand","l":"getUsage()"},{"p":"co.aikar.commands","c":"CommandManager","l":"getValidNamePredicate()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getValues()"},{"p":"co.aikar.commands","c":"Locales","l":"GREEK"},{"p":"co.aikar.commands","c":"CommandManager","l":"handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List, Throwable)","u":"handleUncaughtException(co.aikar.commands.BaseCommand,co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.util.List,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"hasAnnotation(Class)","u":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasAnnotation(Class)","u":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RootCommand","l":"hasAnyPermission(CommandIssuer)","u":"hasAnyPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"hasConfig(String)","u":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"hasConfig(String)","u":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasFlag(String)","u":"hasFlag(java.lang.String)"},{"p":"co.aikar.commands","c":"MessageType","l":"hashCode()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"hasIntersection(Collection, Collection)","u":"hasIntersection(java.util.Collection,java.util.Collection)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(CommandIssuer)","u":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(CommandIssuer)","u":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, Set)","u":"hasPermission(co.aikar.commands.CommandIssuer,java.util.Set)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, String)","u":"hasPermission(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(Object)","u":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(Object)","u":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"Locales","l":"HEBREW"},{"p":"co.aikar.commands","c":"MessageType","l":"HELP"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_COMMAND_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_HEADER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_DETAILED_PARAMETER_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_FORMAT"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_HEADER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_NO_RESULTS"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_PAGE_INFORMATION"},{"p":"co.aikar.commands","c":"MessageKeys","l":"HELP_SEARCH_HEADER"},{"p":"co.aikar.commands","c":"BaseCommand","l":"help(CommandIssuer, String[])","u":"help(co.aikar.commands.CommandIssuer,java.lang.String[])"},{"p":"co.aikar.commands","c":"BaseCommand","l":"help(Object, String[])","u":"help(java.lang.Object,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandManager","l":"helpFormatter"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"helpSearchTags"},{"p":"co.aikar.commands","c":"Locales","l":"HINDI"},{"p":"co.aikar.commands","c":"Locales","l":"HUNGARIAN"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"INDEX_NOT_FOUND"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"indexOf(Object[], Object)","u":"indexOf(java.lang.Object[],java.lang.Object)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"indexOf(Object[], Object, int)","u":"indexOf(java.lang.Object[],java.lang.Object,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"indexOf(String, String[])","u":"indexOf(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class)","u":"indexOfThrowable(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class, int)","u":"indexOfThrowable(java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class)","u":"indexOfThrowable(java.lang.Throwable,java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class, int)","u":"indexOfThrowable(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class)","u":"indexOfType(java.lang.Throwable,java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class, int)","u":"indexOfType(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands","c":"MessageType","l":"INFO"},{"p":"co.aikar.commands","c":"MessageKeys","l":"INFO_MESSAGE"},{"p":"co.aikar.commands","c":"ACFUtil","l":"intersection(Collection, Collection)","u":"intersection(java.util.Collection,java.util.Collection)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"intToRoman(int)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"INVALID_SYNTAX"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(boolean)","u":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, boolean, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, boolean, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, String...)","u":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String, boolean)","u":"%3Cinit%3E(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"isAsync()"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"isAsync()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isBetween(float, double, double)","u":"isBetween(float,double,double)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isCauseMethodName(String)","u":"isCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isDelimiter(char, char[])","u":"isDelimiter(char,char[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isDouble(String)","u":"isDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isFloat(String)","u":"isFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isInteger(String)","u":"isInteger(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isLast()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"isLastArg()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"isLastPage()"},{"p":"co.aikar.commands","c":"CommandManager","l":"isLoggingUnhandledExceptions()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isNestedThrowable(Throwable)","u":"isNestedThrowable(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isNumber(String)","u":"isNumber(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isNumeric(CharSequence)","u":"isNumeric(java.lang.CharSequence)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"isOnlyPage()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"isOptional()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptional()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptionalInput()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isOptionalResolver()"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"isPrivate()"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"issuer"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"issuer"},{"p":"co.aikar.commands","c":"CommandManager","l":"issuersLocale"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isThrowableNested()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isTruthy(String)","u":"isTruthy(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"isValidName(String)","u":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ITALIAN"},{"p":"co.aikar.commands","c":"Locales","l":"JAPANESE"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(byte[], char)","u":"join(byte[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(byte[], char, int, int)","u":"join(byte[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char)","u":"join(char[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char, int, int)","u":"join(char[],char,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection)","u":"join(java.util.Collection)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection, String)","u":"join(java.util.Collection,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char)","u":"join(double[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char, int, int)","u":"join(double[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char)","u":"join(float[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char, int, int)","u":"join(float[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char)","u":"join(int[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char, int, int)","u":"join(int[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, char)","u":"join(java.lang.Iterable,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, String)","u":"join(java.lang.Iterable,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, char)","u":"join(java.util.Iterator,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, String)","u":"join(java.util.Iterator,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char)","u":"join(long[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char, int, int)","u":"join(long[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char)","u":"join(java.lang.Object[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char, int, int)","u":"join(java.lang.Object[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String)","u":"join(java.lang.Object[],java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String, int, int)","u":"join(java.lang.Object[],java.lang.String,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char)","u":"join(short[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char, int, int)","u":"join(short[],char,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[])","u":"join(java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], char)","u":"join(java.lang.String[],char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int)","u":"join(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int, char)","u":"join(java.lang.String[],int,char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], String)","u":"join(java.lang.String[],java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(T...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"joinArgs()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"joinArgs(String)","u":"joinArgs(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"KOREAN"},{"p":"co.aikar.commands","c":"Locales","l":"LATIN"},{"p":"co.aikar.commands","c":"ACFUtil","l":"limit(String, int)","u":"limit(java.lang.String,int)"},{"p":"co.aikar.commands","c":"Locales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"Locales","l":"loadMissingBundles()"},{"p":"co.aikar.commands","c":"CommandManager","l":"localeChangedCallbacks"},{"p":"co.aikar.commands","c":"Locales","l":"Locales(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String)","u":"log(co.aikar.commands.LogLevel,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"ltrim(String)","u":"ltrim(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"manager"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"MessageFormatter(FT...)","u":"%3Cinit%3E(FT...)"},{"p":"co.aikar.commands","c":"MessageType","l":"MessageType()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_A_NUMBER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_MAX_LENGTH"},{"p":"co.aikar.commands","c":"MessageKeys","l":"MUST_BE_MIN_LENGTH"},{"p":"co.aikar.commands","c":"MessageKeys","l":"NO_COMMAND_MATCHED_SEARCH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"normalize(String)","u":"normalize(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"NORWEGIAN_BOKMAAL"},{"p":"co.aikar.commands","c":"Locales","l":"NORWEGIAN_NYNORSK"},{"p":"co.aikar.commands","c":"MessageKeys","l":"NOT_ALLOWED_ON_CONSOLE"},{"p":"co.aikar.commands","c":"CommandManager","l":"notifyLocaleChange(I, Locale, Locale)","u":"notifyLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"nullDefault(Object, Object)","u":"nullDefault(java.lang.Object,java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandManager","l":"obtainRootCommand(String)","u":"obtainRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onBaseCommandRegister(BaseCommand, T)","u":"onBaseCommandRegister(co.aikar.commands.BaseCommand,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onCommandRegistered(RegisteredCommand, T)","u":"onCommandRegistered(co.aikar.commands.RegisteredCommand,T)"},{"p":"co.aikar.commands","c":"IssuerLocaleChangedCallback","l":"onIssuerLocaleChange(I, Locale, Locale)","u":"onIssuerLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandManager","l":"onLocaleChange(IssuerLocaleChangedCallback)","u":"onLocaleChange(co.aikar.commands.IssuerLocaleChangedCallback)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onParameterRegistered(RegisteredCommand, int, Parameter, T)","u":"onParameterRegistered(co.aikar.commands.RegisteredCommand,int,java.lang.reflect.Parameter,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostComand(CommandOperationContext)","u":"onPostComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","u":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","u":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreComand(CommandOperationContext)","u":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPreComand(CommandOperationContext)","u":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreContextResolution(CommandExecutionContext)","u":"onPreContextResolution(co.aikar.commands.CommandExecutionContext)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padLeft(String, int)","u":"padLeft(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padRight(String, int)","u":"padRight(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseBigNumber(String, boolean)","u":"parseBigNumber(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String)","u":"parseDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String, Double)","u":"parseDouble(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String)","u":"parseFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String, Float)","u":"parseFloat(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String)","u":"parseInt(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String, Integer)","u":"parseInt(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String)","u":"parseLong(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String, Long)","u":"parseLong(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseNumber(String, boolean)","u":"parseNumber(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PERMISSION_DENIED"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PERMISSION_DENIED_PARAMETER"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_AT_LEAST"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_AT_MOST"},{"p":"co.aikar.commands","c":"MessageKeys","l":"PLEASE_SPECIFY_ONE_OF"},{"p":"co.aikar.commands","c":"Locales","l":"POLISH"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"popFirstArg()"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"popLastArg()"},{"p":"co.aikar.commands","c":"Locales","l":"PORTUGUESE"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"precision(double, int)","u":"precision(double,int)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"preformOnImmutable(List, Consumer>)","u":"preformOnImmutable(java.util.List,java.util.function.Consumer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpFooter(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpHeader(CommandHelp, CommandIssuer, HelpEntry)","u":"printDetailedHelpHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedParameter(CommandHelp, CommandIssuer, HelpEntry, CommandParameter)","u":"printDetailedParameter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry,co.aikar.commands.CommandParameter)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpCommand(CommandHelp, CommandIssuer, HelpEntry)","u":"printHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpFooter(CommandHelp, CommandIssuer)","u":"printHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpHeader(CommandHelp, CommandIssuer)","u":"printHelpHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printPartialStackTrace(PrintWriter)","u":"printPartialStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchEntry(CommandHelp, CommandIssuer, HelpEntry)","u":"printSearchEntry(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchFooter(CommandHelp, CommandIssuer)","u":"printSearchFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchHeader(CommandHelp, CommandIssuer)","u":"printSearchHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintStream)","u":"printStackTrace(java.io.PrintStream)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintWriter)","u":"printStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(double, double)","u":"rand(double,double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int)","u":"rand(int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int, int, int)","u":"rand(int,int,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"randBool()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"RANDOM"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(Class)","u":"random(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(List)","u":"random(java.util.List)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(T[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler)","u":"registerAsyncCompletion(java.lang.String,co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerCompletion(String, CommandCompletions.CommandCompletionHandler)","u":"registerCompletion(java.lang.String,co.aikar.commands.CommandCompletions.CommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerContext(Class, ContextResolver)","u":"registerContext(java.lang.Class,co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, String, T)","u":"registerDependency(java.lang.Class,java.lang.String,T)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, T)","u":"registerDependency(java.lang.Class,T)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerAwareContext(Class, IssuerAwareContextResolver)","u":"registerIssuerAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerOnlyContext(Class, IssuerOnlyContextResolver)","u":"registerIssuerOnlyContext(java.lang.Class,co.aikar.commands.contexts.IssuerOnlyContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerOptionalContext(Class, OptionalContextResolver)","u":"registerOptionalContext(java.lang.Class,co.aikar.commands.contexts.OptionalContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerSenderAwareContext(Class, IssuerAwareContextResolver)","u":"registerSenderAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Collection)","u":"registerStaticCompletion(java.lang.String,java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String)","u":"registerStaticCompletion(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String[])","u":"registerStaticCompletion(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Supplier>)","u":"registerStaticCompletion(java.lang.String,java.util.function.Supplier)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCauseMethodName(String)","u":"removeCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCommonFrames(List, List)","u":"removeCommonFrames(java.util.List,java.util.List)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"replace(String)","u":"replace(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, Pattern, String)","u":"replace(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, String, String)","u":"replace(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"replaceI18NStrings(String)","u":"replaceI18NStrings(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"replacements"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, Pattern, String)","u":"replacePattern(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, String, String)","u":"replacePattern(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, Pattern, String)","u":"replacePatternMatch(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, String, String)","u":"replacePatternMatch(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatterns(String, String...)","u":"replacePatterns(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replaceStrings(String, String...)","u":"replaceStrings(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"requiresInput()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"requiresPermission(String)","u":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ROMANIAN"},{"p":"co.aikar.commands","c":"CommandManager","l":"rootCommands"},{"p":"co.aikar.commands","c":"ACFUtil","l":"round(double, int)","u":"round(double,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"roundUp(int, int)","u":"roundUp(int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rtrim(String)","u":"rtrim(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"RUSSIAN"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKey, String...)","u":"sendError(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKeyProvider, String...)","u":"sendError(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKey, String...)","u":"sendInfo(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKeyProvider, String...)","u":"sendInfo(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"sendMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","u":"sendMessage(co.aikar.commands.CommandIssuer,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"sendMessage(IT, MessageType, MessageKeyProvider, String...)","u":"sendMessage(IT,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKey, String...)","u":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKeyProvider, String...)","u":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(String)","u":"sendMessage(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKey, String...)","u":"sendSyntax(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKeyProvider, String...)","u":"sendSyntax(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setCanConsumeInput(boolean)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"setCause(Throwable, Throwable)","u":"setCause(java.lang.Throwable,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"setColor(int, FT)","u":"setColor(int,FT)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setCommandIssuer(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setConditions(String)","u":"setConditions(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setContextFlags(Class, String)","u":"setContextFlags(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"setDefaultCompletion(String, Class...)","u":"setDefaultCompletion(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler)","u":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler, boolean)","u":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler,boolean)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultFormatter(MF)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultHelpPerPage(int)"},{"p":"co.aikar.commands","c":"Locales","l":"setDefaultLocale(Locale)","u":"setDefaultLocale(java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDefaultValue(String)","u":"setDefaultValue(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDescription(String)","u":"setDescription(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setExceptionHandler(ExceptionHandler)","u":"setExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setFlags(Map)","u":"setFlags(java.util.Map)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, FT...)","u":"setFormat(co.aikar.commands.MessageType,FT...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, int, FT)","u":"setFormat(co.aikar.commands.MessageType,int,FT)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, MF)","u":"setFormat(co.aikar.commands.MessageType,MF)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setHelpFormatter(CommandHelpFormatter)","u":"setHelpFormatter(co.aikar.commands.CommandHelpFormatter)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setIssuerLocale(IT, Locale)","u":"setIssuerLocale(IT,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setNextParam(CommandParameter)","u":"setNextParam(co.aikar.commands.CommandParameter)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setOptional(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setOptionalResolver(boolean)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPage(int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPage(int, int)","u":"setPage(int,int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPerPage(int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"setRegisteredCommand(RegisteredCommand)","u":"setRegisteredCommand(co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setRequiresInput(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setResolver(ContextResolver)","u":"setResolver(co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setSearch(List)","u":"setSearch(java.util.List)"},{"p":"co.aikar.commands","c":"HelpEntry","l":"setSearchScore(int)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setSyntax(String)","u":"setSyntax(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setValidNamePredicate(Predicate)","u":"setValidNamePredicate(java.util.function.Predicate)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setValues(String[])","u":"setValues(java.lang.String[])"},{"p":"co.aikar.commands","c":"HelpEntry","l":"shouldShow()"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showAllResults(CommandHelp, List)","u":"showAllResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showCommandHelp()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(boolean)","u":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(List)","u":"%3Cinit%3E(java.util.List)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showDetailedHelp(CommandHelp, HelpEntry)","u":"showDetailedHelp(co.aikar.commands.CommandHelp,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"showHelp()"},{"p":"co.aikar.commands","c":"CommandHelp","l":"showHelp(CommandIssuer)","u":"showHelp(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showSearchResults(CommandHelp, List)","u":"showSearchResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showSyntax(CommandIssuer, RegisteredCommand)","u":"showSyntax(co.aikar.commands.CommandIssuer,co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"simpleMatch(Class>, String)","u":"simpleMatch(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"SIMPLIFIED_CHINESE"},{"p":"co.aikar.commands","c":"ACFUtil","l":"simplifyString(String)","u":"simplifyString(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"sneaky(Throwable)","u":"sneaky(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"Locales","l":"SPANISH"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWith(CharSequence, CharSequence)","u":"startsWith(java.lang.CharSequence,java.lang.CharSequence)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWithIgnoreCase(CharSequence, CharSequence)","u":"startsWithIgnoreCase(java.lang.CharSequence,java.lang.CharSequence)"},{"p":"co.aikar.commands","c":"CommandManager","l":"supportedLanguages"},{"p":"co.aikar.commands","c":"Locales","l":"SWEDISH"},{"p":"co.aikar.commands","c":"CommandCompletions.SyncCompletionRequired","l":"SyncCompletionRequired()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"MessageType","l":"SYNTAX"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"tabComplete(CommandIssuer, RootCommand, String[], boolean)","u":"tabComplete(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[])","u":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[], boolean)","u":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"testExactMatch(String)","u":"testExactMatch(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"THAI"},{"p":"co.aikar.commands","c":"Locales","l":"TRADITIONAL_CHINESE"},{"p":"co.aikar.commands","c":"Locales","l":"TURKISH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"ucfirst(String)","u":"ucfirst(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"UKRANIAN"},{"p":"co.aikar.commands","c":"MessageKeys","l":"UNKNOWN_COMMAND"},{"p":"co.aikar.commands","c":"CommandHelp","l":"updateSearchScore(HelpEntry)","u":"updateSearchScore(co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandManager","l":"usePerIssuerLocale"},{"p":"co.aikar.commands","c":"CommandManager","l":"usePerIssuerLocale(boolean)"},{"p":"co.aikar.commands","c":"CommandManager","l":"usingPerIssuerLocale()"},{"p":"co.aikar.commands","c":"CommandConditions.Condition","l":"validateCondition(ConditionContext)","u":"validateCondition(co.aikar.commands.ConditionContext)"},{"p":"co.aikar.commands","c":"CommandConditions.ParameterCondition","l":"validateCondition(ConditionContext, CEC, P)","u":"validateCondition(co.aikar.commands.ConditionContext,CEC,P)"},{"p":"co.aikar.commands","c":"CommandManager","l":"validNamePredicate"},{"p":"co.aikar.commands.annotation","c":"CommandAlias","l":"value()"},{"p":"co.aikar.commands.annotation","c":"CommandCompletion","l":"value()"},{"p":"co.aikar.commands.annotation","c":"CommandPermission","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Conditions","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Default","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Dependency","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Description","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Flags","l":"value()"},{"p":"co.aikar.commands.annotation","c":"HelpCommand","l":"value()"},{"p":"co.aikar.commands.annotation","c":"HelpSearchTags","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Name","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Split","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Subcommand","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Syntax","l":"value()"},{"p":"co.aikar.commands.annotation","c":"Values","l":"value()"},{"p":"co.aikar.commands","c":"MessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"Locales","l":"VIETNAMESE"},{"p":"co.aikar.commands","c":"Locales","l":"WELSH"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandManager.html b/docs/acf-core/src-html/co/aikar/commands/CommandManager.html index ece84cce..b3031b83 100644 --- a/docs/acf-core/src-html/co/aikar/commands/CommandManager.html +++ b/docs/acf-core/src-html/co/aikar/commands/CommandManager.html @@ -58,543 +58,557 @@ 045import java.util.Stack; 046import java.util.UUID; 047import java.util.concurrent.ConcurrentHashMap; -048 +048import java.util.function.Predicate; 049 -050@SuppressWarnings("WeakerAccess") -051public abstract class CommandManager< -052 IT, -053 I extends CommandIssuer, -054 FT, -055 MF extends MessageFormatter<FT>, -056 CEC extends CommandExecutionContext<CEC, I>, -057 CC extends ConditionContext<I> -058 > { -059 -060 /** -061 * This is a stack incase a command calls a command -062 */ -063 static ThreadLocal<Stack<CommandOperationContext>> commandOperationContext = ThreadLocal.withInitial(() -> new Stack<CommandOperationContext>() { -064 @Override -065 public synchronized CommandOperationContext peek() { -066 return super.size() == 0 ? null : super.peek(); -067 } -068 }); -069 protected Map<String, RootCommand> rootCommands = new HashMap<>(); -070 protected final CommandReplacements replacements = new CommandReplacements(this); -071 protected final CommandConditions<I, CEC, CC> conditions = new CommandConditions<>(this); -072 protected ExceptionHandler defaultExceptionHandler = null; -073 boolean logUnhandledExceptions = true; -074 protected Table<Class<?>, String, Object> dependencies = new Table<>(); -075 protected CommandHelpFormatter helpFormatter = new CommandHelpFormatter(this); -076 -077 protected boolean usePerIssuerLocale = false; -078 protected List<IssuerLocaleChangedCallback<I>> localeChangedCallbacks = new ArrayList<>(); -079 protected Set<Locale> supportedLanguages = new HashSet<>(Arrays.asList(Locales.ENGLISH, Locales.DUTCH, Locales.GERMAN, Locales.SPANISH, Locales.FRENCH, Locales.CZECH, Locales.PORTUGUESE, Locales.SWEDISH, Locales.NORWEGIAN_BOKMAAL, Locales.NORWEGIAN_NYNORSK, Locales.RUSSIAN, Locales.BULGARIAN, Locales.HUNGARIAN, Locales.TURKISH, Locales.JAPANESE, Locales.CHINESE, Locales.SIMPLIFIED_CHINESE, Locales.TRADITIONAL_CHINESE, Locales.KOREAN)); -080 protected Map<MessageType, MF> formatters = new IdentityHashMap<>(); -081 protected MF defaultFormatter; -082 protected int defaultHelpPerPage = 10; -083 -084 protected Map<UUID, Locale> issuersLocale = new ConcurrentHashMap<>(); +050 +051@SuppressWarnings("WeakerAccess") +052public abstract class CommandManager< +053 IT, +054 I extends CommandIssuer, +055 FT, +056 MF extends MessageFormatter<FT>, +057 CEC extends CommandExecutionContext<CEC, I>, +058 CC extends ConditionContext<I> +059 > { +060 +061 /** +062 * This is a stack incase a command calls a command +063 */ +064 static ThreadLocal<Stack<CommandOperationContext>> commandOperationContext = ThreadLocal.withInitial(() -> new Stack<CommandOperationContext>() { +065 @Override +066 public synchronized CommandOperationContext peek() { +067 return super.size() == 0 ? null : super.peek(); +068 } +069 }); +070 protected Map<String, RootCommand> rootCommands = new HashMap<>(); +071 protected final CommandReplacements replacements = new CommandReplacements(this); +072 protected final CommandConditions<I, CEC, CC> conditions = new CommandConditions<>(this); +073 protected ExceptionHandler defaultExceptionHandler = null; +074 boolean logUnhandledExceptions = true; +075 protected Table<Class<?>, String, Object> dependencies = new Table<>(); +076 protected CommandHelpFormatter helpFormatter = new CommandHelpFormatter(this); +077 +078 protected boolean usePerIssuerLocale = false; +079 protected List<IssuerLocaleChangedCallback<I>> localeChangedCallbacks = new ArrayList<>(); +080 protected Set<Locale> supportedLanguages = new HashSet<>(Arrays.asList(Locales.ENGLISH, Locales.DUTCH, Locales.GERMAN, Locales.SPANISH, Locales.FRENCH, Locales.CZECH, Locales.PORTUGUESE, Locales.SWEDISH, Locales.NORWEGIAN_BOKMAAL, Locales.NORWEGIAN_NYNORSK, Locales.RUSSIAN, Locales.BULGARIAN, Locales.HUNGARIAN, Locales.TURKISH, Locales.JAPANESE, Locales.CHINESE, Locales.SIMPLIFIED_CHINESE, Locales.TRADITIONAL_CHINESE, Locales.KOREAN)); +081 protected Predicate<String> validNamePredicate = name -> true; +082 protected Map<MessageType, MF> formatters = new IdentityHashMap<>(); +083 protected MF defaultFormatter; +084 protected int defaultHelpPerPage = 10; 085 -086 private Set<String> unstableAPIs = new HashSet<>(); +086 protected Map<UUID, Locale> issuersLocale = new ConcurrentHashMap<>(); 087 -088 private Annotations annotations = new Annotations<>(this); -089 private CommandRouter router = new CommandRouter(this); -090 -091 public static CommandOperationContext getCurrentCommandOperationContext() { -092 return commandOperationContext.get().peek(); -093 } -094 -095 public static CommandIssuer getCurrentCommandIssuer() { -096 CommandOperationContext context = commandOperationContext.get().peek(); -097 return context != null ? context.getCommandIssuer() : null; -098 } -099 -100 public static CommandManager getCurrentCommandManager() { -101 CommandOperationContext context = commandOperationContext.get().peek(); -102 return context != null ? context.getCommandManager() : null; -103 } -104 -105 public MF setFormat(MessageType type, MF formatter) { -106 return formatters.put(type, formatter); -107 } -108 -109 public MF getFormat(MessageType type) { -110 return formatters.getOrDefault(type, defaultFormatter); -111 } -112 -113 public void setFormat(MessageType type, FT... colors) { -114 MF format = getFormat(type); -115 for (int i = 1; i <= colors.length; i++) { -116 format.setColor(i, colors[i - 1]); -117 } -118 } -119 -120 public void setFormat(MessageType type, int i, FT color) { -121 MF format = getFormat(type); -122 format.setColor(i, color); -123 } -124 -125 public MF getDefaultFormatter() { -126 return defaultFormatter; -127 } -128 -129 public void setDefaultFormatter(MF defaultFormatter) { -130 this.defaultFormatter = defaultFormatter; -131 } -132 -133 public CommandConditions<I, CEC, CC> getCommandConditions() { -134 return conditions; -135 } -136 -137 /** -138 * Gets the command contexts manager -139 * -140 * @return Command Contexts -141 */ -142 public abstract CommandContexts<?> getCommandContexts(); -143 -144 /** -145 * Gets the command completions manager -146 * -147 * @return Command Completions -148 */ -149 public abstract CommandCompletions<?> getCommandCompletions(); -150 -151 /** -152 * @deprecated Unstable API -153 */ -154 @Deprecated -155 @UnstableAPI -156 public CommandHelp generateCommandHelp(@NotNull String command) { -157 verifyUnstableAPI("help"); -158 CommandOperationContext context = getCurrentCommandOperationContext(); -159 if (context == null) { -160 throw new IllegalStateException("This method can only be called as part of a command execution."); -161 } -162 return generateCommandHelp(context.getCommandIssuer(), command); -163 } -164 -165 /** -166 * @deprecated Unstable API -167 */ -168 @Deprecated -169 @UnstableAPI -170 public CommandHelp generateCommandHelp(CommandIssuer issuer, @NotNull String command) { -171 verifyUnstableAPI("help"); -172 return generateCommandHelp(issuer, obtainRootCommand(command)); -173 } -174 -175 /** -176 * @deprecated Unstable API -177 */ -178 @Deprecated -179 @UnstableAPI -180 public CommandHelp generateCommandHelp() { -181 verifyUnstableAPI("help"); -182 CommandOperationContext context = getCurrentCommandOperationContext(); -183 if (context == null) { -184 throw new IllegalStateException("This method can only be called as part of a command execution."); -185 } -186 String commandLabel = context.getCommandLabel(); -187 return generateCommandHelp(context.getCommandIssuer(), this.obtainRootCommand(commandLabel)); -188 } -189 -190 /** -191 * @deprecated Unstable API -192 */ -193 @Deprecated -194 @UnstableAPI -195 public CommandHelp generateCommandHelp(CommandIssuer issuer, RootCommand rootCommand) { -196 verifyUnstableAPI("help"); -197 return new CommandHelp(this, rootCommand, issuer); -198 } -199 -200 /** -201 * @deprecated Unstable API -202 */ -203 @Deprecated -204 @UnstableAPI -205 public int getDefaultHelpPerPage() { -206 verifyUnstableAPI("help"); -207 return defaultHelpPerPage; -208 } -209 -210 /** -211 * @deprecated Unstable API -212 */ -213 @Deprecated -214 @UnstableAPI -215 public void setDefaultHelpPerPage(int defaultHelpPerPage) { -216 verifyUnstableAPI("help"); -217 this.defaultHelpPerPage = defaultHelpPerPage; -218 } -219 -220 /** -221 * @deprecated Unstable API -222 */ -223 @Deprecated -224 @UnstableAPI -225 public void setHelpFormatter(CommandHelpFormatter helpFormatter) { -226 this.helpFormatter = helpFormatter; -227 } -228 -229 /** -230 * @deprecated Unstable API -231 */ -232 @Deprecated -233 @UnstableAPI -234 public CommandHelpFormatter getHelpFormatter() { -235 return helpFormatter; -236 } -237 -238 CommandRouter getRouter() { -239 return router; -240 } -241 -242 /** -243 * Registers a command with ACF -244 * -245 * @param command The command to register -246 * @return boolean -247 */ -248 public abstract void registerCommand(BaseCommand command); -249 -250 public abstract boolean hasRegisteredCommands(); +088 private Set<String> unstableAPIs = new HashSet<>(); +089 +090 private Annotations annotations = new Annotations<>(this); +091 private CommandRouter router = new CommandRouter(this); +092 +093 public static CommandOperationContext getCurrentCommandOperationContext() { +094 return commandOperationContext.get().peek(); +095 } +096 +097 public static CommandIssuer getCurrentCommandIssuer() { +098 CommandOperationContext context = commandOperationContext.get().peek(); +099 return context != null ? context.getCommandIssuer() : null; +100 } +101 +102 public static CommandManager getCurrentCommandManager() { +103 CommandOperationContext context = commandOperationContext.get().peek(); +104 return context != null ? context.getCommandManager() : null; +105 } +106 +107 public MF setFormat(MessageType type, MF formatter) { +108 return formatters.put(type, formatter); +109 } +110 +111 public MF getFormat(MessageType type) { +112 return formatters.getOrDefault(type, defaultFormatter); +113 } +114 +115 public void setFormat(MessageType type, FT... colors) { +116 MF format = getFormat(type); +117 for (int i = 1; i <= colors.length; i++) { +118 format.setColor(i, colors[i - 1]); +119 } +120 } +121 +122 public void setFormat(MessageType type, int i, FT color) { +123 MF format = getFormat(type); +124 format.setColor(i, color); +125 } +126 +127 public MF getDefaultFormatter() { +128 return defaultFormatter; +129 } +130 +131 public void setDefaultFormatter(MF defaultFormatter) { +132 this.defaultFormatter = defaultFormatter; +133 } +134 +135 public CommandConditions<I, CEC, CC> getCommandConditions() { +136 return conditions; +137 } +138 +139 /** +140 * Gets the command contexts manager +141 * +142 * @return Command Contexts +143 */ +144 public abstract CommandContexts<?> getCommandContexts(); +145 +146 /** +147 * Gets the command completions manager +148 * +149 * @return Command Completions +150 */ +151 public abstract CommandCompletions<?> getCommandCompletions(); +152 +153 /** +154 * @deprecated Unstable API +155 */ +156 @Deprecated +157 @UnstableAPI +158 public CommandHelp generateCommandHelp(@NotNull String command) { +159 verifyUnstableAPI("help"); +160 CommandOperationContext context = getCurrentCommandOperationContext(); +161 if (context == null) { +162 throw new IllegalStateException("This method can only be called as part of a command execution."); +163 } +164 return generateCommandHelp(context.getCommandIssuer(), command); +165 } +166 +167 /** +168 * @deprecated Unstable API +169 */ +170 @Deprecated +171 @UnstableAPI +172 public CommandHelp generateCommandHelp(CommandIssuer issuer, @NotNull String command) { +173 verifyUnstableAPI("help"); +174 return generateCommandHelp(issuer, obtainRootCommand(command)); +175 } +176 +177 /** +178 * @deprecated Unstable API +179 */ +180 @Deprecated +181 @UnstableAPI +182 public CommandHelp generateCommandHelp() { +183 verifyUnstableAPI("help"); +184 CommandOperationContext context = getCurrentCommandOperationContext(); +185 if (context == null) { +186 throw new IllegalStateException("This method can only be called as part of a command execution."); +187 } +188 String commandLabel = context.getCommandLabel(); +189 return generateCommandHelp(context.getCommandIssuer(), this.obtainRootCommand(commandLabel)); +190 } +191 +192 /** +193 * @deprecated Unstable API +194 */ +195 @Deprecated +196 @UnstableAPI +197 public CommandHelp generateCommandHelp(CommandIssuer issuer, RootCommand rootCommand) { +198 verifyUnstableAPI("help"); +199 return new CommandHelp(this, rootCommand, issuer); +200 } +201 +202 /** +203 * @deprecated Unstable API +204 */ +205 @Deprecated +206 @UnstableAPI +207 public int getDefaultHelpPerPage() { +208 verifyUnstableAPI("help"); +209 return defaultHelpPerPage; +210 } +211 +212 /** +213 * @deprecated Unstable API +214 */ +215 @Deprecated +216 @UnstableAPI +217 public void setDefaultHelpPerPage(int defaultHelpPerPage) { +218 verifyUnstableAPI("help"); +219 this.defaultHelpPerPage = defaultHelpPerPage; +220 } +221 +222 /** +223 * @deprecated Unstable API +224 */ +225 @Deprecated +226 @UnstableAPI +227 public void setHelpFormatter(CommandHelpFormatter helpFormatter) { +228 this.helpFormatter = helpFormatter; +229 } +230 +231 /** +232 * @deprecated Unstable API +233 */ +234 @Deprecated +235 @UnstableAPI +236 public CommandHelpFormatter getHelpFormatter() { +237 return helpFormatter; +238 } +239 +240 CommandRouter getRouter() { +241 return router; +242 } +243 +244 /** +245 * Registers a command with ACF +246 * +247 * @param command The command to register +248 * @return boolean +249 */ +250 public abstract void registerCommand(BaseCommand command); 251 -252 public abstract boolean isCommandIssuer(Class<?> type); +252 public abstract boolean hasRegisteredCommands(); 253 -254 // TODO: Change this to IT if we make a breaking change -255 public abstract I getCommandIssuer(Object issuer); -256 -257 public abstract RootCommand createRootCommand(String cmd); +254 public abstract boolean isCommandIssuer(Class<?> type); +255 +256 // TODO: Change this to IT if we make a breaking change +257 public abstract I getCommandIssuer(Object issuer); 258 -259 /** -260 * Returns a Locales Manager to add and modify language tables for your commands. -261 * -262 * @return -263 */ -264 public abstract Locales getLocales(); -265 -266 public boolean usingPerIssuerLocale() { -267 return usePerIssuerLocale; -268 } -269 -270 public boolean usePerIssuerLocale(boolean setting) { -271 boolean old = usePerIssuerLocale; -272 usePerIssuerLocale = setting; -273 return old; -274 } -275 -276 public ConditionContext createConditionContext(CommandIssuer issuer, String config) { -277 //noinspection unchecked -278 return new ConditionContext(issuer, config); -279 } -280 -281 public abstract CommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs); -282 -283 public abstract CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args); -284 -285 public abstract void log(final LogLevel level, final String message, final Throwable throwable); -286 -287 public void log(final LogLevel level, final String message) { -288 log(level, message, null); -289 } -290 -291 /** -292 * Lets you add custom string replacements that can be applied to annotation values, -293 * to reduce duplication/repetition of common values such as permission nodes and command prefixes. -294 * <p> -295 * Any replacement registered starts with a % -296 * <p> -297 * So for ex @CommandPermission("%staff") -298 * -299 * @return Replacements Manager -300 */ -301 public CommandReplacements getCommandReplacements() { -302 return replacements; +259 public abstract RootCommand createRootCommand(String cmd); +260 +261 /** +262 * Returns a Locales Manager to add and modify language tables for your commands. +263 * +264 * @return +265 */ +266 public abstract Locales getLocales(); +267 +268 public boolean usingPerIssuerLocale() { +269 return usePerIssuerLocale; +270 } +271 +272 public boolean usePerIssuerLocale(boolean setting) { +273 boolean old = usePerIssuerLocale; +274 usePerIssuerLocale = setting; +275 return old; +276 } +277 +278 public boolean isValidName(@NotNull String name) { +279 return validNamePredicate.test(name); +280 } +281 +282 public @NotNull Predicate<String> getValidNamePredicate() { +283 return validNamePredicate; +284 } +285 +286 public void setValidNamePredicate(@NotNull Predicate<String> isValidName) { +287 this.validNamePredicate = isValidName; +288 } +289 +290 public ConditionContext createConditionContext(CommandIssuer issuer, String config) { +291 //noinspection unchecked +292 return new ConditionContext(issuer, config); +293 } +294 +295 public abstract CommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs); +296 +297 public abstract CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args); +298 +299 public abstract void log(final LogLevel level, final String message, final Throwable throwable); +300 +301 public void log(final LogLevel level, final String message) { +302 log(level, message, null); 303 } 304 -305 public boolean hasPermission(CommandIssuer issuer, Set<String> permissions) { -306 for (String permission : permissions) { -307 if (!hasPermission(issuer, permission)) { -308 return false; -309 } -310 } -311 return true; -312 } -313 -314 public boolean hasPermission(CommandIssuer issuer, String permission) { -315 if (permission == null || permission.isEmpty()) { -316 return true; -317 } -318 for (String perm : ACFPatterns.COMMA.split(permission)) { -319 if (!perm.isEmpty() && !issuer.hasPermission(perm)) { -320 return false; -321 } -322 } -323 return true; -324 } -325 -326 public synchronized RootCommand getRootCommand(@NotNull String cmd) { -327 return rootCommands.get(ACFPatterns.SPACE.split(cmd.toLowerCase(Locale.ENGLISH), 2)[0]); -328 } -329 -330 public synchronized RootCommand obtainRootCommand(@NotNull String cmd) { -331 return rootCommands.computeIfAbsent(ACFPatterns.SPACE.split(cmd.toLowerCase(Locale.ENGLISH), 2)[0], this::createRootCommand); -332 } -333 -334 public abstract Collection<RootCommand> getRegisteredRootCommands(); -335 -336 public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) { -337 return new RegisteredCommand(command, cmdName, method, prefSubCommand); +305 /** +306 * Lets you add custom string replacements that can be applied to annotation values, +307 * to reduce duplication/repetition of common values such as permission nodes and command prefixes. +308 * <p> +309 * Any replacement registered starts with a % +310 * <p> +311 * So for ex @CommandPermission("%staff") +312 * +313 * @return Replacements Manager +314 */ +315 public CommandReplacements getCommandReplacements() { +316 return replacements; +317 } +318 +319 public boolean hasPermission(CommandIssuer issuer, Set<String> permissions) { +320 for (String permission : permissions) { +321 if (!hasPermission(issuer, permission)) { +322 return false; +323 } +324 } +325 return true; +326 } +327 +328 public boolean hasPermission(CommandIssuer issuer, String permission) { +329 if (permission == null || permission.isEmpty()) { +330 return true; +331 } +332 for (String perm : ACFPatterns.COMMA.split(permission)) { +333 if (!perm.isEmpty() && !issuer.hasPermission(perm)) { +334 return false; +335 } +336 } +337 return true; 338 } 339 -340 /** -341 * Sets the default {@link ExceptionHandler} that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered. -342 * -343 * @param exceptionHandler the handler that should handle uncaught exceptions. May not be null if logExceptions is false -344 */ -345 public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler) { -346 if (exceptionHandler == null && !this.logUnhandledExceptions) { -347 throw new IllegalArgumentException("You may not disable the default exception handler and have logging of unhandled exceptions disabled"); -348 } -349 defaultExceptionHandler = exceptionHandler; -350 } -351 -352 /** -353 * Sets the default {@link ExceptionHandler} that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered, and lets you control if ACF should also log the exception still. -354 * <p> -355 * If you disable logging, you need to log it yourself in your handler. +340 public synchronized RootCommand getRootCommand(@NotNull String cmd) { +341 return rootCommands.get(ACFPatterns.SPACE.split(cmd.toLowerCase(Locale.ENGLISH), 2)[0]); +342 } +343 +344 public synchronized RootCommand obtainRootCommand(@NotNull String cmd) { +345 return rootCommands.computeIfAbsent(ACFPatterns.SPACE.split(cmd.toLowerCase(Locale.ENGLISH), 2)[0], this::createRootCommand); +346 } +347 +348 public abstract Collection<RootCommand> getRegisteredRootCommands(); +349 +350 public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) { +351 return new RegisteredCommand(command, cmdName, method, prefSubCommand); +352 } +353 +354 /** +355 * Sets the default {@link ExceptionHandler} that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered. 356 * -357 * @param exceptionHandler the handler that should handle uncaught exceptions. May not be null if logExceptions is false -358 * @param logExceptions Whether or not to log exceptions. -359 */ -360 public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler, boolean logExceptions) { -361 if (exceptionHandler == null && !logExceptions) { -362 throw new IllegalArgumentException("You may not disable the default exception handler and have logging of unhandled exceptions disabled"); -363 } -364 this.logUnhandledExceptions = logExceptions; -365 this.defaultExceptionHandler = exceptionHandler; -366 } -367 -368 public boolean isLoggingUnhandledExceptions() { -369 return this.logUnhandledExceptions; -370 } -371 -372 /** -373 * Gets the current default exception handler, might be null. -374 * -375 * @return the default exception handler -376 */ -377 public ExceptionHandler getDefaultExceptionHandler() { -378 return defaultExceptionHandler; -379 } -380 -381 protected boolean handleUncaughtException(BaseCommand scope, RegisteredCommand registeredCommand, CommandIssuer sender, List<String> args, Throwable t) { -382 if (t instanceof InvocationTargetException && t.getCause() != null) { -383 t = t.getCause(); -384 } -385 boolean result = false; -386 if (scope.getExceptionHandler() != null) { -387 result = scope.getExceptionHandler().execute(scope, registeredCommand, sender, args, t); -388 } else if (defaultExceptionHandler != null) { -389 result = defaultExceptionHandler.execute(scope, registeredCommand, sender, args, t); -390 } -391 return result; -392 } -393 -394 public void sendMessage(IT issuerArg, MessageType type, MessageKeyProvider key, String... replacements) { -395 sendMessage(getCommandIssuer(issuerArg), type, key, replacements); -396 } -397 -398 public void sendMessage(CommandIssuer issuer, MessageType type, MessageKeyProvider key, String... replacements) { -399 String message = formatMessage(issuer, type, key, replacements); -400 -401 for (String msg : ACFPatterns.NEWLINE.split(message)) { -402 issuer.sendMessageInternal(ACFUtil.rtrim(msg)); -403 } -404 } -405 -406 public String formatMessage(CommandIssuer issuer, MessageType type, MessageKeyProvider key, String... replacements) { -407 String message = getLocales().getMessage(issuer, key.getMessageKey()); -408 if (replacements.length > 0) { -409 message = ACFUtil.replaceStrings(message, replacements); -410 } +357 * @param exceptionHandler the handler that should handle uncaught exceptions. May not be null if logExceptions is false +358 */ +359 public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler) { +360 if (exceptionHandler == null && !this.logUnhandledExceptions) { +361 throw new IllegalArgumentException("You may not disable the default exception handler and have logging of unhandled exceptions disabled"); +362 } +363 defaultExceptionHandler = exceptionHandler; +364 } +365 +366 /** +367 * Sets the default {@link ExceptionHandler} that is called when an exception occurs while executing a command, if the command doesn't have its own exception handler registered, and lets you control if ACF should also log the exception still. +368 * <p> +369 * If you disable logging, you need to log it yourself in your handler. +370 * +371 * @param exceptionHandler the handler that should handle uncaught exceptions. May not be null if logExceptions is false +372 * @param logExceptions Whether or not to log exceptions. +373 */ +374 public void setDefaultExceptionHandler(ExceptionHandler exceptionHandler, boolean logExceptions) { +375 if (exceptionHandler == null && !logExceptions) { +376 throw new IllegalArgumentException("You may not disable the default exception handler and have logging of unhandled exceptions disabled"); +377 } +378 this.logUnhandledExceptions = logExceptions; +379 this.defaultExceptionHandler = exceptionHandler; +380 } +381 +382 public boolean isLoggingUnhandledExceptions() { +383 return this.logUnhandledExceptions; +384 } +385 +386 /** +387 * Gets the current default exception handler, might be null. +388 * +389 * @return the default exception handler +390 */ +391 public ExceptionHandler getDefaultExceptionHandler() { +392 return defaultExceptionHandler; +393 } +394 +395 protected boolean handleUncaughtException(BaseCommand scope, RegisteredCommand registeredCommand, CommandIssuer sender, List<String> args, Throwable t) { +396 if (t instanceof InvocationTargetException && t.getCause() != null) { +397 t = t.getCause(); +398 } +399 boolean result = false; +400 if (scope.getExceptionHandler() != null) { +401 result = scope.getExceptionHandler().execute(scope, registeredCommand, sender, args, t); +402 } else if (defaultExceptionHandler != null) { +403 result = defaultExceptionHandler.execute(scope, registeredCommand, sender, args, t); +404 } +405 return result; +406 } +407 +408 public void sendMessage(IT issuerArg, MessageType type, MessageKeyProvider key, String... replacements) { +409 sendMessage(getCommandIssuer(issuerArg), type, key, replacements); +410 } 411 -412 message = getCommandReplacements().replace(message); -413 message = getLocales().replaceI18NStrings(message); +412 public void sendMessage(CommandIssuer issuer, MessageType type, MessageKeyProvider key, String... replacements) { +413 String message = formatMessage(issuer, type, key, replacements); 414 -415 MessageFormatter formatter = formatters.getOrDefault(type, defaultFormatter); -416 if (formatter != null) { -417 message = formatter.format(message); -418 } -419 return message; -420 } -421 -422 public void onLocaleChange(IssuerLocaleChangedCallback<I> onChange) { -423 localeChangedCallbacks.add(onChange); -424 } +415 for (String msg : ACFPatterns.NEWLINE.split(message)) { +416 issuer.sendMessageInternal(ACFUtil.rtrim(msg)); +417 } +418 } +419 +420 public String formatMessage(CommandIssuer issuer, MessageType type, MessageKeyProvider key, String... replacements) { +421 String message = getLocales().getMessage(issuer, key.getMessageKey()); +422 if (replacements.length > 0) { +423 message = ACFUtil.replaceStrings(message, replacements); +424 } 425 -426 public void notifyLocaleChange(I issuer, Locale oldLocale, Locale newLocale) { -427 localeChangedCallbacks.forEach(cb -> { -428 try { -429 cb.onIssuerLocaleChange(issuer, oldLocale, newLocale); -430 } catch (Exception e) { -431 this.log(LogLevel.ERROR, "Error in notifyLocaleChange", e); -432 } -433 }); +426 message = getCommandReplacements().replace(message); +427 message = getLocales().replaceI18NStrings(message); +428 +429 MessageFormatter formatter = formatters.getOrDefault(type, defaultFormatter); +430 if (formatter != null) { +431 message = formatter.format(message); +432 } +433 return message; 434 } 435 -436 public Locale setIssuerLocale(IT issuer, Locale locale) { -437 I commandIssuer = getCommandIssuer(issuer); -438 -439 Locale old = issuersLocale.put(commandIssuer.getUniqueId(), locale); -440 if (!Objects.equals(old, locale)) { -441 this.notifyLocaleChange(commandIssuer, old, locale); -442 } -443 -444 return old; -445 } -446 -447 public Locale getIssuerLocale(CommandIssuer issuer) { -448 if (usingPerIssuerLocale() && issuer != null) { -449 Locale locale = issuersLocale.get(issuer.getUniqueId()); -450 if (locale != null) { -451 return locale; -452 } -453 } -454 -455 return getLocales().getDefaultLocale(); -456 } +436 public void onLocaleChange(IssuerLocaleChangedCallback<I> onChange) { +437 localeChangedCallbacks.add(onChange); +438 } +439 +440 public void notifyLocaleChange(I issuer, Locale oldLocale, Locale newLocale) { +441 localeChangedCallbacks.forEach(cb -> { +442 try { +443 cb.onIssuerLocaleChange(issuer, oldLocale, newLocale); +444 } catch (Exception e) { +445 this.log(LogLevel.ERROR, "Error in notifyLocaleChange", e); +446 } +447 }); +448 } +449 +450 public Locale setIssuerLocale(IT issuer, Locale locale) { +451 I commandIssuer = getCommandIssuer(issuer); +452 +453 Locale old = issuersLocale.put(commandIssuer.getUniqueId(), locale); +454 if (!Objects.equals(old, locale)) { +455 this.notifyLocaleChange(commandIssuer, old, locale); +456 } 457 -458 CommandOperationContext<I> createCommandOperationContext(BaseCommand command, CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) { -459 //noinspection unchecked -460 return new CommandOperationContext<>( -461 this, -462 (I) issuer, -463 command, -464 commandLabel, -465 args, -466 isAsync -467 ); -468 } -469 -470 /** -471 * Gets a list of all currently supported languages for this manager. -472 * These locales will be automatically loaded from -473 * -474 * @return -475 */ -476 public Set<Locale> getSupportedLanguages() { -477 return supportedLanguages; -478 } -479 -480 /** -481 * Adds a new locale to the list of automatic Locales to load Message Bundles for. -482 * All bundles loaded under the previous supported languages will now automatically load for this new locale too. -483 * -484 * @param locale -485 */ -486 public void addSupportedLanguage(Locale locale) { -487 supportedLanguages.add(locale); -488 getLocales().loadMissingBundles(); -489 } -490 -491 /** -492 * Registers an instance of a class to be registered as an injectable dependency.<br> -493 * The command manager will attempt to inject all fields in a command class that are annotated with -494 * {@link co.aikar.commands.annotation.Dependency} with the provided instance. -495 * -496 * @param clazz the class the injector should look for when injecting -497 * @param instance the instance of the class that should be injected -498 * @throws IllegalStateException when there is already an instance for the provided class registered +458 return old; +459 } +460 +461 public Locale getIssuerLocale(CommandIssuer issuer) { +462 if (usingPerIssuerLocale() && issuer != null) { +463 Locale locale = issuersLocale.get(issuer.getUniqueId()); +464 if (locale != null) { +465 return locale; +466 } +467 } +468 +469 return getLocales().getDefaultLocale(); +470 } +471 +472 CommandOperationContext<I> createCommandOperationContext(BaseCommand command, CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) { +473 //noinspection unchecked +474 return new CommandOperationContext<>( +475 this, +476 (I) issuer, +477 command, +478 commandLabel, +479 args, +480 isAsync +481 ); +482 } +483 +484 /** +485 * Gets a list of all currently supported languages for this manager. +486 * These locales will be automatically loaded from +487 * +488 * @return +489 */ +490 public Set<Locale> getSupportedLanguages() { +491 return supportedLanguages; +492 } +493 +494 /** +495 * Adds a new locale to the list of automatic Locales to load Message Bundles for. +496 * All bundles loaded under the previous supported languages will now automatically load for this new locale too. +497 * +498 * @param locale 499 */ -500 public <T> void registerDependency(Class<? extends T> clazz, T instance) { -501 registerDependency(clazz, clazz.getName(), instance); -502 } -503 -504 /** -505 * Registers an instance of a class to be registered as an injectable dependency.<br> -506 * The command manager will attempt to inject all fields in a command class that are annotated with -507 * {@link co.aikar.commands.annotation.Dependency} with the provided instance. -508 * -509 * @param clazz the class the injector should look for when injecting -510 * @param key the key which needs to be present if that +500 public void addSupportedLanguage(Locale locale) { +501 supportedLanguages.add(locale); +502 getLocales().loadMissingBundles(); +503 } +504 +505 /** +506 * Registers an instance of a class to be registered as an injectable dependency.<br> +507 * The command manager will attempt to inject all fields in a command class that are annotated with +508 * {@link co.aikar.commands.annotation.Dependency} with the provided instance. +509 * +510 * @param clazz the class the injector should look for when injecting 511 * @param instance the instance of the class that should be injected 512 * @throws IllegalStateException when there is already an instance for the provided class registered 513 */ -514 public <T> void registerDependency(Class<? extends T> clazz, String key, T instance) { -515 if (dependencies.containsKey(clazz, key)) { -516 throw new IllegalStateException("There is already an instance of " + clazz.getName() + " with the key " + key + " registered!"); -517 } -518 -519 dependencies.put(clazz, key, instance); -520 } -521 -522 /** -523 * Attempts to inject instances of classes registered with {@link CommandManager#registerDependency(Class, Object)} -524 * into all fields of the class and its superclasses that are marked with {@link Dependency}. -525 * -526 * @param baseCommand the instance which fields should be filled +514 public <T> void registerDependency(Class<? extends T> clazz, T instance) { +515 registerDependency(clazz, clazz.getName(), instance); +516 } +517 +518 /** +519 * Registers an instance of a class to be registered as an injectable dependency.<br> +520 * The command manager will attempt to inject all fields in a command class that are annotated with +521 * {@link co.aikar.commands.annotation.Dependency} with the provided instance. +522 * +523 * @param clazz the class the injector should look for when injecting +524 * @param key the key which needs to be present if that +525 * @param instance the instance of the class that should be injected +526 * @throws IllegalStateException when there is already an instance for the provided class registered 527 */ -528 void injectDependencies(BaseCommand baseCommand) { -529 Class clazz = baseCommand.getClass(); -530 do { -531 for (Field field : clazz.getDeclaredFields()) { -532 if (annotations.hasAnnotation(field, Dependency.class)) { -533 String dependency = annotations.getAnnotationValue(field, Dependency.class); -534 String key = (key = dependency).isEmpty() ? field.getType().getName() : key; -535 Object object = dependencies.row(field.getType()).get(key); -536 if (object == null) { -537 throw new UnresolvedDependencyException("Could not find a registered instance of " + -538 field.getType().getName() + " with key " + key + " for field " + field.getName() + -539 " in class " + baseCommand.getClass().getName()); -540 } -541 -542 try { -543 boolean accessible = field.isAccessible(); -544 if (!accessible) { -545 field.setAccessible(true); -546 } -547 field.set(baseCommand, object); -548 field.setAccessible(accessible); -549 } catch (IllegalAccessException e) { -550 e.printStackTrace(); //TODO should we print our own exception here to make a more descriptive error? -551 } -552 } -553 } -554 clazz = clazz.getSuperclass(); -555 } while (!clazz.equals(BaseCommand.class)); -556 } -557 -558 /** -559 * @deprecated Use this with caution! If you enable and use Unstable API's, your next compile using ACF -560 * may require you to update your implementation to those unstable API's -561 */ -562 @Deprecated -563 public void enableUnstableAPI(String api) { -564 unstableAPIs.add(api); -565 } -566 -567 void verifyUnstableAPI(String api) { -568 if (!unstableAPIs.contains(api)) { -569 throw new IllegalStateException("Using an unstable API that has not been enabled ( " + api + "). See https://acfunstable.emc.gs"); -570 } -571 } -572 -573 boolean hasUnstableAPI(String api) { -574 return unstableAPIs.contains(api); -575 } -576 -577 Annotations getAnnotations() { -578 return annotations; +528 public <T> void registerDependency(Class<? extends T> clazz, String key, T instance) { +529 if (dependencies.containsKey(clazz, key)) { +530 throw new IllegalStateException("There is already an instance of " + clazz.getName() + " with the key " + key + " registered!"); +531 } +532 +533 dependencies.put(clazz, key, instance); +534 } +535 +536 /** +537 * Attempts to inject instances of classes registered with {@link CommandManager#registerDependency(Class, Object)} +538 * into all fields of the class and its superclasses that are marked with {@link Dependency}. +539 * +540 * @param baseCommand the instance which fields should be filled +541 */ +542 void injectDependencies(BaseCommand baseCommand) { +543 Class clazz = baseCommand.getClass(); +544 do { +545 for (Field field : clazz.getDeclaredFields()) { +546 if (annotations.hasAnnotation(field, Dependency.class)) { +547 String dependency = annotations.getAnnotationValue(field, Dependency.class); +548 String key = (key = dependency).isEmpty() ? field.getType().getName() : key; +549 Object object = dependencies.row(field.getType()).get(key); +550 if (object == null) { +551 throw new UnresolvedDependencyException("Could not find a registered instance of " + +552 field.getType().getName() + " with key " + key + " for field " + field.getName() + +553 " in class " + baseCommand.getClass().getName()); +554 } +555 +556 try { +557 boolean accessible = field.isAccessible(); +558 if (!accessible) { +559 field.setAccessible(true); +560 } +561 field.set(baseCommand, object); +562 field.setAccessible(accessible); +563 } catch (IllegalAccessException e) { +564 e.printStackTrace(); //TODO should we print our own exception here to make a more descriptive error? +565 } +566 } +567 } +568 clazz = clazz.getSuperclass(); +569 } while (!clazz.equals(BaseCommand.class)); +570 } +571 +572 /** +573 * @deprecated Use this with caution! If you enable and use Unstable API's, your next compile using ACF +574 * may require you to update your implementation to those unstable API's +575 */ +576 @Deprecated +577 public void enableUnstableAPI(String api) { +578 unstableAPIs.add(api); 579 } 580 -581 public String getCommandPrefix(CommandIssuer issuer) { -582 return ""; -583 } -584} +581 void verifyUnstableAPI(String api) { +582 if (!unstableAPIs.contains(api)) { +583 throw new IllegalStateException("Using an unstable API that has not been enabled ( " + api + "). See https://acfunstable.emc.gs"); +584 } +585 } +586 +587 boolean hasUnstableAPI(String api) { +588 return unstableAPIs.contains(api); +589 } +590 +591 Annotations getAnnotations() { +592 return annotations; +593 } +594 +595 public String getCommandPrefix(CommandIssuer issuer) { +596 return ""; +597 } +598} diff --git a/docs/acf-paper/co/aikar/commands/PaperCommandManager.html b/docs/acf-paper/co/aikar/commands/PaperCommandManager.html index 42921071..01ef1e6d 100644 --- a/docs/acf-paper/co/aikar/commands/PaperCommandManager.html +++ b/docs/acf-paper/co/aikar/commands/PaperCommandManager.html @@ -134,7 +134,7 @@ loadScripts(document, 'script');

  • Methods inherited from class co.aikar.commands.BukkitCommandManager

    -createCommandContext, createCompletionContext, createConditionContext, createRegisteredCommand, createRootCommand, getCommandIssuer, getCommandPrefix, getLocales, getPlugin, getRegisteredRootCommands, getTimings, handleUncaughtException, hasRegisteredCommands, isCommandIssuer, log, registerCommand, registerCommand, setPlayerLocale, unregisterCommand, unregisterCommand, unregisterCommands, usePerIssuerLocale
    +createCommandContext, createCompletionContext, createConditionContext, createRegisteredCommand, createRootCommand, getCommandIssuer, getCommandPrefix, getLocales, getPlugin, getRegisteredRootCommands, getScheduler, getTimings, handleUncaughtException, hasRegisteredCommands, isCommandIssuer, log, registerCommand, registerCommand, setPlayerLocale, unregisterCommand, unregisterCommand, unregisterCommands, usePerIssuerLocale
  • Methods inherited from class co.aikar.commands.CommandManager

    addSupportedLanguage, formatMessage, generateCommandHelp, generateCommandHelp, generateCommandHelp, generateCommandHelp, getCommandConditions, getCommandReplacements, getCurrentCommandIssuer, getCurrentCommandManager, getCurrentCommandOperationContext, getDefaultExceptionHandler, getDefaultFormatter, getDefaultHelpPerPage, getFormat, getHelpFormatter, getIssuerLocale, getRootCommand, getSupportedLanguages, hasPermission, hasPermission, isLoggingUnhandledExceptions, log, notifyLocaleChange, obtainRootCommand, onLocaleChange, registerDependency, registerDependency, sendMessage, sendMessage, setDefaultExceptionHandler, setDefaultExceptionHandler, setDefaultFormatter, setDefaultHelpPerPage, setFormat, setFormat, setFormat, setHelpFormatter, setIssuerLocale, usePerIssuerLocale, usingPerIssuerLocale
    diff --git a/docs/acf-sponge/co/aikar/commands/ACFSpongeUtil.html b/docs/acf-sponge/co/aikar/commands/ACFSpongeUtil.html index 1a1e3193..256dbc2b 100644 --- a/docs/acf-sponge/co/aikar/commands/ACFSpongeUtil.html +++ b/docs/acf-sponge/co/aikar/commands/ACFSpongeUtil.html @@ -76,7 +76,7 @@ loadScripts(document, 'script');

    -
    public class ACFSpongeUtil +
    public class ACFSpongeUtil extends Object
    @@ -110,7 +110,7 @@ loadScripts(document, 'script'); String search)
  •  
    static boolean
    - +
    isValidName(@Nullable String name)
     
    static List<org.spongepowered.api.entity.living.player.Player>
    matchPlayer(String partialName)
    @@ -135,7 +135,7 @@ loadScripts(document, 'script');
  • ACFSpongeUtil

    -
    public ACFSpongeUtil()
    +
    public ACFSpongeUtil()
  • @@ -149,20 +149,21 @@ loadScripts(document, 'script');
  • findPlayerSmart

    -
    public static org.spongepowered.api.entity.living.player.Player findPlayerSmart(co.aikar.commands.CommandIssuer issuer, +
    public static org.spongepowered.api.entity.living.player.Player findPlayerSmart(co.aikar.commands.CommandIssuer issuer, String search)
  • matchPlayer

    -
    public static List<org.spongepowered.api.entity.living.player.Player> matchPlayer(String partialName)
    +
    public static List<org.spongepowered.api.entity.living.player.Player> matchPlayer(String partialName)
  • isValidName

    -
    public static boolean isValidName(String name)
    +
    public static boolean isValidName(@Nullable + @Nullable String name)
  • diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html index 1e0885d2..7a10233f 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html @@ -278,13 +278,13 @@ loadScripts(document, 'script');
  • getPlugin

    -
    public org.spongepowered.api.plugin.PluginContainer getPlugin()
    +
    public org.spongepowered.api.plugin.PluginContainer getPlugin()
  • isCommandIssuer

    -
    public boolean isCommandIssuer(Class<?> type)
    +
    public boolean isCommandIssuer(Class<?> type)
    Specified by:
    isCommandIssuer in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -294,7 +294,7 @@ loadScripts(document, 'script');
  • getCommandContexts

    -
    public co.aikar.commands.CommandContexts<SpongeCommandExecutionContext> getCommandContexts()
    +
    public co.aikar.commands.CommandContexts<SpongeCommandExecutionContext> getCommandContexts()
    Specified by:
    getCommandContexts in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -304,7 +304,7 @@ loadScripts(document, 'script');
  • getCommandCompletions

    -
    public co.aikar.commands.CommandCompletions<SpongeCommandCompletionContext> getCommandCompletions()
    +
    public co.aikar.commands.CommandCompletions<SpongeCommandCompletionContext> getCommandCompletions()
    Specified by:
    getCommandCompletions in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -314,7 +314,7 @@ loadScripts(document, 'script');
  • getLocales

    - +
    Specified by:
    getLocales in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -324,7 +324,7 @@ loadScripts(document, 'script');
  • hasRegisteredCommands

    -
    public boolean hasRegisteredCommands()
    +
    public boolean hasRegisteredCommands()
    Specified by:
    hasRegisteredCommands in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -334,7 +334,7 @@ loadScripts(document, 'script');
  • registerCommand

    -
    public void registerCommand(co.aikar.commands.BaseCommand command)
    +
    public void registerCommand(co.aikar.commands.BaseCommand command)
    Specified by:
    registerCommand in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -344,13 +344,13 @@ loadScripts(document, 'script');
  • createTiming

    -
    public co.aikar.timings.Timing createTiming(String name)
    +
    public co.aikar.timings.Timing createTiming(String name)
  • createRootCommand

    -
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    +
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    Specified by:
    createRootCommand in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -360,7 +360,7 @@ loadScripts(document, 'script');
  • getRegisteredRootCommands

    -
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    +
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    Specified by:
    getRegisteredRootCommands in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -370,7 +370,7 @@ loadScripts(document, 'script');
  • getCommandIssuer

    - +
    Specified by:
    getCommandIssuer in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    @@ -380,7 +380,7 @@ loadScripts(document, 'script');
  • createCommandContext

    -
    public SpongeCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, +
    public SpongeCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandParameter parameter, co.aikar.commands.CommandIssuer sender, List<String> args, @@ -395,7 +395,7 @@ loadScripts(document, 'script');
  • createCompletionContext

    -
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, +
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandIssuer sender, String input, String config, @@ -409,7 +409,7 @@ loadScripts(document, 'script');
  • createRegisteredCommand

    -
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, +
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, String cmdName, Method method, String prefSubCommand)
    @@ -422,7 +422,7 @@ loadScripts(document, 'script');
  • log

    -
    public void log(co.aikar.commands.LogLevel level, +
    public void log(co.aikar.commands.LogLevel level, String message, Throwable throwable)
    @@ -434,7 +434,7 @@ loadScripts(document, 'script');
  • createConditionContext

    -
    public SpongeConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, +
    public SpongeConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, String config)
    Overrides:
    @@ -445,7 +445,7 @@ loadScripts(document, 'script');
  • getCommandPrefix

    -
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    +
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    Overrides:
    getCommandPrefix in class co.aikar.commands.CommandManager<org.spongepowered.api.command.CommandSource,SpongeCommandIssuer,org.spongepowered.api.text.format.TextColor,SpongeMessageFormatter,SpongeCommandExecutionContext,SpongeConditionContext>
    diff --git a/docs/acf-sponge/src-html/co/aikar/commands/ACFSpongeUtil.html b/docs/acf-sponge/src-html/co/aikar/commands/ACFSpongeUtil.html index afe2d72d..47b46d13 100644 --- a/docs/acf-sponge/src-html/co/aikar/commands/ACFSpongeUtil.html +++ b/docs/acf-sponge/src-html/co/aikar/commands/ACFSpongeUtil.html @@ -13,100 +13,101 @@
    001package co.aikar.commands;
     002
    -003import org.spongepowered.api.Sponge;
    -004import org.spongepowered.api.command.CommandSource;
    -005import org.spongepowered.api.entity.living.player.Player;
    -006
    -007import java.util.ArrayList;
    -008import java.util.Iterator;
    -009import java.util.List;
    -010import java.util.stream.Collectors;
    -011
    -012@SuppressWarnings("WeakerAccess")
    -013public class ACFSpongeUtil {
    -014    public static Player findPlayerSmart(CommandIssuer issuer, String search) {
    -015        CommandSource requester = issuer.getIssuer();
    -016        if (search == null) {
    -017            return null;
    -018        }
    -019        String name = ACFUtil.replace(search, ":confirm", "");
    -020
    -021        List<Player> matches = matchPlayer(name);
    -022        List<Player> confirmList = new ArrayList<>();
    -023        findMatches(search, requester, matches, confirmList);
    -024
    +003import org.jetbrains.annotations.Nullable;
    +004import org.spongepowered.api.Sponge;
    +005import org.spongepowered.api.command.CommandSource;
    +006import org.spongepowered.api.entity.living.player.Player;
    +007
    +008import java.util.ArrayList;
    +009import java.util.Iterator;
    +010import java.util.List;
    +011import java.util.stream.Collectors;
    +012
    +013@SuppressWarnings("WeakerAccess")
    +014public class ACFSpongeUtil {
    +015    public static Player findPlayerSmart(CommandIssuer issuer, String search) {
    +016        CommandSource requester = issuer.getIssuer();
    +017        if (search == null) {
    +018            return null;
    +019        }
    +020        String name = ACFUtil.replace(search, ":confirm", "");
    +021
    +022        List<Player> matches = matchPlayer(name);
    +023        List<Player> confirmList = new ArrayList<>();
    +024        findMatches(search, requester, matches, confirmList);
     025
    -026        if (matches.size() > 1 || confirmList.size() > 1) {
    -027            String allMatches = matches.stream().map(Player::getName).collect(Collectors.joining(", "));
    -028            issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH,
    -029                    "{search}", name, "{all}", allMatches);
    -030            return null;
    -031        }
    -032
    -033        if (matches.isEmpty()) {
    -034            if (!isValidName(name)) {
    -035                issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
    -036                return null;
    -037            }
    -038            Player player = ACFUtil.getFirstElement(confirmList);
    -039            if (player == null) {
    -040                issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name);
    -041                return null;
    -042            } else {
    -043
    -044                issuer.sendInfo(MinecraftMessageKeys.PLAYER_IS_VANISHED_CONFIRM, "{vanished}", player.getName());
    -045                return null;
    -046            }
    -047        }
    -048
    -049        return matches.get(0);
    -050    }
    -051
    -052    private static void findMatches(String search, CommandSource requester, List<Player> matches, List<Player> confirmList) {
    -053        // Remove vanished players from smart matching.
    -054        Iterator<Player> iter = matches.iterator();
    -055        //noinspection Duplicates
    -056        while (iter.hasNext()) {
    -057            Player player = iter.next();
    -058            if (requester instanceof Player && !((Player) requester).canSee(player)) {
    -059                if (requester.hasPermission("acf.seevanish")) {
    -060                    if (!search.endsWith(":confirm")) {
    -061                        confirmList.add(player);
    -062                        iter.remove();
    -063                    }
    -064                } else {
    -065                    iter.remove();
    -066                }
    -067            }
    -068        }
    -069    }
    -070
    -071    public static List<Player> matchPlayer(String partialName) {
    -072        List<Player> matchedPlayers = new ArrayList<>();
    -073
    -074        for (Player iterPlayer : Sponge.getServer().getOnlinePlayers()) {
    -075            String iterPlayerName = iterPlayer.getName();
    -076
    -077            if (partialName.equalsIgnoreCase(iterPlayerName)) {
    -078                // Exact match
    -079                matchedPlayers.clear();
    -080                matchedPlayers.add(iterPlayer);
    -081                break;
    -082            }
    -083            if (iterPlayerName.toLowerCase(java.util.Locale.ENGLISH).contains(partialName.toLowerCase(java.util.Locale.ENGLISH))) {
    -084                // Partial match
    -085                matchedPlayers.add(iterPlayer);
    -086            }
    -087        }
    -088
    -089        return matchedPlayers;
    -090    }
    -091
    -092    public static boolean isValidName(String name) {
    -093        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
    -094    }
    -095
    -096}
    +026
    +027        if (matches.size() > 1 || confirmList.size() > 1) {
    +028            String allMatches = matches.stream().map(Player::getName).collect(Collectors.joining(", "));
    +029            issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH,
    +030                    "{search}", name, "{all}", allMatches);
    +031            return null;
    +032        }
    +033
    +034        if (matches.isEmpty()) {
    +035            if (!issuer.getManager().isValidName(name)) {
    +036                issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
    +037                return null;
    +038            }
    +039            Player player = ACFUtil.getFirstElement(confirmList);
    +040            if (player == null) {
    +041                issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name);
    +042                return null;
    +043            } else {
    +044
    +045                issuer.sendInfo(MinecraftMessageKeys.PLAYER_IS_VANISHED_CONFIRM, "{vanished}", player.getName());
    +046                return null;
    +047            }
    +048        }
    +049
    +050        return matches.get(0);
    +051    }
    +052
    +053    private static void findMatches(String search, CommandSource requester, List<Player> matches, List<Player> confirmList) {
    +054        // Remove vanished players from smart matching.
    +055        Iterator<Player> iter = matches.iterator();
    +056        //noinspection Duplicates
    +057        while (iter.hasNext()) {
    +058            Player player = iter.next();
    +059            if (requester instanceof Player && !((Player) requester).canSee(player)) {
    +060                if (requester.hasPermission("acf.seevanish")) {
    +061                    if (!search.endsWith(":confirm")) {
    +062                        confirmList.add(player);
    +063                        iter.remove();
    +064                    }
    +065                } else {
    +066                    iter.remove();
    +067                }
    +068            }
    +069        }
    +070    }
    +071
    +072    public static List<Player> matchPlayer(String partialName) {
    +073        List<Player> matchedPlayers = new ArrayList<>();
    +074
    +075        for (Player iterPlayer : Sponge.getServer().getOnlinePlayers()) {
    +076            String iterPlayerName = iterPlayer.getName();
    +077
    +078            if (partialName.equalsIgnoreCase(iterPlayerName)) {
    +079                // Exact match
    +080                matchedPlayers.clear();
    +081                matchedPlayers.add(iterPlayer);
    +082                break;
    +083            }
    +084            if (iterPlayerName.toLowerCase(java.util.Locale.ENGLISH).contains(partialName.toLowerCase(java.util.Locale.ENGLISH))) {
    +085                // Partial match
    +086                matchedPlayers.add(iterPlayer);
    +087            }
    +088        }
    +089
    +090        return matchedPlayers;
    +091    }
    +092
    +093    public static boolean isValidName(@Nullable String name) {
    +094        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
    +095    }
    +096
    +097}
     
     
     
    diff --git a/docs/acf-sponge/src-html/co/aikar/commands/SpongeCommandManager.html b/docs/acf-sponge/src-html/co/aikar/commands/SpongeCommandManager.html
    index c02ec1cf..e51f0097 100644
    --- a/docs/acf-sponge/src-html/co/aikar/commands/SpongeCommandManager.html
    +++ b/docs/acf-sponge/src-html/co/aikar/commands/SpongeCommandManager.html
    @@ -83,147 +83,149 @@
     070        this.formatters.put(MessageType.HELP, new SpongeMessageFormatter(TextColors.AQUA, TextColors.GREEN, TextColors.YELLOW));
     071        getLocales(); // auto load locales
     072
    -073        Sponge.getEventManager().registerListeners(plugin, new ACFSpongeListener(this));
    +073        this.validNamePredicate = ACFSpongeUtil::isValidName;
     074
    -075        //TODO more default dependencies for sponge
    -076        registerDependency(plugin.getClass(), plugin);
    -077    }
    -078
    -079    public PluginContainer getPlugin() {
    -080        return plugin;
    -081    }
    -082
    -083    @Override
    -084    public boolean isCommandIssuer(Class<?> type) {
    -085        return CommandSource.class.isAssignableFrom(type);
    -086    }
    -087
    -088    @Override
    -089    public synchronized CommandContexts<SpongeCommandExecutionContext> getCommandContexts() {
    -090        if (this.contexts == null) {
    -091            this.contexts = new SpongeCommandContexts(this);
    -092        }
    -093        return contexts;
    -094    }
    -095
    -096    @Override
    -097    public synchronized CommandCompletions<SpongeCommandCompletionContext> getCommandCompletions() {
    -098        if (this.completions == null) {
    -099            this.completions = new SpongeCommandCompletions(this);
    -100        }
    -101        return completions;
    -102    }
    -103
    -104    @Override
    -105    public SpongeLocales getLocales() {
    -106        if (this.locales == null) {
    -107            this.locales = new SpongeLocales(this);
    -108            this.locales.loadLanguages();
    -109        }
    -110        return locales;
    -111    }
    -112
    -113    @Override
    -114    public boolean hasRegisteredCommands() {
    -115        return !registeredCommands.isEmpty();
    -116    }
    -117
    -118    @Override
    -119    public void registerCommand(BaseCommand command) {
    -120        command.onRegister(this);
    -121
    -122        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    -123            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    -124            SpongeRootCommand spongeCommand = (SpongeRootCommand) entry.getValue();
    -125            if (!spongeCommand.isRegistered) {
    -126                Sponge.getCommandManager().register(this.plugin, spongeCommand, commandName);
    -127            }
    -128            spongeCommand.isRegistered = true;
    -129            registeredCommands.put(commandName, spongeCommand);
    -130        }
    -131    }
    -132
    -133    public Timing createTiming(final String name) {
    -134        return Timings.of(this.plugin, name, this.commandTiming);
    -135    }
    -136
    -137    @Override
    -138    public RootCommand createRootCommand(String cmd) {
    -139        return new SpongeRootCommand(this, cmd);
    -140    }
    -141    
    -142    @Override
    -143    public Collection<RootCommand> getRegisteredRootCommands() {
    -144        return Collections.unmodifiableCollection(registeredCommands.values());
    -145    }
    -146
    -147    @Override
    -148    public SpongeCommandIssuer getCommandIssuer(Object issuer) {
    -149        if (!(issuer instanceof CommandSource)) {
    -150            throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer.");
    -151        }
    -152        return new SpongeCommandIssuer(this, (CommandSource) issuer);
    -153    }
    -154
    -155    @Override
    -156    public SpongeCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) {
    -157        return new SpongeCommandExecutionContext(command, parameter, (SpongeCommandIssuer) sender, args, i, passedArgs);
    -158    }
    -159
    -160    @Override
    -161    public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) {
    -162        return new SpongeCommandCompletionContext(command, (SpongeCommandIssuer) sender, input, config, args);
    -163    }
    -164
    -165    @Override
    -166    public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) {
    -167        return new SpongeRegisteredCommand(command, cmdName, method, prefSubCommand);
    -168    }
    -169
    -170    @Override
    -171    public void log(final LogLevel level, final String message, final Throwable throwable) {
    -172        Logger logger = this.plugin.getLogger();
    -173        switch(level) {
    -174            case INFO:
    -175                logger.info(LogLevel.LOG_PREFIX + message);
    -176                if (throwable != null) {
    -177                    for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    -178                        logger.info(LogLevel.LOG_PREFIX + line);
    -179                    }
    -180                }
    -181                return;
    -182            case ERROR:
    -183                logger.error(LogLevel.LOG_PREFIX + message);
    -184                if (throwable != null) {
    -185                    for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    -186                        logger.error(LogLevel.LOG_PREFIX + line);
    -187                    }
    -188                }
    -189        }
    -190    }
    -191
    -192    @Override
    -193    CommandOperationContext createCommandOperationContext(BaseCommand command, CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) {
    -194        return new SpongeCommandOperationContext(
    -195                this,
    -196                issuer,
    -197                command,
    -198                commandLabel,
    -199                args,
    -200                isAsync
    -201        );
    -202    }
    -203
    -204    @Override
    -205    public SpongeConditionContext createConditionContext(CommandIssuer issuer, String config) {
    -206        return new SpongeConditionContext((SpongeCommandIssuer) issuer, config);
    -207    }
    -208
    -209    @Override
    -210    public String getCommandPrefix(CommandIssuer issuer) {
    -211        return issuer.isPlayer() ? "/" : "";
    -212    }
    -213}
    +075        Sponge.getEventManager().registerListeners(plugin, new ACFSpongeListener(this));
    +076
    +077        //TODO more default dependencies for sponge
    +078        registerDependency(plugin.getClass(), plugin);
    +079    }
    +080
    +081    public PluginContainer getPlugin() {
    +082        return plugin;
    +083    }
    +084
    +085    @Override
    +086    public boolean isCommandIssuer(Class<?> type) {
    +087        return CommandSource.class.isAssignableFrom(type);
    +088    }
    +089
    +090    @Override
    +091    public synchronized CommandContexts<SpongeCommandExecutionContext> getCommandContexts() {
    +092        if (this.contexts == null) {
    +093            this.contexts = new SpongeCommandContexts(this);
    +094        }
    +095        return contexts;
    +096    }
    +097
    +098    @Override
    +099    public synchronized CommandCompletions<SpongeCommandCompletionContext> getCommandCompletions() {
    +100        if (this.completions == null) {
    +101            this.completions = new SpongeCommandCompletions(this);
    +102        }
    +103        return completions;
    +104    }
    +105
    +106    @Override
    +107    public SpongeLocales getLocales() {
    +108        if (this.locales == null) {
    +109            this.locales = new SpongeLocales(this);
    +110            this.locales.loadLanguages();
    +111        }
    +112        return locales;
    +113    }
    +114
    +115    @Override
    +116    public boolean hasRegisteredCommands() {
    +117        return !registeredCommands.isEmpty();
    +118    }
    +119
    +120    @Override
    +121    public void registerCommand(BaseCommand command) {
    +122        command.onRegister(this);
    +123
    +124        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    +125            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    +126            SpongeRootCommand spongeCommand = (SpongeRootCommand) entry.getValue();
    +127            if (!spongeCommand.isRegistered) {
    +128                Sponge.getCommandManager().register(this.plugin, spongeCommand, commandName);
    +129            }
    +130            spongeCommand.isRegistered = true;
    +131            registeredCommands.put(commandName, spongeCommand);
    +132        }
    +133    }
    +134
    +135    public Timing createTiming(final String name) {
    +136        return Timings.of(this.plugin, name, this.commandTiming);
    +137    }
    +138
    +139    @Override
    +140    public RootCommand createRootCommand(String cmd) {
    +141        return new SpongeRootCommand(this, cmd);
    +142    }
    +143    
    +144    @Override
    +145    public Collection<RootCommand> getRegisteredRootCommands() {
    +146        return Collections.unmodifiableCollection(registeredCommands.values());
    +147    }
    +148
    +149    @Override
    +150    public SpongeCommandIssuer getCommandIssuer(Object issuer) {
    +151        if (!(issuer instanceof CommandSource)) {
    +152            throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer.");
    +153        }
    +154        return new SpongeCommandIssuer(this, (CommandSource) issuer);
    +155    }
    +156
    +157    @Override
    +158    public SpongeCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) {
    +159        return new SpongeCommandExecutionContext(command, parameter, (SpongeCommandIssuer) sender, args, i, passedArgs);
    +160    }
    +161
    +162    @Override
    +163    public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) {
    +164        return new SpongeCommandCompletionContext(command, (SpongeCommandIssuer) sender, input, config, args);
    +165    }
    +166
    +167    @Override
    +168    public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) {
    +169        return new SpongeRegisteredCommand(command, cmdName, method, prefSubCommand);
    +170    }
    +171
    +172    @Override
    +173    public void log(final LogLevel level, final String message, final Throwable throwable) {
    +174        Logger logger = this.plugin.getLogger();
    +175        switch(level) {
    +176            case INFO:
    +177                logger.info(LogLevel.LOG_PREFIX + message);
    +178                if (throwable != null) {
    +179                    for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    +180                        logger.info(LogLevel.LOG_PREFIX + line);
    +181                    }
    +182                }
    +183                return;
    +184            case ERROR:
    +185                logger.error(LogLevel.LOG_PREFIX + message);
    +186                if (throwable != null) {
    +187                    for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    +188                        logger.error(LogLevel.LOG_PREFIX + line);
    +189                    }
    +190                }
    +191        }
    +192    }
    +193
    +194    @Override
    +195    CommandOperationContext createCommandOperationContext(BaseCommand command, CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) {
    +196        return new SpongeCommandOperationContext(
    +197                this,
    +198                issuer,
    +199                command,
    +200                commandLabel,
    +201                args,
    +202                isAsync
    +203        );
    +204    }
    +205
    +206    @Override
    +207    public SpongeConditionContext createConditionContext(CommandIssuer issuer, String config) {
    +208        return new SpongeConditionContext((SpongeCommandIssuer) issuer, config);
    +209    }
    +210
    +211    @Override
    +212    public String getCommandPrefix(CommandIssuer issuer) {
    +213        return issuer.isPlayer() ? "/" : "";
    +214    }
    +215}
     
     
     
    diff --git a/docs/acf-velocity/co/aikar/commands/ACFVelocityUtil.html b/docs/acf-velocity/co/aikar/commands/ACFVelocityUtil.html
    index 54e8627f..f4ed9133 100644
    --- a/docs/acf-velocity/co/aikar/commands/ACFVelocityUtil.html
    +++ b/docs/acf-velocity/co/aikar/commands/ACFVelocityUtil.html
    @@ -114,7 +114,7 @@ loadScripts(document, 'script');
      String search)
     
    static boolean
    - +
    isValidName(@Nullable String name)
     
    static <T> T
    validate(T object, @@ -169,13 +169,14 @@ loadScripts(document, 'script');
  • isValidName

    -
    public static boolean isValidName(String name)
    +
    public static boolean isValidName(@Nullable + @Nullable String name)
  • validate

    -
    public static <T> T validate(T object, +
    public static <T> T validate(T object, String message, Object... values)
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html index 09deeb92..11718313 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html @@ -305,19 +305,19 @@ loadScripts(document, 'script');
  • getProxy

    -
    public com.velocitypowered.api.proxy.ProxyServer getProxy()
    +
    public com.velocitypowered.api.proxy.ProxyServer getProxy()
  • getPlugin

    -
    public com.velocitypowered.api.plugin.PluginContainer getPlugin()
    +
    public com.velocitypowered.api.plugin.PluginContainer getPlugin()
  • getCommandContexts

    -
    public co.aikar.commands.CommandContexts<VelocityCommandExecutionContext> getCommandContexts()
    +
    public co.aikar.commands.CommandContexts<VelocityCommandExecutionContext> getCommandContexts()
    Specified by:
    getCommandContexts in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -327,7 +327,7 @@ loadScripts(document, 'script');
  • getCommandCompletions

    -
    public co.aikar.commands.CommandCompletions<VelocityCommandCompletionContext> getCommandCompletions()
    +
    public co.aikar.commands.CommandCompletions<VelocityCommandCompletionContext> getCommandCompletions()
    Specified by:
    getCommandCompletions in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -337,7 +337,7 @@ loadScripts(document, 'script');
  • getLocales

    - +
    Specified by:
    getLocales in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -347,13 +347,13 @@ loadScripts(document, 'script');
  • readLocale

    -
    public void readLocale(com.velocitypowered.api.proxy.Player player)
    +
    public void readLocale(com.velocitypowered.api.proxy.Player player)
  • registerCommand

    -
    public void registerCommand(co.aikar.commands.BaseCommand command)
    +
    public void registerCommand(co.aikar.commands.BaseCommand command)
    Specified by:
    registerCommand in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -363,32 +363,32 @@ loadScripts(document, 'script');
  • registerCommand

    -
    public void registerCommand(co.aikar.commands.BaseCommand command, +
    public void registerCommand(co.aikar.commands.BaseCommand command, boolean force)
  • unregisterCommand

    -
    public void unregisterCommand(co.aikar.commands.BaseCommand command)
    +
    public void unregisterCommand(co.aikar.commands.BaseCommand command)
  • unregisterCommand

    -
    public void unregisterCommand(VelocityRootCommand command)
    +
    public void unregisterCommand(VelocityRootCommand command)
  • unregisterCommands

    -
    public void unregisterCommands()
    +
    public void unregisterCommands()
  • hasRegisteredCommands

    -
    public boolean hasRegisteredCommands()
    +
    public boolean hasRegisteredCommands()
    Specified by:
    hasRegisteredCommands in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -398,7 +398,7 @@ loadScripts(document, 'script');
  • isCommandIssuer

    -
    public boolean isCommandIssuer(Class<?> aClass)
    +
    public boolean isCommandIssuer(Class<?> aClass)
    Specified by:
    isCommandIssuer in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -408,7 +408,7 @@ loadScripts(document, 'script');
  • getCommandIssuer

    - +
    Specified by:
    getCommandIssuer in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -418,7 +418,7 @@ loadScripts(document, 'script');
  • createRootCommand

    -
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    +
    public co.aikar.commands.RootCommand createRootCommand(String cmd)
    Specified by:
    createRootCommand in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -428,7 +428,7 @@ loadScripts(document, 'script');
  • getRegisteredRootCommands

    -
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    +
    public Collection<co.aikar.commands.RootCommand> getRegisteredRootCommands()
    Specified by:
    getRegisteredRootCommands in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    @@ -438,7 +438,7 @@ loadScripts(document, 'script');
  • createCommandContext

    -
    public VelocityCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, +
    public VelocityCommandExecutionContext createCommandContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandParameter parameter, co.aikar.commands.CommandIssuer sender, List<String> args, @@ -453,7 +453,7 @@ loadScripts(document, 'script');
  • createCompletionContext

    -
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, +
    public co.aikar.commands.CommandCompletionContext createCompletionContext(co.aikar.commands.RegisteredCommand command, co.aikar.commands.CommandIssuer sender, String input, String config, @@ -467,7 +467,7 @@ loadScripts(document, 'script');
  • createRegisteredCommand

    -
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, +
    public co.aikar.commands.RegisteredCommand createRegisteredCommand(co.aikar.commands.BaseCommand command, String cmdName, Method method, String prefSubCommand)
    @@ -480,7 +480,7 @@ loadScripts(document, 'script');
  • createConditionContext

    -
    public VelocityConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, +
    public VelocityConditionContext createConditionContext(co.aikar.commands.CommandIssuer issuer, String config)
    Overrides:
    @@ -491,7 +491,7 @@ loadScripts(document, 'script');
  • log

    -
    public void log(co.aikar.commands.LogLevel level, +
    public void log(co.aikar.commands.LogLevel level, String message, Throwable throwable)
    @@ -503,7 +503,7 @@ loadScripts(document, 'script');
  • getCommandPrefix

    -
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    +
    public String getCommandPrefix(co.aikar.commands.CommandIssuer issuer)
    Overrides:
    getCommandPrefix in class co.aikar.commands.CommandManager<com.velocitypowered.api.command.CommandSource,VelocityCommandIssuer,net.kyori.adventure.text.format.NamedTextColor,VelocityMessageFormatter,VelocityCommandExecutionContext,VelocityConditionContext>
    diff --git a/docs/acf-velocity/src-html/co/aikar/commands/ACFVelocityUtil.html b/docs/acf-velocity/src-html/co/aikar/commands/ACFVelocityUtil.html index db20a14d..89c5049e 100644 --- a/docs/acf-velocity/src-html/co/aikar/commands/ACFVelocityUtil.html +++ b/docs/acf-velocity/src-html/co/aikar/commands/ACFVelocityUtil.html @@ -13,11 +13,11 @@
    001package co.aikar.commands;
     002
    -003import com.velocitypowered.api.command.CommandSource;
    -004import com.velocitypowered.api.proxy.Player;
    -005import com.velocitypowered.api.proxy.ProxyServer;
    -006import net.kyori.adventure.text.TextComponent;
    -007import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
    +003import com.velocitypowered.api.proxy.Player;
    +004import com.velocitypowered.api.proxy.ProxyServer;
    +005import net.kyori.adventure.text.TextComponent;
    +006import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
    +007import org.jetbrains.annotations.Nullable;
     008
     009import java.util.ArrayList;
     010import java.util.Collection;
    @@ -33,61 +33,60 @@
     020    }
     021
     022    public static Player findPlayerSmart(ProxyServer server, CommandIssuer issuer, String search) {
    -023        CommandSource requester = issuer.getIssuer();
    -024        String name = ACFUtil.replace(search, ":confirm", "");
    -025
    -026        List<Player> matches = new ArrayList<>(matchPlayer(server, name));
    -027
    -028        if (matches.size() > 1) {
    -029            String allMatches = matches.stream().map(Player::getUsername).collect(Collectors.joining(", "));
    -030            issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, "{search}", name, "{all}", allMatches);
    -031            return null;
    -032        }
    -033
    -034        if (matches.isEmpty()) {
    -035            if (!isValidName(name)) {
    -036                issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
    -037                return null;
    -038            }
    -039            issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name);
    -040            return null;
    -041        }
    -042
    -043        return matches.get(0);
    -044    }
    -045
    -046    /*
    -047     * Original code written by md_5
    -048     *
    -049     * Modified to work with Velocity by Crypnotic
    -050     */
    -051    private static Collection<Player> matchPlayer(ProxyServer server, final String partialName) {
    -052        // A better error message might be nice. This just mimics the previous output
    -053        if (partialName == null) {
    -054            throw new NullPointerException("partialName");
    -055        }
    -056
    -057        Optional<Player> exactMatch = server.getPlayer(partialName);
    -058        if (exactMatch.isPresent()) {
    -059            return Collections.singleton(exactMatch.get());
    -060        }
    -061
    -062        return server.getAllPlayers().stream()
    -063                .filter(player -> player.getUsername().regionMatches(true, 0, partialName, 0, partialName.length()))
    -064                .collect(Collectors.toList());
    -065    }
    -066
    -067    public static boolean isValidName(String name) {
    -068        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
    -069    }
    -070
    -071    public static <T> T validate(T object, String message, Object... values) {
    -072        if (object == null) {
    -073            throw new NullPointerException(String.format(message, values));
    -074        }
    -075        return object;
    -076    }
    -077}
    +023        String name = ACFUtil.replace(search, ":confirm", "");
    +024
    +025        List<Player> matches = new ArrayList<>(matchPlayer(server, name));
    +026
    +027        if (matches.size() > 1) {
    +028            String allMatches = matches.stream().map(Player::getUsername).collect(Collectors.joining(", "));
    +029            issuer.sendError(MinecraftMessageKeys.MULTIPLE_PLAYERS_MATCH, "{search}", name, "{all}", allMatches);
    +030            return null;
    +031        }
    +032
    +033        if (matches.isEmpty()) {
    +034            if (!issuer.getManager().isValidName(name)) {
    +035                issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
    +036                return null;
    +037            }
    +038            issuer.sendError(MinecraftMessageKeys.NO_PLAYER_FOUND_SERVER, "{search}", name);
    +039            return null;
    +040        }
    +041
    +042        return matches.get(0);
    +043    }
    +044
    +045    /*
    +046     * Original code written by md_5
    +047     *
    +048     * Modified to work with Velocity by Crypnotic
    +049     */
    +050    private static Collection<Player> matchPlayer(ProxyServer server, final String partialName) {
    +051        // A better error message might be nice. This just mimics the previous output
    +052        if (partialName == null) {
    +053            throw new NullPointerException("partialName");
    +054        }
    +055
    +056        Optional<Player> exactMatch = server.getPlayer(partialName);
    +057        if (exactMatch.isPresent()) {
    +058            return Collections.singleton(exactMatch.get());
    +059        }
    +060
    +061        return server.getAllPlayers().stream()
    +062                .filter(player -> player.getUsername().regionMatches(true, 0, partialName, 0, partialName.length()))
    +063                .collect(Collectors.toList());
    +064    }
    +065
    +066    public static boolean isValidName(@Nullable String name) {
    +067        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
    +068    }
    +069
    +070    public static <T> T validate(T object, String message, Object... values) {
    +071        if (object == null) {
    +072            throw new NullPointerException(String.format(message, values));
    +073        }
    +074        return object;
    +075    }
    +076}
     
     
     
    diff --git a/docs/acf-velocity/src-html/co/aikar/commands/VelocityCommandManager.html b/docs/acf-velocity/src-html/co/aikar/commands/VelocityCommandManager.html
    index 0e012759..54628b53 100644
    --- a/docs/acf-velocity/src-html/co/aikar/commands/VelocityCommandManager.html
    +++ b/docs/acf-velocity/src-html/co/aikar/commands/VelocityCommandManager.html
    @@ -75,178 +75,180 @@
     062
     063        getLocales();
     064
    -065        proxy.getEventManager().register(plugin, new ACFVelocityListener(this, this.plugin, proxy));
    +065        this.validNamePredicate = ACFVelocityUtil::isValidName;
     066
    -067        registerDependency(plugin.getClass(), plugin);
    -068        registerDependency(Plugin.class, plugin);
    -069        registerDependency(ProxyServer.class, proxy);
    -070    }
    -071
    -072    public ProxyServer getProxy() {
    -073        return this.proxy;
    -074    }
    -075
    -076    public PluginContainer getPlugin() {
    -077        return this.plugin;
    -078    }
    -079
    -080    @Override
    -081    public synchronized CommandContexts<VelocityCommandExecutionContext> getCommandContexts() {
    -082        if (this.contexts == null) {
    -083            this.contexts = new VelocityCommandContexts(proxy, this);
    -084        }
    -085        return contexts;
    -086    }
    -087
    -088    @Override
    -089    public synchronized CommandCompletions<VelocityCommandCompletionContext> getCommandCompletions() {
    -090        if (this.completions == null) {
    -091            this.completions = new VelocityCommandCompletions(proxy, this);
    -092        }
    -093        return completions;
    -094    }
    -095
    -096    @Override
    -097    public VelocityLocales getLocales() {
    -098        if (this.locales == null) {
    -099            this.locales = new VelocityLocales(this);
    -100            this.locales.loadLanguages();
    -101        }
    -102        return locales;
    -103    }
    -104
    -105    public void readLocale(Player player) {
    -106        if (!player.isActive()) {
    -107            return;
    -108        }
    -109
    -110        //This can be null if we didn't receive a settings packet
    -111        Locale locale = player.getPlayerSettings().getLocale();
    -112        if (locale != null) {
    -113            setIssuerLocale(player, player.getPlayerSettings().getLocale());
    -114        }
    -115    }
    -116
    -117    @Override
    -118    public void registerCommand(BaseCommand command) {
    -119        registerCommand(command, false);
    -120    }
    -121
    -122    public void registerCommand(BaseCommand command, boolean force) {
    -123        command.onRegister(this);
    -124        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    -125            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    -126            VelocityRootCommand velocityCommand = (VelocityRootCommand) entry.getValue();
    -127            if (!velocityCommand.isRegistered) {
    -128                if (force) {
    -129                    proxy.getCommandManager().unregister(commandName);
    -130                }
    -131                CommandMeta meta = proxy.getCommandManager().metaBuilder(commandName).build();
    -132                proxy.getCommandManager().register(meta, velocityCommand);
    -133            }
    -134            velocityCommand.isRegistered = true;
    -135            registeredCommands.put(commandName, velocityCommand);
    -136        }
    -137    }
    -138
    -139    public void unregisterCommand(BaseCommand command) {
    -140        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    -141            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    -142            VelocityRootCommand velocityCommand = (VelocityRootCommand) entry.getValue();
    -143            velocityCommand.getSubCommands().values().removeAll(command.subCommands.values());
    -144            if (velocityCommand.getSubCommands().isEmpty() && velocityCommand.isRegistered) {
    -145                unregisterCommand(velocityCommand);
    -146                velocityCommand.isRegistered = false;
    -147                registeredCommands.remove(commandName);
    -148            }
    -149        }
    -150    }
    -151
    -152    public void unregisterCommand(VelocityRootCommand command) {
    -153        proxy.getCommandManager().unregister(command.getCommandName());
    -154    }
    -155
    -156    public void unregisterCommands() {
    -157        for (Map.Entry<String, VelocityRootCommand> entry : registeredCommands.entrySet()) {
    -158            unregisterCommand(entry.getValue());
    -159        }
    -160    }
    -161
    -162    @Override
    -163    public boolean hasRegisteredCommands() {
    -164        return !registeredCommands.isEmpty();
    -165    }
    -166
    -167    @Override
    -168    public boolean isCommandIssuer(Class<?> aClass) {
    -169        return CommandSource.class.isAssignableFrom(aClass);
    -170    }
    -171
    -172    @Override
    -173    public VelocityCommandIssuer getCommandIssuer(Object issuer) {
    -174        if (!(issuer instanceof CommandSource)) {
    -175            throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer.");
    -176        }
    -177        return new VelocityCommandIssuer(this, (CommandSource) issuer);
    -178    }
    -179
    -180    @Override
    -181    public RootCommand createRootCommand(String cmd) {
    -182        return new VelocityRootCommand(this, cmd);
    -183    }
    -184
    -185    @Override
    -186    public Collection<RootCommand> getRegisteredRootCommands() {
    -187        return Collections.unmodifiableCollection(registeredCommands.values());
    -188    }
    -189
    -190    @Override
    -191    public VelocityCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) {
    -192        return new VelocityCommandExecutionContext(command, parameter, (VelocityCommandIssuer) sender, args, i, passedArgs);
    -193    }
    -194
    -195    @Override
    -196    public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) {
    -197        return new VelocityCommandCompletionContext(command, (VelocityCommandIssuer) sender, input, config, args);
    -198    }
    -199
    -200    @Override
    -201    public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) {
    -202        return new RegisteredCommand(command, cmdName, method, prefSubCommand);
    -203    }
    -204
    -205    @Override
    -206    public VelocityConditionContext createConditionContext(CommandIssuer issuer, String config) {
    -207        return new VelocityConditionContext((VelocityCommandIssuer) issuer, config);
    -208    }
    -209
    -210    @Override
    -211    public void log(LogLevel level, String message, Throwable throwable) {
    -212        // TODO: Find better solution
    -213        Logger logger = LoggerFactory.getLogger(plugin.getClass());
    -214        if (level == LogLevel.INFO) {
    -215            logger.info(LogLevel.LOG_PREFIX + message);
    -216        } else {
    -217            logger.warn(LogLevel.LOG_PREFIX + message);
    -218        }
    -219
    -220        if (throwable != null) {
    -221            for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    -222                if (level == LogLevel.INFO) {
    -223                    logger.info(LogLevel.LOG_PREFIX + line);
    -224                } else {
    -225                    logger.warn(LogLevel.LOG_PREFIX + line);
    -226                }
    -227            }
    -228        }
    -229    }
    -230
    -231
    -232    @Override
    -233    public String getCommandPrefix(CommandIssuer issuer) {
    -234        return issuer.isPlayer() ? "/" : "";
    -235    }
    -236}
    +067        proxy.getEventManager().register(plugin, new ACFVelocityListener(this, this.plugin, proxy));
    +068
    +069        registerDependency(plugin.getClass(), plugin);
    +070        registerDependency(Plugin.class, plugin);
    +071        registerDependency(ProxyServer.class, proxy);
    +072    }
    +073
    +074    public ProxyServer getProxy() {
    +075        return this.proxy;
    +076    }
    +077
    +078    public PluginContainer getPlugin() {
    +079        return this.plugin;
    +080    }
    +081
    +082    @Override
    +083    public synchronized CommandContexts<VelocityCommandExecutionContext> getCommandContexts() {
    +084        if (this.contexts == null) {
    +085            this.contexts = new VelocityCommandContexts(proxy, this);
    +086        }
    +087        return contexts;
    +088    }
    +089
    +090    @Override
    +091    public synchronized CommandCompletions<VelocityCommandCompletionContext> getCommandCompletions() {
    +092        if (this.completions == null) {
    +093            this.completions = new VelocityCommandCompletions(proxy, this);
    +094        }
    +095        return completions;
    +096    }
    +097
    +098    @Override
    +099    public VelocityLocales getLocales() {
    +100        if (this.locales == null) {
    +101            this.locales = new VelocityLocales(this);
    +102            this.locales.loadLanguages();
    +103        }
    +104        return locales;
    +105    }
    +106
    +107    public void readLocale(Player player) {
    +108        if (!player.isActive()) {
    +109            return;
    +110        }
    +111
    +112        //This can be null if we didn't receive a settings packet
    +113        Locale locale = player.getPlayerSettings().getLocale();
    +114        if (locale != null) {
    +115            setIssuerLocale(player, player.getPlayerSettings().getLocale());
    +116        }
    +117    }
    +118
    +119    @Override
    +120    public void registerCommand(BaseCommand command) {
    +121        registerCommand(command, false);
    +122    }
    +123
    +124    public void registerCommand(BaseCommand command, boolean force) {
    +125        command.onRegister(this);
    +126        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    +127            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    +128            VelocityRootCommand velocityCommand = (VelocityRootCommand) entry.getValue();
    +129            if (!velocityCommand.isRegistered) {
    +130                if (force) {
    +131                    proxy.getCommandManager().unregister(commandName);
    +132                }
    +133                CommandMeta meta = proxy.getCommandManager().metaBuilder(commandName).build();
    +134                proxy.getCommandManager().register(meta, velocityCommand);
    +135            }
    +136            velocityCommand.isRegistered = true;
    +137            registeredCommands.put(commandName, velocityCommand);
    +138        }
    +139    }
    +140
    +141    public void unregisterCommand(BaseCommand command) {
    +142        for (Map.Entry<String, RootCommand> entry : command.registeredCommands.entrySet()) {
    +143            String commandName = entry.getKey().toLowerCase(Locale.ENGLISH);
    +144            VelocityRootCommand velocityCommand = (VelocityRootCommand) entry.getValue();
    +145            velocityCommand.getSubCommands().values().removeAll(command.subCommands.values());
    +146            if (velocityCommand.getSubCommands().isEmpty() && velocityCommand.isRegistered) {
    +147                unregisterCommand(velocityCommand);
    +148                velocityCommand.isRegistered = false;
    +149                registeredCommands.remove(commandName);
    +150            }
    +151        }
    +152    }
    +153
    +154    public void unregisterCommand(VelocityRootCommand command) {
    +155        proxy.getCommandManager().unregister(command.getCommandName());
    +156    }
    +157
    +158    public void unregisterCommands() {
    +159        for (Map.Entry<String, VelocityRootCommand> entry : registeredCommands.entrySet()) {
    +160            unregisterCommand(entry.getValue());
    +161        }
    +162    }
    +163
    +164    @Override
    +165    public boolean hasRegisteredCommands() {
    +166        return !registeredCommands.isEmpty();
    +167    }
    +168
    +169    @Override
    +170    public boolean isCommandIssuer(Class<?> aClass) {
    +171        return CommandSource.class.isAssignableFrom(aClass);
    +172    }
    +173
    +174    @Override
    +175    public VelocityCommandIssuer getCommandIssuer(Object issuer) {
    +176        if (!(issuer instanceof CommandSource)) {
    +177            throw new IllegalArgumentException(issuer.getClass().getName() + " is not a Command Issuer.");
    +178        }
    +179        return new VelocityCommandIssuer(this, (CommandSource) issuer);
    +180    }
    +181
    +182    @Override
    +183    public RootCommand createRootCommand(String cmd) {
    +184        return new VelocityRootCommand(this, cmd);
    +185    }
    +186
    +187    @Override
    +188    public Collection<RootCommand> getRegisteredRootCommands() {
    +189        return Collections.unmodifiableCollection(registeredCommands.values());
    +190    }
    +191
    +192    @Override
    +193    public VelocityCommandExecutionContext createCommandContext(RegisteredCommand command, CommandParameter parameter, CommandIssuer sender, List<String> args, int i, Map<String, Object> passedArgs) {
    +194        return new VelocityCommandExecutionContext(command, parameter, (VelocityCommandIssuer) sender, args, i, passedArgs);
    +195    }
    +196
    +197    @Override
    +198    public CommandCompletionContext createCompletionContext(RegisteredCommand command, CommandIssuer sender, String input, String config, String[] args) {
    +199        return new VelocityCommandCompletionContext(command, (VelocityCommandIssuer) sender, input, config, args);
    +200    }
    +201
    +202    @Override
    +203    public RegisteredCommand createRegisteredCommand(BaseCommand command, String cmdName, Method method, String prefSubCommand) {
    +204        return new RegisteredCommand(command, cmdName, method, prefSubCommand);
    +205    }
    +206
    +207    @Override
    +208    public VelocityConditionContext createConditionContext(CommandIssuer issuer, String config) {
    +209        return new VelocityConditionContext((VelocityCommandIssuer) issuer, config);
    +210    }
    +211
    +212    @Override
    +213    public void log(LogLevel level, String message, Throwable throwable) {
    +214        // TODO: Find better solution
    +215        Logger logger = LoggerFactory.getLogger(plugin.getClass());
    +216        if (level == LogLevel.INFO) {
    +217            logger.info(LogLevel.LOG_PREFIX + message);
    +218        } else {
    +219            logger.warn(LogLevel.LOG_PREFIX + message);
    +220        }
    +221
    +222        if (throwable != null) {
    +223            for (String line : ACFPatterns.NEWLINE.split(ApacheCommonsExceptionUtil.getFullStackTrace(throwable))) {
    +224                if (level == LogLevel.INFO) {
    +225                    logger.info(LogLevel.LOG_PREFIX + line);
    +226                } else {
    +227                    logger.warn(LogLevel.LOG_PREFIX + line);
    +228                }
    +229            }
    +230        }
    +231    }
    +232
    +233
    +234    @Override
    +235    public String getCommandPrefix(CommandIssuer issuer) {
    +236        return issuer.isPlayer() ? "/" : "";
    +237    }
    +238}
     
     
     
    diff --git a/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java b/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java
    index a5b2915f..0ad9a0f8 100644
    --- a/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java
    +++ b/sponge/src/main/java/co/aikar/commands/ACFSpongeUtil.java
    @@ -1,5 +1,6 @@
     package co.aikar.commands;
     
    +import org.jetbrains.annotations.Nullable;
     import org.spongepowered.api.Sponge;
     import org.spongepowered.api.command.CommandSource;
     import org.spongepowered.api.entity.living.player.Player;
    @@ -31,7 +32,7 @@ public class ACFSpongeUtil {
             }
     
             if (matches.isEmpty()) {
    -            if (!isValidName(name, issuer.getManager())) {
    +            if (!issuer.getManager().isValidName(name)) {
                     issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
                     return null;
                 }
    @@ -89,12 +90,8 @@ public class ACFSpongeUtil {
             return matchedPlayers;
         }
     
    -    @Deprecated
    -    public static boolean isValidName(String name) {
    -        return isValidName(name, null);
    +    public static boolean isValidName(@Nullable String name) {
    +        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
         }
     
    -    public static boolean isValidName(String name, CommandManager manager) {
    -        return name != null && !name.isEmpty() && ((manager != null && manager.isAllowInvalidName()) || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches());
    -    }
     }
    diff --git a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java
    index 88282411..b914427d 100644
    --- a/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java
    +++ b/sponge/src/main/java/co/aikar/commands/SpongeCommandManager.java
    @@ -70,6 +70,8 @@ public class SpongeCommandManager extends CommandManager<
             this.formatters.put(MessageType.HELP, new SpongeMessageFormatter(TextColors.AQUA, TextColors.GREEN, TextColors.YELLOW));
             getLocales(); // auto load locales
     
    +        this.validNamePredicate = ACFSpongeUtil::isValidName;
    +
             Sponge.getEventManager().registerListeners(plugin, new ACFSpongeListener(this));
     
             //TODO more default dependencies for sponge
    diff --git a/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java b/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java
    index 073190c1..949a9c72 100644
    --- a/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java
    +++ b/velocity/src/main/java/co/aikar/commands/ACFVelocityUtil.java
    @@ -1,10 +1,10 @@
     package co.aikar.commands;
     
    -import com.velocitypowered.api.command.CommandSource;
     import com.velocitypowered.api.proxy.Player;
     import com.velocitypowered.api.proxy.ProxyServer;
     import net.kyori.adventure.text.TextComponent;
     import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
    +import org.jetbrains.annotations.Nullable;
     
     import java.util.ArrayList;
     import java.util.Collection;
    @@ -20,7 +20,6 @@ public class ACFVelocityUtil {
         }
     
         public static Player findPlayerSmart(ProxyServer server, CommandIssuer issuer, String search) {
    -        CommandSource requester = issuer.getIssuer();
             String name = ACFUtil.replace(search, ":confirm", "");
     
             List matches = new ArrayList<>(matchPlayer(server, name));
    @@ -32,7 +31,7 @@ public class ACFVelocityUtil {
             }
     
             if (matches.isEmpty()) {
    -            if (!isValidName(name, issuer.getManager())) {
    +            if (!issuer.getManager().isValidName(name)) {
                     issuer.sendError(MinecraftMessageKeys.IS_NOT_A_VALID_NAME, "{name}", name);
                     return null;
                 }
    @@ -64,13 +63,8 @@ public class ACFVelocityUtil {
                     .collect(Collectors.toList());
         }
     
    -    @Deprecated
    -    public static boolean isValidName(String name) {
    -        return isValidName(name, null);
    -    }
    -
    -    public static boolean isValidName(String name, CommandManager manager) {
    -        return name != null && !name.isEmpty() && ((manager != null && manager.isAllowInvalidName()) || ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches());
    +    public static boolean isValidName(@Nullable String name) {
    +        return name != null && !name.isEmpty() && ACFPatterns.VALID_NAME_PATTERN.matcher(name).matches();
         }
     
         public static  T validate(T object, String message, Object... values) {
    diff --git a/velocity/src/main/java/co/aikar/commands/VelocityCommandManager.java b/velocity/src/main/java/co/aikar/commands/VelocityCommandManager.java
    index 06471d9b..fc5dfcb6 100644
    --- a/velocity/src/main/java/co/aikar/commands/VelocityCommandManager.java
    +++ b/velocity/src/main/java/co/aikar/commands/VelocityCommandManager.java
    @@ -62,6 +62,8 @@ public class VelocityCommandManager extends
     
             getLocales();
     
    +        this.validNamePredicate = ACFVelocityUtil::isValidName;
    +
             proxy.getEventManager().register(plugin, new ACFVelocityListener(this, this.plugin, proxy));
     
             registerDependency(plugin.getClass(), plugin);