diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 05af6095..6557e517 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -4,6 +4,7 @@ + @@ -15,12 +16,16 @@ + + + + diff --git a/brigadier/pom.xml b/brigadier/pom.xml index 544901eb..861c3f7d 100644 --- a/brigadier/pom.xml +++ b/brigadier/pom.xml @@ -30,12 +30,12 @@ co.aikar acf-parent - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ../pom.xml acf-brigadier - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ACF (Brigadier) @@ -50,7 +50,7 @@ co.aikar acf-core - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT provided diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 4e8d40d6..ea6b88b5 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -30,12 +30,12 @@ co.aikar acf-parent - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ../pom.xml acf-bukkit - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ACF (Bukkit) @@ -43,7 +43,7 @@ co.aikar acf-core - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT compile diff --git a/bukkit/src/main/java/co/aikar/commands/ACFBukkitListener.java b/bukkit/src/main/java/co/aikar/commands/ACFBukkitListener.java index 16d7ffef..4b030761 100644 --- a/bukkit/src/main/java/co/aikar/commands/ACFBukkitListener.java +++ b/bukkit/src/main/java/co/aikar/commands/ACFBukkitListener.java @@ -31,6 +31,8 @@ import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.server.PluginDisableEvent; import org.bukkit.plugin.Plugin; +import java.util.UUID; + class ACFBukkitListener implements Listener { private BukkitCommandManager manager; private final Plugin plugin; @@ -47,10 +49,11 @@ class ACFBukkitListener implements Listener { } manager.unregisterCommands(); } + @EventHandler public void onPlayerJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); - if(this.manager.autoDetectFromClient) { + if (this.manager.autoDetectFromClient) { this.manager.readPlayerLocale(player); this.plugin.getServer().getScheduler().runTaskLater(this.plugin, () -> manager.readPlayerLocale(player), 20); } else { @@ -62,6 +65,8 @@ class ACFBukkitListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent quitEvent) { //cleanup - manager.issuersLocale.remove(quitEvent.getPlayer().getUniqueId()); + UUID playerUniqueId = quitEvent.getPlayer().getUniqueId(); + manager.issuersLocale.remove(playerUniqueId); + manager.issuersLocaleString.remove(playerUniqueId); } } diff --git a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java index 11a004e2..1e6c9de2 100755 --- a/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java +++ b/bukkit/src/main/java/co/aikar/commands/BukkitCommandManager.java @@ -57,6 +57,8 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Matcher; @@ -86,6 +88,7 @@ public class BukkitCommandManager extends CommandManager< protected BukkitCommandCompletions completions; MCTiming commandTiming; protected BukkitLocales locales; + protected Map issuersLocaleString = new ConcurrentHashMap<>(); private boolean cantReadLocale = false; protected boolean autoDetectFromClient = true; @@ -126,7 +129,7 @@ public class BukkitCommandManager extends CommandManager< return; } Bukkit.getOnlinePlayers().forEach(this::readPlayerLocale); - }, 5, 5); + }, 30, 30); registerDependency(plugin.getClass(), plugin); registerDependency(Logger.class, plugin.getLogger()); @@ -315,11 +318,15 @@ public class BukkitCommandManager extends CommandManager< localeField.setAccessible(true); Object localeString = localeField.get(nmsPlayer); if (localeString instanceof String) { - String[] split = ACFPatterns.UNDERSCORE.split((String) localeString); - Locale locale = split.length > 1 ? new Locale(split[0], split[1]) : new Locale(split[0]); - Locale prev = issuersLocale.put(player.getUniqueId(), locale); - if (!Objects.equals(locale, prev)) { - this.notifyLocaleChange(getCommandIssuer(player), prev, locale); + UUID playerUniqueId = player.getUniqueId(); + if (!localeString.equals(issuersLocaleString.get(playerUniqueId))) { + String[] split = ACFPatterns.UNDERSCORE.split((String) localeString); + Locale locale = split.length > 1 ? new Locale(split[0], split[1]) : new Locale(split[0]); + Locale prev = issuersLocale.put(playerUniqueId, locale); + issuersLocaleString.put(playerUniqueId, (String) localeString); + if (!Objects.equals(locale, prev)) { + this.notifyLocaleChange(getCommandIssuer(player), prev, locale); + } } } } diff --git a/bungee/pom.xml b/bungee/pom.xml index 1a546ba8..fb1bc099 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -5,12 +5,12 @@ acf-parent co.aikar - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT 4.0.0 acf-bungee - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ACF (Bungee) @@ -26,7 +26,7 @@ co.aikar acf-core - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT compile diff --git a/core/pom.xml b/core/pom.xml index bfe2e16a..2ea9a4fe 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -30,12 +30,12 @@ co.aikar acf-parent - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ../pom.xml acf-core - 0.5.0-SNAPSHOT + 0.5.1-SNAPSHOT ACF (Core) diff --git a/core/src/main/java/co/aikar/commands/ACFUtil.java b/core/src/main/java/co/aikar/commands/ACFUtil.java index 91714014..f40f0c98 100644 --- a/core/src/main/java/co/aikar/commands/ACFUtil.java +++ b/core/src/main/java/co/aikar/commands/ACFUtil.java @@ -466,11 +466,17 @@ public final class ACFUtil { public static Number parseNumber(String num, boolean suffixes) { - ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke(); - num = applyModifierToNumber.getNum(); - double mod = applyModifierToNumber.getMod(); + if (ACFPatterns.getPattern("^0x([0-9A-Fa-f]*)$").matcher(num).matches()) { + return Long.parseLong(num.substring(2), 16); + } else if (ACFPatterns.getPattern("^0b([01]*)$").matcher(num).matches()) { + return Long.parseLong(num.substring(2), 2); + } else { + ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke(); + num = applyModifierToNumber.getNum(); + double mod = applyModifierToNumber.getMod(); - return Double.parseDouble(num) * mod; + return Double.parseDouble(num) * mod; + } } public static BigDecimal parseBigNumber(String num, boolean suffixes) { diff --git a/core/src/main/java/co/aikar/commands/CommandCompletions.java b/core/src/main/java/co/aikar/commands/CommandCompletions.java index fc9ca1e2..c048cf94 100644 --- a/core/src/main/java/co/aikar/commands/CommandCompletions.java +++ b/core/src/main/java/co/aikar/commands/CommandCompletions.java @@ -185,7 +185,7 @@ public class CommandCompletions { String input = args[argIndex]; String completion = argIndex < completions.length ? completions[argIndex] : null; - if (completion == null || "*".equals(completion)) { + if (completion == null || completion.isEmpty() || "*".equals(completion)) { completion = findDefaultCompletion(cmd, args); } diff --git a/core/src/main/java/co/aikar/commands/CommandManager.java b/core/src/main/java/co/aikar/commands/CommandManager.java index 12de42a7..debd8e2d 100644 --- a/core/src/main/java/co/aikar/commands/CommandManager.java +++ b/core/src/main/java/co/aikar/commands/CommandManager.java @@ -76,7 +76,7 @@ public abstract class CommandManager< protected boolean usePerIssuerLocale = 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)); + 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)); protected Map formatters = new IdentityHashMap<>(); protected MF defaultFormatter; protected int defaultHelpPerPage = 10; diff --git a/docs/acf-brigadier/allclasses-index.html b/docs/acf-brigadier/allclasses-index.html index dc3685d6..092ff870 100644 --- a/docs/acf-brigadier/allclasses-index.html +++ b/docs/acf-brigadier/allclasses-index.html @@ -1,50 +1,32 @@ - - -All Classes (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +All Classes and Interfaces (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +
-

All Classes

+

All Classes and Interfaces

+
+
+
Classes
+
+
Class
+
Description
+ +
Deprecated. +
Unstable API
+
-
-
    -
  • - - - - - - - - - - -
    Class Summary 
    ClassDescription
    ACFBrigadierManager<S>Deprecated. -
    Unstable API
    -
    -
  • -
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/allpackages-index.html b/docs/acf-brigadier/allpackages-index.html index 65913781..b102cec3 100644 --- a/docs/acf-brigadier/allpackages-index.html +++ b/docs/acf-brigadier/allpackages-index.html @@ -1,50 +1,32 @@ - - -All Packages (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +All Packages (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +

All Packages

-
-
    -
  • - - - - - - - - - - - - -
    Package Summary 
    PackageDescription
    co.aikar.commands 
    -
  • -
+
Package Summary
+
+
Package
+
Description
+ +
 
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/co/aikar/commands/ACFBrigadierManager.html b/docs/acf-brigadier/co/aikar/commands/ACFBrigadierManager.html index 325685b6..b0af5fcd 100644 --- a/docs/acf-brigadier/co/aikar/commands/ACFBrigadierManager.html +++ b/docs/acf-brigadier/co/aikar/commands/ACFBrigadierManager.html @@ -1,283 +1,148 @@ - - -ACFBrigadierManager (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +ACFBrigadierManager (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ - +
+
- -

Class ACFBrigadierManager<S>

+ +

Class ACFBrigadierManager<S>

-
- -
- -
-
-
-
-
    -
  • + +
    +
      -
      -
        -
      • - - -

        Field Detail

        - - - -
          -
        • -

          manager

          -
          protected final co.aikar.commands.CommandManager<?,​?,​?,​?,​?,​?> manager
          -
          Deprecated.
          -
        • -
        +
      • +
        +

        Field Details

        +
          +
        • +
          +

          manager

          +
          protected final co.aikar.commands.CommandManager<?,?,?,?,?,?> manager
          +
          Deprecated.
          +
      -
-
-
+ +
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/co/aikar/commands/class-use/ACFBrigadierManager.html b/docs/acf-brigadier/co/aikar/commands/class-use/ACFBrigadierManager.html index 589860d7..348a828a 100644 --- a/docs/acf-brigadier/co/aikar/commands/class-use/ACFBrigadierManager.html +++ b/docs/acf-brigadier/co/aikar/commands/class-use/ACFBrigadierManager.html @@ -1,145 +1,60 @@ - - -Uses of Class co.aikar.commands.ACFBrigadierManager (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFBrigadierManager (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +
-

Uses of Class
co.aikar.commands.ACFBrigadierManager

+

Uses of Class
co.aikar.commands.ACFBrigadierManager

-
No usage of co.aikar.commands.ACFBrigadierManager
-
+No usage of co.aikar.commands.ACFBrigadierManager
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/co/aikar/commands/package-summary.html b/docs/acf-brigadier/co/aikar/commands/package-summary.html index 3bae4212..56860710 100644 --- a/docs/acf-brigadier/co/aikar/commands/package-summary.html +++ b/docs/acf-brigadier/co/aikar/commands/package-summary.html @@ -1,51 +1,33 @@ - - -co.aikar.commands (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +
-

Package co.aikar.commands

+

Package co.aikar.commands

+
+
+
package co.aikar.commands
+
+
    +
  • +
    +
    Classes
    +
    +
    Class
    +
    Description
    + +
    Deprecated. +
    Unstable API
    +
    +
    -
    -
      -
    • - - - - - - - - - - - - -
      Class Summary 
      ClassDescription
      ACFBrigadierManager<S>Deprecated. -
      Unstable API
      -
    -
    +
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/co/aikar/commands/package-tree.html b/docs/acf-brigadier/co/aikar/commands/package-tree.html index 45ed47c7..52b94a04 100644 --- a/docs/acf-brigadier/co/aikar/commands/package-tree.html +++ b/docs/acf-brigadier/co/aikar/commands/package-tree.html @@ -1,156 +1,70 @@ - - -co.aikar.commands Class Hierarchy (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +

Hierarchy For Package co.aikar.commands

-
-
+

Class Hierarchy

-
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/co/aikar/commands/package-use.html b/docs/acf-brigadier/co/aikar/commands/package-use.html index 30c77844..3450e8f7 100644 --- a/docs/acf-brigadier/co/aikar/commands/package-use.html +++ b/docs/acf-brigadier/co/aikar/commands/package-use.html @@ -1,145 +1,60 @@ - - -Uses of Package co.aikar.commands (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +

Uses of Package
co.aikar.commands

-
No usage of co.aikar.commands
-
+No usage of co.aikar.commands
- -

Copyright © 2020. All rights reserved.

+
+
+
+
diff --git a/docs/acf-brigadier/deprecated-list.html b/docs/acf-brigadier/deprecated-list.html index 7c14f5ca..75de02f1 100644 --- a/docs/acf-brigadier/deprecated-list.html +++ b/docs/acf-brigadier/deprecated-list.html @@ -1,95 +1,50 @@ - - -Deprecated List (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
+
+ +

Deprecated API

@@ -98,74 +53,27 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  • Classes
  • -
    - - -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-brigadier/index-all.html b/docs/acf-brigadier/index-all.html index 8516ef2d..9a675aed 100644 --- a/docs/acf-brigadier/index-all.html +++ b/docs/acf-brigadier/index-all.html @@ -1,172 +1,82 @@ - - -Index (ACF (Brigadier) 0.5.0-SNAPSHOT API) + +Index (ACF (Brigadier) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A C M 
    All Classes All Packages - - -

    A

    -
    -
    ACFBrigadierManager<S> - Class in co.aikar.commands
    +
    +

    Index

    +
    +A C M 
    All Classes and Interfaces|All Packages +

    A

    +
    +
    ACFBrigadierManager<S> - Class in co.aikar.commands
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    - - - -

    M

    -
    -
    manager - Variable in class co.aikar.commands.ACFBrigadierManager
    +

    M

    +
    +
    manager - Variable in class co.aikar.commands.ACFBrigadierManager
    -
    Deprecated.
    +
    Deprecated.
     
    -A C M 
    All Classes All Packages
    -
    +A C M 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-brigadier/index.html b/docs/acf-brigadier/index.html index b9f866ad..fef34774 100644 --- a/docs/acf-brigadier/index.html +++ b/docs/acf-brigadier/index.html @@ -1,18 +1,20 @@ - - -ACF (Brigadier) 0.5.0-SNAPSHOT API + +ACF (Brigadier) 0.5.1-SNAPSHOT API + + + + + - - - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletionContext.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletionContext.html index 7262bde8..a1e1666a 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletionContext.html @@ -1,314 +1,164 @@ - - -BukkitCommandCompletionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandCompletionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandCompletionContext

    + +

    Class BukkitCommandCompletionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class BukkitCommandCompletionContext +extends co.aikar.commands.CommandCompletionContext<BukkitCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandCompletionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandCompletionContext

        +issuer
        +
      • -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          org.bukkit.entity.PlayergetPlayer() +
        • +
          +

          Method Summary

          +
          +
          +
          +
          +
          Modifier and Type
          +
          Method
          +
          Description
          +
          org.bukkit.entity.Player
          + +
          Returns the Player object if this Issuer is a Player
          -
        • org.bukkit.command.CommandSendergetSender() 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandCompletionContext

            -getConfig, getConfig, getConfig, getConfigs, getContextValue, getContextValue, getContextValueByName, getInput, getIssuer, hasConfig, isAsync
          • -
          - -
        • -
        +
    +
    org.bukkit.command.CommandSender
    + +
     
    +
    +
    +
    +
    +

    Methods inherited from class co.aikar.commands.CommandCompletionContext

    +getConfig, getConfig, getConfig, getConfigs, getContextValue, getContextValue, getContextValueByName, getInput, getIssuer, hasConfig, isAsync
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public org.bukkit.command.CommandSender getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public org.bukkit.command.CommandSender getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.bukkit.entity.Player getPlayer()
              +
            • +
              +

              getPlayer

              +
              public org.bukkit.entity.Player getPlayer()
              Returns the Player object if this Issuer is a Player
              -
              -
              Returns:
              +
              +
              Returns:
              -
            • -
            +
      -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletions.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletions.html index 8dd01a10..9fdcd485 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletions.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandCompletions.html @@ -1,296 +1,145 @@ - - -BukkitCommandCompletions (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandCompletions (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandCompletions

    + +

    Class BukkitCommandCompletions

    -
    - -
    - -
    -
    -
      -
    • +
      public class BukkitCommandCompletions +extends co.aikar.commands.CommandCompletions<BukkitCommandCompletionContext>
      + +
      +
        -
        -
          -
        • - - -

          Nested Class Summary

          -
            -
          • - - -

            Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

            -co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
          • -
          -
        • -
        +
      • +
        +

        Nested Class Summary

        +
        +

        Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

        +co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
        +
      • -
        - +
      • +
        +

        Constructor Summary

        +
        Constructors
        +
        +
        Constructor
        +
        Description
        + +
         
        +
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +

        Methods inherited from class co.aikar.commands.CommandCompletions

        +registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, setDefaultCompletion
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandContexts.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandContexts.html index 3ec44af8..af2626c4 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandContexts.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandContexts.html @@ -1,296 +1,145 @@ - - -BukkitCommandContexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandContexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandContexts

    + +

    Class BukkitCommandContexts

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandExecutionContext.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandExecutionContext.html index 5d4a1d37..f9047ad5 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandExecutionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandExecutionContext.html @@ -1,314 +1,164 @@ - - -BukkitCommandExecutionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandExecutionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandExecutionContext

    + +

    Class BukkitCommandExecutionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class BukkitCommandExecutionContext +extends co.aikar.commands.CommandExecutionContext<BukkitCommandExecutionContext,BukkitCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandExecutionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandExecutionContext

        +issuer
        +
      • -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          org.bukkit.entity.PlayergetPlayer() +
        • +
          +

          Method Summary

          +
          +
          +
          +
          +
          Modifier and Type
          +
          Method
          +
          Description
          +
          org.bukkit.entity.Player
          + +
          Returns the Player object if this Issuer is a Player
          -
        • org.bukkit.command.CommandSendergetSender() 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandExecutionContext

            -canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
          • -
          - -
        • -
        +
    +
    org.bukkit.command.CommandSender
    + +
     
    +
    +
    +
    +
    +

    Methods inherited from class co.aikar.commands.CommandExecutionContext

    +canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public org.bukkit.command.CommandSender getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public org.bukkit.command.CommandSender getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.bukkit.entity.Player getPlayer()
              +
            • +
              +

              getPlayer

              +
              public org.bukkit.entity.Player getPlayer()
              Returns the Player object if this Issuer is a Player
              -
              -
              Returns:
              +
              +
              Returns:
              -
            • -
            +
      -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandIssuer.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandIssuer.html index fd056bca..50709ffb 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandIssuer.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandIssuer.html @@ -1,422 +1,248 @@ - - -BukkitCommandIssuer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandIssuer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandIssuer

    + +

    Class BukkitCommandIssuer

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.BukkitCommandIssuer
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.CommandIssuer

      -
      public class BukkitCommandIssuer
      -extends Object
      -implements co.aikar.commands.CommandIssuer
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            isPlayer

            -
            public boolean isPlayer()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              isPlayer

              +
              public boolean isPlayer()
              +
              +
              Specified by:
              isPlayer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getIssuer

              -
              public org.bukkit.command.CommandSender getIssuer()
              -
              -
              Specified by:
              +
            • +
              +

              getIssuer

              +
              public org.bukkit.command.CommandSender getIssuer()
              +
              +
              Specified by:
              getIssuer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.bukkit.entity.Player getPlayer()
              +
            • +
              +

              getPlayer

              +
              public org.bukkit.entity.Player getPlayer()
              +
            • -
            - - - -
              -
            • -

              getUniqueId

              -
              @NotNull
              -public @NotNull UUID getUniqueId()
              -
              -
              Specified by:
              +
            • +
              +

              getUniqueId

              +
              @NotNull +public @NotNull UUID getUniqueId()
              +
              +
              Specified by:
              getUniqueId in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              sendMessageInternal

              -
              public void sendMessageInternal​(String message)
              -
              -
              Specified by:
              +
            • +
              +

              sendMessageInternal

              +
              public void sendMessageInternal(String message)
              +
              +
              Specified by:
              sendMessageInternal in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              hasPermission

              -
              public boolean hasPermission​(String name)
              -
              -
              Specified by:
              +
            • +
              +

              hasPermission

              +
              public boolean hasPermission(String name)
              +
              +
              Specified by:
              hasPermission in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - - - - - - +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html b/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html index 74d85abc..2982fe73 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitCommandManager.html @@ -1,920 +1,607 @@ - - -BukkitCommandManager (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitCommandManager (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitCommandManager

    + +

    Class BukkitCommandManager

    -
    - -
    - -
    -
    -
    +
    void
    + +
     
    +
    boolean
    +
    usePerIssuerLocale(boolean usePerIssuerLocale, + boolean autoDetectFromClient)
    +
     
    +
    +
    +
    +
    +

    Methods inherited from class co.aikar.commands.CommandManager

    +addSupportedLanguage, enableUnstableAPI, 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
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitConditionContext.html b/docs/acf-bukkit/co/aikar/commands/BukkitConditionContext.html index dd79afc8..76497094 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitConditionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitConditionContext.html @@ -1,291 +1,149 @@ - - -BukkitConditionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitConditionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitConditionContext

    + +

    Class BukkitConditionContext

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public org.bukkit.command.CommandSender getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public org.bukkit.command.CommandSender getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.bukkit.entity.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public org.bukkit.entity.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitLocales.html b/docs/acf-bukkit/co/aikar/commands/BukkitLocales.html index 4bc967b1..0e249331 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitLocales.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitLocales.html @@ -1,427 +1,254 @@ - - -BukkitLocales (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitLocales (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitLocales

    + +

    Class BukkitLocales

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.Locales
      • -
      • -
          -
        • co.aikar.commands.BukkitLocales
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.Locales +
      co.aikar.commands.BukkitLocales
      +
      +
      +

      -
      public class BukkitLocales
      -extends co.aikar.commands.Locales
      -
    • -
    -
    -
    -
      -
    • +
      public class BukkitLocales +extends co.aikar.commands.Locales
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.Locales

            -AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.Locales

        +AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
        +
      • -
        - -
        - -
        - -
        - -
      +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      + +
       
      -
      - + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      boolean
      +
      loadLanguage(org.bukkit.configuration.file.FileConfiguration config, + Locale locale)
      +
      +
      Loads every message from the Configuration object.
      +
      +
      void
      + +
       
      +
      boolean
      +
      loadYamlLanguageFile(File file, + Locale locale)
      +
      +
      Loads the given file
      +
      +
      boolean
      + +
      +
      Loads a file out of the plugins data folder by the given name
      +
      +
      +
      +
      +
      +

      Methods inherited from class co.aikar.commands.Locales

      +addBundleClassLoader, addMessage, addMessageBundle, addMessageBundle, addMessageBundles, addMessages, addMessageStrings, getDefaultLocale, getMessage, getOptionalMessage, loadMissingBundles, replaceI18NStrings, setDefaultLocale
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
    +
    +
      + +
    • +
      +

      Constructor Details

      + +
      +
    • -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          loadLanguages

          -
          public void loadLanguages()
          -
          -
          Overrides:
          +
        • +
          +

          Method Details

          +
            +
          • +
            +

            loadLanguages

            +
            public void loadLanguages()
            +
            +
            Overrides:
            loadLanguages in class co.aikar.commands.Locales
            +
          • -
          - - - -
            -
          • -

            loadYamlLanguageFile

            -
            public boolean loadYamlLanguageFile​(File file,
            -                                    Locale locale)
            -                             throws IOException,
            -                                    org.bukkit.configuration.InvalidConfigurationException
            +
          • +
            +

            loadYamlLanguageFile

            +
            public boolean loadYamlLanguageFile(File file, + Locale locale) + throws IOException, +org.bukkit.configuration.InvalidConfigurationException
            Loads the given file
            -
            -
            Parameters:
            +
            +
            Parameters:
            file -
            locale -
            -
            Returns:
            +
            Returns:
            If any language keys were added
            -
            Throws:
            -
            IOException
            +
            Throws:
            +
            IOException
            org.bukkit.configuration.InvalidConfigurationException
            +
          • -
          - - - -
            -
          • -

            loadYamlLanguageFile

            -
            public boolean loadYamlLanguageFile​(String file,
            -                                    Locale locale)
            -                             throws IOException,
            -                                    org.bukkit.configuration.InvalidConfigurationException
            +
          • +
            +

            loadYamlLanguageFile

            +
            public boolean loadYamlLanguageFile(String file, + Locale locale) + throws IOException, +org.bukkit.configuration.InvalidConfigurationException
            Loads a file out of the plugins data folder by the given name
            -
            -
            Parameters:
            +
            +
            Parameters:
            file -
            locale -
            -
            Returns:
            +
            Returns:
            If any language keys were added
            -
            Throws:
            -
            IOException
            +
            Throws:
            +
            IOException
            org.bukkit.configuration.InvalidConfigurationException
            +
          • -
          - - - -
            -
          • -

            loadLanguage

            -
            public boolean loadLanguage​(org.bukkit.configuration.file.FileConfiguration config,
            -                            Locale locale)
            +
          • +
            +

            loadLanguage

            +
            public boolean loadLanguage(org.bukkit.configuration.file.FileConfiguration config, + Locale locale)
            Loads every message from the Configuration object. Any nested values will be treated as namespace so acf-core:\n\tfoo: bar will be acf-core.foo = bar
            -
            -
            Parameters:
            +
            +
            Parameters:
            config -
            locale -
            -
            Returns:
            +
            Returns:
            If any language keys were added
            -
          • -
          +
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitMessageFormatter.html b/docs/acf-bukkit/co/aikar/commands/BukkitMessageFormatter.html index 54da868b..0f44efbe 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitMessageFormatter.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitMessageFormatter.html @@ -1,279 +1,136 @@ - - -BukkitMessageFormatter (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitMessageFormatter (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitMessageFormatter

    + +

    Class BukkitMessageFormatter

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.MessageFormatter<org.bukkit.ChatColor>
      • -
      • -
          -
        • co.aikar.commands.BukkitMessageFormatter
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.MessageFormatter<org.bukkit.ChatColor> +
      co.aikar.commands.BukkitMessageFormatter
      +
      +
      +

      -
      public class BukkitMessageFormatter
      -extends co.aikar.commands.MessageFormatter<org.bukkit.ChatColor>
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitRegisteredCommand.html b/docs/acf-bukkit/co/aikar/commands/BukkitRegisteredCommand.html index f68e1bb2..26a2aa85 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitRegisteredCommand.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitRegisteredCommand.html @@ -1,316 +1,166 @@ - - -BukkitRegisteredCommand (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitRegisteredCommand (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitRegisteredCommand

    + +

    Class BukkitRegisteredCommand

    -
    - -
    - -
    -
    -
      -
    • +
      public class BukkitRegisteredCommand +extends co.aikar.commands.RegisteredCommand<BukkitCommandExecutionContext>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.RegisteredCommand

            -helpSearchTags
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.RegisteredCommand

        +helpSearchTags
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        void
        + +
         
        +
        void
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.RegisteredCommand

        +addSubcommand, addSubcommands, getAnnotation, getCommand, getHelpText, getPermission, getPrefSubCommand, getRequiredPermissions, getSyntaxText, getSyntaxText, isPrivate, requiresPermission
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/BukkitRootCommand.html b/docs/acf-bukkit/co/aikar/commands/BukkitRootCommand.html index e79dceab..294a55a6 100644 --- a/docs/acf-bukkit/co/aikar/commands/BukkitRootCommand.html +++ b/docs/acf-bukkit/co/aikar/commands/BukkitRootCommand.html @@ -1,503 +1,304 @@ - - -BukkitRootCommand (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +BukkitRootCommand (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BukkitRootCommand

    + +

    Class BukkitRootCommand

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • org.bukkit.command.Command
      • -
      • -
          -
        • co.aikar.commands.BukkitRootCommand
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      +
      java.lang.Object +
      org.bukkit.command.Command +
      co.aikar.commands.BukkitRootCommand
      +
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.RootCommand, org.bukkit.command.PluginIdentifiableCommand

      -
      public class BukkitRootCommand
      -extends org.bukkit.command.Command
      -implements co.aikar.commands.RootCommand, org.bukkit.command.PluginIdentifiableCommand
      -
    • -
    -
    -
    -
      -
    • +
      public class BukkitRootCommand +extends org.bukkit.command.Command +implements co.aikar.commands.RootCommand, org.bukkit.command.PluginIdentifiableCommand
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class org.bukkit.command.Command

            -description, usageMessage
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class org.bukkit.command.Command

        +description, usageMessage
        +
      • -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          voidaddChild​(co.aikar.commands.BaseCommand command) 
          booleanexecute​(org.bukkit.command.CommandSender sender, - String commandLabel, - String[] args) 
          List<co.aikar.commands.BaseCommand>getChildren() 
          StringgetCommandName() 
          co.aikar.commands.BaseCommandgetDefCommand() 
          StringgetDescription() 
          co.aikar.commands.CommandManagergetManager() 
          org.bukkit.plugin.PlugingetPlugin() 
          com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand>getSubCommands() 
          List<String>tabComplete​(org.bukkit.command.CommandSender sender, - String commandLabel, - String[] args) 
          booleantestPermissionSilent​(org.bukkit.command.CommandSender target) 
          -
            -
          • - - -

            Methods inherited from class org.bukkit.command.Command

            -broadcastCommandMessage, broadcastCommandMessage, getAliases, getLabel, getName, getPermission, getPermissionMessage, getUsage, isRegistered, register, setAliases, setDescription, setLabel, setName, setPermission, setPermissionMessage, setUsage, tabComplete, testPermission, toString, unregister
          • -
          - -
            -
          • - - -

            Methods inherited from interface co.aikar.commands.RootCommand

            -addChildShared, execute, getDefaultRegisteredCommand, getTabCompletions, getTabCompletions, getTabCompletions, getUniquePermission, getUsage, hasAnyPermission
          • -
          -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        void
        +
        addChild(co.aikar.commands.BaseCommand command)
        +
         
        +
        boolean
        +
        execute(org.bukkit.command.CommandSender sender, + String commandLabel, + String[] args)
        +
         
        +
        List<co.aikar.commands.BaseCommand>
        + +
         
        + + +
         
        +
        co.aikar.commands.BaseCommand
        + +
         
        + + +
         
        +
        co.aikar.commands.CommandManager
        + +
         
        +
        org.bukkit.plugin.Plugin
        + +
         
        +
        com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand>
        + +
         
        + +
        tabComplete(org.bukkit.command.CommandSender sender, + String commandLabel, + String[] args)
        +
         
        +
        boolean
        +
        testPermissionSilent(org.bukkit.command.CommandSender target)
        +
         
        +
        +
        +
        +
        +

        Methods inherited from class org.bukkit.command.Command

        +broadcastCommandMessage, broadcastCommandMessage, getAliases, getLabel, getName, getPermission, getPermissionMessage, getUsage, isRegistered, register, setAliases, setDescription, setLabel, setName, setPermission, setPermissionMessage, setUsage, tabComplete, testPermission, toString, unregister
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
        +
        +

        Methods inherited from interface co.aikar.commands.RootCommand

        +addChildShared, execute, getDefaultRegisteredCommand, getTabCompletions, getTabCompletions, getTabCompletions, getUniquePermission, getUsage, hasAnyPermission
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getDescription

            -
            public String getDescription()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getDescription

              + +
              +
              Specified by:
              getDescription in interface co.aikar.commands.RootCommand
              -
              Overrides:
              +
              Overrides:
              getDescription in class org.bukkit.command.Command
              +
            • -
            - - - -
              -
            • -

              getCommandName

              -
              public String getCommandName()
              -
              -
              Specified by:
              +
            • +
              +

              getCommandName

              + +
              +
              Specified by:
              getCommandName in interface co.aikar.commands.RootCommand
              +
            • -
            - - - - - - - -
              -
            • -

              execute

              -
              public boolean execute​(org.bukkit.command.CommandSender sender,
              -                       String commandLabel,
              -                       String[] args)
              -
              -
              Specified by:
              +
            • +
              +

              execute

              +
              public boolean execute(org.bukkit.command.CommandSender sender, + String commandLabel, + String[] args)
              +
              +
              Specified by:
              execute in class org.bukkit.command.Command
              +
            • -
            - - - -
              -
            • -

              testPermissionSilent

              -
              public boolean testPermissionSilent​(org.bukkit.command.CommandSender target)
              -
              -
              Overrides:
              +
            • +
              +

              testPermissionSilent

              +
              public boolean testPermissionSilent(org.bukkit.command.CommandSender target)
              +
              +
              Overrides:
              testPermissionSilent in class org.bukkit.command.Command
              +
            • -
            - - - -
              -
            • -

              addChild

              -
              public void addChild​(co.aikar.commands.BaseCommand command)
              -
              -
              Specified by:
              +
            • +
              +

              addChild

              +
              public void addChild(co.aikar.commands.BaseCommand command)
              +
              +
              Specified by:
              addChild in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getSubCommands

              -
              public com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand> getSubCommands()
              -
              -
              Specified by:
              +
            • +
              +

              getSubCommands

              +
              public com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand> getSubCommands()
              +
              +
              Specified by:
              getSubCommands in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getChildren

              -
              public List<co.aikar.commands.BaseCommand> getChildren()
              -
              -
              Specified by:
              +
            • +
              +

              getChildren

              +
              public List<co.aikar.commands.BaseCommand> getChildren()
              +
              +
              Specified by:
              getChildren in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getDefCommand

              -
              public co.aikar.commands.BaseCommand getDefCommand()
              -
              -
              Specified by:
              +
            • +
              +

              getDefCommand

              +
              public co.aikar.commands.BaseCommand getDefCommand()
              +
              +
              Specified by:
              getDefCommand in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getPlugin

              -
              public org.bukkit.plugin.Plugin getPlugin()
              -
              -
              Specified by:
              +
            • +
              +

              getPlugin

              +
              public org.bukkit.plugin.Plugin getPlugin()
              +
              +
              Specified by:
              getPlugin in interface org.bukkit.command.PluginIdentifiableCommand
              -
            • -
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/MinecraftMessageKeys.html b/docs/acf-bukkit/co/aikar/commands/MinecraftMessageKeys.html index 5c86dcff..51fb544b 100644 --- a/docs/acf-bukkit/co/aikar/commands/MinecraftMessageKeys.html +++ b/docs/acf-bukkit/co/aikar/commands/MinecraftMessageKeys.html @@ -1,526 +1,315 @@ - - -MinecraftMessageKeys (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +MinecraftMessageKeys (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Enum MinecraftMessageKeys

    + +

    Enum MinecraftMessageKeys

    -
    - -
    - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Methods inherited from class java.lang.Object

    +getClass, notify, notifyAll, wait, wait, wait
    + +
    +
    +
    +
    Returns:
    an array containing the constants of this enum type, in the order they are declared
    + - - - - -
      -
    • -

      valueOf

      -
      public static MinecraftMessageKeys valueOf​(String name)
      +
    • +
      +

      valueOf

      +
      public static MinecraftMessageKeys valueOf(String name)
      Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)
      -
      -
      Parameters:
      +
      +
      Parameters:
      name - the name of the enum constant to be returned.
      -
      Returns:
      +
      Returns:
      the enum constant with the specified name
      -
      Throws:
      -
      IllegalArgumentException - if this enum type has no constant with the specified name
      -
      NullPointerException - if the argument is null
      +
      Throws:
      +
      IllegalArgumentException - if this enum type has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
    • -
    - - - -
      -
    • -

      getMessageKey

      -
      public co.aikar.locales.MessageKey getMessageKey()
      -
      -
      Specified by:
      +
    • +
      +

      getMessageKey

      +
      public co.aikar.locales.MessageKey getMessageKey()
      +
      +
      Specified by:
      getMessageKey in interface co.aikar.locales.MessageKeyProvider
      -
    • -
    + - - - + + + + diff --git a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/OnlinePlayer.html b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/OnlinePlayer.html index 0e8bc73b..cc65126e 100644 --- a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/OnlinePlayer.html +++ b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/OnlinePlayer.html @@ -1,405 +1,234 @@ - - -OnlinePlayer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/class-use/OnlinePlayer.html b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/class-use/OnlinePlayer.html index f29368d3..f500431f 100644 --- a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/class-use/OnlinePlayer.html @@ -1,195 +1,90 @@ - - -Uses of Class co.aikar.commands.bukkit.contexts.OnlinePlayer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.bukkit.contexts.OnlinePlayer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.bukkit.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.bukkit.contexts.OnlinePlayer

    +
    +
    Packages that use OnlinePlayer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-summary.html b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-summary.html index 1dd5b6bb..98a3f8fd 100644 --- a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-summary.html +++ b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.bukkit.contexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands.bukkit.contexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.bukkit.contexts

    +

    Package co.aikar.commands.bukkit.contexts

    +
    +
    +
    package co.aikar.commands.bukkit.contexts
    +
    +
      +
    • +
      +
      Classes
      +
      +
      Class
      +
      Description
      + +
       
      +
      -
      -
        -
      • - - - - - - - - - - - - -
        Class Summary 
        ClassDescription
        OnlinePlayer 
      -
      +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-tree.html b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-tree.html index 1c197917..5cab36b3 100644 --- a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-tree.html +++ b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-tree.html @@ -1,162 +1,75 @@ - - -co.aikar.commands.bukkit.contexts Class Hierarchy (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands.bukkit.contexts Class Hierarchy (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.bukkit.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-use.html b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-use.html index 1f1cbe88..3cd3600b 100644 --- a/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-use.html +++ b/docs/acf-bukkit/co/aikar/commands/bukkit/contexts/package-use.html @@ -1,182 +1,83 @@ - - -Uses of Package co.aikar.commands.bukkit.contexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.bukkit.contexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.bukkit.contexts

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitHelpTopic.html b/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitHelpTopic.html index 0381111a..6d6346c3 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitHelpTopic.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitHelpTopic.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFBukkitHelpTopic (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFBukkitHelpTopic (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFBukkitHelpTopic

    +

    Uses of Class
    co.aikar.commands.ACFBukkitHelpTopic

    -
    No usage of co.aikar.commands.ACFBukkitHelpTopic
    -
    +No usage of co.aikar.commands.ACFBukkitHelpTopic
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitUtil.html b/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitUtil.html index 2428538d..f7037c1b 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitUtil.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/ACFBukkitUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFBukkitUtil (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFBukkitUtil (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFBukkitUtil

    +

    Uses of Class
    co.aikar.commands.ACFBukkitUtil

    -
    No usage of co.aikar.commands.ACFBukkitUtil
    -
    +No usage of co.aikar.commands.ACFBukkitUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletionContext.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletionContext.html index a887a98d..e55d9d48 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletionContext.html @@ -1,210 +1,99 @@ - - -Uses of Class co.aikar.commands.BukkitCommandCompletionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandCompletionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandCompletionContext

    +

    Uses of Class
    co.aikar.commands.BukkitCommandCompletionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletions.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletions.html index 7bc92ac9..f5533017 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletions.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandCompletions.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BukkitCommandCompletions (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandCompletions (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandCompletions

    +

    Uses of Class
    co.aikar.commands.BukkitCommandCompletions

    +
    +
    Packages that use BukkitCommandCompletions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandContexts.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandContexts.html index 14ed4a89..8b5770a3 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandContexts.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandContexts.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BukkitCommandContexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandContexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandContexts

    +

    Uses of Class
    co.aikar.commands.BukkitCommandContexts

    +
    +
    Packages that use BukkitCommandContexts
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandExecutionContext.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandExecutionContext.html index 6ee235f1..69a40ddd 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandExecutionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandExecutionContext.html @@ -1,211 +1,100 @@ - - -Uses of Class co.aikar.commands.BukkitCommandExecutionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandExecutionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.BukkitCommandExecutionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandIssuer.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandIssuer.html index e184d429..866b83f6 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandIssuer.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandIssuer.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BukkitCommandIssuer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandIssuer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandIssuer

    +

    Uses of Class
    co.aikar.commands.BukkitCommandIssuer

    +
    +
    Packages that use BukkitCommandIssuer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandManager.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandManager.html index 0b9479ff..a300288e 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandManager.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitCommandManager.html @@ -1,202 +1,96 @@ - - -Uses of Class co.aikar.commands.BukkitCommandManager (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitCommandManager (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitCommandManager

    +

    Uses of Class
    co.aikar.commands.BukkitCommandManager

    +
    +
    Packages that use BukkitCommandManager
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitConditionContext.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitConditionContext.html index d99240d6..135dc94c 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitConditionContext.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitConditionContext.html @@ -1,192 +1,87 @@ - - -Uses of Class co.aikar.commands.BukkitConditionContext (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitConditionContext (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitConditionContext

    +

    Uses of Class
    co.aikar.commands.BukkitConditionContext

    +
    +
    Packages that use BukkitConditionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitLocales.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitLocales.html index 8044476f..7a48153f 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitLocales.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitLocales.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.BukkitLocales (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitLocales (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitLocales

    +

    Uses of Class
    co.aikar.commands.BukkitLocales

    +
    +
    Packages that use BukkitLocales
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitMessageFormatter.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitMessageFormatter.html index 6dac88ed..39a86b79 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitMessageFormatter.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitMessageFormatter.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.BukkitMessageFormatter (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitMessageFormatter (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitMessageFormatter

    +

    Uses of Class
    co.aikar.commands.BukkitMessageFormatter

    -
    No usage of co.aikar.commands.BukkitMessageFormatter
    -
    +No usage of co.aikar.commands.BukkitMessageFormatter
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRegisteredCommand.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRegisteredCommand.html index 256967b8..be48de8d 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRegisteredCommand.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRegisteredCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.BukkitRegisteredCommand (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitRegisteredCommand (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitRegisteredCommand

    +

    Uses of Class
    co.aikar.commands.BukkitRegisteredCommand

    -
    No usage of co.aikar.commands.BukkitRegisteredCommand
    -
    +No usage of co.aikar.commands.BukkitRegisteredCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRootCommand.html b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRootCommand.html index 42740a21..6a2120e6 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRootCommand.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/BukkitRootCommand.html @@ -1,224 +1,109 @@ - - -Uses of Class co.aikar.commands.BukkitRootCommand (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BukkitRootCommand (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BukkitRootCommand

    +

    Uses of Class
    co.aikar.commands.BukkitRootCommand

    -
    - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/class-use/MinecraftMessageKeys.html b/docs/acf-bukkit/co/aikar/commands/class-use/MinecraftMessageKeys.html index 7be826f2..48bfaf8b 100644 --- a/docs/acf-bukkit/co/aikar/commands/class-use/MinecraftMessageKeys.html +++ b/docs/acf-bukkit/co/aikar/commands/class-use/MinecraftMessageKeys.html @@ -1,201 +1,94 @@ - - -Uses of Class co.aikar.commands.MinecraftMessageKeys (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Enum co.aikar.commands.MinecraftMessageKeys (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MinecraftMessageKeys

    +

    Uses of Enum
    co.aikar.commands.MinecraftMessageKeys

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bukkit/co/aikar/commands/contexts/OnlinePlayer.html b/docs/acf-bukkit/co/aikar/commands/contexts/OnlinePlayer.html index 2987f54b..ca512f8d 100644 --- a/docs/acf-bukkit/co/aikar/commands/contexts/OnlinePlayer.html +++ b/docs/acf-bukkit/co/aikar/commands/contexts/OnlinePlayer.html @@ -1,303 +1,152 @@ - - -OnlinePlayer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            OnlinePlayer

            -
            public OnlinePlayer​(org.bukkit.entity.Player player)
            -
            Deprecated.
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            OnlinePlayer

            +
            public OnlinePlayer(org.bukkit.entity.Player player)
            +
            Deprecated.
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/contexts/class-use/OnlinePlayer.html b/docs/acf-bukkit/co/aikar/commands/contexts/class-use/OnlinePlayer.html index c37be575..868e41d6 100644 --- a/docs/acf-bukkit/co/aikar/commands/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-bukkit/co/aikar/commands/contexts/class-use/OnlinePlayer.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    -
    No usage of co.aikar.commands.contexts.OnlinePlayer
    -
    +No usage of co.aikar.commands.contexts.OnlinePlayer
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/contexts/package-summary.html b/docs/acf-bukkit/co/aikar/commands/contexts/package-summary.html index d0305ac8..e279c879 100644 --- a/docs/acf-bukkit/co/aikar/commands/contexts/package-summary.html +++ b/docs/acf-bukkit/co/aikar/commands/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.contexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.contexts

    +

    Package co.aikar.commands.contexts

    +
    +
    +
    package co.aikar.commands.contexts
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/contexts/package-tree.html b/docs/acf-bukkit/co/aikar/commands/contexts/package-tree.html index 75d43f3e..92f05edd 100644 --- a/docs/acf-bukkit/co/aikar/commands/contexts/package-tree.html +++ b/docs/acf-bukkit/co/aikar/commands/contexts/package-tree.html @@ -1,166 +1,79 @@ - - -co.aikar.commands.contexts Class Hierarchy (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts Class Hierarchy (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/contexts/package-use.html b/docs/acf-bukkit/co/aikar/commands/contexts/package-use.html index 66cb43c5..d2d5816c 100644 --- a/docs/acf-bukkit/co/aikar/commands/contexts/package-use.html +++ b/docs/acf-bukkit/co/aikar/commands/contexts/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.contexts (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.contexts (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.contexts

    -
    No usage of co.aikar.commands.contexts
    -
    +No usage of co.aikar.commands.contexts
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/package-summary.html b/docs/acf-bukkit/co/aikar/commands/package-summary.html index a525f1fc..656046e2 100644 --- a/docs/acf-bukkit/co/aikar/commands/package-summary.html +++ b/docs/acf-bukkit/co/aikar/commands/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/package-tree.html b/docs/acf-bukkit/co/aikar/commands/package-tree.html index 185a14be..f8272e8c 100644 --- a/docs/acf-bukkit/co/aikar/commands/package-tree.html +++ b/docs/acf-bukkit/co/aikar/commands/package-tree.html @@ -1,236 +1,149 @@ - - -co.aikar.commands Class Hierarchy (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Enum Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/co/aikar/commands/package-use.html b/docs/acf-bukkit/co/aikar/commands/package-use.html index 575a7993..b21b9b37 100644 --- a/docs/acf-bukkit/co/aikar/commands/package-use.html +++ b/docs/acf-bukkit/co/aikar/commands/package-use.html @@ -1,218 +1,101 @@ - - -Uses of Package co.aikar.commands (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/deprecated-list.html b/docs/acf-bukkit/deprecated-list.html index 3e5b251c..4031eee0 100644 --- a/docs/acf-bukkit/deprecated-list.html +++ b/docs/acf-bukkit/deprecated-list.html @@ -1,96 +1,51 @@ - - -Deprecated List (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Deprecated API

    @@ -100,105 +55,46 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  • Methods
  • -
    - - - - - - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/index-all.html b/docs/acf-bukkit/index-all.html index b661f373..281b8234 100644 --- a/docs/acf-bukkit/index-all.html +++ b/docs/acf-bukkit/index-all.html @@ -1,577 +1,434 @@ - - -Index (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Index (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A B C D E F G H I K L M N O P R S T U V Y 
    All Classes All Packages - - -

    A

    -
    -
    ACFBukkitHelpTopic - Class in co.aikar.commands
    +
    +

    Index

    +
    +A B C D E F G H I K L M N O P R S T U V Y 
    All Classes and Interfaces|All Packages +

    A

    +
    +
    ACFBukkitHelpTopic - Class in co.aikar.commands
     
    -
    ACFBukkitHelpTopic(BukkitCommandManager, BukkitRootCommand) - Constructor for class co.aikar.commands.ACFBukkitHelpTopic
    +
    ACFBukkitHelpTopic(BukkitCommandManager, BukkitRootCommand) - Constructor for class co.aikar.commands.ACFBukkitHelpTopic
     
    -
    ACFBukkitUtil - Class in co.aikar.commands
    +
    ACFBukkitUtil - Class in co.aikar.commands
     
    -
    ACFBukkitUtil() - Constructor for class co.aikar.commands.ACFBukkitUtil
    +
    ACFBukkitUtil() - Constructor for class co.aikar.commands.ACFBukkitUtil
     
    -
    addChild(BaseCommand) - Method in class co.aikar.commands.BukkitRootCommand
    +
    addChild(BaseCommand) - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    autoDetectFromClient - Variable in class co.aikar.commands.BukkitCommandManager
    +
    autoDetectFromClient - Variable in class co.aikar.commands.BukkitCommandManager
     
    - - - -

    B

    -
    -
    blockLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +

    B

    +
    +
    blockLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    BukkitCommandCompletionContext - Class in co.aikar.commands
    +
    BukkitCommandCompletionContext - Class in co.aikar.commands
     
    -
    BukkitCommandCompletions - Class in co.aikar.commands
    +
    BukkitCommandCompletions - Class in co.aikar.commands
     
    -
    BukkitCommandCompletions(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitCommandCompletions
    +
    BukkitCommandCompletions(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitCommandCompletions
     
    -
    BukkitCommandContexts - Class in co.aikar.commands
    +
    BukkitCommandContexts - Class in co.aikar.commands
     
    -
    BukkitCommandContexts(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitCommandContexts
    +
    BukkitCommandContexts(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitCommandContexts
     
    -
    BukkitCommandExecutionContext - Class in co.aikar.commands
    +
    BukkitCommandExecutionContext - Class in co.aikar.commands
     
    -
    BukkitCommandIssuer - Class in co.aikar.commands
    +
    BukkitCommandIssuer - Class in co.aikar.commands
     
    -
    BukkitCommandManager - Class in co.aikar.commands
    +
    BukkitCommandManager - Class in co.aikar.commands
     
    -
    BukkitCommandManager(Plugin) - Constructor for class co.aikar.commands.BukkitCommandManager
    +
    BukkitCommandManager(Plugin) - Constructor for class co.aikar.commands.BukkitCommandManager
     
    -
    BukkitConditionContext - Class in co.aikar.commands
    +
    BukkitConditionContext - Class in co.aikar.commands
     
    -
    BukkitLocales - Class in co.aikar.commands
    +
    BukkitLocales - Class in co.aikar.commands
     
    -
    BukkitLocales(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitLocales
    +
    BukkitLocales(BukkitCommandManager) - Constructor for class co.aikar.commands.BukkitLocales
     
    -
    BukkitMessageFormatter - Class in co.aikar.commands
    +
    BukkitMessageFormatter - Class in co.aikar.commands
     
    -
    BukkitMessageFormatter(ChatColor...) - Constructor for class co.aikar.commands.BukkitMessageFormatter
    +
    BukkitMessageFormatter(ChatColor...) - Constructor for class co.aikar.commands.BukkitMessageFormatter
     
    -
    BukkitRegisteredCommand - Class in co.aikar.commands
    +
    BukkitRegisteredCommand - Class in co.aikar.commands
     
    -
    BukkitRootCommand - Class in co.aikar.commands
    +
    BukkitRootCommand - Class in co.aikar.commands
     
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    co.aikar.commands.bukkit.contexts - package co.aikar.commands.bukkit.contexts
     
    co.aikar.commands.contexts - package co.aikar.commands.contexts
     
    -
    color(String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    color(String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    completions - Variable in class co.aikar.commands.BukkitCommandManager
    +
    completions - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    contexts - Variable in class co.aikar.commands.BukkitCommandManager
    +
    contexts - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.BukkitCommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.BukkitCommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.BukkitCommandManager
    +
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.BukkitCommandManager
    +
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.BukkitCommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.BukkitCommandManager
     
    - - - -

    D

    -
    -
    distance(Entity, Entity) - Static method in class co.aikar.commands.ACFBukkitUtil
    +

    D

    +
    +
    distance(Entity, Entity) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    distance(Location, Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    distance(Location, Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    distance2d(Entity, Entity) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    distance2d(Entity, Entity) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    distance2d(Location, Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    distance2d(Location, Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    - - - -

    E

    -
    -
    equals(Object) - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +

    E

    +
    +
    equals(Object) - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    -
    equals(Object) - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    equals(Object) - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    execute(CommandSender, String, String[]) - Method in class co.aikar.commands.BukkitRootCommand
    +
    execute(CommandSender, String, String[]) - Method in class co.aikar.commands.BukkitRootCommand
     
    - - - -

    F

    -
    -
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +

    F

    +
    +
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    findPlayerSmart(CommandSender, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    findPlayerSmart(CommandSender, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    -
    Deprecated. 
    +
    Deprecated. 
    -
    formatLocation(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    formatLocation(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    fullBlockLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    fullBlockLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    fullLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    fullLocationToString(Location) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    - - - -

    G

    -
    -
    getChildren() - Method in class co.aikar.commands.BukkitRootCommand
    +

    G

    +
    +
    getChildren() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.BukkitCommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getCommandName() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getCommandName() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.BukkitCommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getDefCommand() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getDefCommand() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getDescription() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getDescription() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getIssuer() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    getIssuer() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    getLocales() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getLocales() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getManager() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    getManager() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    getManager() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getManager() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
    +
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    getPlayer() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +
    getPlayer() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    -
    getPlayer() - Method in class co.aikar.commands.BukkitCommandCompletionContext
    +
    getPlayer() - Method in class co.aikar.commands.BukkitCommandCompletionContext
    Returns the Player object if this Issuer is a Player
    -
    getPlayer() - Method in class co.aikar.commands.BukkitCommandExecutionContext
    +
    getPlayer() - Method in class co.aikar.commands.BukkitCommandExecutionContext
    Returns the Player object if this Issuer is a Player
    -
    getPlayer() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    getPlayer() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    getPlayer() - Method in class co.aikar.commands.BukkitConditionContext
    +
    getPlayer() - Method in class co.aikar.commands.BukkitConditionContext
     
    -
    getPlugin() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getPlugin() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getPlugin() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getPlugin() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getRandLoc(Location, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getRandLoc(Location, int) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getRandLoc(Location, int, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getRandLoc(Location, int, int) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getRandLoc(Location, int, int, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getRandLoc(Location, int, int, int) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getSender() - Method in class co.aikar.commands.BukkitCommandCompletionContext
    +
    getSender() - Method in class co.aikar.commands.BukkitCommandCompletionContext
     
    -
    getSender() - Method in class co.aikar.commands.BukkitCommandExecutionContext
    +
    getSender() - Method in class co.aikar.commands.BukkitCommandExecutionContext
     
    -
    getSender() - Method in class co.aikar.commands.BukkitConditionContext
    +
    getSender() - Method in class co.aikar.commands.BukkitConditionContext
     
    -
    getSubCommands() - Method in class co.aikar.commands.BukkitRootCommand
    +
    getSubCommands() - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    getTargetLoc(Player) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getTargetLoc(Player) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getTargetLoc(Player, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getTargetLoc(Player, int) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getTargetLoc(Player, int, double) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    getTargetLoc(Player, int, double) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    getTimings() - Method in class co.aikar.commands.BukkitCommandManager
    +
    getTimings() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    getUniqueId() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    getUniqueId() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    - - - -

    H

    -
    -
    handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in class co.aikar.commands.BukkitCommandManager
    +

    H

    +
    +
    handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    hashCode() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +
    hashCode() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    -
    hashCode() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    hashCode() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    hasPermission(String) - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    hasPermission(String) - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.BukkitCommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.BukkitCommandManager
     
    - - - -

    I

    -
    -
    INVALID_WORLD - co.aikar.commands.MinecraftMessageKeys
    +

    I

    +
    +
    INVALID_WORLD - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    IS_NOT_A_VALID_NAME - co.aikar.commands.MinecraftMessageKeys
    +
    IS_NOT_A_VALID_NAME - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.BukkitCommandManager
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    isPlayer() - Method in class co.aikar.commands.BukkitCommandIssuer
    +
    isPlayer() - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    isValidName(String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    issuersLocaleString - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    isWithinDistance(Player, Player, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    isValidName(String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    isWithinDistance(Location, Location, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    isWithinDistance(Player, Player, int) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
     
    +
    isWithinDistance(Location, Location, int) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    - - - -

    K

    -
    -
    knownCommands - Variable in class co.aikar.commands.BukkitCommandManager
    +

    K

    +
    +
    knownCommands - Variable in class co.aikar.commands.BukkitCommandManager
     
    - - - -

    L

    -
    -
    loadLanguage(FileConfiguration, Locale) - Method in class co.aikar.commands.BukkitLocales
    +

    L

    +
    +
    loadLanguage(FileConfiguration, Locale) - Method in class co.aikar.commands.BukkitLocales
    Loads every message from the Configuration object.
    -
    loadLanguages() - Method in class co.aikar.commands.BukkitLocales
    +
    loadLanguages() - Method in class co.aikar.commands.BukkitLocales
     
    -
    loadYamlLanguageFile(File, Locale) - Method in class co.aikar.commands.BukkitLocales
    +
    loadYamlLanguageFile(File, Locale) - Method in class co.aikar.commands.BukkitLocales
    Loads the given file
    -
    loadYamlLanguageFile(String, Locale) - Method in class co.aikar.commands.BukkitLocales
    +
    loadYamlLanguageFile(String, Locale) - Method in class co.aikar.commands.BukkitLocales
    Loads a file out of the plugins data folder by the given name
    -
    locales - Variable in class co.aikar.commands.BukkitCommandManager
    +
    locales - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    LOCATION_CONSOLE_NOT_RELATIVE - co.aikar.commands.MinecraftMessageKeys
    +
    LOCATION_CONSOLE_NOT_RELATIVE - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    LOCATION_PLEASE_SPECIFY_WORLD - co.aikar.commands.MinecraftMessageKeys
    +
    LOCATION_PLEASE_SPECIFY_WORLD - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    LOCATION_PLEASE_SPECIFY_XYZ - co.aikar.commands.MinecraftMessageKeys
    +
    LOCATION_PLEASE_SPECIFY_XYZ - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.BukkitCommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.BukkitCommandManager
     
    - - - -

    M

    -
    -
    mcMinorVersion - Variable in class co.aikar.commands.BukkitCommandManager
    +

    M

    +
    +
    mcMinorVersion - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    mcPatchVersion - Variable in class co.aikar.commands.BukkitCommandManager
    +
    mcPatchVersion - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    MinecraftMessageKeys - Enum in co.aikar.commands
    +
    MinecraftMessageKeys - Enum in co.aikar.commands
     
    -
    MULTIPLE_PLAYERS_MATCH - co.aikar.commands.MinecraftMessageKeys
    +
    MULTIPLE_PLAYERS_MATCH - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    N

    -
    -
    NO_PLAYER_FOUND - co.aikar.commands.MinecraftMessageKeys
    +

    N

    +
    +
    NO_PLAYER_FOUND - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    NO_PLAYER_FOUND_OFFLINE - co.aikar.commands.MinecraftMessageKeys
    +
    NO_PLAYER_FOUND_OFFLINE - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    NO_PLAYER_FOUND_SERVER - co.aikar.commands.MinecraftMessageKeys
    +
    NO_PLAYER_FOUND_SERVER - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    O

    -
    -
    OnlinePlayer - Class in co.aikar.commands.bukkit.contexts
    +

    O

    +
    +
    OnlinePlayer - Class in co.aikar.commands.bukkit.contexts
     
    -
    OnlinePlayer - Class in co.aikar.commands.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.contexts
    -
    Deprecated. - +
    Deprecated. +
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    -
    Deprecated.
    +
    Deprecated.
     
    - - - -

    P

    -
    -
    player - Variable in class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +

    P

    +
    +
    player - Variable in class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    -
    PLAYER_IS_VANISHED_CONFIRM - co.aikar.commands.MinecraftMessageKeys
    +
    PLAYER_IS_VANISHED_CONFIRM - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    plugin - Variable in class co.aikar.commands.BukkitCommandManager
    +
    plugin - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    postCommand() - Method in class co.aikar.commands.BukkitRegisteredCommand
    +
    postCommand() - Method in class co.aikar.commands.BukkitRegisteredCommand
     
    -
    preCommand() - Method in class co.aikar.commands.BukkitRegisteredCommand
    +
    preCommand() - Method in class co.aikar.commands.BukkitRegisteredCommand
     
    - - - -

    R

    -
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.BukkitCommandManager
    +

    R

    +
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    registerCommand(BaseCommand, boolean) - Method in class co.aikar.commands.BukkitCommandManager
    +
    registerCommand(BaseCommand, boolean) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    registeredCommands - Variable in class co.aikar.commands.BukkitCommandManager
    +
    registeredCommands - Variable in class co.aikar.commands.BukkitCommandManager
     
    -
    removeColors(String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    removeColors(String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    replaceChatString(String, String, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    replaceChatString(String, String, String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    replaceChatString(String, Pattern, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    replaceChatString(String, Pattern, String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    - - - -

    S

    -
    -
    sendMessageInternal(String) - Method in class co.aikar.commands.BukkitCommandIssuer
    +

    S

    +
    +
    sendMessageInternal(String) - Method in class co.aikar.commands.BukkitCommandIssuer
     
    -
    sendMsg(CommandSender, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    sendMsg(CommandSender, String) - Static method in class co.aikar.commands.ACFBukkitUtil
    -
    Deprecated. 
    +
    Deprecated. 
    -
    setPlayerLocale(Player, Locale) - Method in class co.aikar.commands.BukkitCommandManager
    +
    setPlayerLocale(Player, Locale) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    stringToLocation(String) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    stringToLocation(String) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    -
    stringToLocation(String, World) - Static method in class co.aikar.commands.ACFBukkitUtil
    +
    stringToLocation(String, World) - Static method in class co.aikar.commands.ACFBukkitUtil
     
    - - - -

    T

    -
    -
    tabComplete(CommandSender, String, String[]) - Method in class co.aikar.commands.BukkitRootCommand
    +

    T

    +
    +
    tabComplete(CommandSender, String, String[]) - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    testPermissionSilent(CommandSender) - Method in class co.aikar.commands.BukkitRootCommand
    +
    testPermissionSilent(CommandSender) - Method in class co.aikar.commands.BukkitRootCommand
     
    -
    toString() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
    +
    toString() - Method in class co.aikar.commands.bukkit.contexts.OnlinePlayer
     
    - - - -

    U

    -
    -
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.BukkitCommandManager
    +

    U

    +
    +
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    unregisterCommand(BukkitRootCommand) - Method in class co.aikar.commands.BukkitCommandManager
    +
    unregisterCommand(BukkitRootCommand) - Method in class co.aikar.commands.BukkitCommandManager
    -
    Deprecated. -
    Use unregisterCommand(BaseCommand) - this will be visibility reduced later.
    +
    Deprecated. +
    Use unregisterCommand(BaseCommand) - this will be visibility reduced later.
    -
    unregisterCommands() - Method in class co.aikar.commands.BukkitCommandManager
    +
    unregisterCommands() - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    usePerIssuerLocale(boolean, boolean) - Method in class co.aikar.commands.BukkitCommandManager
    +
    usePerIssuerLocale(boolean, boolean) - Method in class co.aikar.commands.BukkitCommandManager
     
    -
    USERNAME_TOO_SHORT - co.aikar.commands.MinecraftMessageKeys
    +
    USERNAME_TOO_SHORT - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    V

    -
    -
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +

    V

    +
    +
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns the enum constant of this type with the specified name.
    -
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns an array containing the constants of this enum type, in the order they are declared.
    - - - -

    Y

    -
    -
    YOU_MUST_BE_HOLDING_ITEM - co.aikar.commands.MinecraftMessageKeys
    +

    Y

    +
    +
    YOU_MUST_BE_HOLDING_ITEM - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -A B C D E F G H I K L M N O P R S T U V Y 
    All Classes All Packages
    -
    +A B C D E F G H I K L M N O P R S T U V Y 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/index.html b/docs/acf-bukkit/index.html index 9f390280..65e2fcb9 100644 --- a/docs/acf-bukkit/index.html +++ b/docs/acf-bukkit/index.html @@ -1,51 +1,33 @@ - - -Overview (ACF (Bukkit) 0.5.0-SNAPSHOT API) + +Overview (ACF (Bukkit) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (Bukkit) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.bukkit.contexts 
    co.aikar.commands.contexts 
    +
    +

    ACF (Bukkit) 0.5.1-SNAPSHOT API

    +
    +
    +
    Packages
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bukkit/jquery-ui.overrides.css b/docs/acf-bukkit/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-bukkit/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-bukkit/legal/COPYRIGHT b/docs/acf-bukkit/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-bukkit/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-bukkit/legal/LICENSE b/docs/acf-bukkit/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-bukkit/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-bukkit/legal/jquery.md b/docs/acf-bukkit/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-bukkit/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-bukkit/legal/jqueryUI.md b/docs/acf-bukkit/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-bukkit/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-bukkit/member-search-index.js b/docs/acf-bukkit/member-search-index.js index 9eecd4ee..40e70b88 100644 --- a/docs/acf-bukkit/member-search-index.js +++ b/docs/acf-bukkit/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFBukkitHelpTopic","l":"ACFBukkitHelpTopic(BukkitCommandManager, BukkitRootCommand)","url":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager,co.aikar.commands.BukkitRootCommand)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"ACFBukkitUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"autoDetectFromClient"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"blockLocationToString(Location)","url":"blockLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"BukkitCommandCompletions","l":"BukkitCommandCompletions(BukkitCommandManager)","url":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitCommandContexts","l":"BukkitCommandContexts(BukkitCommandManager)","url":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"BukkitCommandManager(Plugin)","url":"%3Cinit%3E(org.bukkit.plugin.Plugin)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"BukkitLocales(BukkitCommandManager)","url":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitMessageFormatter","l":"BukkitMessageFormatter(ChatColor...)","url":"%3Cinit%3E(org.bukkit.ChatColor...)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"color(String)","url":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","url":"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":"BukkitCommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","url":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"createConditionContext(CommandIssuer, String)","url":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","url":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"createRootCommand(String)","url":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance(Entity, Entity)","url":"distance(org.bukkit.entity.Entity,org.bukkit.entity.Entity)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance(Location, Location)","url":"distance(org.bukkit.Location,org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance2d(Entity, Entity)","url":"distance2d(org.bukkit.entity.Entity,org.bukkit.entity.Entity)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance2d(Location, Location)","url":"distance2d(org.bukkit.Location,org.bukkit.Location)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"execute(CommandSender, String, String[])","url":"execute(org.bukkit.command.CommandSender,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"findPlayerSmart(CommandIssuer, String)","url":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"findPlayerSmart(CommandSender, String)","url":"findPlayerSmart(org.bukkit.command.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"formatLocation(Location)","url":"formatLocation(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"fullBlockLocationToString(Location)","url":"fullBlockLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"fullLocationToString(Location)","url":"fullLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandIssuer(Object)","url":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandPrefix(CommandIssuer)","url":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getDescription()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands","c":"BukkitCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getPlugin()"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int, int, int)","url":"getRandLoc(org.bukkit.Location,int,int,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int, int)","url":"getRandLoc(org.bukkit.Location,int,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int)","url":"getRandLoc(org.bukkit.Location,int)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BukkitCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player, int, double)","url":"getTargetLoc(org.bukkit.entity.Player,int,double)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player, int)","url":"getTargetLoc(org.bukkit.entity.Player,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player)","url":"getTargetLoc(org.bukkit.entity.Player)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getTimings()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List, Throwable)","url":"handleUncaughtException(co.aikar.commands.BaseCommand,co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.util.List,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"hasPermission(String)","url":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"INVALID_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isValidName(String)","url":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isWithinDistance(Location, Location, int)","url":"isWithinDistance(org.bukkit.Location,org.bukkit.Location,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isWithinDistance(Player, Player, int)","url":"isWithinDistance(org.bukkit.entity.Player,org.bukkit.entity.Player,int)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"knownCommands"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadLanguage(FileConfiguration, Locale)","url":"loadLanguage(org.bukkit.configuration.file.FileConfiguration,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadYamlLanguageFile(File, Locale)","url":"loadYamlLanguageFile(java.io.File,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadYamlLanguageFile(String, Locale)","url":"loadYamlLanguageFile(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_CONSOLE_NOT_RELATIVE"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_PLEASE_SPECIFY_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_PLEASE_SPECIFY_XYZ"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"mcMinorVersion"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"mcPatchVersion"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_OFFLINE"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(org.bukkit.entity.Player)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(org.bukkit.entity.Player)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"PLAYER_IS_VANISHED_CONFIRM"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"BukkitRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"BukkitRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registerCommand(BaseCommand, boolean)","url":"registerCommand(co.aikar.commands.BaseCommand,boolean)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"removeColors(String)","url":"removeColors(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"replaceChatString(String, Pattern, String)","url":"replaceChatString(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"replaceChatString(String, String, String)","url":"replaceChatString(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"sendMsg(CommandSender, String)","url":"sendMsg(org.bukkit.command.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"setPlayerLocale(Player, Locale)","url":"setPlayerLocale(org.bukkit.entity.Player,java.util.Locale)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"stringToLocation(String, World)","url":"stringToLocation(java.lang.String,org.bukkit.World)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"stringToLocation(String)","url":"stringToLocation(java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"tabComplete(CommandSender, String, String[])","url":"tabComplete(org.bukkit.command.CommandSender,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"testPermissionSilent(CommandSender)","url":"testPermissionSilent(org.bukkit.command.CommandSender)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommand(BaseCommand)","url":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommand(BukkitRootCommand)","url":"unregisterCommand(co.aikar.commands.BukkitRootCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"usePerIssuerLocale(boolean, boolean)","url":"usePerIssuerLocale(boolean,boolean)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","url":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"YOU_MUST_BE_HOLDING_ITEM"}] \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFBukkitHelpTopic","l":"ACFBukkitHelpTopic(BukkitCommandManager, BukkitRootCommand)","u":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager,co.aikar.commands.BukkitRootCommand)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"ACFBukkitUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"autoDetectFromClient"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"blockLocationToString(Location)","u":"blockLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"BukkitCommandCompletions","l":"BukkitCommandCompletions(BukkitCommandManager)","u":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitCommandContexts","l":"BukkitCommandContexts(BukkitCommandManager)","u":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"BukkitCommandManager(Plugin)","u":"%3Cinit%3E(org.bukkit.plugin.Plugin)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"BukkitLocales(BukkitCommandManager)","u":"%3Cinit%3E(co.aikar.commands.BukkitCommandManager)"},{"p":"co.aikar.commands","c":"BukkitMessageFormatter","l":"BukkitMessageFormatter(ChatColor...)","u":"%3Cinit%3E(org.bukkit.ChatColor...)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"color(String)","u":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"BukkitCommandManager","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":"BukkitCommandManager","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":"BukkitCommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","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":"BukkitCommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance(Entity, Entity)","u":"distance(org.bukkit.entity.Entity,org.bukkit.entity.Entity)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance(Location, Location)","u":"distance(org.bukkit.Location,org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance2d(Entity, Entity)","u":"distance2d(org.bukkit.entity.Entity,org.bukkit.entity.Entity)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"distance2d(Location, Location)","u":"distance2d(org.bukkit.Location,org.bukkit.Location)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"execute(CommandSender, String, String[])","u":"execute(org.bukkit.command.CommandSender,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"findPlayerSmart(CommandIssuer, String)","u":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"findPlayerSmart(CommandSender, String)","u":"findPlayerSmart(org.bukkit.command.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"formatLocation(Location)","u":"formatLocation(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"fullBlockLocationToString(Location)","u":"fullBlockLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"fullLocationToString(Location)","u":"fullLocationToString(org.bukkit.Location)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getDescription()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getPlugin()"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int)","u":"getRandLoc(org.bukkit.Location,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int, int)","u":"getRandLoc(org.bukkit.Location,int,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getRandLoc(Location, int, int, int)","u":"getRandLoc(org.bukkit.Location,int,int,int)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BukkitCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player)","u":"getTargetLoc(org.bukkit.entity.Player)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player, int)","u":"getTargetLoc(org.bukkit.entity.Player,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"getTargetLoc(Player, int, double)","u":"getTargetLoc(org.bukkit.entity.Player,int,double)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"getTimings()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","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.bukkit.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"INVALID_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"issuersLocaleString"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isValidName(String)","u":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isWithinDistance(Location, Location, int)","u":"isWithinDistance(org.bukkit.Location,org.bukkit.Location,int)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"isWithinDistance(Player, Player, int)","u":"isWithinDistance(org.bukkit.entity.Player,org.bukkit.entity.Player,int)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"knownCommands"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadLanguage(FileConfiguration, Locale)","u":"loadLanguage(org.bukkit.configuration.file.FileConfiguration,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadYamlLanguageFile(File, Locale)","u":"loadYamlLanguageFile(java.io.File,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitLocales","l":"loadYamlLanguageFile(String, Locale)","u":"loadYamlLanguageFile(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_CONSOLE_NOT_RELATIVE"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_PLEASE_SPECIFY_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"LOCATION_PLEASE_SPECIFY_XYZ"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"mcMinorVersion"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"mcPatchVersion"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_OFFLINE"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(org.bukkit.entity.Player)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(org.bukkit.entity.Player)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"PLAYER_IS_VANISHED_CONFIRM"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"BukkitRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"BukkitRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registerCommand(BaseCommand, boolean)","u":"registerCommand(co.aikar.commands.BaseCommand,boolean)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"removeColors(String)","u":"removeColors(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"replaceChatString(String, Pattern, String)","u":"replaceChatString(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"replaceChatString(String, String, String)","u":"replaceChatString(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"sendMsg(CommandSender, String)","u":"sendMsg(org.bukkit.command.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"setPlayerLocale(Player, Locale)","u":"setPlayerLocale(org.bukkit.entity.Player,java.util.Locale)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"stringToLocation(String)","u":"stringToLocation(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBukkitUtil","l":"stringToLocation(String, World)","u":"stringToLocation(java.lang.String,org.bukkit.World)"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"tabComplete(CommandSender, String, String[])","u":"tabComplete(org.bukkit.command.CommandSender,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BukkitRootCommand","l":"testPermissionSilent(CommandSender)","u":"testPermissionSilent(org.bukkit.command.CommandSender)"},{"p":"co.aikar.commands.bukkit.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommand(BaseCommand)","u":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommand(BukkitRootCommand)","u":"unregisterCommand(co.aikar.commands.BukkitRootCommand)"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"BukkitCommandManager","l":"usePerIssuerLocale(boolean, boolean)","u":"usePerIssuerLocale(boolean,boolean)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"YOU_MUST_BE_HOLDING_ITEM"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-bukkit/module-search-index.js b/docs/acf-bukkit/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-bukkit/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-bukkit/overview-summary.html b/docs/acf-bukkit/overview-summary.html index ae7b1496..b5d077c9 100644 --- a/docs/acf-bukkit/overview-summary.html +++ b/docs/acf-bukkit/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (Bukkit) 0.5.0-SNAPSHOT API + +ACF (Bukkit) 0.5.1-SNAPSHOT API + + + + + - - - +
    + + + + diff --git a/docs/acf-bungee/co/aikar/commands/bungee/contexts/OnlinePlayer.html b/docs/acf-bungee/co/aikar/commands/bungee/contexts/OnlinePlayer.html index 1c8c4dcc..bd972a5b 100644 --- a/docs/acf-bungee/co/aikar/commands/bungee/contexts/OnlinePlayer.html +++ b/docs/acf-bungee/co/aikar/commands/bungee/contexts/OnlinePlayer.html @@ -1,405 +1,234 @@ - - -OnlinePlayer (ACF (Bungee) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Field Detail

          - - - -
            -
          • -

            player

            -
            public final net.md_5.bungee.api.connection.ProxiedPlayer player
            -
          • -
          +
        • +
          +

          Field Details

          +
            +
          • +
            +

            player

            +
            public final net.md_5.bungee.api.connection.ProxiedPlayer player
            +
          +
        • -
          - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/bungee/contexts/class-use/OnlinePlayer.html b/docs/acf-bungee/co/aikar/commands/bungee/contexts/class-use/OnlinePlayer.html index 54de9b31..f6eedc3d 100644 --- a/docs/acf-bungee/co/aikar/commands/bungee/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-bungee/co/aikar/commands/bungee/contexts/class-use/OnlinePlayer.html @@ -1,195 +1,90 @@ - - -Uses of Class co.aikar.commands.bungee.contexts.OnlinePlayer (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.bungee.contexts.OnlinePlayer (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.bungee.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.bungee.contexts.OnlinePlayer

    +
    +
    Packages that use OnlinePlayer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-summary.html b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-summary.html index f55419a5..9eaa17f8 100644 --- a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-summary.html +++ b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.bungee.contexts (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands.bungee.contexts (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.bungee.contexts

    +

    Package co.aikar.commands.bungee.contexts

    +
    +
    +
    package co.aikar.commands.bungee.contexts
    +
    +
      +
    • +
      +
      Classes
      +
      +
      Class
      +
      Description
      + +
       
      +
      -
      -
        -
      • - - - - - - - - - - - - -
        Class Summary 
        ClassDescription
        OnlinePlayer 
      -
      +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-tree.html b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-tree.html index e2f435aa..b7f256f4 100644 --- a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-tree.html +++ b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-tree.html @@ -1,162 +1,75 @@ - - -co.aikar.commands.bungee.contexts Class Hierarchy (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands.bungee.contexts Class Hierarchy (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.bungee.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-use.html b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-use.html index bd239b9f..ffba9493 100644 --- a/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-use.html +++ b/docs/acf-bungee/co/aikar/commands/bungee/contexts/package-use.html @@ -1,182 +1,83 @@ - - -Uses of Package co.aikar.commands.bungee.contexts (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.bungee.contexts (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.bungee.contexts

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeListener.html b/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeListener.html index c20d0ba3..c87108ff 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeListener.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeListener.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFBungeeListener (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFBungeeListener (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFBungeeListener

    +

    Uses of Class
    co.aikar.commands.ACFBungeeListener

    -
    No usage of co.aikar.commands.ACFBungeeListener
    -
    +No usage of co.aikar.commands.ACFBungeeListener
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeUtil.html b/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeUtil.html index 330bf105..54ac9431 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeUtil.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/ACFBungeeUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFBungeeUtil (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFBungeeUtil (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFBungeeUtil

    +

    Uses of Class
    co.aikar.commands.ACFBungeeUtil

    -
    No usage of co.aikar.commands.ACFBungeeUtil
    -
    +No usage of co.aikar.commands.ACFBungeeUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletionContext.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletionContext.html index 2e512fcc..5ef6985d 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletionContext.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletionContext.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BungeeCommandCompletionContext (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandCompletionContext (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandCompletionContext

    +

    Uses of Class
    co.aikar.commands.BungeeCommandCompletionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletions.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletions.html index 84cdaedc..836f902b 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletions.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandCompletions.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BungeeCommandCompletions (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandCompletions (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandCompletions

    +

    Uses of Class
    co.aikar.commands.BungeeCommandCompletions

    +
    +
    Packages that use BungeeCommandCompletions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandContexts.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandContexts.html index 82397138..eb4d2fcb 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandContexts.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandContexts.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BungeeCommandContexts (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandContexts (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandContexts

    +

    Uses of Class
    co.aikar.commands.BungeeCommandContexts

    +
    +
    Packages that use BungeeCommandContexts
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandExecutionContext.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandExecutionContext.html index b0ab734d..e578cabf 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandExecutionContext.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandExecutionContext.html @@ -1,211 +1,100 @@ - - -Uses of Class co.aikar.commands.BungeeCommandExecutionContext (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandExecutionContext (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.BungeeCommandExecutionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandIssuer.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandIssuer.html index 86eb4885..587b84bf 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandIssuer.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandIssuer.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.BungeeCommandIssuer (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandIssuer (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandIssuer

    +

    Uses of Class
    co.aikar.commands.BungeeCommandIssuer

    +
    +
    Packages that use BungeeCommandIssuer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandManager.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandManager.html index 6d311d51..3a09e29d 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandManager.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeCommandManager.html @@ -1,194 +1,90 @@ - - -Uses of Class co.aikar.commands.BungeeCommandManager (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeCommandManager (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeCommandManager

    +

    Uses of Class
    co.aikar.commands.BungeeCommandManager

    +
    +
    Packages that use BungeeCommandManager
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeConditionContext.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeConditionContext.html index bc3ebbc6..352ecd6e 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeConditionContext.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeConditionContext.html @@ -1,192 +1,87 @@ - - -Uses of Class co.aikar.commands.BungeeConditionContext (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeConditionContext (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeConditionContext

    +

    Uses of Class
    co.aikar.commands.BungeeConditionContext

    +
    +
    Packages that use BungeeConditionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeLocales.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeLocales.html index eb529202..cddb120b 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeLocales.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeLocales.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.BungeeLocales (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeLocales (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeLocales

    +

    Uses of Class
    co.aikar.commands.BungeeLocales

    +
    +
    Packages that use BungeeLocales
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeMessageFormatter.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeMessageFormatter.html index 03a01316..dc2c1ced 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeMessageFormatter.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeMessageFormatter.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.BungeeMessageFormatter (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeMessageFormatter (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeMessageFormatter

    +

    Uses of Class
    co.aikar.commands.BungeeMessageFormatter

    -
    No usage of co.aikar.commands.BungeeMessageFormatter
    -
    +No usage of co.aikar.commands.BungeeMessageFormatter
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeRegisteredCommand.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeRegisteredCommand.html index 0fefe81d..7016e892 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeRegisteredCommand.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeRegisteredCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.BungeeRegisteredCommand (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeRegisteredCommand (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeRegisteredCommand

    +

    Uses of Class
    co.aikar.commands.BungeeRegisteredCommand

    -
    No usage of co.aikar.commands.BungeeRegisteredCommand
    -
    +No usage of co.aikar.commands.BungeeRegisteredCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/BungeeRootCommand.html b/docs/acf-bungee/co/aikar/commands/class-use/BungeeRootCommand.html index 38c6749c..c7837008 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/BungeeRootCommand.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/BungeeRootCommand.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.BungeeRootCommand (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BungeeRootCommand (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BungeeRootCommand

    +

    Uses of Class
    co.aikar.commands.BungeeRootCommand

    +
    +
    Packages that use BungeeRootCommand
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/class-use/MinecraftMessageKeys.html b/docs/acf-bungee/co/aikar/commands/class-use/MinecraftMessageKeys.html index 3f45b4ae..3fe34ba4 100644 --- a/docs/acf-bungee/co/aikar/commands/class-use/MinecraftMessageKeys.html +++ b/docs/acf-bungee/co/aikar/commands/class-use/MinecraftMessageKeys.html @@ -1,201 +1,94 @@ - - -Uses of Class co.aikar.commands.MinecraftMessageKeys (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Enum co.aikar.commands.MinecraftMessageKeys (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MinecraftMessageKeys

    +

    Uses of Enum
    co.aikar.commands.MinecraftMessageKeys

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-bungee/co/aikar/commands/contexts/OnlineProxiedPlayer.html b/docs/acf-bungee/co/aikar/commands/contexts/OnlineProxiedPlayer.html index 868f1ea5..be6692c4 100644 --- a/docs/acf-bungee/co/aikar/commands/contexts/OnlineProxiedPlayer.html +++ b/docs/acf-bungee/co/aikar/commands/contexts/OnlineProxiedPlayer.html @@ -1,303 +1,152 @@ - - -OnlineProxiedPlayer (ACF (Bungee) 0.5.0-SNAPSHOT API) + +OnlineProxiedPlayer (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlineProxiedPlayer

    + +

    Class OnlineProxiedPlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            OnlineProxiedPlayer

            -
            public OnlineProxiedPlayer​(net.md_5.bungee.api.connection.ProxiedPlayer player)
            -
            Deprecated.
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            OnlineProxiedPlayer

            +
            public OnlineProxiedPlayer(net.md_5.bungee.api.connection.ProxiedPlayer player)
            +
            Deprecated.
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/contexts/class-use/OnlineProxiedPlayer.html b/docs/acf-bungee/co/aikar/commands/contexts/class-use/OnlineProxiedPlayer.html index 8cdf527a..e55af659 100644 --- a/docs/acf-bungee/co/aikar/commands/contexts/class-use/OnlineProxiedPlayer.html +++ b/docs/acf-bungee/co/aikar/commands/contexts/class-use/OnlineProxiedPlayer.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.contexts.OnlineProxiedPlayer (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.contexts.OnlineProxiedPlayer (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.contexts.OnlineProxiedPlayer

    +

    Uses of Class
    co.aikar.commands.contexts.OnlineProxiedPlayer

    -
    No usage of co.aikar.commands.contexts.OnlineProxiedPlayer
    -
    +No usage of co.aikar.commands.contexts.OnlineProxiedPlayer
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/contexts/package-summary.html b/docs/acf-bungee/co/aikar/commands/contexts/package-summary.html index 9586caaa..ff7b699b 100644 --- a/docs/acf-bungee/co/aikar/commands/contexts/package-summary.html +++ b/docs/acf-bungee/co/aikar/commands/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.contexts (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.contexts

    +

    Package co.aikar.commands.contexts

    +
    +
    +
    package co.aikar.commands.contexts
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/contexts/package-tree.html b/docs/acf-bungee/co/aikar/commands/contexts/package-tree.html index ac80d50a..7601c07d 100644 --- a/docs/acf-bungee/co/aikar/commands/contexts/package-tree.html +++ b/docs/acf-bungee/co/aikar/commands/contexts/package-tree.html @@ -1,166 +1,79 @@ - - -co.aikar.commands.contexts Class Hierarchy (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts Class Hierarchy (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/contexts/package-use.html b/docs/acf-bungee/co/aikar/commands/contexts/package-use.html index 83f3f3fc..29da3780 100644 --- a/docs/acf-bungee/co/aikar/commands/contexts/package-use.html +++ b/docs/acf-bungee/co/aikar/commands/contexts/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.contexts (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.contexts (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.contexts

    -
    No usage of co.aikar.commands.contexts
    -
    +No usage of co.aikar.commands.contexts
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/package-summary.html b/docs/acf-bungee/co/aikar/commands/package-summary.html index c25a7423..49b95db5 100644 --- a/docs/acf-bungee/co/aikar/commands/package-summary.html +++ b/docs/acf-bungee/co/aikar/commands/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/package-tree.html b/docs/acf-bungee/co/aikar/commands/package-tree.html index cd330850..1c914d95 100644 --- a/docs/acf-bungee/co/aikar/commands/package-tree.html +++ b/docs/acf-bungee/co/aikar/commands/package-tree.html @@ -1,228 +1,141 @@ - - -co.aikar.commands Class Hierarchy (ACF (Bungee) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Enum Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/co/aikar/commands/package-use.html b/docs/acf-bungee/co/aikar/commands/package-use.html index 62b69b7c..acee76a5 100644 --- a/docs/acf-bungee/co/aikar/commands/package-use.html +++ b/docs/acf-bungee/co/aikar/commands/package-use.html @@ -1,218 +1,101 @@ - - -Uses of Package co.aikar.commands (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/constant-values.html b/docs/acf-bungee/constant-values.html index ad2272b8..7e22d18a 100644 --- a/docs/acf-bungee/constant-values.html +++ b/docs/acf-bungee/constant-values.html @@ -1,50 +1,32 @@ - - -Constant Field Values (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Constant Field Values (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Constant Field Values

    -
    +

    Contents

    -
    - - -
    +

    co.aikar.*

    -
      -
    • - - - - - - - - - - - - - - -
      co.aikar.commands.ACFBungeeUtil 
      Modifier and TypeConstant FieldValue
      - -public static final charCOLOR_CHAR167
      +
        +
      • +
        co.aikar.commands.ACFBungeeUtil
        +
        +
        Modifier and Type
        +
        Constant Field
        +
        Value
        +
        public static final char
        + +
        '\u00a7'
        +
    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/deprecated-list.html b/docs/acf-bungee/deprecated-list.html index 8ea42f04..58756601 100644 --- a/docs/acf-bungee/deprecated-list.html +++ b/docs/acf-bungee/deprecated-list.html @@ -1,96 +1,51 @@ - - -Deprecated List (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Deprecated API

    @@ -100,99 +55,42 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  • Methods
  • -
    - - - - - - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/index-all.html b/docs/acf-bungee/index-all.html index a0ad96f7..a829ada2 100644 --- a/docs/acf-bungee/index-all.html +++ b/docs/acf-bungee/index-all.html @@ -1,493 +1,357 @@ - - -Index (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Index (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A B C E F G H I L M N O P R S T U V 
    All Classes All Packages - - -

    A

    -
    -
    ACFBungeeListener - Class in co.aikar.commands
    +
    +

    Index

    +
    +A B C E F G H I L M N O P R S T U V 
    All Classes and Interfaces|All Packages|Constant Field Values +

    A

    +
    +
    ACFBungeeListener - Class in co.aikar.commands
     
    -
    ACFBungeeListener(BungeeCommandManager, Plugin) - Constructor for class co.aikar.commands.ACFBungeeListener
    +
    ACFBungeeListener(BungeeCommandManager, Plugin) - Constructor for class co.aikar.commands.ACFBungeeListener
     
    -
    ACFBungeeUtil - Class in co.aikar.commands
    +
    ACFBungeeUtil - Class in co.aikar.commands
     
    -
    ACFBungeeUtil() - Constructor for class co.aikar.commands.ACFBungeeUtil
    +
    ACFBungeeUtil() - Constructor for class co.aikar.commands.ACFBungeeUtil
     
    -
    addChild(BaseCommand) - Method in class co.aikar.commands.BungeeRootCommand
    +
    addChild(BaseCommand) - Method in class co.aikar.commands.BungeeRootCommand
     
    - - - -

    B

    -
    -
    BungeeCommandCompletionContext - Class in co.aikar.commands
    +

    B

    +
    +
    BungeeCommandCompletionContext - Class in co.aikar.commands
     
    -
    BungeeCommandCompletions - Class in co.aikar.commands
    +
    BungeeCommandCompletions - Class in co.aikar.commands
     
    -
    BungeeCommandCompletions(CommandManager) - Constructor for class co.aikar.commands.BungeeCommandCompletions
    +
    BungeeCommandCompletions(CommandManager) - Constructor for class co.aikar.commands.BungeeCommandCompletions
     
    -
    BungeeCommandContexts - Class in co.aikar.commands
    +
    BungeeCommandContexts - Class in co.aikar.commands
     
    -
    BungeeCommandExecutionContext - Class in co.aikar.commands
    +
    BungeeCommandExecutionContext - Class in co.aikar.commands
     
    -
    BungeeCommandIssuer - Class in co.aikar.commands
    +
    BungeeCommandIssuer - Class in co.aikar.commands
     
    -
    BungeeCommandManager - Class in co.aikar.commands
    +
    BungeeCommandManager - Class in co.aikar.commands
     
    -
    BungeeCommandManager(Plugin) - Constructor for class co.aikar.commands.BungeeCommandManager
    +
    BungeeCommandManager(Plugin) - Constructor for class co.aikar.commands.BungeeCommandManager
     
    -
    BungeeConditionContext - Class in co.aikar.commands
    +
    BungeeConditionContext - Class in co.aikar.commands
     
    -
    BungeeLocales - Class in co.aikar.commands
    +
    BungeeLocales - Class in co.aikar.commands
     
    -
    BungeeLocales(BungeeCommandManager) - Constructor for class co.aikar.commands.BungeeLocales
    +
    BungeeLocales(BungeeCommandManager) - Constructor for class co.aikar.commands.BungeeLocales
     
    -
    BungeeMessageFormatter - Class in co.aikar.commands
    +
    BungeeMessageFormatter - Class in co.aikar.commands
     
    -
    BungeeMessageFormatter(ChatColor...) - Constructor for class co.aikar.commands.BungeeMessageFormatter
    +
    BungeeMessageFormatter(ChatColor...) - Constructor for class co.aikar.commands.BungeeMessageFormatter
     
    -
    BungeeRegisteredCommand - Class in co.aikar.commands
    +
    BungeeRegisteredCommand - Class in co.aikar.commands
     
    -
    BungeeRootCommand - Class in co.aikar.commands
    +
    BungeeRootCommand - Class in co.aikar.commands
     
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    co.aikar.commands.bungee.contexts - package co.aikar.commands.bungee.contexts
     
    co.aikar.commands.contexts - package co.aikar.commands.contexts
     
    -
    color(String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    color(String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    COLOR_CHAR - Static variable in class co.aikar.commands.ACFBungeeUtil
    +
    COLOR_CHAR - Static variable in class co.aikar.commands.ACFBungeeUtil
     
    -
    completions - Variable in class co.aikar.commands.BungeeCommandManager
    +
    completions - Variable in class co.aikar.commands.BungeeCommandManager
     
    -
    contexts - Variable in class co.aikar.commands.BungeeCommandManager
    +
    contexts - Variable in class co.aikar.commands.BungeeCommandManager
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.BungeeCommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.BungeeCommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.BungeeCommandManager
    +
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.BungeeCommandManager
    +
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.BungeeCommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.BungeeCommandManager
     
    - - - -

    E

    -
    -
    equals(Object) - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
    +

    E

    +
    +
    equals(Object) - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    -
    equals(Object) - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    equals(Object) - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    execute(CommandSender, String[]) - Method in class co.aikar.commands.BungeeRootCommand
    +
    execute(CommandSender, String[]) - Method in class co.aikar.commands.BungeeRootCommand
     
    - - - -

    F

    -
    -
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +

    F

    +
    +
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    findPlayerSmart(CommandSender, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    findPlayerSmart(CommandSender, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    -
    Deprecated. 
    +
    Deprecated. 
    - - - -

    G

    -
    -
    getChildren() - Method in class co.aikar.commands.BungeeRootCommand
    +

    G

    +
    +
    getChildren() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.BungeeCommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.BungeeCommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.BungeeCommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getCommandName() - Method in class co.aikar.commands.BungeeRootCommand
    +
    getCommandName() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.BungeeCommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getDefCommand() - Method in class co.aikar.commands.BungeeRootCommand
    +
    getDefCommand() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getIssuer() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    getIssuer() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    getLastColors(String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    getLastColors(String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    getLocales() - Method in class co.aikar.commands.BungeeCommandManager
    +
    getLocales() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getManager() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    getManager() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    getManager() - Method in class co.aikar.commands.BungeeRootCommand
    +
    getManager() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
    +
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    getPermission() - Method in class co.aikar.commands.BungeeRootCommand
    +
    getPermission() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getPlayer() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
    +
    getPlayer() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    -
    getPlayer() - Method in class co.aikar.commands.BungeeCommandCompletionContext
    +
    getPlayer() - Method in class co.aikar.commands.BungeeCommandCompletionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.BungeeCommandExecutionContext
    +
    getPlayer() - Method in class co.aikar.commands.BungeeCommandExecutionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    getPlayer() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    getPlayer() - Method in class co.aikar.commands.BungeeConditionContext
    +
    getPlayer() - Method in class co.aikar.commands.BungeeConditionContext
     
    -
    getPlugin() - Method in class co.aikar.commands.BungeeCommandManager
    +
    getPlugin() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.BungeeCommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    getSender() - Method in class co.aikar.commands.BungeeCommandCompletionContext
    +
    getSender() - Method in class co.aikar.commands.BungeeCommandCompletionContext
     
    -
    getSender() - Method in class co.aikar.commands.BungeeCommandExecutionContext
    +
    getSender() - Method in class co.aikar.commands.BungeeCommandExecutionContext
     
    -
    getSender() - Method in class co.aikar.commands.BungeeConditionContext
    +
    getSender() - Method in class co.aikar.commands.BungeeConditionContext
     
    -
    getSubCommands() - Method in class co.aikar.commands.BungeeRootCommand
    +
    getSubCommands() - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    getUniqueId() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    getUniqueId() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    - - - -

    H

    -
    -
    hashCode() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
    +

    H

    +
    +
    hashCode() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    -
    hashCode() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    hashCode() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    hasPermission(String) - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    hasPermission(String) - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    hasPermission(CommandSender) - Method in class co.aikar.commands.BungeeRootCommand
    +
    hasPermission(CommandSender) - Method in class co.aikar.commands.BungeeRootCommand
     
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.BungeeCommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.BungeeCommandManager
     
    - - - -

    I

    -
    -
    IS_NOT_A_VALID_NAME - co.aikar.commands.MinecraftMessageKeys
    +

    I

    +
    +
    IS_NOT_A_VALID_NAME - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    isChatColorAColor(ChatColor) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    isChatColorAColor(ChatColor) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.BungeeCommandManager
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    isPlayer() - Method in class co.aikar.commands.BungeeCommandIssuer
    +
    isPlayer() - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    isValidName(String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    isValidName(String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    - - - -

    L

    -
    -
    loadLanguage(Configuration, Locale) - Method in class co.aikar.commands.BungeeLocales
    +

    L

    +
    +
    loadLanguage(Configuration, Locale) - Method in class co.aikar.commands.BungeeLocales
    Loads every message from the Configuration object.
    -
    loadLanguages() - Method in class co.aikar.commands.BungeeLocales
    +
    loadLanguages() - Method in class co.aikar.commands.BungeeLocales
     
    -
    loadYamlLanguageFile(File, Locale) - Method in class co.aikar.commands.BungeeLocales
    +
    loadYamlLanguageFile(File, Locale) - Method in class co.aikar.commands.BungeeLocales
    Loads the given file
    -
    loadYamlLanguageFile(String, Locale) - Method in class co.aikar.commands.BungeeLocales
    +
    loadYamlLanguageFile(String, Locale) - Method in class co.aikar.commands.BungeeLocales
    Loads a file out of the plugins data folder by the given name
    -
    locales - Variable in class co.aikar.commands.BungeeCommandManager
    +
    locales - Variable in class co.aikar.commands.BungeeCommandManager
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.BungeeCommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.BungeeCommandManager
     
    - - - -

    M

    -
    -
    MinecraftMessageKeys - Enum in co.aikar.commands
    +

    M

    +
    +
    MinecraftMessageKeys - Enum in co.aikar.commands
     
    -
    MULTIPLE_PLAYERS_MATCH - co.aikar.commands.MinecraftMessageKeys
    +
    MULTIPLE_PLAYERS_MATCH - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    N

    -
    -
    NO_PLAYER_FOUND - co.aikar.commands.MinecraftMessageKeys
    +

    N

    +
    +
    NO_PLAYER_FOUND - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    NO_PLAYER_FOUND_SERVER - co.aikar.commands.MinecraftMessageKeys
    +
    NO_PLAYER_FOUND_SERVER - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    O

    -
    -
    onDisconnect(PlayerDisconnectEvent) - Method in class co.aikar.commands.ACFBungeeListener
    +

    O

    +
    +
    onDisconnect(PlayerDisconnectEvent) - Method in class co.aikar.commands.ACFBungeeListener
     
    -
    OnlinePlayer - Class in co.aikar.commands.bungee.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.bungee.contexts
     
    -
    OnlinePlayer(ProxiedPlayer) - Constructor for class co.aikar.commands.bungee.contexts.OnlinePlayer
    +
    OnlinePlayer(ProxiedPlayer) - Constructor for class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    -
    OnlineProxiedPlayer - Class in co.aikar.commands.contexts
    +
    OnlineProxiedPlayer - Class in co.aikar.commands.contexts
    -
    Deprecated. - +
    Deprecated. +
    -
    OnlineProxiedPlayer(ProxiedPlayer) - Constructor for class co.aikar.commands.contexts.OnlineProxiedPlayer
    +
    OnlineProxiedPlayer(ProxiedPlayer) - Constructor for class co.aikar.commands.contexts.OnlineProxiedPlayer
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPlayerJoin(PostLoginEvent) - Method in class co.aikar.commands.ACFBungeeListener
    +
    onPlayerJoin(PostLoginEvent) - Method in class co.aikar.commands.ACFBungeeListener
     
    -
    onTabComplete(CommandSender, String[]) - Method in class co.aikar.commands.BungeeRootCommand
    +
    onTabComplete(CommandSender, String[]) - Method in class co.aikar.commands.BungeeRootCommand
     
    - - - -

    P

    -
    -
    player - Variable in class co.aikar.commands.bungee.contexts.OnlinePlayer
    +

    P

    +
    +
    player - Variable in class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    -
    plugin - Variable in class co.aikar.commands.BungeeCommandManager
    +
    plugin - Variable in class co.aikar.commands.BungeeCommandManager
     
    -
    postCommand() - Method in class co.aikar.commands.BungeeRegisteredCommand
    +
    postCommand() - Method in class co.aikar.commands.BungeeRegisteredCommand
     
    -
    preCommand() - Method in class co.aikar.commands.BungeeRegisteredCommand
    +
    preCommand() - Method in class co.aikar.commands.BungeeRegisteredCommand
     
    - - - -

    R

    -
    -
    readLocale(ProxiedPlayer) - Method in class co.aikar.commands.BungeeCommandManager
    +

    R

    +
    +
    readLocale(ProxiedPlayer) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.BungeeCommandManager
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    registeredCommands - Variable in class co.aikar.commands.BungeeCommandManager
    +
    registeredCommands - Variable in class co.aikar.commands.BungeeCommandManager
     
    -
    removeColors(String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    removeColors(String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    replaceChatString(String, String, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    replaceChatString(String, String, String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    replaceChatString(String, Pattern, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    replaceChatString(String, Pattern, String) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    - - - -

    S

    -
    -
    sendMessageInternal(String) - Method in class co.aikar.commands.BungeeCommandIssuer
    +

    S

    +
    +
    sendMessageInternal(String) - Method in class co.aikar.commands.BungeeCommandIssuer
     
    -
    sendMsg(CommandSender, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    +
    sendMsg(CommandSender, String) - Static method in class co.aikar.commands.ACFBungeeUtil
    -
    Deprecated. 
    +
    Deprecated. 
    - - - -

    T

    -
    -
    toString() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
    +

    T

    +
    +
    toString() - Method in class co.aikar.commands.bungee.contexts.OnlinePlayer
     
    - - - -

    U

    -
    -
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.BungeeCommandManager
    +

    U

    +
    +
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    unregisterCommand(BungeeRootCommand) - Method in class co.aikar.commands.BungeeCommandManager
    +
    unregisterCommand(BungeeRootCommand) - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    unregisterCommands() - Method in class co.aikar.commands.BungeeCommandManager
    +
    unregisterCommands() - Method in class co.aikar.commands.BungeeCommandManager
     
    -
    USERNAME_TOO_SHORT - co.aikar.commands.MinecraftMessageKeys
    +
    USERNAME_TOO_SHORT - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    V

    -
    -
    validate(T, String, Object...) - Static method in class co.aikar.commands.ACFBungeeUtil
    +

    V

    +
    +
    validate(T, String, Object...) - Static method in class co.aikar.commands.ACFBungeeUtil
     
    -
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns the enum constant of this type with the specified name.
    -
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns an array containing the constants of this enum type, in the order they are declared.
    -A B C E F G H I L M N O P R S T U V 
    All Classes All Packages
    -
    +A B C E F G H I L M N O P R S T U V 
    All Classes and Interfaces|All Packages|Constant Field Values
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/index.html b/docs/acf-bungee/index.html index c2fd604a..41d0b2d6 100644 --- a/docs/acf-bungee/index.html +++ b/docs/acf-bungee/index.html @@ -1,51 +1,33 @@ - - -Overview (ACF (Bungee) 0.5.0-SNAPSHOT API) + +Overview (ACF (Bungee) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (Bungee) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.bungee.contexts 
    co.aikar.commands.contexts 
    +
    +

    ACF (Bungee) 0.5.1-SNAPSHOT API

    +
    +
    +
    Packages
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-bungee/jquery-ui.overrides.css b/docs/acf-bungee/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-bungee/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-bungee/legal/COPYRIGHT b/docs/acf-bungee/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-bungee/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-bungee/legal/LICENSE b/docs/acf-bungee/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-bungee/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-bungee/legal/jquery.md b/docs/acf-bungee/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-bungee/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-bungee/legal/jqueryUI.md b/docs/acf-bungee/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-bungee/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-bungee/member-search-index.js b/docs/acf-bungee/member-search-index.js index 07624ec0..4ea61ece 100644 --- a/docs/acf-bungee/member-search-index.js +++ b/docs/acf-bungee/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"ACFBungeeListener(BungeeCommandManager, Plugin)","url":"%3Cinit%3E(co.aikar.commands.BungeeCommandManager,net.md_5.bungee.api.plugin.Plugin)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"ACFBungeeUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandCompletions","l":"BungeeCommandCompletions(CommandManager)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"BungeeCommandManager(Plugin)","url":"%3Cinit%3E(net.md_5.bungee.api.plugin.Plugin)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"BungeeLocales(BungeeCommandManager)","url":"%3Cinit%3E(co.aikar.commands.BungeeCommandManager)"},{"p":"co.aikar.commands","c":"BungeeMessageFormatter","l":"BungeeMessageFormatter(ChatColor...)","url":"%3Cinit%3E(net.md_5.bungee.api.ChatColor...)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"COLOR_CHAR"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"color(String)","url":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","url":"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":"BungeeCommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","url":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"createConditionContext(CommandIssuer, String)","url":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","url":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"createRootCommand(String)","url":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"execute(CommandSender, String[])","url":"execute(net.md_5.bungee.api.CommandSender,java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"findPlayerSmart(CommandIssuer, String)","url":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"findPlayerSmart(CommandSender, String)","url":"findPlayerSmart(net.md_5.bungee.api.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandIssuer(Object)","url":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandPrefix(CommandIssuer)","url":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"getLastColors(String)","url":"getLastColors(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getPermission()"},{"p":"co.aikar.commands","c":"BungeeCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BungeeCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"hasPermission(CommandSender)","url":"hasPermission(net.md_5.bungee.api.CommandSender)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"hasPermission(String)","url":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"isChatColorAColor(ChatColor)","url":"isChatColorAColor(net.md_5.bungee.api.ChatColor)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"isValidName(String)","url":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadLanguage(Configuration, Locale)","url":"loadLanguage(net.md_5.bungee.config.Configuration,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadYamlLanguageFile(File, Locale)","url":"loadYamlLanguageFile(java.io.File,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadYamlLanguageFile(String, Locale)","url":"loadYamlLanguageFile(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"onDisconnect(PlayerDisconnectEvent)","url":"onDisconnect(net.md_5.bungee.api.event.PlayerDisconnectEvent)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"OnlinePlayer(ProxiedPlayer)","url":"%3Cinit%3E(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands.contexts","c":"OnlineProxiedPlayer","l":"OnlineProxiedPlayer(ProxiedPlayer)","url":"%3Cinit%3E(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"onPlayerJoin(PostLoginEvent)","url":"onPlayerJoin(net.md_5.bungee.api.event.PostLoginEvent)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"onTabComplete(CommandSender, String[])","url":"onTabComplete(net.md_5.bungee.api.CommandSender,java.lang.String[])"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"BungeeRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"BungeeRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"readLocale(ProxiedPlayer)","url":"readLocale(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"removeColors(String)","url":"removeColors(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"replaceChatString(String, Pattern, String)","url":"replaceChatString(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"replaceChatString(String, String, String)","url":"replaceChatString(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"sendMsg(CommandSender, String)","url":"sendMsg(net.md_5.bungee.api.CommandSender,java.lang.String)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommand(BaseCommand)","url":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommand(BungeeRootCommand)","url":"unregisterCommand(co.aikar.commands.BungeeRootCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"validate(T, String, Object...)","url":"validate(T,java.lang.String,java.lang.Object...)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","url":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"}] \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"ACFBungeeListener(BungeeCommandManager, Plugin)","u":"%3Cinit%3E(co.aikar.commands.BungeeCommandManager,net.md_5.bungee.api.plugin.Plugin)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"ACFBungeeUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandCompletions","l":"BungeeCommandCompletions(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"BungeeCommandManager(Plugin)","u":"%3Cinit%3E(net.md_5.bungee.api.plugin.Plugin)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"BungeeLocales(BungeeCommandManager)","u":"%3Cinit%3E(co.aikar.commands.BungeeCommandManager)"},{"p":"co.aikar.commands","c":"BungeeMessageFormatter","l":"BungeeMessageFormatter(ChatColor...)","u":"%3Cinit%3E(net.md_5.bungee.api.ChatColor...)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"COLOR_CHAR"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"color(String)","u":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"BungeeCommandManager","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":"BungeeCommandManager","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":"BungeeCommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","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":"BungeeCommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"execute(CommandSender, String[])","u":"execute(net.md_5.bungee.api.CommandSender,java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"findPlayerSmart(CommandIssuer, String)","u":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"findPlayerSmart(CommandSender, String)","u":"findPlayerSmart(net.md_5.bungee.api.CommandSender,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"getLastColors(String)","u":"getLastColors(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getPermission()"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"BungeeCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"hasPermission(CommandSender)","u":"hasPermission(net.md_5.bungee.api.CommandSender)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"isChatColorAColor(ChatColor)","u":"isChatColorAColor(net.md_5.bungee.api.ChatColor)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"isValidName(String)","u":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadLanguage(Configuration, Locale)","u":"loadLanguage(net.md_5.bungee.config.Configuration,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadYamlLanguageFile(File, Locale)","u":"loadYamlLanguageFile(java.io.File,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeLocales","l":"loadYamlLanguageFile(String, Locale)","u":"loadYamlLanguageFile(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"onDisconnect(PlayerDisconnectEvent)","u":"onDisconnect(net.md_5.bungee.api.event.PlayerDisconnectEvent)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"OnlinePlayer(ProxiedPlayer)","u":"%3Cinit%3E(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands.contexts","c":"OnlineProxiedPlayer","l":"OnlineProxiedPlayer(ProxiedPlayer)","u":"%3Cinit%3E(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands","c":"ACFBungeeListener","l":"onPlayerJoin(PostLoginEvent)","u":"onPlayerJoin(net.md_5.bungee.api.event.PostLoginEvent)"},{"p":"co.aikar.commands","c":"BungeeRootCommand","l":"onTabComplete(CommandSender, String[])","u":"onTabComplete(net.md_5.bungee.api.CommandSender,java.lang.String[])"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"BungeeRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"BungeeRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"readLocale(ProxiedPlayer)","u":"readLocale(net.md_5.bungee.api.connection.ProxiedPlayer)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"removeColors(String)","u":"removeColors(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"replaceChatString(String, Pattern, String)","u":"replaceChatString(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"replaceChatString(String, String, String)","u":"replaceChatString(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"BungeeCommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"sendMsg(CommandSender, String)","u":"sendMsg(net.md_5.bungee.api.CommandSender,java.lang.String)"},{"p":"co.aikar.commands.bungee.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommand(BaseCommand)","u":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommand(BungeeRootCommand)","u":"unregisterCommand(co.aikar.commands.BungeeRootCommand)"},{"p":"co.aikar.commands","c":"BungeeCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"ACFBungeeUtil","l":"validate(T, String, Object...)","u":"validate(T,java.lang.String,java.lang.Object...)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-bungee/module-search-index.js b/docs/acf-bungee/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-bungee/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-bungee/overview-summary.html b/docs/acf-bungee/overview-summary.html index c1377b8b..38e72528 100644 --- a/docs/acf-bungee/overview-summary.html +++ b/docs/acf-bungee/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (Bungee) 0.5.0-SNAPSHOT API + +ACF (Bungee) 0.5.1-SNAPSHOT API + + + + + - - - +
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/AnnotationProcessor.html b/docs/acf-core/co/aikar/commands/AnnotationProcessor.html index 7887c1ce..8193275d 100644 --- a/docs/acf-core/co/aikar/commands/AnnotationProcessor.html +++ b/docs/acf-core/co/aikar/commands/AnnotationProcessor.html @@ -1,396 +1,234 @@ - - -AnnotationProcessor (ACF (Core) 0.5.0-SNAPSHOT API) + +AnnotationProcessor (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface AnnotationProcessor<T extends Annotation>

    + +

    Interface AnnotationProcessor<T extends Annotation>

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/BaseCommand.html b/docs/acf-core/co/aikar/commands/BaseCommand.html index 52704490..3801790e 100644 --- a/docs/acf-core/co/aikar/commands/BaseCommand.html +++ b/docs/acf-core/co/aikar/commands/BaseCommand.html @@ -1,142 +1,87 @@ - - -BaseCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +BaseCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class BaseCommand

    + +

    Class BaseCommand

    -
    - -
    -
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandCompletionContext.html b/docs/acf-core/co/aikar/commands/CommandCompletionContext.html index 97ec1e06..c98c96d9 100644 --- a/docs/acf-core/co/aikar/commands/CommandCompletionContext.html +++ b/docs/acf-core/co/aikar/commands/CommandCompletionContext.html @@ -1,468 +1,275 @@ - - -CommandCompletionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandCompletionContext<I extends CommandIssuer>

    + +

    Class CommandCompletionContext<I extends CommandIssuer>

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html b/docs/acf-core/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html index 024605c4..7b56532f 100644 --- a/docs/acf-core/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html +++ b/docs/acf-core/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html @@ -1,221 +1,105 @@ - - -CommandCompletions.AsyncCommandCompletionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletions.AsyncCommandCompletionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandCompletions.AsyncCommandCompletionHandler<C extends CommandCompletionContext>

    + +

    Interface CommandCompletions.AsyncCommandCompletionHandler<C extends CommandCompletionContext>

    -
    - -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html b/docs/acf-core/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html index 8dc5b8f9..c260a7cd 100644 --- a/docs/acf-core/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html +++ b/docs/acf-core/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html @@ -1,264 +1,141 @@ - - -CommandCompletions.CommandCompletionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletions.CommandCompletionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandCompletions.CommandCompletionHandler<C extends CommandCompletionContext>

    + +

    Interface CommandCompletions.CommandCompletionHandler<C extends CommandCompletionContext>

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html b/docs/acf-core/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html index cd8c2f38..dd32bd0b 100644 --- a/docs/acf-core/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html +++ b/docs/acf-core/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html @@ -1,301 +1,156 @@ - - -CommandCompletions.SyncCompletionRequired (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletions.SyncCompletionRequired (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandCompletions.SyncCompletionRequired

    + +

    Class CommandCompletions.SyncCompletionRequired

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandCompletions.html b/docs/acf-core/co/aikar/commands/CommandCompletions.html index 8c40ac2d..60a8f69d 100644 --- a/docs/acf-core/co/aikar/commands/CommandCompletions.html +++ b/docs/acf-core/co/aikar/commands/CommandCompletions.html @@ -1,336 +1,223 @@ - - -CommandCompletions (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandCompletions<C extends CommandCompletionContext>

    + +

    Class CommandCompletions<C extends CommandCompletionContext>

    -
    - -
    - -
    -
    - +
    + -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandConditions.Condition.html b/docs/acf-core/co/aikar/commands/CommandConditions.Condition.html index 377b3ce8..c52e1fbf 100644 --- a/docs/acf-core/co/aikar/commands/CommandConditions.Condition.html +++ b/docs/acf-core/co/aikar/commands/CommandConditions.Condition.html @@ -1,258 +1,137 @@ - - -CommandConditions.Condition (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandConditions.Condition (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandConditions.Condition<I extends CommandIssuer>

    + +

    Interface CommandConditions.Condition<I extends CommandIssuer>

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandConditions.ParameterCondition.html b/docs/acf-core/co/aikar/commands/CommandConditions.ParameterCondition.html index cc8adf9b..96960a5c 100644 --- a/docs/acf-core/co/aikar/commands/CommandConditions.ParameterCondition.html +++ b/docs/acf-core/co/aikar/commands/CommandConditions.ParameterCondition.html @@ -1,264 +1,141 @@ - - -CommandConditions.ParameterCondition (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandConditions.ParameterCondition (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandConditions.ParameterCondition<P,​CEC extends CommandExecutionContext,​I extends CommandIssuer>

    + +

    Interface CommandConditions.ParameterCondition<P,CEC extends CommandExecutionContext,I extends CommandIssuer>

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandConditions.html b/docs/acf-core/co/aikar/commands/CommandConditions.html index a5022a85..c5f30009 100644 --- a/docs/acf-core/co/aikar/commands/CommandConditions.html +++ b/docs/acf-core/co/aikar/commands/CommandConditions.html @@ -1,317 +1,172 @@ - - -CommandConditions (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandConditions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandConditions<I extends CommandIssuer,​CEC extends CommandExecutionContext<CEC,​I>,​CC extends ConditionContext<I>>

    + +

    Class CommandConditions<I extends CommandIssuer,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>>

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.CommandConditions<I,​CEC,​CC>
      • -
      -
    • -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandContexts.html b/docs/acf-core/co/aikar/commands/CommandContexts.html index a868e76e..21fde327 100644 --- a/docs/acf-core/co/aikar/commands/CommandContexts.html +++ b/docs/acf-core/co/aikar/commands/CommandContexts.html @@ -1,434 +1,265 @@ - - -CommandContexts (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandContexts (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandContexts<R extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Class CommandContexts<R extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    - -
    - -
    -
    -
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandExecutionContext.html b/docs/acf-core/co/aikar/commands/CommandExecutionContext.html index 547da518..3169b4a7 100644 --- a/docs/acf-core/co/aikar/commands/CommandExecutionContext.html +++ b/docs/acf-core/co/aikar/commands/CommandExecutionContext.html @@ -1,864 +1,536 @@ - - -CommandExecutionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandExecutionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandExecutionContext<CEC extends CommandExecutionContext,​I extends CommandIssuer>

    + +

    Class CommandExecutionContext<CEC extends CommandExecutionContext,I extends CommandIssuer>

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.CommandExecutionContext<CEC,​I>
      • -
      -
    • -
    -
    - -
    -
    -
    +
    <T extends Annotation>
    String
    + +
     
    +
    <T extends Annotation>
    String
    +
    getAnnotationValue(Class<T> cls, + int options)
    +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + +
    getFlagValue(String flag, + Double def)
    +
     
    + +
    getFlagValue(String flag, + Float def)
    +
     
    + +
    getFlagValue(String flag, + Integer def)
    +
     
    + +
    getFlagValue(String flag, + Long def)
    +
     
    + +
    getFlagValue(String flag, + Number def)
    +
     
    + +
    getFlagValue(String flag, + String def)
    +
     
    + + +
     
    +
    int
    + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    +
    int
    + +
     
    + + +
    +
    Deprecated.
    +
    + + +
     
    + + +
     
    + +
    getResolvedArg(Class<?>... classes)
    +
     
    + + +
     
    +
    <T> T
    +
    getResolvedArg(String key, + Class<?>... classes)
    +
     
    +
    <T extends Annotation>
    boolean
    + +
     
    +
    boolean
    + +
     
    +
    boolean
    + +
     
    +
    boolean
    + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandHelp.html b/docs/acf-core/co/aikar/commands/CommandHelp.html index 22a8f1d3..957a7e4a 100644 --- a/docs/acf-core/co/aikar/commands/CommandHelp.html +++ b/docs/acf-core/co/aikar/commands/CommandHelp.html @@ -1,591 +1,348 @@ - - -CommandHelp (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandHelp (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandHelp

    + +

    Class CommandHelp

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandHelpFormatter.html b/docs/acf-core/co/aikar/commands/CommandHelpFormatter.html index 65e3dae0..f5ad5f3f 100644 --- a/docs/acf-core/co/aikar/commands/CommandHelpFormatter.html +++ b/docs/acf-core/co/aikar/commands/CommandHelpFormatter.html @@ -1,589 +1,371 @@ - - -CommandHelpFormatter (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandHelpFormatter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandHelpFormatter

    + +

    Class CommandHelpFormatter

    -
    - -
    - -
    -
    - +
    + -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandIssuer.html b/docs/acf-core/co/aikar/commands/CommandIssuer.html index cb194d9e..94782f3f 100644 --- a/docs/acf-core/co/aikar/commands/CommandIssuer.html +++ b/docs/acf-core/co/aikar/commands/CommandIssuer.html @@ -1,511 +1,320 @@ - - -CommandIssuer (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandIssuer (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandIssuer

    + +

    Interface CommandIssuer

    -
    -
    - -
    -
    -
    +
    +
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getIssuer

            -
            <T> T getIssuer()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getIssuer

              +
              <T> T getIssuer()
              Gets the issuer in the platforms native object
              -
              -
              Type Parameters:
              +
              +
              Type Parameters:
              T -
              -
              Returns:
              +
              Returns:
              +
            • -
            - - - - - - - -
              -
            • -

              isPlayer

              -
              boolean isPlayer()
              +
            • +
              +

              isPlayer

              +
              boolean isPlayer()
              Is this issue a player, or server/console sender
              -
              -
              Returns:
              +
              +
              Returns:
              +
            • -
            - - - -
              -
            • -

              sendMessage

              -
              default void sendMessage​(String message)
              +
            • +
              +

              sendMessage

              +
              default void sendMessage(String message)
              Send the Command Issuer a message
              -
              -
              Parameters:
              +
              +
              Parameters:
              message -
              +
            • -
            - - - -
              -
            • -

              getUniqueId

              -
              @NotNull
              -@NotNull UUID getUniqueId()
              -
              -
              Returns:
              +
            • +
              +

              getUniqueId

              +
              @NotNull +@NotNull UUID getUniqueId()
              +
              +
              Returns:
              the unique id of that issuer
              +
            • -
            - - - -
              -
            • -

              hasPermission

              -
              boolean hasPermission​(String permission)
              +
            • +
              +

              hasPermission

              +
              boolean hasPermission(String permission)
              Has permission node
              -
              -
              Parameters:
              +
              +
              Parameters:
              permission -
              -
              Returns:
              +
              Returns:
              +
            • -
            - - - -
              -
            • -

              sendError

              -
              default void sendError​(co.aikar.locales.MessageKeyProvider key,
              -                       String... replacements)
              +
            • +
              +

              sendError

              +
              default void sendError(co.aikar.locales.MessageKeyProvider key, + String... replacements)
              +
            • -
            - - - -
              -
            • -

              sendSyntax

              -
              default void sendSyntax​(co.aikar.locales.MessageKeyProvider key,
              -                        String... replacements)
              +
            • +
              +

              sendSyntax

              +
              default void sendSyntax(co.aikar.locales.MessageKeyProvider key, + String... replacements)
              +
            • -
            - - - -
              -
            • -

              sendInfo

              -
              default void sendInfo​(co.aikar.locales.MessageKeyProvider key,
              -                      String... replacements)
              +
            • +
              +

              sendInfo

              +
              default void sendInfo(co.aikar.locales.MessageKeyProvider key, + String... replacements)
              +
            • -
            - - - -
              -
            • -

              sendError

              -
              default void sendError​(co.aikar.locales.MessageKey key,
              -                       String... replacements)
              +
            • +
              +

              sendError

              +
              default void sendError(co.aikar.locales.MessageKey key, + String... replacements)
              +
            • -
            - - - -
              -
            • -

              sendSyntax

              -
              default void sendSyntax​(co.aikar.locales.MessageKey key,
              -                        String... replacements)
              +
            • +
              +

              sendSyntax

              +
              default void sendSyntax(co.aikar.locales.MessageKey key, + String... replacements)
              +
            • -
            - - - -
              -
            • -

              sendInfo

              -
              default void sendInfo​(co.aikar.locales.MessageKey key,
              -                      String... replacements)
              +
            • +
              +

              sendInfo

              +
              default void sendInfo(co.aikar.locales.MessageKey key, + String... replacements)
              +
            • -
            - - - - - - - - - - - -
              -
            • -

              sendMessageInternal

              -
              @Deprecated
              -void sendMessageInternal​(String message)
              -
              Deprecated. -
              Do not call this, for internal use. Not considered part of the API and may break.
              +
            • +
              +

              sendMessageInternal

              + +
              Deprecated. +
              Do not call this, for internal use. Not considered part of the API and may break.
              -
              -
              Parameters:
              +
              +
              Parameters:
              message -
              -
            • -
            +
      -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandManager.html b/docs/acf-core/co/aikar/commands/CommandManager.html index 86c9a49b..f646168c 100644 --- a/docs/acf-core/co/aikar/commands/CommandManager.html +++ b/docs/acf-core/co/aikar/commands/CommandManager.html @@ -1,1605 +1,1086 @@ - - -CommandManager (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandManager (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandManager<IT,​I extends CommandIssuer,​FT,​MF extends MessageFormatter<FT>,​CEC extends CommandExecutionContext<CEC,​I>,​CC extends ConditionContext<I>>

    + +

    Class CommandManager<IT,I extends CommandIssuer,FT,MF extends MessageFormatter<FT>,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>>

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.CommandManager<IT,​I,​FT,​MF,​CEC,​CC>
      • -
      -
    • -
    -
    - -
    -
    -
    +
    void
    +
    setFormat(MessageType type, + int i, + FT color)
    +
     
    +
    void
    +
    setFormat(MessageType type, + FT... colors)
    +
     
    + +
    setFormat(MessageType type, + MF formatter)
    +
     
    +
    void
    + +
    +
    Deprecated. +
    Unstable API
    +
    +
    + +
    setIssuerLocale(IT issuer, + Locale locale)
    +
     
    +
    boolean
    +
    usePerIssuerLocale(boolean setting)
    +
     
    +
    boolean
    + +
     
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandOperationContext.html b/docs/acf-core/co/aikar/commands/CommandOperationContext.html index a6b70882..0b2d4d15 100644 --- a/docs/acf-core/co/aikar/commands/CommandOperationContext.html +++ b/docs/acf-core/co/aikar/commands/CommandOperationContext.html @@ -1,431 +1,246 @@ - - -CommandOperationContext (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandOperationContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandOperationContext<I extends CommandIssuer>

    + +

    Class CommandOperationContext<I extends CommandIssuer>

    -
    - -
    - -
    -
    -
    +
    <T extends Annotation>
    String
    + +
     
    +
    <T extends Annotation>
    String
    +
    getAnnotationValue(Class<T> cls, + int options)
    +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    + + +
     
    +
    boolean
    +
    hasAnnotation(Class<? extends Annotation> anno)
    +
     
    +
    boolean
    + +
     
    +
    void
    + +
     
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/CommandParameter.html b/docs/acf-core/co/aikar/commands/CommandParameter.html index f957d888..964931a0 100644 --- a/docs/acf-core/co/aikar/commands/CommandParameter.html +++ b/docs/acf-core/co/aikar/commands/CommandParameter.html @@ -1,815 +1,492 @@ - - -CommandParameter (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandParameter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandParameter<CEC extends CommandExecutionContext<CEC,​? extends CommandIssuer>>

    + +

    Class CommandParameter<CEC extends CommandExecutionContext<CEC,? extends CommandIssuer>>

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/CommandReplacements.html b/docs/acf-core/co/aikar/commands/CommandReplacements.html index 7a2a3539..53e083f7 100644 --- a/docs/acf-core/co/aikar/commands/CommandReplacements.html +++ b/docs/acf-core/co/aikar/commands/CommandReplacements.html @@ -1,296 +1,156 @@ - - -CommandReplacements (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandReplacements (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandReplacements

    + +

    Class CommandReplacements

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/ConditionContext.html b/docs/acf-core/co/aikar/commands/ConditionContext.html index ced9f8a1..b6a8f67c 100644 --- a/docs/acf-core/co/aikar/commands/ConditionContext.html +++ b/docs/acf-core/co/aikar/commands/ConditionContext.html @@ -1,325 +1,175 @@ - - -ConditionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +ConditionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ConditionContext<I extends CommandIssuer>

    + +

    Class ConditionContext<I extends CommandIssuer>

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/ConditionFailedException.html b/docs/acf-core/co/aikar/commands/ConditionFailedException.html index f7986121..729f72b2 100644 --- a/docs/acf-core/co/aikar/commands/ConditionFailedException.html +++ b/docs/acf-core/co/aikar/commands/ConditionFailedException.html @@ -1,345 +1,182 @@ - - -ConditionFailedException (ACF (Core) 0.5.0-SNAPSHOT API) + +ConditionFailedException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ConditionFailedException

    + +

    Class ConditionFailedException

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/ExceptionHandler.html b/docs/acf-core/co/aikar/commands/ExceptionHandler.html index 8fe358a1..1e5c07f2 100644 --- a/docs/acf-core/co/aikar/commands/ExceptionHandler.html +++ b/docs/acf-core/co/aikar/commands/ExceptionHandler.html @@ -1,280 +1,159 @@ - - -ExceptionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +ExceptionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface ExceptionHandler

    + +

    Interface ExceptionHandler

    -
    -
    - -
    -
    -
    +
    +
    +
    - -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            execute

            -
            boolean execute​(BaseCommand command,
            -                RegisteredCommand registeredCommand,
            -                CommandIssuer sender,
            -                List<String> args,
            -                Throwable t)
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              execute

              +
              boolean execute(BaseCommand command, + RegisteredCommand registeredCommand, + CommandIssuer sender, + List<String> args, + Throwable t)
              Called when an exception occurs while executing a command
              If an exception handler properly handles an exception, the user will not be noticied by the framework that something went unexceptected.
              -
              -
              Parameters:
              +
              +
              Parameters:
              command - the command that was executed
              registeredCommand - the registered command
              sender - the issuer who send the command
              args - the args he used
              t - the throwable that caused this exception
              -
              Returns:
              +
              Returns:
              if the exception was handeled by the exception handler.
              -
            • -
            +
      -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/ForwardingCommand.html b/docs/acf-core/co/aikar/commands/ForwardingCommand.html index 92216da1..e94d7b18 100644 --- a/docs/acf-core/co/aikar/commands/ForwardingCommand.html +++ b/docs/acf-core/co/aikar/commands/ForwardingCommand.html @@ -1,418 +1,246 @@ - - -ForwardingCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +ForwardingCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ForwardingCommand

    + +

    Class ForwardingCommand

    -
    - -
    - -
    -
    -
    + + +
     
    + + +
     
    +
    boolean
    + +
     
    +
    boolean
    + +
     
    +
    boolean
    + +
     
    + +
    tabComplete(CommandIssuer issuer, + RootCommand rootCommand, + String[] args, + boolean isAsync)
    +
     
    +
    +
    +
    + +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/HelpEntry.html b/docs/acf-core/co/aikar/commands/HelpEntry.html index fa268da2..4d5a30bc 100644 --- a/docs/acf-core/co/aikar/commands/HelpEntry.html +++ b/docs/acf-core/co/aikar/commands/HelpEntry.html @@ -1,391 +1,216 @@ - - -HelpEntry (ACF (Core) 0.5.0-SNAPSHOT API) + +HelpEntry (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class HelpEntry

    + +

    Class HelpEntry

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/InvalidCommandArgument.html b/docs/acf-core/co/aikar/commands/InvalidCommandArgument.html index 0215e8e0..e91010eb 100644 --- a/docs/acf-core/co/aikar/commands/InvalidCommandArgument.html +++ b/docs/acf-core/co/aikar/commands/InvalidCommandArgument.html @@ -1,406 +1,226 @@ - - -InvalidCommandArgument (ACF (Core) 0.5.0-SNAPSHOT API) + +InvalidCommandArgument (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class InvalidCommandArgument

    + +

    Class InvalidCommandArgument

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/InvalidCommandContextException.html b/docs/acf-core/co/aikar/commands/InvalidCommandContextException.html index 9a0a626c..fcbb1946 100644 --- a/docs/acf-core/co/aikar/commands/InvalidCommandContextException.html +++ b/docs/acf-core/co/aikar/commands/InvalidCommandContextException.html @@ -1,251 +1,121 @@ - - -InvalidCommandContextException (ACF (Core) 0.5.0-SNAPSHOT API) + +InvalidCommandContextException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class InvalidCommandContextException

    + +

    Class InvalidCommandContextException

    -
    - -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/IssuerLocaleChangedCallback.html b/docs/acf-core/co/aikar/commands/IssuerLocaleChangedCallback.html index eb5082cc..260d0f6d 100644 --- a/docs/acf-core/co/aikar/commands/IssuerLocaleChangedCallback.html +++ b/docs/acf-core/co/aikar/commands/IssuerLocaleChangedCallback.html @@ -1,255 +1,132 @@ - - -IssuerLocaleChangedCallback (ACF (Core) 0.5.0-SNAPSHOT API) + +IssuerLocaleChangedCallback (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface IssuerLocaleChangedCallback<I extends CommandIssuer>

    + +

    Interface IssuerLocaleChangedCallback<I extends CommandIssuer>

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/Locales.html b/docs/acf-core/co/aikar/commands/Locales.html index b8775b49..d0790f5a 100644 --- a/docs/acf-core/co/aikar/commands/Locales.html +++ b/docs/acf-core/co/aikar/commands/Locales.html @@ -1,1014 +1,628 @@ - - -Locales (ACF (Core) 0.5.0-SNAPSHOT API) + +Locales (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class Locales

    + +

    Class Locales

    -
    - -
    - -
    -
    -
    + + +
     
    + + +
     
    +
    +
    +
    +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/MessageFormatter.html b/docs/acf-core/co/aikar/commands/MessageFormatter.html index 6c0864c8..6b5c3002 100644 --- a/docs/acf-core/co/aikar/commands/MessageFormatter.html +++ b/docs/acf-core/co/aikar/commands/MessageFormatter.html @@ -1,375 +1,208 @@ - - -MessageFormatter (ACF (Core) 0.5.0-SNAPSHOT API) + +MessageFormatter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class MessageFormatter<FT>

    + +

    Class MessageFormatter<FT>

    -
    - -
    -
      -
    • -
      -
      Type Parameters:
      +
      java.lang.Object +
      co.aikar.commands.MessageFormatter<FT>
      +
      +
      +
      +
      Type Parameters:
      FT - The platform specific color object

      -
      public abstract class MessageFormatter<FT>
      -extends Object
      +
      public abstract class MessageFormatter<FT> +extends Object
      Handles formatting Messages and managing colors
      -
    • -
    -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/MessageKeys.html b/docs/acf-core/co/aikar/commands/MessageKeys.html index 4258d734..3df2b290 100644 --- a/docs/acf-core/co/aikar/commands/MessageKeys.html +++ b/docs/acf-core/co/aikar/commands/MessageKeys.html @@ -1,696 +1,420 @@ - - -MessageKeys (ACF (Core) 0.5.0-SNAPSHOT API) + +MessageKeys (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Enum MessageKeys

    + +

    Enum MessageKeys

    -
    - -
    - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Methods inherited from class java.lang.Object

    +getClass, notify, notifyAll, wait, wait, wait
    + +
    +
    +
    +
    Returns:
    an array containing the constants of this enum type, in the order they are declared
    + - - - - -
      -
    • -

      valueOf

      -
      public static MessageKeys valueOf​(String name)
      +
    • +
      +

      valueOf

      +
      public static MessageKeys valueOf(String name)
      Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)
      -
      -
      Parameters:
      +
      +
      Parameters:
      name - the name of the enum constant to be returned.
      -
      Returns:
      +
      Returns:
      the enum constant with the specified name
      -
      Throws:
      -
      IllegalArgumentException - if this enum type has no constant with the specified name
      -
      NullPointerException - if the argument is null
      +
      Throws:
      +
      IllegalArgumentException - if this enum type has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
    • -
    - - - -
      -
    • -

      getMessageKey

      -
      public co.aikar.locales.MessageKey getMessageKey()
      -
      -
      Specified by:
      +
    • +
      +

      getMessageKey

      +
      public co.aikar.locales.MessageKey getMessageKey()
      +
      +
      Specified by:
      getMessageKey in interface co.aikar.locales.MessageKeyProvider
      -
    • -
    + - - - + + + + diff --git a/docs/acf-core/co/aikar/commands/MessageType.html b/docs/acf-core/co/aikar/commands/MessageType.html index 786e6964..ed8301e2 100644 --- a/docs/acf-core/co/aikar/commands/MessageType.html +++ b/docs/acf-core/co/aikar/commands/MessageType.html @@ -1,411 +1,235 @@ - - -MessageType (ACF (Core) 0.5.0-SNAPSHOT API) + +MessageType (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class MessageType

    + +

    Class MessageType

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/RegisteredCommand.html b/docs/acf-core/co/aikar/commands/RegisteredCommand.html index dd145140..b25ed9f3 100644 --- a/docs/acf-core/co/aikar/commands/RegisteredCommand.html +++ b/docs/acf-core/co/aikar/commands/RegisteredCommand.html @@ -1,497 +1,293 @@ - - -RegisteredCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +RegisteredCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class RegisteredCommand<CEC extends CommandExecutionContext<CEC,​? extends CommandIssuer>>

    + +

    Class RegisteredCommand<CEC extends CommandExecutionContext<CEC,? extends CommandIssuer>>

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/RootCommand.html b/docs/acf-core/co/aikar/commands/RootCommand.html index 886c76c2..8aa35944 100644 --- a/docs/acf-core/co/aikar/commands/RootCommand.html +++ b/docs/acf-core/co/aikar/commands/RootCommand.html @@ -1,489 +1,293 @@ - - -RootCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +RootCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface RootCommand

    + +

    Interface RootCommand

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/ShowCommandHelp.html b/docs/acf-core/co/aikar/commands/ShowCommandHelp.html index f27a328e..132fcca4 100644 --- a/docs/acf-core/co/aikar/commands/ShowCommandHelp.html +++ b/docs/acf-core/co/aikar/commands/ShowCommandHelp.html @@ -1,328 +1,170 @@ - - -ShowCommandHelp (ACF (Core) 0.5.0-SNAPSHOT API) + +ShowCommandHelp (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ShowCommandHelp

    + +

    Class ShowCommandHelp

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/UnresolvedDependencyException.html b/docs/acf-core/co/aikar/commands/UnresolvedDependencyException.html index e720d08b..32c77c32 100644 --- a/docs/acf-core/co/aikar/commands/UnresolvedDependencyException.html +++ b/docs/acf-core/co/aikar/commands/UnresolvedDependencyException.html @@ -1,253 +1,123 @@ - - -UnresolvedDependencyException (ACF (Core) 0.5.0-SNAPSHOT API) + +UnresolvedDependencyException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class UnresolvedDependencyException

    + +

    Class UnresolvedDependencyException

    -
    - -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/UnstableAPI.html b/docs/acf-core/co/aikar/commands/UnstableAPI.html index 3a20ca8e..cfc0cd5d 100644 --- a/docs/acf-core/co/aikar/commands/UnstableAPI.html +++ b/docs/acf-core/co/aikar/commands/UnstableAPI.html @@ -1,188 +1,84 @@ - - -UnstableAPI (ACF (Core) 0.5.0-SNAPSHOT API) + +UnstableAPI (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type UnstableAPI

    + +

    Annotation Type UnstableAPI

    -
    -
    - -
    -
    -
    + +
    Deprecated.
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/CatchAll.html b/docs/acf-core/co/aikar/commands/annotation/CatchAll.html index bb9cdaef..18fbad56 100644 --- a/docs/acf-core/co/aikar/commands/annotation/CatchAll.html +++ b/docs/acf-core/co/aikar/commands/annotation/CatchAll.html @@ -1,191 +1,87 @@ - - -CatchAll (ACF (Core) 0.5.0-SNAPSHOT API) + +CatchAll (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CatchAll

    + +

    Annotation Type CatchAll

    - -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/CatchUnknown.html b/docs/acf-core/co/aikar/commands/annotation/CatchUnknown.html index 05e5ede0..19d0f424 100644 --- a/docs/acf-core/co/aikar/commands/annotation/CatchUnknown.html +++ b/docs/acf-core/co/aikar/commands/annotation/CatchUnknown.html @@ -1,123 +1,75 @@ - - -CatchUnknown (ACF (Core) 0.5.0-SNAPSHOT API) + +CatchUnknown (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CatchUnknown

    + +

    Annotation Type CatchUnknown

    -
    -
    -
    diff --git a/docs/acf-core/co/aikar/commands/annotation/CommandAlias.html b/docs/acf-core/co/aikar/commands/annotation/CommandAlias.html index bc1f7ac4..451738b9 100644 --- a/docs/acf-core/co/aikar/commands/annotation/CommandAlias.html +++ b/docs/acf-core/co/aikar/commands/annotation/CommandAlias.html @@ -1,247 +1,126 @@ - - -CommandAlias (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandAlias (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CommandAlias

    + +

    Annotation Type CommandAlias

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/CommandCompletion.html b/docs/acf-core/co/aikar/commands/annotation/CommandCompletion.html index cf25e202..8741b4bb 100644 --- a/docs/acf-core/co/aikar/commands/annotation/CommandCompletion.html +++ b/docs/acf-core/co/aikar/commands/annotation/CommandCompletion.html @@ -1,247 +1,126 @@ - - -CommandCompletion (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandCompletion (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CommandCompletion

    + +

    Annotation Type CommandCompletion

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/CommandPermission.html b/docs/acf-core/co/aikar/commands/annotation/CommandPermission.html index 1837190b..9d62be31 100644 --- a/docs/acf-core/co/aikar/commands/annotation/CommandPermission.html +++ b/docs/acf-core/co/aikar/commands/annotation/CommandPermission.html @@ -1,244 +1,123 @@ - - -CommandPermission (ACF (Core) 0.5.0-SNAPSHOT API) + +CommandPermission (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CommandPermission

    + +

    Annotation Type CommandPermission

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Conditions.html b/docs/acf-core/co/aikar/commands/annotation/Conditions.html index a4fb7314..6314592e 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Conditions.html +++ b/docs/acf-core/co/aikar/commands/annotation/Conditions.html @@ -1,245 +1,124 @@ - - -Conditions (ACF (Core) 0.5.0-SNAPSHOT API) + +Conditions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Conditions

    + +

    Annotation Type Conditions

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Default.html b/docs/acf-core/co/aikar/commands/annotation/Default.html index 89f2eaa4..8f3f5a13 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Default.html +++ b/docs/acf-core/co/aikar/commands/annotation/Default.html @@ -1,247 +1,126 @@ - - -Default (ACF (Core) 0.5.0-SNAPSHOT API) + +Default (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Default

    + +

    Annotation Type Default

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Optional Element Summary

          - - - - - - - - - - - - -
          Optional Elements 
          Modifier and TypeOptional ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Optional Element Summary

        +
        Optional Elements
        +
        +
        Modifier and Type
        +
        Optional Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Dependency.html b/docs/acf-core/co/aikar/commands/annotation/Dependency.html index b9236de0..3a0f9441 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Dependency.html +++ b/docs/acf-core/co/aikar/commands/annotation/Dependency.html @@ -1,254 +1,133 @@ - - -Dependency (ACF (Core) 0.5.0-SNAPSHOT API) + +Dependency (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Dependency

    + +

    Annotation Type Dependency

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Optional Element Summary

          - - - - - - - - - - - - -
          Optional Elements 
          Modifier and TypeOptional ElementDescription
          Stringvalue +
        • +
          +

          Optional Element Summary

          +
          Optional Elements
          +
          +
          Modifier and Type
          +
          Optional Element
          +
          Description
          + + +
          The key that should be used to lookup the instances, defaults to \"\"
          -
        • -
        • -
        +
    +
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Element Detail

          - - - -
            -
          • -

            value

            -
            String value
            +
          • +
            +

            Element Details

            +
              +
            • +
              +

              value

              +
              The key that should be used to lookup the instances, defaults to \"\"
              -
              -
              Returns:
              +
              +
              Returns:
              the key
              -
              +
              Default:
              ""
              -
            • -
            +
      -
    -
    - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/annotation/Description.html b/docs/acf-core/co/aikar/commands/annotation/Description.html index 62e13e63..298124f4 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Description.html +++ b/docs/acf-core/co/aikar/commands/annotation/Description.html @@ -1,243 +1,122 @@ - - -Description (ACF (Core) 0.5.0-SNAPSHOT API) + +Description (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Description

    + +

    Annotation Type Description

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Flags.html b/docs/acf-core/co/aikar/commands/annotation/Flags.html index 29814e29..61cfe82d 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Flags.html +++ b/docs/acf-core/co/aikar/commands/annotation/Flags.html @@ -1,246 +1,125 @@ - - -Flags (ACF (Core) 0.5.0-SNAPSHOT API) + +Flags (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Flags

    + +

    Annotation Type Flags

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/HelpCommand.html b/docs/acf-core/co/aikar/commands/annotation/HelpCommand.html index 71f2f937..1161cf2a 100644 --- a/docs/acf-core/co/aikar/commands/annotation/HelpCommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/HelpCommand.html @@ -1,255 +1,134 @@ - - -HelpCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +HelpCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type HelpCommand

    + +

    Annotation Type HelpCommand

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Optional Element Summary

          - - - - - - - - - - - - -
          Optional Elements 
          Modifier and TypeOptional ElementDescription
          Stringvalue +
        • +
          +

          Optional Element Summary

          +
          Optional Elements
          +
          +
          Modifier and Type
          +
          Optional Element
          +
          Description
          + + +
          The value to forward to the @Subcommand annotation.
          -
        • -
        • -
        +
    +
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Element Detail

          - - - -
            -
          • -

            value

            -
            String value
            +
          • +
            +

            Element Details

            +
              +
            • +
              +

              value

              +
              The value to forward to the @Subcommand annotation. Lists which subcommands to register to trigger help
              -
              -
              Returns:
              +
              +
              Returns:
              -
              +
              Default:
              "help|?|-help|-h|-?"
              -
            • -
            +
      -
    -
    - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/annotation/HelpSearchTags.html b/docs/acf-core/co/aikar/commands/annotation/HelpSearchTags.html index bc3a05e8..c1e4c2f0 100644 --- a/docs/acf-core/co/aikar/commands/annotation/HelpSearchTags.html +++ b/docs/acf-core/co/aikar/commands/annotation/HelpSearchTags.html @@ -1,245 +1,124 @@ - - -HelpSearchTags (ACF (Core) 0.5.0-SNAPSHOT API) + +HelpSearchTags (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type HelpSearchTags

    + +

    Annotation Type HelpSearchTags

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Name.html b/docs/acf-core/co/aikar/commands/annotation/Name.html index 4db69055..80843303 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Name.html +++ b/docs/acf-core/co/aikar/commands/annotation/Name.html @@ -1,241 +1,120 @@ - - -Name (ACF (Core) 0.5.0-SNAPSHOT API) + +Name (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Name

    + +

    Annotation Type Name

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Optional.html b/docs/acf-core/co/aikar/commands/annotation/Optional.html index 8cb62f57..7b9968a6 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Optional.html +++ b/docs/acf-core/co/aikar/commands/annotation/Optional.html @@ -1,192 +1,88 @@ - - -Optional (ACF (Core) 0.5.0-SNAPSHOT API) + +Optional (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Optional

    + +

    Annotation Type Optional

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/PreCommand.html b/docs/acf-core/co/aikar/commands/annotation/PreCommand.html index 7272c331..b0ffebba 100644 --- a/docs/acf-core/co/aikar/commands/annotation/PreCommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/PreCommand.html @@ -1,188 +1,84 @@ - - -PreCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +PreCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type PreCommand

    + +

    Annotation Type PreCommand

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Private.html b/docs/acf-core/co/aikar/commands/annotation/Private.html index cb352d5d..615a9923 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Private.html +++ b/docs/acf-core/co/aikar/commands/annotation/Private.html @@ -1,188 +1,84 @@ - - -Private (ACF (Core) 0.5.0-SNAPSHOT API) + +Private (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Private

    + +

    Annotation Type Private

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Single.html b/docs/acf-core/co/aikar/commands/annotation/Single.html index b81d0bd0..f8b54824 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Single.html +++ b/docs/acf-core/co/aikar/commands/annotation/Single.html @@ -1,188 +1,84 @@ - - -Single (ACF (Core) 0.5.0-SNAPSHOT API) + +Single (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Single

    + +

    Annotation Type Single

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Split.html b/docs/acf-core/co/aikar/commands/annotation/Split.html index b0acedc3..c376ff5d 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Split.html +++ b/docs/acf-core/co/aikar/commands/annotation/Split.html @@ -1,247 +1,126 @@ - - -Split (ACF (Core) 0.5.0-SNAPSHOT API) + +Split (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Split

    + +

    Annotation Type Split

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Optional Element Summary

          - - - - - - - - - - - - -
          Optional Elements 
          Modifier and TypeOptional ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Optional Element Summary

        +
        Optional Elements
        +
        +
        Modifier and Type
        +
        Optional Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Subcommand.html b/docs/acf-core/co/aikar/commands/annotation/Subcommand.html index b7908c8e..0219d07b 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Subcommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/Subcommand.html @@ -1,246 +1,125 @@ - - -Subcommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Subcommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Subcommand

    + +

    Annotation Type Subcommand

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Syntax.html b/docs/acf-core/co/aikar/commands/annotation/Syntax.html index bb514f27..a7d71e4c 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Syntax.html +++ b/docs/acf-core/co/aikar/commands/annotation/Syntax.html @@ -1,123 +1,75 @@ - - -Syntax (ACF (Core) 0.5.0-SNAPSHOT API) + +Syntax (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Syntax

    + +

    Annotation Type Syntax

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/UnknownHandler.html b/docs/acf-core/co/aikar/commands/annotation/UnknownHandler.html index 5f739ed7..af9150c2 100644 --- a/docs/acf-core/co/aikar/commands/annotation/UnknownHandler.html +++ b/docs/acf-core/co/aikar/commands/annotation/UnknownHandler.html @@ -1,191 +1,87 @@ - - -UnknownHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +UnknownHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type UnknownHandler

    + +

    Annotation Type UnknownHandler

    - -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/Values.html b/docs/acf-core/co/aikar/commands/annotation/Values.html index ac9de50b..ca314794 100644 --- a/docs/acf-core/co/aikar/commands/annotation/Values.html +++ b/docs/acf-core/co/aikar/commands/annotation/Values.html @@ -1,244 +1,123 @@ - - -Values (ACF (Core) 0.5.0-SNAPSHOT API) + +Values (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Values

    + +

    Annotation Type Values

    -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Required Element Summary

          - - - - - - - - - - - - -
          Required Elements 
          Modifier and TypeRequired ElementDescription
          Stringvalue 
          -
        • -
        +
      • +
        +

        Required Element Summary

        +
        Required Elements
        +
        +
        Modifier and Type
        +
        Required Element
        +
        Description
        + + +
         
        +
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/CatchAll.html b/docs/acf-core/co/aikar/commands/annotation/class-use/CatchAll.html index 4db8ed71..1a21f7ec 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/CatchAll.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/CatchAll.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.CatchAll (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CatchAll (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CatchAll

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CatchAll

    -
    No usage of co.aikar.commands.annotation.CatchAll
    -
    +No usage of co.aikar.commands.annotation.CatchAll
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/CatchUnknown.html b/docs/acf-core/co/aikar/commands/annotation/class-use/CatchUnknown.html index f9e078f9..dcce54b9 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/CatchUnknown.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/CatchUnknown.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.CatchUnknown (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CatchUnknown (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CatchUnknown

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CatchUnknown

    -
    No usage of co.aikar.commands.annotation.CatchUnknown
    -
    +No usage of co.aikar.commands.annotation.CatchUnknown
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandAlias.html b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandAlias.html index 75b43d98..5f4ef6d5 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandAlias.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandAlias.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.CommandAlias (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CommandAlias (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CommandAlias

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CommandAlias

    -
    No usage of co.aikar.commands.annotation.CommandAlias
    -
    +No usage of co.aikar.commands.annotation.CommandAlias
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandCompletion.html b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandCompletion.html index ea30780f..6779f73d 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandCompletion.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandCompletion.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.CommandCompletion (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CommandCompletion (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CommandCompletion

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CommandCompletion

    -
    No usage of co.aikar.commands.annotation.CommandCompletion
    -
    +No usage of co.aikar.commands.annotation.CommandCompletion
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandPermission.html b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandPermission.html index e0cdcc30..eb83824e 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/CommandPermission.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/CommandPermission.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.CommandPermission (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CommandPermission (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CommandPermission

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CommandPermission

    -
    No usage of co.aikar.commands.annotation.CommandPermission
    -
    +No usage of co.aikar.commands.annotation.CommandPermission
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Conditions.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Conditions.html index d85be8de..69846435 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Conditions.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Conditions.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Conditions (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Conditions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Conditions

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Conditions

    -
    No usage of co.aikar.commands.annotation.Conditions
    -
    +No usage of co.aikar.commands.annotation.Conditions
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Default.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Default.html index c0691cf2..5761c48d 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Default.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Default.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Default (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Default (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Default

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Default

    -
    No usage of co.aikar.commands.annotation.Default
    -
    +No usage of co.aikar.commands.annotation.Default
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Dependency.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Dependency.html index 427757a1..fe6c0da8 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Dependency.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Dependency.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Dependency (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Dependency (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Dependency

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Dependency

    -
    No usage of co.aikar.commands.annotation.Dependency
    -
    +No usage of co.aikar.commands.annotation.Dependency
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Description.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Description.html index b547242e..00bb18a7 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Description.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Description.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Description (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Description (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Description

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Description

    -
    No usage of co.aikar.commands.annotation.Description
    -
    +No usage of co.aikar.commands.annotation.Description
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Flags.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Flags.html index a8ea3198..bd5b7f2c 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Flags.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Flags.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Flags (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Flags (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Flags

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Flags

    -
    No usage of co.aikar.commands.annotation.Flags
    -
    +No usage of co.aikar.commands.annotation.Flags
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/HelpCommand.html b/docs/acf-core/co/aikar/commands/annotation/class-use/HelpCommand.html index d6e5c0fe..409e74d4 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/HelpCommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/HelpCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.HelpCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.HelpCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.HelpCommand

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.HelpCommand

    -
    No usage of co.aikar.commands.annotation.HelpCommand
    -
    +No usage of co.aikar.commands.annotation.HelpCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/HelpSearchTags.html b/docs/acf-core/co/aikar/commands/annotation/class-use/HelpSearchTags.html index b861f4f0..d6d602e6 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/HelpSearchTags.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/HelpSearchTags.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.HelpSearchTags (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.HelpSearchTags (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.HelpSearchTags

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.HelpSearchTags

    -
    No usage of co.aikar.commands.annotation.HelpSearchTags
    -
    +No usage of co.aikar.commands.annotation.HelpSearchTags
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Name.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Name.html index 05526520..a3ee5e98 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Name.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Name.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Name (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Name (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Name

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Name

    -
    No usage of co.aikar.commands.annotation.Name
    -
    +No usage of co.aikar.commands.annotation.Name
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Optional.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Optional.html index 9d767f55..fd4c1659 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Optional.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Optional.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Optional (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Optional (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Optional

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Optional

    -
    No usage of co.aikar.commands.annotation.Optional
    -
    +No usage of co.aikar.commands.annotation.Optional
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/PreCommand.html b/docs/acf-core/co/aikar/commands/annotation/class-use/PreCommand.html index 03548ba8..4282acfc 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/PreCommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/PreCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.PreCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.PreCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.PreCommand

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.PreCommand

    -
    No usage of co.aikar.commands.annotation.PreCommand
    -
    +No usage of co.aikar.commands.annotation.PreCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Private.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Private.html index affda0bc..1dd01326 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Private.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Private.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Private (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Private (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Private

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Private

    -
    No usage of co.aikar.commands.annotation.Private
    -
    +No usage of co.aikar.commands.annotation.Private
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Single.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Single.html index 2381426f..506796c1 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Single.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Single.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Single (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Single (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Single

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Single

    -
    No usage of co.aikar.commands.annotation.Single
    -
    +No usage of co.aikar.commands.annotation.Single
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Split.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Split.html index 42530f6d..693aa05b 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Split.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Split.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Split (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Split (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Split

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Split

    -
    No usage of co.aikar.commands.annotation.Split
    -
    +No usage of co.aikar.commands.annotation.Split
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Subcommand.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Subcommand.html index 11cafdda..44daed6e 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Subcommand.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Subcommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Subcommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Subcommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Subcommand

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Subcommand

    -
    No usage of co.aikar.commands.annotation.Subcommand
    -
    +No usage of co.aikar.commands.annotation.Subcommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Syntax.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Syntax.html index c92cae83..3b213d57 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Syntax.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Syntax.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Syntax (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Syntax (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Syntax

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Syntax

    -
    No usage of co.aikar.commands.annotation.Syntax
    -
    +No usage of co.aikar.commands.annotation.Syntax
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/UnknownHandler.html b/docs/acf-core/co/aikar/commands/annotation/class-use/UnknownHandler.html index de9eb130..9d9858d3 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/UnknownHandler.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/UnknownHandler.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.UnknownHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.UnknownHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.UnknownHandler

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.UnknownHandler

    -
    No usage of co.aikar.commands.annotation.UnknownHandler
    -
    +No usage of co.aikar.commands.annotation.UnknownHandler
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/class-use/Values.html b/docs/acf-core/co/aikar/commands/annotation/class-use/Values.html index 0f53728f..b8208f77 100644 --- a/docs/acf-core/co/aikar/commands/annotation/class-use/Values.html +++ b/docs/acf-core/co/aikar/commands/annotation/class-use/Values.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.annotation.Values (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Values (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Values

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Values

    -
    No usage of co.aikar.commands.annotation.Values
    -
    +No usage of co.aikar.commands.annotation.Values
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/package-summary.html b/docs/acf-core/co/aikar/commands/annotation/package-summary.html index 723d52f3..87adcad7 100644 --- a/docs/acf-core/co/aikar/commands/annotation/package-summary.html +++ b/docs/acf-core/co/aikar/commands/annotation/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.annotation (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.annotation (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.annotation

    +

    Package co.aikar.commands.annotation

    -
    -
    +
    +
    - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/annotation/package-tree.html b/docs/acf-core/co/aikar/commands/annotation/package-tree.html index 4037d39e..d25256e3 100644 --- a/docs/acf-core/co/aikar/commands/annotation/package-tree.html +++ b/docs/acf-core/co/aikar/commands/annotation/package-tree.html @@ -1,179 +1,92 @@ - - -co.aikar.commands.annotation Class Hierarchy (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.annotation Class Hierarchy (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.annotation

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Annotation Type Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/annotation/package-use.html b/docs/acf-core/co/aikar/commands/annotation/package-use.html index 51f70b03..a4f5b006 100644 --- a/docs/acf-core/co/aikar/commands/annotation/package-use.html +++ b/docs/acf-core/co/aikar/commands/annotation/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.annotation (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.annotation (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.annotation

    -
    No usage of co.aikar.commands.annotation
    -
    +No usage of co.aikar.commands.annotation
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html index e3e7d368..5f51d54b 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html @@ -1,412 +1,305 @@ - - -ApacheCommonsExceptionUtil.Nestable (ACF (Core) 0.5.0-SNAPSHOT API) + +ApacheCommonsExceptionUtil.Nestable (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface ApacheCommonsExceptionUtil.Nestable

    + +

    Interface ApacheCommonsExceptionUtil.Nestable

    -
    -
    - -
    -
    -
    +
    +
    +
    - -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getCause

            -
            Throwable getCause()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getCause

              +
              Returns the reference to the exception or error that caused the exception implementing the Nestable to be thrown.
              -
              -
              Returns:
              +
              +
              Returns:
              throwable that caused the original exception
              +
            • -
            - - - -
              -
            • -

              getMessage

              -
              String getMessage()
              +
            • +
              +

              getMessage

              +
              Returns the error message of this and any nested Throwable.
              -
              -
              Returns:
              +
              +
              Returns:
              the error message
              +
            • -
            - - - -
              -
            • -

              getMessage

              -
              String getMessage​(int index)
              +
            • +
              +

              getMessage

              +
              String getMessage(int index)
              Returns the error message of the Throwable in the chain of Throwables at the specified index, numbered from 0.
              -
              -
              Parameters:
              +
              +
              Parameters:
              index - the index of the Throwable in the chain of Throwables
              -
              Returns:
              +
              Returns:
              the error message, or null if the Throwable at the specified index in the chain does not contain a message
              -
              Throws:
              -
              IndexOutOfBoundsException - if the index argument is +
              Throws:
              +
              IndexOutOfBoundsException - if the index argument is negative or not less than the count of Throwables in the chain
              +
            • -
            - - - -
              -
            • -

              getMessages

              -
              String[] getMessages()
              +
            • +
              +

              getMessages

              +
              Returns the error message of this and any nested Throwables in an array of Strings, one element for each message. Any Throwable not containing a message is represented in the array by a null. This has the effect of cause the length of the returned array to be equal to the result of the getThrowableCount() operation.
              -
              -
              Returns:
              +
              +
              Returns:
              the error messages
              +
            • -
            - - - -
              -
            • -

              getThrowable

              -
              Throwable getThrowable​(int index)
              +
            • +
              +

              getThrowable

              +
              Throwable getThrowable(int index)
              Returns the Throwable in the chain of Throwables at the specified index, numbered from 0.
              -
              -
              Parameters:
              +
              +
              Parameters:
              index - the index, numbered from 0, of the Throwable in the chain of Throwables
              -
              Returns:
              +
              Returns:
              the Throwable
              -
              Throws:
              -
              IndexOutOfBoundsException - if the index argument is +
              Throws:
              +
              IndexOutOfBoundsException - if the index argument is negative or not less than the count of Throwables in the chain
              +
            • -
            - - - -
              -
            • -

              getThrowableCount

              -
              int getThrowableCount()
              +
            • +
              +

              getThrowableCount

              +
              Returns the number of nested Throwables represented by this Nestable, including this Nestable.
              -
              -
              Returns:
              +
              +
              Returns:
              the throwable count
              +
            • -
            - - - -
              -
            • -

              getThrowables

              -
              Throwable[] getThrowables()
              +
            • +
              +

              getThrowables

              +
              Returns this Nestable and any nested Throwables in an array of Throwables, one element for each Throwable.
              -
              -
              Returns:
              +
              +
              Returns:
              the Throwables
              +
            • -
            - - - -
              -
            • -

              indexOfThrowable

              -
              int indexOfThrowable​(Class type)
              +
            • +
              +

              indexOfThrowable

              +
              Returns the index, numbered from 0, of the first occurrence of the specified type, or a subclass, in the chain of Throwables. The method returns -1 if the specified type is not found in the chain. @@ -415,23 +308,20 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height")); such that this method matches subclasses. If you want to NOT match subclasses, please use (which is avaiable in all versions of lang).
              -
              -
              Parameters:
              +
              +
              Parameters:
              type - the type to find, subclasses match, null returns -1
              -
              Returns:
              +
              Returns:
              index of the first occurrence of the type in the chain, or -1 if the type is not found
              +
            • -
            - - - -
              -
            • -

              indexOfThrowable

              -
              int indexOfThrowable​(Class type,
              -                     int fromIndex)
              +
            • +
              +

              indexOfThrowable

              +
              int indexOfThrowable(Class type, + int fromIndex)
              Returns the index, numbered from 0, of the first Throwable that matches the specified type, or a subclass, in the chain of Throwables with an index greater than or equal to the specified index. @@ -441,140 +331,74 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height")); such that this method matches subclasses. If you want to NOT match subclasses, please use (which is avaiable in all versions of lang).
              -
              -
              Parameters:
              +
              +
              Parameters:
              type - the type to find, subclasses match, null returns -1
              fromIndex - the index, numbered from 0, of the starting position in the chain to be searched
              -
              Returns:
              +
              Returns:
              index of the first occurrence of the type in the chain, or -1 if the type is not found
              -
              Throws:
              -
              IndexOutOfBoundsException - if the fromIndex argument +
              Throws:
              +
              IndexOutOfBoundsException - if the fromIndex argument is negative or not less than the count of Throwables in the chain
              +
            • -
            - - - -
              -
            • -

              printStackTrace

              -
              void printStackTrace​(PrintWriter out)
              +
            • +
              +

              printStackTrace

              +
              Prints the stack trace of this exception to the specified print writer. Includes information from the exception, if any, which caused this exception.
              -
              -
              Parameters:
              +
              +
              Parameters:
              out - PrintWriter to use for output.
              +
            • -
            - - - -
              -
            • -

              printStackTrace

              -
              void printStackTrace​(PrintStream out)
              +
            • +
              +

              printStackTrace

              +
              Prints the stack trace of this exception to the specified print stream. Includes information from the exception, if any, which caused this exception.
              -
              -
              Parameters:
              +
              +
              Parameters:
              out - PrintStream to use for output.
              +
            • -
            - - - -
              -
            • -

              printPartialStackTrace

              -
              void printPartialStackTrace​(PrintWriter out)
              +
            • +
              +

              printPartialStackTrace

              +
              Prints the stack trace for this exception only--root cause not included--using the provided writer. Used by individual stack traces to a buffer. The implementation of this method should call super.printStackTrace(out); in most cases.
              -
              -
              Parameters:
              +
              +
              Parameters:
              out - The writer to use.
              -
            • -
            +
      -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html index 6274eb21..bc50f234 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html @@ -1,466 +1,330 @@ - - -ApacheCommonsExceptionUtil (ACF (Core) 0.5.0-SNAPSHOT API) + +ApacheCommonsExceptionUtil (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ApacheCommonsExceptionUtil

    + +

    Class ApacheCommonsExceptionUtil

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Nested Class Summary

          - - - - - - - - - - - - -
          Nested Classes 
          Modifier and TypeClassDescription
          static interface ApacheCommonsExceptionUtil.Nestable -
          An interface to be implemented by Throwable +
        • +
          +

          Nested Class Summary

          +
          Nested Classes
          +
          +
          Modifier and Type
          +
          Class
          +
          Description
          +
          static interface 
          + +
          +
          An interface to be implemented by Throwable extensions which would like to be able to nest root exceptions inside themselves.
          -
        • -
        • -
        +
    +
    + -
    -
      -
    • - - -

      Constructor Summary

      - - - - - - - - - - -
      Constructors 
      ConstructorDescription
      ApacheCommonsExceptionUtil() +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      + +
      Public constructor allows an instance of ExceptionUtils to be created, although that is not normally necessary.
      -
    • -
    • -
    +
    +
    + -
    - + + + + +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    - -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html index a7c910af..4d6dfaf1 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html @@ -1,629 +1,463 @@ - - -ApacheCommonsLangUtil (ACF (Core) 0.5.0-SNAPSHOT API) + +ApacheCommonsLangUtil (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ApacheCommonsLangUtil

    + +

    Class ApacheCommonsLangUtil

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Field Summary

          - - - - - - - - - - - - - - - - - -
          Fields 
          Modifier and TypeFieldDescription
          static StringEMPTY +
        • +
          +

          Field Summary

          +
          Fields
          +
          +
          Modifier and Type
          +
          Field
          +
          Description
          +
          static final String
          + +
          The empty String "".
          -
        • static intINDEX_NOT_FOUND + +
          static final int
          + +
          The index value when an element is not found in a list or array: -1.
          -
          -
        • -
        +
    +
    + -
    - +
  • +
    +

    Constructor Summary

    +
    Constructors
    +
    +
    Constructor
    +
    Description
    + +
     
    +
    +
  • -
    -
      -
    • - - -

      Method Summary

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      All Methods Static Methods Concrete Methods 
      Modifier and TypeMethodDescription
      static <T> T[]addAll​(T[] array1, - T... array2) +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      static <T> T[]
      +
      addAll(T[] array1, + T... array2)
      +
      Adds all the elements of the given arrays into a new array.
      -
    • static Stringcapitalize​(String str) + +
      static String
      + +
      Capitalizes all the whitespace separated words in a String.
      -
      static Stringcapitalize​(String str, - char... delimiters) + +
      static String
      +
      capitalize(String str, + char... delimiters)
      +
      Capitalizes all the delimiter separated words in a String.
      -
      static StringcapitalizeFully​(String str) + +
      static String
      + +
      Converts all the whitespace separated words in a String into capitalized words, that is each word is made up of a titlecase character and then a series of lowercase characters.
      -
      static StringcapitalizeFully​(String str, - char... delimiters) + +
      static String
      +
      capitalizeFully(String str, + char... delimiters)
      +
      Converts all the delimiter separated words in a String into capitalized words, that is each word is made up of a titlecase character and then a series of lowercase characters.
      -
      static <T> T[]clone​(T[] array) + +
      static <T> T[]
      +
      clone(T[] array)
      +
      Shallow clones an array returning a typecast result and handling null.
      -
      static intindexOf​(Object[] array, - Object objectToFind) + +
      static int
      +
      indexOf(Object[] array, + Object objectToFind)
      +
      Finds the index of the given object in the array.
      -
      static intindexOf​(Object[] array, - Object objectToFind, - int startIndex) + +
      static int
      +
      indexOf(Object[] array, + Object objectToFind, + int startIndex)
      +
      Finds the index of the given object in the array starting at the given index.
      -
      static booleanisDelimiter​(char ch, - char[] delimiters) + +
      static boolean
      +
      isDelimiter(char ch, + char[] delimiters)
      +
      Is the character a delimiter.
      -
      static booleanisNumeric​(CharSequence cs) + +
      static boolean
      + +
      Checks if the CharSequence contains only Unicode digits.
      -
      static Stringjoin​(byte[] array, - char separator) + +
      static String
      +
      join(byte[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(byte[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(byte[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(char[] array, - char separator) + +
      static String
      +
      join(char[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(char[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(char[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(double[] array, - char separator) + +
      static String
      +
      join(double[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(double[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(double[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(float[] array, - char separator) + +
      static String
      +
      join(float[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(float[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(float[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(int[] array, - char separator) + +
      static String
      +
      join(int[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(int[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(int[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(long[] array, - char separator) + +
      static String
      +
      join(long[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(long[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(long[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(short[] array, - char separator) + +
      static String
      +
      join(short[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(short[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(short[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(Iterable<?> iterable, - char separator) + +
      static String
      +
      join(Iterable<?> iterable, + char separator)
      +
      Joins the elements of the provided Iterable into a single String containing the provided elements.
      -
      static Stringjoin​(Iterable<?> iterable, - String separator) + +
      static String
      +
      join(Iterable<?> iterable, + String separator)
      +
      Joins the elements of the provided Iterable into a single String containing the provided elements.
      -
      static Stringjoin​(Object[] array, - char separator) + +
      static String
      +
      join(Object[] array, + char separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(Object[] array, - char separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(Object[] array, + char separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(Object[] array, - String separator) + +
      static String
      +
      join(Object[] array, + String separator)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(Object[] array, - String separator, - int startIndex, - int endIndex) + +
      static String
      +
      join(Object[] array, + String separator, + int startIndex, + int endIndex)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static Stringjoin​(Iterator<?> iterator, - char separator) + +
      static String
      +
      join(Iterator<?> iterator, + char separator)
      +
      Joins the elements of the provided Iterator into a single String containing the provided elements.
      -
      static Stringjoin​(Iterator<?> iterator, - String separator) + +
      static String
      +
      join(Iterator<?> iterator, + String separator)
      +
      Joins the elements of the provided Iterator into a single String containing the provided elements.
      -
      static <T> Stringjoin​(T... elements) + +
      static <T> String
      +
      join(T... elements)
      +
      Joins the elements of the provided array into a single String containing the provided list of elements.
      -
      static booleanstartsWith​(CharSequence str, - CharSequence prefix) + +
      static boolean
      + +
      Check if a CharSequence starts with a specified prefix.
      -
      static booleanstartsWithIgnoreCase​(CharSequence str, - CharSequence prefix) + +
      static boolean
      + +
      Case insensitive check if a CharSequence starts with a specified prefix.
      -
      - -
    • -
    +
    +
    + + +
    +

    Methods inherited from class java.lang.Object

    +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    - -
    -
      -
    • + +
      +
        -
        -
    +
    +
    See Also:
    +
    + +
    - - + + -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      -
    • -

      join

      -
      public static String join​(Iterator<?> iterator,
      -                          char separator)
      +
    • +
      +

      join

      +
      public static String join(Iterator<?> iterator, + char separator)

      Joins the elements of the provided Iterator into a single String containing the provided elements.

      @@ -1579,25 +1339,22 @@ public static <T> join(Object[],char).

      -
      -
      Parameters:
      +
      +
      Parameters:
      iterator - the Iterator of values to join together, may be null
      separator - the separator character to use
      -
      Returns:
      +
      Returns:
      the joined String, null if null iterator input
      -
      Since:
      +
      Since:
      2.0
      +
    • -
    - - - -
      -
    • -

      join

      -
      public static String join​(Iterator<?> iterator,
      -                          String separator)
      +
    • +
      +

      join

      +
      public static String join(Iterator<?> iterator, + String separator)

      Joins the elements of the provided Iterator into a single String containing the provided elements.

      @@ -1605,23 +1362,20 @@ public static <T> 

      See the examples here: join(Object[],String).

      -
      -
      Parameters:
      +
      +
      Parameters:
      iterator - the Iterator of values to join together, may be null
      separator - the separator character to use, null treated as ""
      -
      Returns:
      +
      Returns:
      the joined String, null if null iterator input
      +
    • -
    - - - -
      -
    • -

      join

      -
      public static String join​(Iterable<?> iterable,
      -                          char separator)
      +
    • +
      +

      join

      +
      public static String join(Iterable<?> iterable, + char separator)

      Joins the elements of the provided Iterable into a single String containing the provided elements.

      @@ -1629,25 +1383,22 @@ public static <T> join(Object[],char).

      -
      -
      Parameters:
      +
      +
      Parameters:
      iterable - the Iterable providing the values to join together, may be null
      separator - the separator character to use
      -
      Returns:
      +
      Returns:
      the joined String, null if null iterator input
      -
      Since:
      +
      Since:
      2.3
      +
    • -
    - - - -
      -
    • -

      join

      -
      public static String join​(Iterable<?> iterable,
      -                          String separator)
      +
    • +
      +

      join

      +
      public static String join(Iterable<?> iterable, + String separator)

      Joins the elements of the provided Iterable into a single String containing the provided elements.

      @@ -1655,24 +1406,21 @@ public static <T> 

      See the examples here: join(Object[],String).

      -
      -
      Parameters:
      +
      +
      Parameters:
      iterable - the Iterable providing the values to join together, may be null
      separator - the separator character to use, null treated as ""
      -
      Returns:
      +
      Returns:
      the joined String, null if null iterator input
      -
      Since:
      +
      Since:
      2.3
      +
    • -
    - - - - - - - -
    + +
  • +
    +

    startsWithIgnoreCase

    +
    public static boolean startsWithIgnoreCase(CharSequence str, + CharSequence prefix)

    Case insensitive check if a CharSequence starts with a specified prefix.

    nulls are handled without exceptions. Two null @@ -1761,136 +1507,77 @@ public static <T> 

    -
    -
    Parameters:
    +
    +
    Parameters:
    str - the CharSequence to check, may be null
    prefix - the prefix to find, may be null
    -
    Returns:
    +
    Returns:
    true if the CharSequence starts with the prefix, case insensitive, or both null
    -
    Since:
    +
    Since:
    2.4, 3.0 Changed signature from startsWithIgnoreCase(String, String) to startsWithIgnoreCase(CharSequence, CharSequence)
    -
    See Also:
    -
    String.startsWith(String)
    -
    -
  • +
    See Also:
    +
    + - - - -
    + + + +
  • +
    +

    indexOf

    +
    public static int indexOf(Object[] array, + Object objectToFind)

    Finds the index of the given object in the array.

    This method returns INDEX_NOT_FOUND (-1) for a null input array.

    -
    -
    Parameters:
    +
    +
    Parameters:
    array - the array to search through for the object, may be null
    objectToFind - the object to find, may be null
    -
    Returns:
    +
    Returns:
    the index of the object within the array, INDEX_NOT_FOUND (-1) if not found or null array input
    +
  • - - - - -
      -
    • -

      indexOf

      -
      public static int indexOf​(Object[] array,
      -                          Object objectToFind,
      -                          int startIndex)
      +
    • +
      +

      indexOf

      +
      public static int indexOf(Object[] array, + Object objectToFind, + int startIndex)

      Finds the index of the given object in the array starting at the given index.

      This method returns INDEX_NOT_FOUND (-1) for a null input array.

      A negative startIndex is treated as zero. A startIndex larger than the array length will return INDEX_NOT_FOUND (-1).

      -
      -
      Parameters:
      +
      +
      Parameters:
      array - the array to search through for the object, may be null
      objectToFind - the object to find, may be null
      startIndex - the index to start searching at
      -
      Returns:
      +
      Returns:
      the index of the object within the array starting at the index, INDEX_NOT_FOUND (-1) if not found or null array input
      -
    • -
    + - - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.Nestable.html b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.Nestable.html index 1862608d..3a80fa21 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.Nestable.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.Nestable.html @@ -1,147 +1,61 @@ - - -Uses of Interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable

    +

    Uses of Interface
    co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable

    -
    No usage of co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    -
    +No usage of co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.html b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.html index 0a036054..8e0761b8 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsExceptionUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil

    +

    Uses of Class
    co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil

    -
    No usage of co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    -
    +No usage of co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsLangUtil.html b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsLangUtil.html index 0cd2ccdd..fe053eab 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsLangUtil.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/class-use/ApacheCommonsLangUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil

    +

    Uses of Class
    co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil

    -
    No usage of co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    -
    +No usage of co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/package-summary.html b/docs/acf-core/co/aikar/commands/apachecommonslang/package-summary.html index cdd98fcf..0a7f521a 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/package-summary.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands.apachecommonslang (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.apachecommonslang (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.apachecommonslang

    +

    Package co.aikar.commands.apachecommonslang

    +
    +
    +
    package co.aikar.commands.apachecommonslang
    +
    +
    +
    + - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/package-tree.html b/docs/acf-core/co/aikar/commands/apachecommonslang/package-tree.html index bb90b7c9..559d9f64 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/package-tree.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/package-tree.html @@ -1,169 +1,82 @@ - - -co.aikar.commands.apachecommonslang Class Hierarchy (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.apachecommonslang Class Hierarchy (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.apachecommonslang

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Interface Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/apachecommonslang/package-use.html b/docs/acf-core/co/aikar/commands/apachecommonslang/package-use.html index 582198f9..3b6cba8b 100644 --- a/docs/acf-core/co/aikar/commands/apachecommonslang/package-use.html +++ b/docs/acf-core/co/aikar/commands/apachecommonslang/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.apachecommonslang (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.apachecommonslang (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.apachecommonslang

    -
    No usage of co.aikar.commands.apachecommonslang
    -
    +No usage of co.aikar.commands.apachecommonslang
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/ACFUtil.html b/docs/acf-core/co/aikar/commands/class-use/ACFUtil.html index 3438282c..fa10db64 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ACFUtil.html +++ b/docs/acf-core/co/aikar/commands/class-use/ACFUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFUtil (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFUtil (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFUtil

    +

    Uses of Class
    co.aikar.commands.ACFUtil

    -
    No usage of co.aikar.commands.ACFUtil
    -
    +No usage of co.aikar.commands.ACFUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/AnnotationProcessor.html b/docs/acf-core/co/aikar/commands/class-use/AnnotationProcessor.html index a1a08796..eacf5399 100644 --- a/docs/acf-core/co/aikar/commands/class-use/AnnotationProcessor.html +++ b/docs/acf-core/co/aikar/commands/class-use/AnnotationProcessor.html @@ -1,193 +1,88 @@ - - -Uses of Interface co.aikar.commands.AnnotationProcessor (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.AnnotationProcessor (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.AnnotationProcessor

    +

    Uses of Interface
    co.aikar.commands.AnnotationProcessor

    +
    +
    Packages that use AnnotationProcessor
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/BaseCommand.html b/docs/acf-core/co/aikar/commands/class-use/BaseCommand.html index bb220ddb..7477e390 100644 --- a/docs/acf-core/co/aikar/commands/class-use/BaseCommand.html +++ b/docs/acf-core/co/aikar/commands/class-use/BaseCommand.html @@ -1,322 +1,175 @@ - - -Uses of Class co.aikar.commands.BaseCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.BaseCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.BaseCommand

    +

    Uses of Class
    co.aikar.commands.BaseCommand

    -
    -
    +
    +
    Method parameters in co.aikar.commands with type arguments of type BaseCommand
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    default void
    +
    RootCommand.addChildShared(List<BaseCommand> children, + com.google.common.collect.SetMultimap<String,RegisteredCommand> subCommands, + BaseCommand command)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandCompletionContext.html b/docs/acf-core/co/aikar/commands/class-use/CommandCompletionContext.html index 9fedfcbb..21914041 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandCompletionContext.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandCompletionContext.html @@ -1,220 +1,105 @@ - - -Uses of Class co.aikar.commands.CommandCompletionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandCompletionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandCompletionContext

    +

    Uses of Class
    co.aikar.commands.CommandCompletionContext

    +
    +
    Packages that use CommandCompletionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.AsyncCommandCompletionHandler.html b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.AsyncCommandCompletionHandler.html index 2565002f..f0901730 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.AsyncCommandCompletionHandler.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.AsyncCommandCompletionHandler.html @@ -1,194 +1,89 @@ - - -Uses of Interface co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler

    +

    Uses of Interface
    co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.CommandCompletionHandler.html b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.CommandCompletionHandler.html index f78e2d7a..c2c56403 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.CommandCompletionHandler.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.CommandCompletionHandler.html @@ -1,267 +1,140 @@ - - -Uses of Interface co.aikar.commands.CommandCompletions.CommandCompletionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandCompletions.CommandCompletionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandCompletions.CommandCompletionHandler

    +

    Uses of Interface
    co.aikar.commands.CommandCompletions.CommandCompletionHandler

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.SyncCompletionRequired.html b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.SyncCompletionRequired.html index ebeda1ed..9ee62fdf 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.SyncCompletionRequired.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.SyncCompletionRequired.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.CommandCompletions.SyncCompletionRequired (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandCompletions.SyncCompletionRequired (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandCompletions.SyncCompletionRequired

    +

    Uses of Class
    co.aikar.commands.CommandCompletions.SyncCompletionRequired

    -
    No usage of co.aikar.commands.CommandCompletions.SyncCompletionRequired
    -
    +No usage of co.aikar.commands.CommandCompletions.SyncCompletionRequired
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.html b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.html index 34479525..99ce221f 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandCompletions.html @@ -1,193 +1,88 @@ - - -Uses of Class co.aikar.commands.CommandCompletions (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandCompletions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandCompletions

    +

    Uses of Class
    co.aikar.commands.CommandCompletions

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.Condition.html b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.Condition.html index 4a51dd45..3b12296c 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.Condition.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.Condition.html @@ -1,208 +1,97 @@ - - -Uses of Interface co.aikar.commands.CommandConditions.Condition (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandConditions.Condition (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandConditions.Condition

    +

    Uses of Interface
    co.aikar.commands.CommandConditions.Condition

    +
    +
    Packages that use CommandConditions.Condition
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.ParameterCondition.html b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.ParameterCondition.html index 78684199..3badd5ea 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.ParameterCondition.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.ParameterCondition.html @@ -1,210 +1,99 @@ - - -Uses of Interface co.aikar.commands.CommandConditions.ParameterCondition (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandConditions.ParameterCondition (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandConditions.ParameterCondition

    +

    Uses of Interface
    co.aikar.commands.CommandConditions.ParameterCondition

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.html b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.html index dd4571bf..5f1adf50 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandConditions.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandConditions.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.CommandConditions (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandConditions (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandConditions

    +

    Uses of Class
    co.aikar.commands.CommandConditions

    +
    +
    Packages that use CommandConditions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandContexts.html b/docs/acf-core/co/aikar/commands/class-use/CommandContexts.html index f3dc405c..65a24872 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandContexts.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandContexts.html @@ -1,193 +1,88 @@ - - -Uses of Class co.aikar.commands.CommandContexts (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandContexts (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandContexts

    +

    Uses of Class
    co.aikar.commands.CommandContexts

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandExecutionContext.html b/docs/acf-core/co/aikar/commands/class-use/CommandExecutionContext.html index 1e2b6080..64d175b0 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandExecutionContext.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandExecutionContext.html @@ -1,351 +1,192 @@ - - -Uses of Class co.aikar.commands.CommandExecutionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandExecutionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.CommandExecutionContext

    +
    +
    Packages that use CommandExecutionContext
    + +
    + - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandHelp.html b/docs/acf-core/co/aikar/commands/class-use/CommandHelp.html index b49eeba5..08d38a3c 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandHelp.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandHelp.html @@ -1,352 +1,203 @@ - - -Uses of Class co.aikar.commands.CommandHelp (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandHelp (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandHelp

    +

    Uses of Class
    co.aikar.commands.CommandHelp

    -
    -
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpCommand(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpFooter(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpHeader(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedParameter(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry, + CommandParameter param)
    +
     
    +
    void
    +
    CommandHelpFormatter.printHelpCommand(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printHelpFooter(CommandHelp help, + CommandIssuer issuer)
    +
     
    +
    void
    +
    CommandHelpFormatter.printHelpHeader(CommandHelp help, + CommandIssuer issuer)
    +
     
    +
    void
    +
    CommandHelpFormatter.printSearchEntry(CommandHelp help, + CommandIssuer issuer, + HelpEntry page)
    +
     
    +
    void
    +
    CommandHelpFormatter.printSearchFooter(CommandHelp help, + CommandIssuer issuer)
    +
     
    +
    void
    +
    CommandHelpFormatter.printSearchHeader(CommandHelp help, + CommandIssuer issuer)
    +
     
    +
    void
    +
    CommandHelpFormatter.showAllResults(CommandHelp commandHelp, + List<HelpEntry> entries)
    +
     
    +
    void
    +
    CommandHelpFormatter.showDetailedHelp(CommandHelp commandHelp, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.showSearchResults(CommandHelp commandHelp, + List<HelpEntry> entries)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandHelpFormatter.html b/docs/acf-core/co/aikar/commands/class-use/CommandHelpFormatter.html index aa702006..a647f270 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandHelpFormatter.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandHelpFormatter.html @@ -1,229 +1,112 @@ - - -Uses of Class co.aikar.commands.CommandHelpFormatter (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandHelpFormatter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandHelpFormatter

    +

    Uses of Class
    co.aikar.commands.CommandHelpFormatter

    +
    +
    Packages that use CommandHelpFormatter
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandIssuer.html b/docs/acf-core/co/aikar/commands/class-use/CommandIssuer.html index cbd6ec02..4ef52faa 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandIssuer.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandIssuer.html @@ -1,697 +1,434 @@ - - -Uses of Interface co.aikar.commands.CommandIssuer (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandIssuer (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandIssuer

    +

    Uses of Interface
    co.aikar.commands.CommandIssuer

    -
    -
    + +
    ForwardingCommand.tabComplete(CommandIssuer issuer, + RootCommand rootCommand, + String[] args, + boolean isAsync)
    +
     
    +
    +
    Constructors in co.aikar.commands with parameters of type CommandIssuer
    +
    +
    Modifier
    +
    Constructor
    +
    Description
    +
     
    +
    CommandHelp(CommandManager manager, + RootCommand rootCommand, + CommandIssuer issuer)
    +
     
    +
    -
  • -
    - - -

    Uses of CommandIssuer in co.aikar.commands.contexts

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Classes in co.aikar.commands.contexts with type parameters of type CommandIssuer 
    Modifier and TypeInterfaceDescription
    interface ContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> +
  • +
    +

    Uses of CommandIssuer in co.aikar.commands.contexts

    +
    Classes in co.aikar.commands.contexts with type parameters of type CommandIssuer
    +
    +
    Modifier and Type
    +
    Interface
    +
    Description
    +
    interface 
    + +
    This defines a context resolver, which parses ContextResolver from ContextResolver.
    -
  • interface IssuerAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> 
    interface IssuerOnlyContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    -
    interface OptionalContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    The same as ContextResolver, however it can accept a null context.
    -
    interface SenderAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    Deprecated. -
    -
    +
    interface 
    + +
     
    +
    interface 
    + +
    +
    A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    +
    +
    interface 
    + +
    +
    The same as ContextResolver, however it can accept a null context.
    +
    +
    interface 
    + +
    +
    Deprecated. + +
    +
    +
  • - - - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandManager.html b/docs/acf-core/co/aikar/commands/class-use/CommandManager.html index fc0fd2a0..704b1144 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandManager.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandManager.html @@ -1,265 +1,135 @@ - - -Uses of Class co.aikar.commands.CommandManager (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandManager (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandManager

    +

    Uses of Class
    co.aikar.commands.CommandManager

    -
    -
    + +
    CommandManager.getCurrentCommandManager()
    +
     
    + +
    CommandHelp.getManager()
    +
     
    + +
    CommandIssuer.getManager()
    +
     
    + +
    CommandParameter.getManager()
    +
     
    + +
    RootCommand.getManager()
    +
     
    +
    +
    Constructors in co.aikar.commands with parameters of type CommandManager
    +
    +
    Modifier
    +
    Constructor
    +
    Description
    +
     
    + +
     
    +
     
    +
    CommandHelp(CommandManager manager, + RootCommand rootCommand, + CommandIssuer issuer)
    +
     
    +
     
    + +
     
    +
     
    + +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandOperationContext.html b/docs/acf-core/co/aikar/commands/class-use/CommandOperationContext.html index a2c6444b..7b214bfc 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandOperationContext.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandOperationContext.html @@ -1,255 +1,128 @@ - - -Uses of Class co.aikar.commands.CommandOperationContext (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandOperationContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandOperationContext

    +

    Uses of Class
    co.aikar.commands.CommandOperationContext

    -
    -
    + +
    ForwardingCommand.getLastCommandOperationContext()
    +
     
    +
    +
    Methods in co.aikar.commands with parameters of type CommandOperationContext
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    default void
    +
    AnnotationProcessor.onPostComand(CommandOperationContext context)
    +
    +
    Deprecated.
    +
    default void
    +
    AnnotationProcessor.onPreComand(CommandOperationContext context)
    +
    +
    Deprecated.
    +
    + + +
  • +
    +

    Uses of CommandOperationContext in co.aikar.commands.processors

    +
    Methods in co.aikar.commands.processors with parameters of type CommandOperationContext
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    ConditionsProcessor.onPreComand(CommandOperationContext context)
    +
    +
    Deprecated.
    +
    +
    +
  • + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandParameter.html b/docs/acf-core/co/aikar/commands/class-use/CommandParameter.html index 64fb4539..07af454f 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandParameter.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandParameter.html @@ -1,238 +1,119 @@ - - -Uses of Class co.aikar.commands.CommandParameter (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandParameter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandParameter

    +

    Uses of Class
    co.aikar.commands.CommandParameter

    -
    -
    +
    void
    +
    CommandHelpFormatter.printDetailedParameter(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry, + CommandParameter param)
    +
     
    +
    void
    +
    CommandParameter.setNextParam(CommandParameter<CEC> nextParam)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/CommandReplacements.html b/docs/acf-core/co/aikar/commands/class-use/CommandReplacements.html index 5d12cdfc..1eb60d58 100644 --- a/docs/acf-core/co/aikar/commands/class-use/CommandReplacements.html +++ b/docs/acf-core/co/aikar/commands/class-use/CommandReplacements.html @@ -1,209 +1,98 @@ - - -Uses of Class co.aikar.commands.CommandReplacements (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.CommandReplacements (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.CommandReplacements

    +

    Uses of Class
    co.aikar.commands.CommandReplacements

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/ConditionContext.html b/docs/acf-core/co/aikar/commands/class-use/ConditionContext.html index ac0d61fc..fcd81e2c 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ConditionContext.html +++ b/docs/acf-core/co/aikar/commands/class-use/ConditionContext.html @@ -1,234 +1,113 @@ - - -Uses of Class co.aikar.commands.ConditionContext (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ConditionContext (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ConditionContext

    +

    Uses of Class
    co.aikar.commands.ConditionContext

    +
    +
    Packages that use ConditionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/ConditionFailedException.html b/docs/acf-core/co/aikar/commands/class-use/ConditionFailedException.html index e29aaa44..193a3aad 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ConditionFailedException.html +++ b/docs/acf-core/co/aikar/commands/class-use/ConditionFailedException.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ConditionFailedException (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ConditionFailedException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ConditionFailedException

    +

    Uses of Class
    co.aikar.commands.ConditionFailedException

    -
    No usage of co.aikar.commands.ConditionFailedException
    -
    +No usage of co.aikar.commands.ConditionFailedException
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/ExceptionHandler.html b/docs/acf-core/co/aikar/commands/class-use/ExceptionHandler.html index 81db8e43..428930d5 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ExceptionHandler.html +++ b/docs/acf-core/co/aikar/commands/class-use/ExceptionHandler.html @@ -1,243 +1,120 @@ - - -Uses of Interface co.aikar.commands.ExceptionHandler (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.ExceptionHandler (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.ExceptionHandler

    +

    Uses of Interface
    co.aikar.commands.ExceptionHandler

    -
    -
    + +
    BaseCommand.setExceptionHandler(ExceptionHandler exceptionHandler)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/ForwardingCommand.html b/docs/acf-core/co/aikar/commands/class-use/ForwardingCommand.html index 12e09c0c..cb09f4d1 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ForwardingCommand.html +++ b/docs/acf-core/co/aikar/commands/class-use/ForwardingCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ForwardingCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ForwardingCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ForwardingCommand

    +

    Uses of Class
    co.aikar.commands.ForwardingCommand

    -
    No usage of co.aikar.commands.ForwardingCommand
    -
    +No usage of co.aikar.commands.ForwardingCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/HelpEntry.html b/docs/acf-core/co/aikar/commands/class-use/HelpEntry.html index 141e448f..91e80f7c 100644 --- a/docs/acf-core/co/aikar/commands/class-use/HelpEntry.html +++ b/docs/acf-core/co/aikar/commands/class-use/HelpEntry.html @@ -1,299 +1,160 @@ - - -Uses of Class co.aikar.commands.HelpEntry (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.HelpEntry (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.HelpEntry

    +

    Uses of Class
    co.aikar.commands.HelpEntry

    -
    -
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpCommand(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpFooter(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedHelpHeader(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printDetailedParameter(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry, + CommandParameter param)
    +
     
    +
    void
    +
    CommandHelpFormatter.printHelpCommand(CommandHelp help, + CommandIssuer issuer, + HelpEntry entry)
    +
     
    +
    void
    +
    CommandHelpFormatter.printSearchEntry(CommandHelp help, + CommandIssuer issuer, + HelpEntry page)
    +
     
    +
    void
    +
    CommandHelpFormatter.showDetailedHelp(CommandHelp commandHelp, + HelpEntry entry)
    +
     
    +
    protected void
    +
    CommandHelp.updateSearchScore(HelpEntry help)
    +
     
    +
    +
    Method parameters in co.aikar.commands with type arguments of type HelpEntry
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    void
    +
    CommandHelpFormatter.showAllResults(CommandHelp commandHelp, + List<HelpEntry> entries)
    +
     
    +
    void
    +
    CommandHelpFormatter.showSearchResults(CommandHelp commandHelp, + List<HelpEntry> entries)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/InvalidCommandArgument.html b/docs/acf-core/co/aikar/commands/class-use/InvalidCommandArgument.html index 6103eac5..32735c22 100644 --- a/docs/acf-core/co/aikar/commands/class-use/InvalidCommandArgument.html +++ b/docs/acf-core/co/aikar/commands/class-use/InvalidCommandArgument.html @@ -1,268 +1,135 @@ - - -Uses of Class co.aikar.commands.InvalidCommandArgument (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.InvalidCommandArgument (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.InvalidCommandArgument

    +

    Uses of Class
    co.aikar.commands.InvalidCommandArgument

    +
    +
    Packages that use InvalidCommandArgument
    +
    +
    Package
    +
    Description
    + +
     
    + +
     
    +
    +
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/InvalidCommandContextException.html b/docs/acf-core/co/aikar/commands/class-use/InvalidCommandContextException.html index 09e76dcf..8981ba25 100644 --- a/docs/acf-core/co/aikar/commands/class-use/InvalidCommandContextException.html +++ b/docs/acf-core/co/aikar/commands/class-use/InvalidCommandContextException.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.InvalidCommandContextException (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.InvalidCommandContextException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.InvalidCommandContextException

    +

    Uses of Class
    co.aikar.commands.InvalidCommandContextException

    -
    No usage of co.aikar.commands.InvalidCommandContextException
    -
    +No usage of co.aikar.commands.InvalidCommandContextException
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/IssuerLocaleChangedCallback.html b/docs/acf-core/co/aikar/commands/class-use/IssuerLocaleChangedCallback.html index 14ea7b4f..36f4039c 100644 --- a/docs/acf-core/co/aikar/commands/class-use/IssuerLocaleChangedCallback.html +++ b/docs/acf-core/co/aikar/commands/class-use/IssuerLocaleChangedCallback.html @@ -1,206 +1,95 @@ - - -Uses of Interface co.aikar.commands.IssuerLocaleChangedCallback (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.IssuerLocaleChangedCallback (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.IssuerLocaleChangedCallback

    +

    Uses of Interface
    co.aikar.commands.IssuerLocaleChangedCallback

    +
    +
    Packages that use IssuerLocaleChangedCallback
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/Locales.html b/docs/acf-core/co/aikar/commands/class-use/Locales.html index 724e5b4a..93a1d576 100644 --- a/docs/acf-core/co/aikar/commands/class-use/Locales.html +++ b/docs/acf-core/co/aikar/commands/class-use/Locales.html @@ -1,193 +1,88 @@ - - -Uses of Class co.aikar.commands.Locales (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.Locales (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.Locales

    +

    Uses of Class
    co.aikar.commands.Locales

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/MessageFormatter.html b/docs/acf-core/co/aikar/commands/class-use/MessageFormatter.html index e51e860c..4e25cfd6 100644 --- a/docs/acf-core/co/aikar/commands/class-use/MessageFormatter.html +++ b/docs/acf-core/co/aikar/commands/class-use/MessageFormatter.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.MessageFormatter (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.MessageFormatter (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MessageFormatter

    +

    Uses of Class
    co.aikar.commands.MessageFormatter

    +
    +
    Packages that use MessageFormatter
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/MessageKeys.html b/docs/acf-core/co/aikar/commands/class-use/MessageKeys.html index c4400671..8e1cd6ee 100644 --- a/docs/acf-core/co/aikar/commands/class-use/MessageKeys.html +++ b/docs/acf-core/co/aikar/commands/class-use/MessageKeys.html @@ -1,201 +1,94 @@ - - -Uses of Class co.aikar.commands.MessageKeys (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Enum co.aikar.commands.MessageKeys (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MessageKeys

    +

    Uses of Enum
    co.aikar.commands.MessageKeys

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/MessageType.html b/docs/acf-core/co/aikar/commands/class-use/MessageType.html index e5fbff3b..4e4df93a 100644 --- a/docs/acf-core/co/aikar/commands/class-use/MessageType.html +++ b/docs/acf-core/co/aikar/commands/class-use/MessageType.html @@ -1,293 +1,154 @@ - - -Uses of Class co.aikar.commands.MessageType (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.MessageType (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MessageType

    +

    Uses of Class
    co.aikar.commands.MessageType

    +
    +
    Packages that use MessageType
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/RegisteredCommand.html b/docs/acf-core/co/aikar/commands/class-use/RegisteredCommand.html index 56ecdbbf..bd574a20 100644 --- a/docs/acf-core/co/aikar/commands/class-use/RegisteredCommand.html +++ b/docs/acf-core/co/aikar/commands/class-use/RegisteredCommand.html @@ -1,367 +1,210 @@ - - -Uses of Class co.aikar.commands.RegisteredCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.RegisteredCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.RegisteredCommand

    +

    Uses of Class
    co.aikar.commands.RegisteredCommand

    -
    -
    +
    protected boolean
    +
    CommandManager.handleUncaughtException(BaseCommand scope, + RegisteredCommand registeredCommand, + CommandIssuer sender, + List<String> args, + Throwable t)
    +
     
    +
    default void
    +
    AnnotationProcessor.onCommandRegistered(RegisteredCommand command, + T annotation)
    +
    +
    Deprecated.
    +
    default void
    +
    AnnotationProcessor.onParameterRegistered(RegisteredCommand command, + int parameterIndex, + Parameter p, + T annotation)
    +
    +
    Deprecated.
    +
    void
    +
    CommandOperationContext.setRegisteredCommand(RegisteredCommand registeredCommand)
    +
     
    +
    void
    +
    BaseCommand.showSyntax(CommandIssuer issuer, + RegisteredCommand<?> cmd)
    +
     
    +
    +
    Method parameters in co.aikar.commands with type arguments of type RegisteredCommand
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    +
    default void
    +
    RootCommand.addChildShared(List<BaseCommand> children, + com.google.common.collect.SetMultimap<String,RegisteredCommand> subCommands, + BaseCommand command)
    +
     
    +
    +
    Constructors in co.aikar.commands with parameters of type RegisteredCommand
    +
    +
    Modifier
    +
    Constructor
    +
    Description
    +
     
    +
    CommandParameter(RegisteredCommand<CEC> command, + Parameter param, + int paramIndex, + boolean isLast)
    +
     
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/class-use/RootCommand.html b/docs/acf-core/co/aikar/commands/class-use/RootCommand.html index 8520a96b..ce453a86 100644 --- a/docs/acf-core/co/aikar/commands/class-use/RootCommand.html +++ b/docs/acf-core/co/aikar/commands/class-use/RootCommand.html @@ -1,274 +1,141 @@ - - -Uses of Interface co.aikar.commands.RootCommand (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.RootCommand (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.RootCommand

    +

    Uses of Interface
    co.aikar.commands.RootCommand

    -
    - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/ShowCommandHelp.html b/docs/acf-core/co/aikar/commands/class-use/ShowCommandHelp.html index daabd038..1cb85d89 100644 --- a/docs/acf-core/co/aikar/commands/class-use/ShowCommandHelp.html +++ b/docs/acf-core/co/aikar/commands/class-use/ShowCommandHelp.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ShowCommandHelp (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ShowCommandHelp (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ShowCommandHelp

    +

    Uses of Class
    co.aikar.commands.ShowCommandHelp

    -
    No usage of co.aikar.commands.ShowCommandHelp
    -
    +No usage of co.aikar.commands.ShowCommandHelp
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/UnresolvedDependencyException.html b/docs/acf-core/co/aikar/commands/class-use/UnresolvedDependencyException.html index 3832c43f..50a4c18a 100644 --- a/docs/acf-core/co/aikar/commands/class-use/UnresolvedDependencyException.html +++ b/docs/acf-core/co/aikar/commands/class-use/UnresolvedDependencyException.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.UnresolvedDependencyException (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.UnresolvedDependencyException (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.UnresolvedDependencyException

    +

    Uses of Class
    co.aikar.commands.UnresolvedDependencyException

    -
    No usage of co.aikar.commands.UnresolvedDependencyException
    -
    +No usage of co.aikar.commands.UnresolvedDependencyException
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/class-use/UnstableAPI.html b/docs/acf-core/co/aikar/commands/class-use/UnstableAPI.html index 0c5861ff..a9c507f8 100644 --- a/docs/acf-core/co/aikar/commands/class-use/UnstableAPI.html +++ b/docs/acf-core/co/aikar/commands/class-use/UnstableAPI.html @@ -1,283 +1,158 @@ - - -Uses of Class co.aikar.commands.UnstableAPI (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.UnstableAPI (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.UnstableAPI

    +

    Uses of Annotation Type
    co.aikar.commands.UnstableAPI

    -
    - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/ContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/ContextResolver.html index 5ffee881..9c54378c 100644 --- a/docs/acf-core/co/aikar/commands/contexts/ContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/ContextResolver.html @@ -1,278 +1,155 @@ - - -ContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +ContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface ContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Interface ContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    -
    - -
    -
    -
    +
    +
    +
    - -
    -
    - - + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/IssuerAwareContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/IssuerAwareContextResolver.html index ee6cec2a..387fef54 100644 --- a/docs/acf-core/co/aikar/commands/contexts/IssuerAwareContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/IssuerAwareContextResolver.html @@ -1,221 +1,105 @@ - - -IssuerAwareContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +IssuerAwareContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface IssuerAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Interface IssuerAwareContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/IssuerOnlyContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/IssuerOnlyContextResolver.html index 1b4e17c1..d95c2041 100644 --- a/docs/acf-core/co/aikar/commands/contexts/IssuerOnlyContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/IssuerOnlyContextResolver.html @@ -1,223 +1,107 @@ - - -IssuerOnlyContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +IssuerOnlyContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface IssuerOnlyContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Interface IssuerOnlyContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/OptionalContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/OptionalContextResolver.html index 8f50119e..4f762a8b 100644 --- a/docs/acf-core/co/aikar/commands/contexts/OptionalContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/OptionalContextResolver.html @@ -1,225 +1,109 @@ - - -OptionalContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +OptionalContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface OptionalContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Interface OptionalContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/SenderAwareContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/SenderAwareContextResolver.html index 97896d89..67b20129 100644 --- a/docs/acf-core/co/aikar/commands/contexts/SenderAwareContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/SenderAwareContextResolver.html @@ -1,226 +1,114 @@ - - -SenderAwareContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +SenderAwareContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface SenderAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>>

    + +

    Interface SenderAwareContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>>

    -
    -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/class-use/ContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/class-use/ContextResolver.html index 06470a42..a55a818a 100644 --- a/docs/acf-core/co/aikar/commands/contexts/class-use/ContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/class-use/ContextResolver.html @@ -1,283 +1,146 @@ - - -Uses of Interface co.aikar.commands.contexts.ContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.contexts.ContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.contexts.ContextResolver

    +

    Uses of Interface
    co.aikar.commands.contexts.ContextResolver

    -
    -
    +
    void
    +
    CommandParameter.setResolver(ContextResolver<?,CEC> resolver)
    +
     
    +
    -
  • -
    - - -

    Uses of ContextResolver in co.aikar.commands.contexts

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Subinterfaces of ContextResolver in co.aikar.commands.contexts 
    Modifier and TypeInterfaceDescription
    interface IssuerAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> 
    interface IssuerOnlyContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> +
  • +
    +

    Uses of ContextResolver in co.aikar.commands.contexts

    + +
    +
    Modifier and Type
    +
    Interface
    +
    Description
    +
    interface 
    + +
     
    +
    interface 
    + +
    A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    -
  • interface OptionalContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    The same as ContextResolver, however it can accept a null context.
    -
    interface SenderAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    Deprecated. -
    -
    +
    interface 
    + +
    +
    The same as ContextResolver, however it can accept a null context.
    +
    +
    interface 
    + +
    +
    Deprecated. + +
    +
    +
  • - - - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html index 112d2f16..2cf0357e 100644 --- a/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html @@ -1,236 +1,119 @@ - - -Uses of Interface co.aikar.commands.contexts.IssuerAwareContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.contexts.IssuerAwareContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.contexts.IssuerAwareContextResolver

    +

    Uses of Interface
    co.aikar.commands.contexts.IssuerAwareContextResolver

    -
    -
    +
    -
  • -
    - - -

    Uses of IssuerAwareContextResolver in co.aikar.commands.contexts

    - - - - - - - - - - - - - - -
    Subinterfaces of IssuerAwareContextResolver in co.aikar.commands.contexts 
    Modifier and TypeInterfaceDescription
    interface SenderAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> -
    Deprecated. - +
  • +
    +

    Uses of IssuerAwareContextResolver in co.aikar.commands.contexts

    + +
    +
    Modifier and Type
    +
    Interface
    +
    Description
    +
    interface 
    + +
    +
    Deprecated. + +
    +
    -
  • - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerOnlyContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerOnlyContextResolver.html index 081e3e53..45c516c4 100644 --- a/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerOnlyContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/class-use/IssuerOnlyContextResolver.html @@ -1,194 +1,89 @@ - - -Uses of Interface co.aikar.commands.contexts.IssuerOnlyContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.contexts.IssuerOnlyContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.contexts.IssuerOnlyContextResolver

    +

    Uses of Interface
    co.aikar.commands.contexts.IssuerOnlyContextResolver

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/class-use/OptionalContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/class-use/OptionalContextResolver.html index aa0cdc0f..f823de8a 100644 --- a/docs/acf-core/co/aikar/commands/contexts/class-use/OptionalContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/class-use/OptionalContextResolver.html @@ -1,194 +1,89 @@ - - -Uses of Interface co.aikar.commands.contexts.OptionalContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.contexts.OptionalContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.contexts.OptionalContextResolver

    +

    Uses of Interface
    co.aikar.commands.contexts.OptionalContextResolver

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/class-use/SenderAwareContextResolver.html b/docs/acf-core/co/aikar/commands/contexts/class-use/SenderAwareContextResolver.html index 5008a732..c3d8cb4e 100644 --- a/docs/acf-core/co/aikar/commands/contexts/class-use/SenderAwareContextResolver.html +++ b/docs/acf-core/co/aikar/commands/contexts/class-use/SenderAwareContextResolver.html @@ -1,147 +1,61 @@ - - -Uses of Interface co.aikar.commands.contexts.SenderAwareContextResolver (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.contexts.SenderAwareContextResolver (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.contexts.SenderAwareContextResolver

    +

    Uses of Interface
    co.aikar.commands.contexts.SenderAwareContextResolver

    -
    No usage of co.aikar.commands.contexts.SenderAwareContextResolver
    -
    +No usage of co.aikar.commands.contexts.SenderAwareContextResolver
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/package-summary.html b/docs/acf-core/co/aikar/commands/contexts/package-summary.html index e7deeba0..fd04c8d6 100644 --- a/docs/acf-core/co/aikar/commands/contexts/package-summary.html +++ b/docs/acf-core/co/aikar/commands/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.contexts (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.contexts

    +

    Package co.aikar.commands.contexts

    -
    -
    + +
    Deprecated. + +
    +
    +
    - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/contexts/package-tree.html b/docs/acf-core/co/aikar/commands/contexts/package-tree.html index e2996dbb..2bfef8a6 100644 --- a/docs/acf-core/co/aikar/commands/contexts/package-tree.html +++ b/docs/acf-core/co/aikar/commands/contexts/package-tree.html @@ -1,168 +1,81 @@ - - -co.aikar.commands.contexts Class Hierarchy (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts Class Hierarchy (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Interface Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/contexts/package-use.html b/docs/acf-core/co/aikar/commands/contexts/package-use.html index 1137e64c..60669f87 100644 --- a/docs/acf-core/co/aikar/commands/contexts/package-use.html +++ b/docs/acf-core/co/aikar/commands/contexts/package-use.html @@ -1,227 +1,112 @@ - - -Uses of Package co.aikar.commands.contexts (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.contexts (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.contexts

    -
    -
    +
    + -
  • - - - - - - - - - - - - - - - - - - -
    Classes in co.aikar.commands.contexts used by co.aikar.commands.contexts 
    ClassDescription
    ContextResolver +
  • +
    + +
    +
    Class
    +
    Description
    + +
    This defines a context resolver, which parses ContextResolver from ContextResolver.
    -
  • IssuerAwareContextResolver 
    +
  • + +
     
    + + - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/package-summary.html b/docs/acf-core/co/aikar/commands/package-summary.html index 0cc8f5b6..59cafe99 100644 --- a/docs/acf-core/co/aikar/commands/package-summary.html +++ b/docs/acf-core/co/aikar/commands/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    +
    + - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/package-tree.html b/docs/acf-core/co/aikar/commands/package-tree.html index 393c3fd0..0d2be131 100644 --- a/docs/acf-core/co/aikar/commands/package-tree.html +++ b/docs/acf-core/co/aikar/commands/package-tree.html @@ -1,148 +1,102 @@ - - -co.aikar.commands Class Hierarchy (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Interface Hierarchy

    -
    +

    Annotation Type Hierarchy

    -
    +

    Enum Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/package-use.html b/docs/acf-core/co/aikar/commands/package-use.html index ccecf27e..c0c694a0 100644 --- a/docs/acf-core/co/aikar/commands/package-use.html +++ b/docs/acf-core/co/aikar/commands/package-use.html @@ -1,370 +1,191 @@ - - -Uses of Package co.aikar.commands (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    -
    -
    + +
     
    + +
     
    + +
     
    + +
    +
    Deprecated.
    +
    +
    + -
  • - - - - - - - - - - - - - - - - - - - - - - -
    Classes in co.aikar.commands used by co.aikar.commands.contexts 
    ClassDescription
    CommandExecutionContext 
    CommandIssuer 
    InvalidCommandArgument 
    +
  • +
    + +
    +
    Class
    +
    Description
    + +
     
    + +
     
    + +
     
    +
    +
  • -
  • - - - - - - - - - - - - - - - - - - - - - - -
    Classes in co.aikar.commands used by co.aikar.commands.processors 
    ClassDescription
    AnnotationProcessor -
    Deprecated.
    -
    CommandExecutionContext 
    CommandOperationContext +
  • +
    + +
    +
    Class
    +
    Description
    + +
    +
    Deprecated.
    +
    + +
     
    + +
    Holds information about the currently executing command on this thread
    -
  • +
  • + + - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/co/aikar/commands/processors/ConditionsProcessor.html b/docs/acf-core/co/aikar/commands/processors/ConditionsProcessor.html index bf5a2e91..dd46caec 100644 --- a/docs/acf-core/co/aikar/commands/processors/ConditionsProcessor.html +++ b/docs/acf-core/co/aikar/commands/processors/ConditionsProcessor.html @@ -1,352 +1,200 @@ - - -ConditionsProcessor (ACF (Core) 0.5.0-SNAPSHOT API) + +ConditionsProcessor (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class ConditionsProcessor

    + +

    Class ConditionsProcessor

    -
    - -
    - -
    -
    - +
    + -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/processors/class-use/ConditionsProcessor.html b/docs/acf-core/co/aikar/commands/processors/class-use/ConditionsProcessor.html index 5a74b3ed..59bbe376 100644 --- a/docs/acf-core/co/aikar/commands/processors/class-use/ConditionsProcessor.html +++ b/docs/acf-core/co/aikar/commands/processors/class-use/ConditionsProcessor.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.processors.ConditionsProcessor (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.processors.ConditionsProcessor (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.processors.ConditionsProcessor

    +

    Uses of Class
    co.aikar.commands.processors.ConditionsProcessor

    -
    No usage of co.aikar.commands.processors.ConditionsProcessor
    -
    +No usage of co.aikar.commands.processors.ConditionsProcessor
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/processors/package-summary.html b/docs/acf-core/co/aikar/commands/processors/package-summary.html index 971cb4b7..ba3a7d3b 100644 --- a/docs/acf-core/co/aikar/commands/processors/package-summary.html +++ b/docs/acf-core/co/aikar/commands/processors/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.processors (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.processors (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.processors

    +

    Package co.aikar.commands.processors

    +
    +
    +
    package co.aikar.commands.processors
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/processors/package-tree.html b/docs/acf-core/co/aikar/commands/processors/package-tree.html index 6ffd7a86..fba24b0d 100644 --- a/docs/acf-core/co/aikar/commands/processors/package-tree.html +++ b/docs/acf-core/co/aikar/commands/processors/package-tree.html @@ -1,162 +1,75 @@ - - -co.aikar.commands.processors Class Hierarchy (ACF (Core) 0.5.0-SNAPSHOT API) + +co.aikar.commands.processors Class Hierarchy (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.processors

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/co/aikar/commands/processors/package-use.html b/docs/acf-core/co/aikar/commands/processors/package-use.html index dde9050c..d61fd26c 100644 --- a/docs/acf-core/co/aikar/commands/processors/package-use.html +++ b/docs/acf-core/co/aikar/commands/processors/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.processors (ACF (Core) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.processors (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.processors

    -
    No usage of co.aikar.commands.processors
    -
    +No usage of co.aikar.commands.processors
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/constant-values.html b/docs/acf-core/constant-values.html index 4b71373a..792b3897 100644 --- a/docs/acf-core/constant-values.html +++ b/docs/acf-core/constant-values.html @@ -1,50 +1,32 @@ - - -Constant Field Values (ACF (Core) 0.5.0-SNAPSHOT API) + +Constant Field Values (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Constant Field Values

    -
    +

    Contents

    -
    - - -
    +

    co.aikar.*

    -
    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/deprecated-list.html b/docs/acf-core/deprecated-list.html index 00d77688..34297cc6 100644 --- a/docs/acf-core/deprecated-list.html +++ b/docs/acf-core/deprecated-list.html @@ -1,96 +1,51 @@ - - -Deprecated List (ACF (Core) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Deprecated API

    @@ -98,266 +53,166 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
    -
    - - - - - - - - - - - - - - - - - - - + + + + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/index-all.html b/docs/acf-core/index-all.html index 80555d0d..6631d58f 100644 --- a/docs/acf-core/index-all.html +++ b/docs/acf-core/index-all.html @@ -1,256 +1,206 @@ - - -Index (ACF (Core) 0.5.0-SNAPSHOT API) + +Index (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A B C D E F G H I J K L M N O P R S T U V W 
    All Classes All Packages - - -

    A

    -
    -
    ACFUtil - Class in co.aikar.commands
    +
    +

    Index

    +
    +A B C D E F G H I J K L M N O P R S T U V W 
    All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form +

    A

    +
    +
    ACFUtil - Class in co.aikar.commands
     
    -
    addAll(T[], T...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    addAll(T[], T...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Adds all the elements of the given arrays into a new array.
    -
    addBundleClassLoader(ClassLoader) - Method in class co.aikar.commands.Locales
    +
    addBundleClassLoader(ClassLoader) - Method in class co.aikar.commands.Locales
     
    -
    addCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    addCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Adds to the list of method names used in the search for Throwable objects.
    -
    addChild(BaseCommand) - Method in interface co.aikar.commands.RootCommand
    +
    addChild(BaseCommand) - Method in interface co.aikar.commands.RootCommand
     
    -
    addChildShared(List<BaseCommand>, SetMultimap<String, RegisteredCommand>, BaseCommand) - Method in interface co.aikar.commands.RootCommand
    +
    addChildShared(List<BaseCommand>, SetMultimap<String, RegisteredCommand>, BaseCommand) - Method in interface co.aikar.commands.RootCommand
     
    -
    addCondition(String, CommandConditions.Condition<I>) - Method in class co.aikar.commands.CommandConditions
    +
    addCondition(String, CommandConditions.Condition<I>) - Method in class co.aikar.commands.CommandConditions
     
    -
    addCondition(Class<P>, String, CommandConditions.ParameterCondition<P, CEC, I>) - Method in class co.aikar.commands.CommandConditions
    +
    addCondition(Class<P>, String, CommandConditions.ParameterCondition<P, CEC, I>) - Method in class co.aikar.commands.CommandConditions
     
    -
    addMessage(Locale, MessageKeyProvider, String) - Method in class co.aikar.commands.Locales
    +
    addMessage(Locale, MessageKeyProvider, String) - Method in class co.aikar.commands.Locales
     
    -
    addMessageBundle(ClassLoader, String, Locale) - Method in class co.aikar.commands.Locales
    +
    addMessageBundle(ClassLoader, String, Locale) - Method in class co.aikar.commands.Locales
     
    -
    addMessageBundle(String, Locale) - Method in class co.aikar.commands.Locales
    +
    addMessageBundle(String, Locale) - Method in class co.aikar.commands.Locales
     
    -
    addMessageBundles(String...) - Method in class co.aikar.commands.Locales
    +
    addMessageBundles(String...) - Method in class co.aikar.commands.Locales
     
    -
    addMessages(Locale, Map<? extends MessageKeyProvider, String>) - Method in class co.aikar.commands.Locales
    +
    addMessages(Locale, Map<? extends MessageKeyProvider, String>) - Method in class co.aikar.commands.Locales
     
    -
    addMessageStrings(Locale, Map<String, String>) - Method in class co.aikar.commands.Locales
    +
    addMessageStrings(Locale, Map<String, String>) - Method in class co.aikar.commands.Locales
     
    -
    addReplacement(String, String) - Method in class co.aikar.commands.CommandReplacements
    +
    addReplacement(String, String) - Method in class co.aikar.commands.CommandReplacements
     
    -
    addReplacements(String...) - Method in class co.aikar.commands.CommandReplacements
    +
    addReplacements(String...) - Method in class co.aikar.commands.CommandReplacements
     
    -
    addSubcommand(String) - Method in class co.aikar.commands.RegisteredCommand
    +
    addSubcommand(String) - Method in class co.aikar.commands.RegisteredCommand
     
    -
    addSubcommands(Collection<String>) - Method in class co.aikar.commands.RegisteredCommand
    +
    addSubcommands(Collection<String>) - Method in class co.aikar.commands.RegisteredCommand
     
    -
    addSupportedLanguage(Locale) - Method in class co.aikar.commands.CommandManager
    +
    addSupportedLanguage(Locale) - Method in class co.aikar.commands.CommandManager
    Adds a new locale to the list of automatic Locales to load Message Bundles for.
    -
    AFRIKAANS - Static variable in class co.aikar.commands.Locales
    +
    AFRIKAANS - Static variable in class co.aikar.commands.Locales
     
    -
    AnnotationProcessor<T extends Annotation> - Interface in co.aikar.commands
    +
    AnnotationProcessor<T extends Annotation> - Interface in co.aikar.commands
    -
    Deprecated.
    +
    Deprecated.
    -
    ApacheCommonsExceptionUtil - Class in co.aikar.commands.apachecommonslang
    +
    ApacheCommonsExceptionUtil - Class in co.aikar.commands.apachecommonslang
    Provides utilities for manipulating and examining Throwable objects.
    -
    ApacheCommonsExceptionUtil() - Constructor for class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    ApacheCommonsExceptionUtil() - Constructor for class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Public constructor allows an instance of ExceptionUtils to be created, although that is not normally necessary.
    -
    ApacheCommonsExceptionUtil.Nestable - Interface in co.aikar.commands.apachecommonslang
    +
    ApacheCommonsExceptionUtil.Nestable - Interface in co.aikar.commands.apachecommonslang
    -
    An interface to be implemented by Throwable +
    An interface to be implemented by Throwable extensions which would like to be able to nest root exceptions inside themselves.
    -
    ApacheCommonsLangUtil - Class in co.aikar.commands.apachecommonslang
    +
    ApacheCommonsLangUtil - Class in co.aikar.commands.apachecommonslang
    Select methods copied from Apache Commons to avoid importing entire lib No changes to logic
    -
    ApacheCommonsLangUtil() - Constructor for class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    ApacheCommonsLangUtil() - Constructor for class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
     
    -
    ARABIC - Static variable in class co.aikar.commands.Locales
    +
    ARABIC - Static variable in class co.aikar.commands.Locales
     
    - - - -

    B

    -
    -
    BaseCommand - Class in co.aikar.commands
    +

    B

    +
    +
    BaseCommand - Class in co.aikar.commands
    A Base command is defined as a command group of related commands.
    -
    BaseCommand() - Constructor for class co.aikar.commands.BaseCommand
    +
    BaseCommand() - Constructor for class co.aikar.commands.BaseCommand
     
    -
    BaseCommand(String) - Constructor for class co.aikar.commands.BaseCommand
    +
    BaseCommand(String) - Constructor for class co.aikar.commands.BaseCommand
    -
    Deprecated. -
    Please switch to CommandAlias for defining all root commands.
    +
    Deprecated. +
    Please switch to CommandAlias for defining all root commands.
    -
    BULGARIAN - Static variable in class co.aikar.commands.Locales
    +
    BULGARIAN - Static variable in class co.aikar.commands.Locales
     
    - - - -

    C

    -
    -
    canConsumeInput() - Method in class co.aikar.commands.CommandParameter
    +

    C

    +
    +
    canConsumeInput() - Method in class co.aikar.commands.CommandParameter
     
    -
    canExecute(CommandIssuer, RegisteredCommand<?>) - Method in class co.aikar.commands.BaseCommand
    +
    canExecute(CommandIssuer, RegisteredCommand<?>) - Method in class co.aikar.commands.BaseCommand
    -
    Deprecated. - +
    Deprecated. +
    -
    canExecuteWithoutInput() - Method in class co.aikar.commands.CommandParameter
    +
    canExecuteWithoutInput() - Method in class co.aikar.commands.CommandParameter
     
    -
    canOverridePlayerContext() - Method in class co.aikar.commands.CommandExecutionContext
    +
    canOverridePlayerContext() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    capitalize(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    capitalize(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Capitalizes all the whitespace separated words in a String.
    -
    capitalize(String, char[]) - Static method in class co.aikar.commands.ACFUtil
    +
    capitalize(String, char[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    capitalize(String, char...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    capitalize(String, char...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Capitalizes all the delimiter separated words in a String.
    -
    capitalizeFirst(String) - Static method in class co.aikar.commands.ACFUtil
    +
    capitalizeFirst(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    capitalizeFirst(String, char) - Static method in class co.aikar.commands.ACFUtil
    +
    capitalizeFirst(String, char) - Static method in class co.aikar.commands.ACFUtil
     
    -
    capitalizeFully(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    capitalizeFully(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Converts all the whitespace separated words in a String into capitalized words, that is each word is made up of a titlecase character and then a series of lowercase characters.
    -
    capitalizeFully(String, char...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    capitalizeFully(String, char...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Converts all the delimiter separated words in a String into capitalized words, that is each word is made up of a titlecase character and then a series of lowercase characters.
    -
    CatchAll - Annotation Type in co.aikar.commands.annotation
    +
    CatchAll - Annotation Type in co.aikar.commands.annotation
    -
    -
    CatchUnknown - Annotation Type in co.aikar.commands.annotation
    +
    CatchUnknown - Annotation Type in co.aikar.commands.annotation
    Defines a method that should receive any unknown command for the related root command.
    -
    CHINESE - Static variable in class co.aikar.commands.Locales
    +
    CHINESE - Static variable in class co.aikar.commands.Locales
     
    -
    clone(T[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    clone(T[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Shallow clones an array returning a typecast result and handling null.
    @@ -265,1874 +215,1776 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
     
    co.aikar.commands.processors - package co.aikar.commands.processors
     
    -
    combine(String[]) - Static method in class co.aikar.commands.ACFUtil
    +
    combine(String[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    combine(String[], int) - Static method in class co.aikar.commands.ACFUtil
    +
    combine(String[], int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    CommandAlias - Annotation Type in co.aikar.commands.annotation
    +
    CommandAlias - Annotation Type in co.aikar.commands.annotation
    Allows to add a single or several command alias(es).
    -
    CommandCompletion - Annotation Type in co.aikar.commands.annotation
    +
    CommandCompletion - Annotation Type in co.aikar.commands.annotation
    Many implementation platforms have a concept of "Tab Completions", where pressing tab will give suggestions on what you can input.
    -
    CommandCompletionContext<I extends CommandIssuer> - Class in co.aikar.commands
    +
    CommandCompletionContext<I extends CommandIssuer> - Class in co.aikar.commands
     
    -
    CommandCompletions<C extends CommandCompletionContext> - Class in co.aikar.commands
    +
    CommandCompletions<C extends CommandCompletionContext> - Class in co.aikar.commands
     
    -
    CommandCompletions(CommandManager) - Constructor for class co.aikar.commands.CommandCompletions
    +
    CommandCompletions(CommandManager) - Constructor for class co.aikar.commands.CommandCompletions
     
    -
    CommandCompletions.AsyncCommandCompletionHandler<C extends CommandCompletionContext> - Interface in co.aikar.commands
    +
    CommandCompletions.AsyncCommandCompletionHandler<C extends CommandCompletionContext> - Interface in co.aikar.commands
     
    -
    CommandCompletions.CommandCompletionHandler<C extends CommandCompletionContext> - Interface in co.aikar.commands
    +
    CommandCompletions.CommandCompletionHandler<C extends CommandCompletionContext> - Interface in co.aikar.commands
     
    -
    CommandCompletions.SyncCompletionRequired - Exception in co.aikar.commands
    +
    CommandCompletions.SyncCompletionRequired - Exception in co.aikar.commands
     
    -
    CommandConditions<I extends CommandIssuer,​CEC extends CommandExecutionContext<CEC,​I>,​CC extends ConditionContext<I>> - Class in co.aikar.commands
    +
    CommandConditions<I extends CommandIssuer,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>> - Class in co.aikar.commands
     
    -
    CommandConditions.Condition<I extends CommandIssuer> - Interface in co.aikar.commands
    +
    CommandConditions.Condition<I extends CommandIssuer> - Interface in co.aikar.commands
     
    -
    CommandConditions.ParameterCondition<P,​CEC extends CommandExecutionContext,​I extends CommandIssuer> - Interface in co.aikar.commands
    +
    CommandConditions.ParameterCondition<P,CEC extends CommandExecutionContext,I extends CommandIssuer> - Interface in co.aikar.commands
     
    -
    CommandContexts<R extends CommandExecutionContext<?,​? extends CommandIssuer>> - Class in co.aikar.commands
    +
    CommandContexts<R extends CommandExecutionContext<?,? extends CommandIssuer>> - Class in co.aikar.commands
     
    -
    CommandExecutionContext<CEC extends CommandExecutionContext,​I extends CommandIssuer> - Class in co.aikar.commands
    +
    CommandExecutionContext<CEC extends CommandExecutionContext,I extends CommandIssuer> - Class in co.aikar.commands
     
    -
    CommandHelp - Class in co.aikar.commands
    +
    CommandHelp - Class in co.aikar.commands
     
    -
    CommandHelp(CommandManager, RootCommand, CommandIssuer) - Constructor for class co.aikar.commands.CommandHelp
    +
    CommandHelp(CommandManager, RootCommand, CommandIssuer) - Constructor for class co.aikar.commands.CommandHelp
     
    -
    CommandHelpFormatter - Class in co.aikar.commands
    +
    CommandHelpFormatter - Class in co.aikar.commands
     
    -
    CommandHelpFormatter(CommandManager) - Constructor for class co.aikar.commands.CommandHelpFormatter
    +
    CommandHelpFormatter(CommandManager) - Constructor for class co.aikar.commands.CommandHelpFormatter
     
    -
    CommandIssuer - Interface in co.aikar.commands
    +
    CommandIssuer - Interface in co.aikar.commands
     
    -
    CommandManager<IT,​I extends CommandIssuer,​FT,​MF extends MessageFormatter<FT>,​CEC extends CommandExecutionContext<CEC,​I>,​CC extends ConditionContext<I>> - Class in co.aikar.commands
    +
    CommandManager<IT,I extends CommandIssuer,FT,MF extends MessageFormatter<FT>,CEC extends CommandExecutionContext<CEC,I>,CC extends ConditionContext<I>> - Class in co.aikar.commands
     
    -
    CommandManager() - Constructor for class co.aikar.commands.CommandManager
    +
    CommandManager() - Constructor for class co.aikar.commands.CommandManager
     
    -
    CommandOperationContext<I extends CommandIssuer> - Class in co.aikar.commands
    +
    CommandOperationContext<I extends CommandIssuer> - Class in co.aikar.commands
    Holds information about the currently executing command on this thread
    -
    CommandParameter<CEC extends CommandExecutionContext<CEC,​? extends CommandIssuer>> - Class in co.aikar.commands
    +
    CommandParameter<CEC extends CommandExecutionContext<CEC,? extends CommandIssuer>> - Class in co.aikar.commands
     
    -
    CommandParameter(RegisteredCommand<CEC>, Parameter, int, boolean) - Constructor for class co.aikar.commands.CommandParameter
    +
    CommandParameter(RegisteredCommand<CEC>, Parameter, int, boolean) - Constructor for class co.aikar.commands.CommandParameter
     
    -
    CommandPermission - Annotation Type in co.aikar.commands.annotation
    +
    CommandPermission - Annotation Type in co.aikar.commands.annotation
    Sets the permission required to perform this command.
    -
    CommandReplacements - Class in co.aikar.commands
    +
    CommandReplacements - Class in co.aikar.commands
    Manages replacement template strings
    -
    ConditionContext<I extends CommandIssuer> - Class in co.aikar.commands
    +
    ConditionContext<I extends CommandIssuer> - Class in co.aikar.commands
     
    -
    ConditionFailedException - Exception in co.aikar.commands
    +
    ConditionFailedException - Exception in co.aikar.commands
     
    -
    ConditionFailedException() - Constructor for exception co.aikar.commands.ConditionFailedException
    +
    ConditionFailedException() - Constructor for exception co.aikar.commands.ConditionFailedException
     
    -
    ConditionFailedException(MessageKeyProvider, String...) - Constructor for exception co.aikar.commands.ConditionFailedException
    +
    ConditionFailedException(MessageKeyProvider, String...) - Constructor for exception co.aikar.commands.ConditionFailedException
     
    -
    ConditionFailedException(MessageKey, String...) - Constructor for exception co.aikar.commands.ConditionFailedException
    +
    ConditionFailedException(MessageKey, String...) - Constructor for exception co.aikar.commands.ConditionFailedException
     
    -
    ConditionFailedException(String) - Constructor for exception co.aikar.commands.ConditionFailedException
    +
    ConditionFailedException(String) - Constructor for exception co.aikar.commands.ConditionFailedException
     
    -
    conditions - Variable in class co.aikar.commands.CommandManager
    +
    conditions - Variable in class co.aikar.commands.CommandManager
     
    -
    Conditions - Annotation Type in co.aikar.commands.annotation
    +
    Conditions - Annotation Type in co.aikar.commands.annotation
    Specifies conditions that must be met in order to execute this command.
    -
    ConditionsProcessor - Class in co.aikar.commands.processors
    +
    ConditionsProcessor - Class in co.aikar.commands.processors
    -
    Deprecated.
    +
    Deprecated.
    -
    ConditionsProcessor() - Constructor for class co.aikar.commands.processors.ConditionsProcessor
    +
    ConditionsProcessor() - Constructor for class co.aikar.commands.processors.ConditionsProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    contextMap - Variable in class co.aikar.commands.CommandContexts
    +
    contextMap - Variable in class co.aikar.commands.CommandContexts
     
    -
    ContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    +
    ContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    This defines a context resolver, which parses ContextResolver from ContextResolver.
    -
    COULD_NOT_FIND_PLAYER - co.aikar.commands.MessageKeys
    +
    COULD_NOT_FIND_PLAYER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.CommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.CommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.CommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.CommandManager
     
    -
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
    +
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
     
    -
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.CommandManager
    +
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.CommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.CommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.CommandManager
     
    -
    CZECH - Static variable in class co.aikar.commands.Locales
    +
    CZECH - Static variable in class co.aikar.commands.Locales
     
    - - - -

    D

    -
    -
    DANISH - Static variable in class co.aikar.commands.Locales
    +

    D

    +
    +
    DANISH - Static variable in class co.aikar.commands.Locales
     
    -
    Default - Annotation Type in co.aikar.commands.annotation
    +
    Default - Annotation Type in co.aikar.commands.annotation
    If used on a method, sets default command handler for the root command of this group If used on a parameter, sets the value to be used for context resolution
    -
    defaultExceptionHandler - Variable in class co.aikar.commands.CommandManager
    +
    defaultExceptionHandler - Variable in class co.aikar.commands.CommandManager
     
    -
    defaultFormatter - Variable in class co.aikar.commands.CommandManager
    +
    defaultFormatter - Variable in class co.aikar.commands.CommandManager
     
    -
    defaultHelpPerPage - Variable in class co.aikar.commands.CommandManager
    +
    defaultHelpPerPage - Variable in class co.aikar.commands.CommandManager
     
    -
    dependencies - Variable in class co.aikar.commands.CommandManager
    +
    dependencies - Variable in class co.aikar.commands.CommandManager
     
    -
    Dependency - Annotation Type in co.aikar.commands.annotation
    +
    Dependency - Annotation Type in co.aikar.commands.annotation
    Injects a dependency into the field this is attached to.
    -
    Description - Annotation Type in co.aikar.commands.annotation
    +
    Description - Annotation Type in co.aikar.commands.annotation
    Sets a description to the parameter or method this is attached to.
    -
    doHelp(CommandIssuer, String...) - Method in class co.aikar.commands.BaseCommand
    +
    doHelp(CommandIssuer, String...) - Method in class co.aikar.commands.BaseCommand
     
    -
    doHelp(Object, String...) - Method in class co.aikar.commands.BaseCommand
    +
    doHelp(Object, String...) - Method in class co.aikar.commands.BaseCommand
     
    -
    DUTCH - Static variable in class co.aikar.commands.Locales
    +
    DUTCH - Static variable in class co.aikar.commands.Locales
     
    - - - -

    E

    -
    -
    EMPTY - Static variable in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +

    E

    +
    +
    EMPTY - Static variable in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    The empty String "".
    -
    enableUnstableAPI(String) - Method in class co.aikar.commands.CommandManager
    +
    enableUnstableAPI(String) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Use this with caution! If you enable and use Unstable API's, your next compile using ACF +
    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
    -
    ENGLISH - Static variable in class co.aikar.commands.Locales
    +
    ENGLISH - Static variable in class co.aikar.commands.Locales
     
    -
    enumNames(Class<? extends Enum<?>>) - Static method in class co.aikar.commands.ACFUtil
    +
    enumNames(Class<? extends Enum<?>>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    enumNames(Enum<?>[]) - Static method in class co.aikar.commands.ACFUtil
    +
    enumNames(Enum<?>[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    equals(Object) - Method in class co.aikar.commands.MessageType
    +
    equals(Object) - Method in class co.aikar.commands.MessageType
     
    -
    ERROR - Static variable in class co.aikar.commands.MessageType
    +
    ERROR - Static variable in class co.aikar.commands.MessageType
     
    -
    ERROR_GENERIC_LOGGED - co.aikar.commands.MessageKeys
    +
    ERROR_GENERIC_LOGGED - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    ERROR_PERFORMING_COMMAND - co.aikar.commands.MessageKeys
    +
    ERROR_PERFORMING_COMMAND - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    ERROR_PREFIX - co.aikar.commands.MessageKeys
    +
    ERROR_PREFIX - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    ExceptionHandler - Interface in co.aikar.commands
    +
    ExceptionHandler - Interface in co.aikar.commands
    Functional interface to allow plugins to handle uncaught excetpions
    -
    execute(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in interface co.aikar.commands.ExceptionHandler
    +
    execute(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in interface co.aikar.commands.ExceptionHandler
    Called when an exception occurs while executing a command
    If an exception handler properly handles an exception, the user will not be noticied by the framework that something went unexceptected.
    -
    execute(CommandIssuer, CommandRouter.CommandRouteResult) - Method in class co.aikar.commands.ForwardingCommand
    +
    execute(CommandIssuer, CommandRouter.CommandRouteResult) - Method in class co.aikar.commands.ForwardingCommand
     
    -
    execute(CommandIssuer, String, String[]) - Method in interface co.aikar.commands.RootCommand
    +
    execute(CommandIssuer, String, String[]) - Method in interface co.aikar.commands.RootCommand
     
    - - - -

    F

    -
    -
    FINNISH - Static variable in class co.aikar.commands.Locales
    +

    F

    +
    +
    FINNISH - Static variable in class co.aikar.commands.Locales
     
    -
    Flags - Annotation Type in co.aikar.commands.annotation
    +
    Flags - Annotation Type in co.aikar.commands.annotation
    Provides configuration options for ContextResolver's to change how they resolve context.
    -
    format(int, String) - Method in class co.aikar.commands.MessageFormatter
    +
    format(int, String) - Method in class co.aikar.commands.MessageFormatter
     
    -
    format(String) - Method in class co.aikar.commands.MessageFormatter
    +
    format(String) - Method in class co.aikar.commands.MessageFormatter
     
    -
    formatMessage(CommandIssuer, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
    +
    formatMessage(CommandIssuer, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
     
    -
    formatNumber(Integer) - Static method in class co.aikar.commands.ACFUtil
    +
    formatNumber(Integer) - Static method in class co.aikar.commands.ACFUtil
     
    -
    formatters - Variable in class co.aikar.commands.CommandManager
    +
    formatters - Variable in class co.aikar.commands.CommandManager
     
    -
    ForwardingCommand - Class in co.aikar.commands
    +
    ForwardingCommand - Class in co.aikar.commands
     
    -
    FRENCH - Static variable in class co.aikar.commands.Locales
    +
    FRENCH - Static variable in class co.aikar.commands.Locales
     
    - - - -

    G

    -
    -
    generateCommandHelp() - Method in class co.aikar.commands.CommandManager
    +

    G

    +
    +
    generateCommandHelp() - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    generateCommandHelp(String) - Method in class co.aikar.commands.CommandManager
    +
    generateCommandHelp(String) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    generateCommandHelp(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
    +
    generateCommandHelp(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    generateCommandHelp(CommandIssuer, RootCommand) - Method in class co.aikar.commands.CommandManager
    +
    generateCommandHelp(CommandIssuer, RootCommand) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    GERMAN - Static variable in class co.aikar.commands.Locales
    +
    GERMAN - Static variable in class co.aikar.commands.Locales
     
    -
    getAnnotation(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getAnnotation(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
    -
    -
    getAnnotation(Class<T>) - Method in class co.aikar.commands.CommandOperationContext
    +
    getAnnotation(Class<T>) - Method in class co.aikar.commands.CommandOperationContext
    -
    -
    getAnnotation(Class<T>) - Method in class co.aikar.commands.RegisteredCommand
    +
    getAnnotation(Class<T>) - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getAnnotationValue(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getAnnotationValue(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getAnnotationValue(Class<T>) - Method in class co.aikar.commands.CommandOperationContext
    +
    getAnnotationValue(Class<T>) - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getAnnotationValue(Class<T>, int) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getAnnotationValue(Class<T>, int) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getAnnotationValue(Class<T>, int) - Method in class co.aikar.commands.CommandOperationContext
    +
    getAnnotationValue(Class<T>, int) - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getApplicableParameters() - Method in interface co.aikar.commands.AnnotationProcessor
    +
    getApplicableParameters() - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    getArgs() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getArgs() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getArgs() - Method in class co.aikar.commands.CommandOperationContext
    +
    getArgs() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getBooleanFlagValue(String) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getBooleanFlagValue(String) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getBooleanFlagValue(String, Boolean) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getBooleanFlagValue(String, Boolean) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getCause() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getCause() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the reference to the exception or error that caused the exception implementing the Nestable to be thrown.
    -
    getCause(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getCause(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Introspects the Throwable to obtain the cause.
    -
    getCause(Throwable, String[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getCause(Throwable, String[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Introspects the Throwable to obtain the cause.
    -
    getChildren() - Method in interface co.aikar.commands.RootCommand
    +
    getChildren() - Method in interface co.aikar.commands.RootCommand
     
    -
    getCmd() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getCmd() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getColor(int) - Method in class co.aikar.commands.MessageFormatter
    +
    getColor(int) - Method in class co.aikar.commands.MessageFormatter
     
    -
    getCommand() - Method in class co.aikar.commands.CommandOperationContext
    +
    getCommand() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getCommand() - Method in class co.aikar.commands.HelpEntry
    +
    getCommand() - Method in class co.aikar.commands.HelpEntry
     
    -
    getCommand() - Method in class co.aikar.commands.RegisteredCommand
    +
    getCommand() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.CommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.CommandManager
    Gets the command completions manager
    -
    getCommandConditions() - Method in class co.aikar.commands.CommandManager
    +
    getCommandConditions() - Method in class co.aikar.commands.CommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.CommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.CommandManager
    Gets the command contexts manager
    -
    getCommandHelp() - Method in class co.aikar.commands.BaseCommand
    +
    getCommandHelp() - Method in class co.aikar.commands.BaseCommand
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    getCommandIssuer() - Method in class co.aikar.commands.CommandOperationContext
    +
    getCommandIssuer() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.CommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.CommandManager
     
    -
    getCommandLabel() - Method in class co.aikar.commands.CommandOperationContext
    +
    getCommandLabel() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getCommandManager() - Method in class co.aikar.commands.CommandOperationContext
    +
    getCommandManager() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getCommandName() - Method in class co.aikar.commands.CommandHelp
    +
    getCommandName() - Method in class co.aikar.commands.CommandHelp
     
    -
    getCommandName() - Method in interface co.aikar.commands.RootCommand
    +
    getCommandName() - Method in interface co.aikar.commands.RootCommand
     
    -
    getCommandPrefix() - Method in class co.aikar.commands.CommandHelp
    +
    getCommandPrefix() - Method in class co.aikar.commands.CommandHelp
     
    -
    getCommandPrefix() - Method in class co.aikar.commands.HelpEntry
    +
    getCommandPrefix() - Method in class co.aikar.commands.HelpEntry
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.CommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.CommandManager
     
    -
    getCommandReplacements() - Method in class co.aikar.commands.CommandManager
    +
    getCommandReplacements() - Method in class co.aikar.commands.CommandManager
    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.
    -
    getCompletions(C) - Method in interface co.aikar.commands.CommandCompletions.CommandCompletionHandler
    +
    getCompletions(C) - Method in interface co.aikar.commands.CommandCompletions.CommandCompletionHandler
     
    -
    getConditions() - Method in class co.aikar.commands.CommandParameter
    +
    getConditions() - Method in class co.aikar.commands.CommandParameter
     
    -
    getConfig() - Method in class co.aikar.commands.CommandCompletionContext
    +
    getConfig() - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getConfig() - Method in class co.aikar.commands.ConditionContext
    +
    getConfig() - Method in class co.aikar.commands.ConditionContext
     
    -
    getConfig(String) - Method in class co.aikar.commands.CommandCompletionContext
    +
    getConfig(String) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getConfig(String, String) - Method in class co.aikar.commands.CommandCompletionContext
    +
    getConfig(String, String) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getConfigs() - Method in class co.aikar.commands.CommandCompletionContext
    +
    getConfigs() - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getConfigValue(String, Integer) - Method in class co.aikar.commands.ConditionContext
    +
    getConfigValue(String, Integer) - Method in class co.aikar.commands.ConditionContext
     
    -
    getConfigValue(String, String) - Method in class co.aikar.commands.ConditionContext
    +
    getConfigValue(String, String) - Method in class co.aikar.commands.ConditionContext
     
    -
    getContext(C) - Method in interface co.aikar.commands.contexts.ContextResolver
    +
    getContext(C) - Method in interface co.aikar.commands.contexts.ContextResolver
    Parses the context of type ContextResolver into ContextResolver, or throws an exception.
    -
    getContextFlags(Class<?>) - Method in class co.aikar.commands.BaseCommand
    +
    getContextFlags(Class<?>) - Method in class co.aikar.commands.BaseCommand
     
    -
    getContextValue(Class<? extends T>) - Method in class co.aikar.commands.CommandCompletionContext
    +
    getContextValue(Class<? extends T>) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getContextValue(Class<? extends T>, Integer) - Method in class co.aikar.commands.CommandCompletionContext
    +
    getContextValue(Class<? extends T>, Integer) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getContextValueByName(Class<? extends T>, String) - Method in class co.aikar.commands.CommandCompletionContext
    +
    getContextValueByName(Class<? extends T>, String) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getCurrentCommandIssuer() - Method in class co.aikar.commands.BaseCommand
    +
    getCurrentCommandIssuer() - Method in class co.aikar.commands.BaseCommand
    Gets the current command issuer.
    -
    getCurrentCommandIssuer() - Static method in class co.aikar.commands.CommandManager
    +
    getCurrentCommandIssuer() - Static method in class co.aikar.commands.CommandManager
     
    -
    getCurrentCommandManager() - Method in class co.aikar.commands.BaseCommand
    +
    getCurrentCommandManager() - Method in class co.aikar.commands.BaseCommand
    Gets the current command manager.
    -
    getCurrentCommandManager() - Static method in class co.aikar.commands.CommandManager
    +
    getCurrentCommandManager() - Static method in class co.aikar.commands.CommandManager
     
    -
    getCurrentCommandOperationContext() - Static method in class co.aikar.commands.CommandManager
    +
    getCurrentCommandOperationContext() - Static method in class co.aikar.commands.CommandManager
     
    -
    getDefaultColor() - Method in class co.aikar.commands.MessageFormatter
    +
    getDefaultColor() - Method in class co.aikar.commands.MessageFormatter
     
    -
    getDefaultExceptionHandler() - Method in class co.aikar.commands.CommandManager
    +
    getDefaultExceptionHandler() - Method in class co.aikar.commands.CommandManager
    Gets the current default exception handler, might be null.
    -
    getDefaultFormatter() - Method in class co.aikar.commands.CommandManager
    +
    getDefaultFormatter() - Method in class co.aikar.commands.CommandManager
     
    -
    getDefaultHelpPerPage() - Method in class co.aikar.commands.CommandManager
    +
    getDefaultHelpPerPage() - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    getDefaultLocale() - Method in class co.aikar.commands.Locales
    +
    getDefaultLocale() - Method in class co.aikar.commands.Locales
     
    -
    getDefaultRegisteredCommand() - Method in class co.aikar.commands.BaseCommand
    +
    getDefaultRegisteredCommand() - Method in class co.aikar.commands.BaseCommand
     
    -
    getDefaultRegisteredCommand() - Method in interface co.aikar.commands.RootCommand
    +
    getDefaultRegisteredCommand() - Method in interface co.aikar.commands.RootCommand
     
    -
    getDefaultValue() - Method in class co.aikar.commands.CommandParameter
    +
    getDefaultValue() - Method in class co.aikar.commands.CommandParameter
     
    -
    getDefCommand() - Method in interface co.aikar.commands.RootCommand
    +
    getDefCommand() - Method in interface co.aikar.commands.RootCommand
     
    -
    getDescription() - Method in class co.aikar.commands.CommandParameter
    +
    getDescription() - Method in class co.aikar.commands.CommandParameter
     
    -
    getDescription() - Method in class co.aikar.commands.HelpEntry
    +
    getDescription() - Method in class co.aikar.commands.HelpEntry
     
    -
    getDescription() - Method in interface co.aikar.commands.RootCommand
    +
    getDescription() - Method in interface co.aikar.commands.RootCommand
     
    -
    getDisplayName(CommandIssuer) - Method in class co.aikar.commands.CommandParameter
    +
    getDisplayName(CommandIssuer) - Method in class co.aikar.commands.CommandParameter
     
    -
    getDoubleFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getDoubleFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getEntryFormatReplacements(CommandHelp, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    getEntryFormatReplacements(CommandHelp, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    Override this to control replacements
    -
    getEnumFromName(T[], String) - Static method in class co.aikar.commands.ACFUtil
    +
    getEnumFromName(T[], String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    getEnumFromName(T[], String, T) - Static method in class co.aikar.commands.ACFUtil
    +
    getEnumFromName(T[], String, T) - Static method in class co.aikar.commands.ACFUtil
     
    -
    getEnumFromOrdinal(T[], int) - Static method in class co.aikar.commands.ACFUtil
    +
    getEnumFromOrdinal(T[], int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    getExceptionHandler() - Method in class co.aikar.commands.BaseCommand
    +
    getExceptionHandler() - Method in class co.aikar.commands.BaseCommand
     
    -
    getExecCommandLabel() - Method in class co.aikar.commands.BaseCommand
    +
    getExecCommandLabel() - Method in class co.aikar.commands.BaseCommand
    Gets the root command name that the user actually typed
    -
    getExecSubcommand() - Method in class co.aikar.commands.BaseCommand
    +
    getExecSubcommand() - Method in class co.aikar.commands.BaseCommand
    Gets the actual sub command name the user typed
    -
    getFirstArg() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFirstArg() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFirstElement(Iterable<T>) - Static method in class co.aikar.commands.ACFUtil
    +
    getFirstElement(Iterable<T>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    getFlags() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlags() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlags() - Method in class co.aikar.commands.CommandParameter
    +
    getFlags() - Method in class co.aikar.commands.CommandParameter
     
    -
    getFlagValue(String, Double) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, Double) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlagValue(String, Float) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, Float) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlagValue(String, Integer) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, Integer) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlagValue(String, Long) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, Long) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFlagValue(String, String) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFlagValue(String, String) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFloatFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getFloatFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getFormat(MessageType) - Method in class co.aikar.commands.CommandManager
    +
    getFormat(MessageType) - Method in class co.aikar.commands.CommandManager
     
    -
    getFullStackTrace(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getFullStackTrace(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    A way to get the entire nested stack-trace of an throwable.
    -
    getHeaderFooterFormatReplacements(CommandHelp) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    getHeaderFooterFormatReplacements(CommandHelp) - Method in class co.aikar.commands.CommandHelpFormatter
    Override this to control replacements
    -
    getHelpEntries() - Method in class co.aikar.commands.CommandHelp
    +
    getHelpEntries() - Method in class co.aikar.commands.CommandHelp
     
    -
    getHelpFormatter() - Method in class co.aikar.commands.CommandManager
    +
    getHelpFormatter() - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    getHelpText() - Method in class co.aikar.commands.RegisteredCommand
    +
    getHelpText() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getIndex() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getIndex() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getInput() - Method in class co.aikar.commands.CommandCompletionContext
    +
    getInput() - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getIntFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getIntFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getIssuer() - Method in class co.aikar.commands.CommandCompletionContext
    +
    getIssuer() - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    getIssuer() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getIssuer() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getIssuer() - Method in class co.aikar.commands.CommandHelp
    +
    getIssuer() - Method in class co.aikar.commands.CommandHelp
     
    -
    getIssuer() - Method in interface co.aikar.commands.CommandIssuer
    +
    getIssuer() - Method in interface co.aikar.commands.CommandIssuer
    Gets the issuer in the platforms native object
    -
    getIssuer() - Method in class co.aikar.commands.ConditionContext
    +
    getIssuer() - Method in class co.aikar.commands.ConditionContext
     
    -
    getIssuerLocale(CommandIssuer) - Method in class co.aikar.commands.CommandManager
    +
    getIssuerLocale(CommandIssuer) - Method in class co.aikar.commands.CommandManager
     
    -
    getLastArg() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getLastArg() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getLastCommandOperationContext() - Method in class co.aikar.commands.BaseCommand
    +
    getLastCommandOperationContext() - Method in class co.aikar.commands.BaseCommand
    Returns a reference to the last used CommandOperationContext.
    -
    getLastCommandOperationContext() - Method in class co.aikar.commands.ForwardingCommand
    +
    getLastCommandOperationContext() - Method in class co.aikar.commands.ForwardingCommand
     
    -
    getLocales() - Method in class co.aikar.commands.CommandManager
    +
    getLocales() - Method in class co.aikar.commands.CommandManager
    Returns a Locales Manager to add and modify language tables for your commands.
    -
    getLongFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getLongFlagValue(String, Number) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getManager() - Method in class co.aikar.commands.CommandHelp
    +
    getManager() - Method in class co.aikar.commands.CommandHelp
     
    -
    getManager() - Method in interface co.aikar.commands.CommandIssuer
    +
    getManager() - Method in interface co.aikar.commands.CommandIssuer
     
    -
    getManager() - Method in class co.aikar.commands.CommandParameter
    +
    getManager() - Method in class co.aikar.commands.CommandParameter
     
    -
    getManager() - Method in interface co.aikar.commands.RootCommand
    +
    getManager() - Method in interface co.aikar.commands.RootCommand
     
    -
    getMessage() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getMessage() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the error message of this and any nested Throwable.
    -
    getMessage(int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getMessage(int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the error message of the Throwable in the chain of Throwables at the specified index, numbered from 0.
    -
    getMessage(CommandIssuer, MessageKeyProvider) - Method in class co.aikar.commands.Locales
    +
    getMessage(CommandIssuer, MessageKeyProvider) - Method in class co.aikar.commands.Locales
     
    -
    getMessageKey() - Method in enum co.aikar.commands.MessageKeys
    +
    getMessageKey() - Method in enum co.aikar.commands.MessageKeys
     
    -
    getMessages() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getMessages() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the error message of this and any nested Throwables in an array of Strings, one element for each message.
    -
    getName() - Method in class co.aikar.commands.BaseCommand
    +
    getName() - Method in class co.aikar.commands.BaseCommand
     
    -
    getName() - Method in class co.aikar.commands.CommandParameter
    +
    getName() - Method in class co.aikar.commands.CommandParameter
     
    -
    getNextParam() - Method in class co.aikar.commands.CommandParameter
    +
    getNextParam() - Method in class co.aikar.commands.CommandParameter
     
    -
    getNumParams() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getNumParams() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getOptionalMessage(CommandIssuer, MessageKey) - Method in class co.aikar.commands.Locales
    +
    getOptionalMessage(CommandIssuer, MessageKey) - Method in class co.aikar.commands.Locales
     
    -
    getOrigArgs() - Method in class co.aikar.commands.BaseCommand
    +
    getOrigArgs() - Method in class co.aikar.commands.BaseCommand
    Gets the actual args in string form the user typed
    -
    getPage() - Method in class co.aikar.commands.CommandHelp
    +
    getPage() - Method in class co.aikar.commands.CommandHelp
     
    -
    getParam() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getParam() - Method in class co.aikar.commands.CommandExecutionContext
    -
    Deprecated.
    +
    Deprecated.
    -
    getParameter() - Method in class co.aikar.commands.CommandParameter
    +
    getParameter() - Method in class co.aikar.commands.CommandParameter
     
    -
    getParameterFormatReplacements(CommandHelp, CommandParameter, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    getParameterFormatReplacements(CommandHelp, CommandParameter, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    Override this to control replacements
    -
    getParameterPermissions() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getParameterPermissions() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getParameters() - Method in class co.aikar.commands.HelpEntry
    +
    getParameters() - Method in class co.aikar.commands.HelpEntry
     
    -
    getParameterSyntax() - Method in class co.aikar.commands.HelpEntry
    +
    getParameterSyntax() - Method in class co.aikar.commands.HelpEntry
     
    -
    getParameterSyntax(CommandIssuer) - Method in class co.aikar.commands.HelpEntry
    +
    getParameterSyntax(CommandIssuer) - Method in class co.aikar.commands.HelpEntry
     
    -
    getParamIndex() - Method in class co.aikar.commands.CommandParameter
    +
    getParamIndex() - Method in class co.aikar.commands.CommandParameter
     
    -
    getPassedArgs() - Method in class co.aikar.commands.CommandExecutionContext
    +
    getPassedArgs() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getPermission() - Method in class co.aikar.commands.RegisteredCommand
    +
    getPermission() - Method in class co.aikar.commands.RegisteredCommand
    -
    Deprecated. 
    +
    Deprecated. 
    -
    getPerPage() - Method in class co.aikar.commands.CommandHelp
    +
    getPerPage() - Method in class co.aikar.commands.CommandHelp
     
    -
    getPrefSubCommand() - Method in class co.aikar.commands.RegisteredCommand
    +
    getPrefSubCommand() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getRegisteredCommand() - Method in class co.aikar.commands.CommandOperationContext
    +
    getRegisteredCommand() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    getRegisteredCommands() - Method in class co.aikar.commands.BaseCommand
    +
    getRegisteredCommands() - Method in class co.aikar.commands.BaseCommand
     
    -
    getRegisteredCommands() - Method in class co.aikar.commands.ForwardingCommand
    +
    getRegisteredCommands() - Method in class co.aikar.commands.ForwardingCommand
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.CommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.CommandManager
     
    -
    getRequiredPermissions() - Method in class co.aikar.commands.BaseCommand
    +
    getRequiredPermissions() - Method in class co.aikar.commands.BaseCommand
     
    -
    getRequiredPermissions() - Method in class co.aikar.commands.CommandParameter
    +
    getRequiredPermissions() - Method in class co.aikar.commands.CommandParameter
     
    -
    getRequiredPermissions() - Method in class co.aikar.commands.ForwardingCommand
    +
    getRequiredPermissions() - Method in class co.aikar.commands.ForwardingCommand
     
    -
    getRequiredPermissions() - Method in class co.aikar.commands.RegisteredCommand
    +
    getRequiredPermissions() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getResolvedArg(Class<?>...) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getResolvedArg(Class<?>...) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getResolvedArg(String) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getResolvedArg(String) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getResolvedArg(String, Class<?>...) - Method in class co.aikar.commands.CommandExecutionContext
    +
    getResolvedArg(String, Class<?>...) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    getResolver() - Method in class co.aikar.commands.CommandParameter
    +
    getResolver() - Method in class co.aikar.commands.CommandParameter
     
    -
    getResolver(Class<?>) - Method in class co.aikar.commands.CommandContexts
    +
    getResolver(Class<?>) - Method in class co.aikar.commands.CommandContexts
     
    -
    getRootCause(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getRootCause(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Introspects the Throwable to obtain the root cause.
    -
    getRootCommand(String) - Method in class co.aikar.commands.CommandManager
    +
    getRootCommand(String) - Method in class co.aikar.commands.CommandManager
     
    -
    getSearch() - Method in class co.aikar.commands.CommandHelp
    +
    getSearch() - Method in class co.aikar.commands.CommandHelp
     
    -
    getSearchScore() - Method in class co.aikar.commands.HelpEntry
    +
    getSearchScore() - Method in class co.aikar.commands.HelpEntry
     
    -
    getSearchTags() - Method in class co.aikar.commands.HelpEntry
    +
    getSearchTags() - Method in class co.aikar.commands.HelpEntry
     
    -
    getSelectedEntry() - Method in class co.aikar.commands.CommandHelp
    +
    getSelectedEntry() - Method in class co.aikar.commands.CommandHelp
     
    -
    getStackTrace(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getStackTrace(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Gets the stack trace from a Throwable as a String.
    -
    getSubCommands() - Method in class co.aikar.commands.BaseCommand
    +
    getSubCommands() - Method in class co.aikar.commands.BaseCommand
     
    -
    getSubCommands() - Method in interface co.aikar.commands.RootCommand
    +
    getSubCommands() - Method in interface co.aikar.commands.RootCommand
     
    -
    getSupportedLanguages() - Method in class co.aikar.commands.CommandManager
    +
    getSupportedLanguages() - Method in class co.aikar.commands.CommandManager
    Gets a list of all currently supported languages for this manager.
    -
    getSyntax() - Method in class co.aikar.commands.CommandParameter
    +
    getSyntax() - Method in class co.aikar.commands.CommandParameter
     
    -
    getSyntax(CommandIssuer) - Method in class co.aikar.commands.CommandParameter
    +
    getSyntax(CommandIssuer) - Method in class co.aikar.commands.CommandParameter
     
    -
    getSyntaxText() - Method in class co.aikar.commands.RegisteredCommand
    +
    getSyntaxText() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getSyntaxText(CommandIssuer) - Method in class co.aikar.commands.RegisteredCommand
    +
    getSyntaxText(CommandIssuer) - Method in class co.aikar.commands.RegisteredCommand
     
    -
    getTabCompletions(CommandIssuer, String, String[]) - Method in interface co.aikar.commands.RootCommand
    +
    getTabCompletions(CommandIssuer, String, String[]) - Method in interface co.aikar.commands.RootCommand
     
    -
    getTabCompletions(CommandIssuer, String, String[], boolean) - Method in interface co.aikar.commands.RootCommand
    +
    getTabCompletions(CommandIssuer, String, String[], boolean) - Method in interface co.aikar.commands.RootCommand
     
    -
    getTabCompletions(CommandIssuer, String, String[], boolean, boolean) - Method in interface co.aikar.commands.RootCommand
    +
    getTabCompletions(CommandIssuer, String, String[], boolean, boolean) - Method in interface co.aikar.commands.RootCommand
     
    -
    getThrowable(int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getThrowable(int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the Throwable in the chain of Throwables at the specified index, numbered from 0.
    -
    getThrowableCount() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getThrowableCount() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the number of nested Throwables represented by this Nestable, including this Nestable.
    -
    getThrowableCount(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getThrowableCount(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Counts the number of Throwable objects in the exception chain.
    -
    getThrowableList(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getThrowableList(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the list of Throwable objects in the exception chain.
    -
    getThrowables() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    getThrowables() - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns this Nestable and any nested Throwables in an array of Throwables, one element for each Throwable.
    -
    getThrowables(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    getThrowables(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the list of Throwable objects in the exception chain.
    -
    getTotalPages() - Method in class co.aikar.commands.CommandHelp
    +
    getTotalPages() - Method in class co.aikar.commands.CommandHelp
     
    -
    getTotalResults() - Method in class co.aikar.commands.CommandHelp
    +
    getTotalResults() - Method in class co.aikar.commands.CommandHelp
     
    -
    getType() - Method in class co.aikar.commands.CommandParameter
    +
    getType() - Method in class co.aikar.commands.CommandParameter
     
    -
    getUniqueId() - Method in interface co.aikar.commands.CommandIssuer
    +
    getUniqueId() - Method in interface co.aikar.commands.CommandIssuer
     
    -
    getUniquePermission() - Method in interface co.aikar.commands.RootCommand
    +
    getUniquePermission() - Method in interface co.aikar.commands.RootCommand
     
    -
    getUsage() - Method in interface co.aikar.commands.RootCommand
    +
    getUsage() - Method in interface co.aikar.commands.RootCommand
     
    -
    getValues() - Method in class co.aikar.commands.CommandParameter
    +
    getValues() - Method in class co.aikar.commands.CommandParameter
     
    -
    GREEK - Static variable in class co.aikar.commands.Locales
    +
    GREEK - Static variable in class co.aikar.commands.Locales
     
    - - - -

    H

    -
    -
    handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in class co.aikar.commands.CommandManager
    +

    H

    +
    +
    handleUncaughtException(BaseCommand, RegisteredCommand, CommandIssuer, List<String>, Throwable) - Method in class co.aikar.commands.CommandManager
     
    -
    hasAnnotation(Class<? extends Annotation>) - Method in class co.aikar.commands.CommandOperationContext
    +
    hasAnnotation(Class<? extends Annotation>) - Method in class co.aikar.commands.CommandOperationContext
     
    -
    hasAnnotation(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
    +
    hasAnnotation(Class<T>) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    hasAnyPermission(CommandIssuer) - Method in interface co.aikar.commands.RootCommand
    +
    hasAnyPermission(CommandIssuer) - Method in interface co.aikar.commands.RootCommand
     
    -
    hasConfig(String) - Method in class co.aikar.commands.CommandCompletionContext
    +
    hasConfig(String) - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    hasConfig(String) - Method in class co.aikar.commands.ConditionContext
    +
    hasConfig(String) - Method in class co.aikar.commands.ConditionContext
     
    -
    hasFlag(String) - Method in class co.aikar.commands.CommandExecutionContext
    +
    hasFlag(String) - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    hashCode() - Method in class co.aikar.commands.MessageType
    +
    hashCode() - Method in class co.aikar.commands.MessageType
     
    -
    hasIntersection(Collection<T>, Collection<T>) - Static method in class co.aikar.commands.ACFUtil
    +
    hasIntersection(Collection<T>, Collection<T>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    hasPermission(CommandIssuer) - Method in class co.aikar.commands.BaseCommand
    +
    hasPermission(CommandIssuer) - Method in class co.aikar.commands.BaseCommand
     
    -
    hasPermission(CommandIssuer) - Method in class co.aikar.commands.ForwardingCommand
    +
    hasPermission(CommandIssuer) - Method in class co.aikar.commands.ForwardingCommand
     
    -
    hasPermission(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
    +
    hasPermission(CommandIssuer, String) - Method in class co.aikar.commands.CommandManager
     
    -
    hasPermission(CommandIssuer, Set<String>) - Method in class co.aikar.commands.CommandManager
    +
    hasPermission(CommandIssuer, Set<String>) - Method in class co.aikar.commands.CommandManager
     
    -
    hasPermission(Object) - Method in class co.aikar.commands.BaseCommand
    +
    hasPermission(Object) - Method in class co.aikar.commands.BaseCommand
     
    -
    hasPermission(Object) - Method in class co.aikar.commands.ForwardingCommand
    +
    hasPermission(Object) - Method in class co.aikar.commands.ForwardingCommand
     
    -
    hasPermission(String) - Method in interface co.aikar.commands.CommandIssuer
    +
    hasPermission(String) - Method in interface co.aikar.commands.CommandIssuer
    Has permission node
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.CommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.CommandManager
     
    -
    HEBREW - Static variable in class co.aikar.commands.Locales
    +
    HEBREW - Static variable in class co.aikar.commands.Locales
     
    -
    help(CommandIssuer, String[]) - Method in class co.aikar.commands.BaseCommand
    +
    help(CommandIssuer, String[]) - Method in class co.aikar.commands.BaseCommand
     
    -
    help(Object, String[]) - Method in class co.aikar.commands.BaseCommand
    +
    help(Object, String[]) - Method in class co.aikar.commands.BaseCommand
     
    -
    HELP - Static variable in class co.aikar.commands.MessageType
    +
    HELP - Static variable in class co.aikar.commands.MessageType
     
    -
    HELP_DETAILED_COMMAND_FORMAT - co.aikar.commands.MessageKeys
    +
    HELP_DETAILED_COMMAND_FORMAT - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_DETAILED_HEADER - co.aikar.commands.MessageKeys
    +
    HELP_DETAILED_HEADER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_DETAILED_PARAMETER_FORMAT - co.aikar.commands.MessageKeys
    +
    HELP_DETAILED_PARAMETER_FORMAT - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_FORMAT - co.aikar.commands.MessageKeys
    +
    HELP_FORMAT - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_HEADER - co.aikar.commands.MessageKeys
    +
    HELP_HEADER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_NO_RESULTS - co.aikar.commands.MessageKeys
    +
    HELP_NO_RESULTS - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_PAGE_INFORMATION - co.aikar.commands.MessageKeys
    +
    HELP_PAGE_INFORMATION - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HELP_SEARCH_HEADER - co.aikar.commands.MessageKeys
    +
    HELP_SEARCH_HEADER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    HelpCommand - Annotation Type in co.aikar.commands.annotation
    +
    HelpCommand - Annotation Type in co.aikar.commands.annotation
    A Shortcut for specifying CatchUnknown, Default and Subcommand on a method.
    -
    HelpEntry - Class in co.aikar.commands
    +
    HelpEntry - Class in co.aikar.commands
     
    -
    helpFormatter - Variable in class co.aikar.commands.CommandManager
    +
    helpFormatter - Variable in class co.aikar.commands.CommandManager
     
    -
    helpSearchTags - Variable in class co.aikar.commands.RegisteredCommand
    +
    helpSearchTags - Variable in class co.aikar.commands.RegisteredCommand
     
    -
    HelpSearchTags - Annotation Type in co.aikar.commands.annotation
    +
    HelpSearchTags - Annotation Type in co.aikar.commands.annotation
    Defines additional keywords to feed into the search help system.
    -
    HINDI - Static variable in class co.aikar.commands.Locales
    +
    HINDI - Static variable in class co.aikar.commands.Locales
     
    -
    HUNGARIAN - Static variable in class co.aikar.commands.Locales
    +
    HUNGARIAN - Static variable in class co.aikar.commands.Locales
     
    - - - -

    I

    -
    -
    INDEX_NOT_FOUND - Static variable in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +

    I

    +
    +
    INDEX_NOT_FOUND - Static variable in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    The index value when an element is not found in a list or array: -1.
    -
    indexOf(Object[], Object) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    indexOf(Object[], Object) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Finds the index of the given object in the array.
    -
    indexOf(Object[], Object, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    indexOf(Object[], Object, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Finds the index of the given object in the array starting at the given index.
    -
    indexOf(String, String[]) - Static method in class co.aikar.commands.ACFUtil
    +
    indexOf(String, String[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    indexOfThrowable(Class) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    indexOfThrowable(Class) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the index, numbered from 0, of the first occurrence of the specified type, or a subclass, in the chain of Throwables.
    -
    indexOfThrowable(Class, int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    indexOfThrowable(Class, int) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Returns the index, numbered from 0, of the first Throwable that matches the specified type, or a subclass, in the chain of Throwables with an index greater than or equal to the specified index.
    -
    indexOfThrowable(Throwable, Class) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    indexOfThrowable(Throwable, Class) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the (zero based) index of the first Throwable that matches the specified class (exactly) in the exception chain.
    -
    indexOfThrowable(Throwable, Class, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    indexOfThrowable(Throwable, Class, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the (zero based) index of the first Throwable that matches the specified type in the exception chain from a specified index.
    -
    indexOfType(Throwable, Class) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    indexOfType(Throwable, Class) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the (zero based) index of the first Throwable that matches the specified class or subclass in the exception chain.
    -
    indexOfType(Throwable, Class, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    indexOfType(Throwable, Class, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Returns the (zero based) index of the first Throwable that matches the specified type in the exception chain from a specified index.
    -
    INFO - Static variable in class co.aikar.commands.MessageType
    +
    INFO - Static variable in class co.aikar.commands.MessageType
     
    -
    INFO_MESSAGE - co.aikar.commands.MessageKeys
    +
    INFO_MESSAGE - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    intersection(Collection<T>, Collection<T>) - Static method in class co.aikar.commands.ACFUtil
    +
    intersection(Collection<T>, Collection<T>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    intToRoman(int) - Static method in class co.aikar.commands.ACFUtil
    +
    intToRoman(int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    INVALID_SYNTAX - co.aikar.commands.MessageKeys
    +
    INVALID_SYNTAX - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    InvalidCommandArgument - Exception in co.aikar.commands
    +
    InvalidCommandArgument - Exception in co.aikar.commands
     
    -
    InvalidCommandArgument() - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument() - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(boolean) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(boolean) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(MessageKey, boolean, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(MessageKey, boolean, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(MessageKeyProvider, boolean, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(MessageKeyProvider, boolean, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(MessageKeyProvider, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(MessageKeyProvider, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(MessageKey, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(MessageKey, String...) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(String) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(String) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandArgument(String, boolean) - Constructor for exception co.aikar.commands.InvalidCommandArgument
    +
    InvalidCommandArgument(String, boolean) - Constructor for exception co.aikar.commands.InvalidCommandArgument
     
    -
    InvalidCommandContextException - Exception in co.aikar.commands
    +
    InvalidCommandContextException - Exception in co.aikar.commands
     
    -
    isAsync() - Method in class co.aikar.commands.CommandCompletionContext
    +
    isAsync() - Method in class co.aikar.commands.CommandCompletionContext
     
    -
    isAsync() - Method in class co.aikar.commands.CommandOperationContext
    +
    isAsync() - Method in class co.aikar.commands.CommandOperationContext
     
    -
    isBetween(float, double, double) - Static method in class co.aikar.commands.ACFUtil
    +
    isBetween(float, double, double) - Static method in class co.aikar.commands.ACFUtil
     
    -
    isCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    isCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Tests if the list of method names used in the search for Throwable objects include the given name.
    -
    isCommandIssuer() - Method in class co.aikar.commands.CommandParameter
    +
    isCommandIssuer() - Method in class co.aikar.commands.CommandParameter
     
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.CommandManager
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.CommandManager
     
    -
    isDelimiter(char, char[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    isDelimiter(char, char[]) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Is the character a delimiter.
    -
    isDouble(String) - Static method in class co.aikar.commands.ACFUtil
    +
    isDouble(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    isFloat(String) - Static method in class co.aikar.commands.ACFUtil
    +
    isFloat(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    isInteger(String) - Static method in class co.aikar.commands.ACFUtil
    +
    isInteger(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    isLast() - Method in class co.aikar.commands.CommandParameter
    +
    isLast() - Method in class co.aikar.commands.CommandParameter
     
    -
    isLastArg() - Method in class co.aikar.commands.CommandExecutionContext
    +
    isLastArg() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    isLastPage() - Method in class co.aikar.commands.CommandHelp
    +
    isLastPage() - Method in class co.aikar.commands.CommandHelp
     
    -
    isLoggingUnhandledExceptions() - Method in class co.aikar.commands.CommandManager
    +
    isLoggingUnhandledExceptions() - Method in class co.aikar.commands.CommandManager
     
    -
    isNestedThrowable(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    isNestedThrowable(Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Checks whether this Throwable class can store a cause.
    -
    isNumber(String) - Static method in class co.aikar.commands.ACFUtil
    +
    isNumber(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    isNumeric(CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    isNumeric(CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Checks if the CharSequence contains only Unicode digits.
    -
    isOnlyPage() - Method in class co.aikar.commands.CommandHelp
    +
    isOnlyPage() - Method in class co.aikar.commands.CommandHelp
     
    -
    isOptional() - Method in class co.aikar.commands.CommandExecutionContext
    +
    isOptional() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    isOptional() - Method in class co.aikar.commands.CommandParameter
    +
    isOptional() - Method in class co.aikar.commands.CommandParameter
     
    -
    isOptionalInput() - Method in class co.aikar.commands.CommandParameter
    +
    isOptionalInput() - Method in class co.aikar.commands.CommandParameter
     
    -
    isOptionalResolver() - Method in class co.aikar.commands.CommandParameter
    +
    isOptionalResolver() - Method in class co.aikar.commands.CommandParameter
     
    -
    isPlayer() - Method in interface co.aikar.commands.CommandIssuer
    +
    isPlayer() - Method in interface co.aikar.commands.CommandIssuer
    Is this issue a player, or server/console sender
    -
    isPrivate() - Method in class co.aikar.commands.RegisteredCommand
    +
    isPrivate() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    issuer - Variable in class co.aikar.commands.CommandCompletionContext
    +
    issuer - Variable in class co.aikar.commands.CommandCompletionContext
     
    -
    issuer - Variable in class co.aikar.commands.CommandExecutionContext
    +
    issuer - Variable in class co.aikar.commands.CommandExecutionContext
     
    -
    IssuerAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    +
    IssuerAwareContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
     
    -
    IssuerLocaleChangedCallback<I extends CommandIssuer> - Interface in co.aikar.commands
    +
    IssuerLocaleChangedCallback<I extends CommandIssuer> - Interface in co.aikar.commands
     
    -
    IssuerOnlyContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    +
    IssuerOnlyContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    -
    issuersLocale - Variable in class co.aikar.commands.CommandManager
    +
    issuersLocale - Variable in class co.aikar.commands.CommandManager
     
    -
    isThrowableNested() - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    isThrowableNested() - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Checks if the Throwable class has a getCause method.
    -
    isTruthy(String) - Static method in class co.aikar.commands.ACFUtil
    +
    isTruthy(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    ITALIAN - Static variable in class co.aikar.commands.Locales
    +
    ITALIAN - Static variable in class co.aikar.commands.Locales
     
    - - - -

    J

    -
    -
    JAPANESE - Static variable in class co.aikar.commands.Locales
    +

    J

    +
    +
    JAPANESE - Static variable in class co.aikar.commands.Locales
     
    -
    join(byte[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(byte[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(byte[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(byte[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(char[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(char[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(char[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(char[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(double[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(double[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(double[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(double[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(float[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(float[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(float[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(float[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(int[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(int[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(int[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(int[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(long[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(long[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(long[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(long[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(short[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(short[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(short[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(short[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(Iterable<?>, char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Iterable<?>, char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided Iterable into a single String containing the provided elements.
    -
    join(Iterable<?>, String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Iterable<?>, String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided Iterable into a single String containing the provided elements.
    -
    join(Object[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Object[], char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(Object[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Object[], char, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(Object[], String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Object[], String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(Object[], String, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Object[], String, int, int) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    join(String[]) - Static method in class co.aikar.commands.ACFUtil
    +
    join(String[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(String[], char) - Static method in class co.aikar.commands.ACFUtil
    +
    join(String[], char) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(String[], int) - Static method in class co.aikar.commands.ACFUtil
    +
    join(String[], int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(String[], int, char) - Static method in class co.aikar.commands.ACFUtil
    +
    join(String[], int, char) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(String[], String) - Static method in class co.aikar.commands.ACFUtil
    +
    join(String[], String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(Collection<String>) - Static method in class co.aikar.commands.ACFUtil
    +
    join(Collection<String>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(Collection<String>, String) - Static method in class co.aikar.commands.ACFUtil
    +
    join(Collection<String>, String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    join(Iterator<?>, char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Iterator<?>, char) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided Iterator into a single String containing the provided elements.
    -
    join(Iterator<?>, String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(Iterator<?>, String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided Iterator into a single String containing the provided elements.
    -
    join(T...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    join(T...) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Joins the elements of the provided array into a single String containing the provided list of elements.
    -
    joinArgs() - Method in class co.aikar.commands.CommandExecutionContext
    +
    joinArgs() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    joinArgs(String) - Method in class co.aikar.commands.CommandExecutionContext
    +
    joinArgs(String) - Method in class co.aikar.commands.CommandExecutionContext
     
    - - - -

    K

    -
    -
    KOREAN - Static variable in class co.aikar.commands.Locales
    +

    K

    +
    +
    KOREAN - Static variable in class co.aikar.commands.Locales
     
    - - - -

    L

    -
    -
    LATIN - Static variable in class co.aikar.commands.Locales
    +

    L

    +
    +
    LATIN - Static variable in class co.aikar.commands.Locales
     
    -
    limit(String, int) - Static method in class co.aikar.commands.ACFUtil
    +
    limit(String, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    loadLanguages() - Method in class co.aikar.commands.Locales
    +
    loadLanguages() - Method in class co.aikar.commands.Locales
     
    -
    loadMissingBundles() - Method in class co.aikar.commands.Locales
    +
    loadMissingBundles() - Method in class co.aikar.commands.Locales
    Looks for all previously loaded bundles, and if any new Supported Languages have been added, load them.
    -
    localeChangedCallbacks - Variable in class co.aikar.commands.CommandManager
    +
    localeChangedCallbacks - Variable in class co.aikar.commands.CommandManager
     
    -
    Locales - Class in co.aikar.commands
    +
    Locales - Class in co.aikar.commands
     
    -
    Locales(CommandManager) - Constructor for class co.aikar.commands.Locales
    +
    Locales(CommandManager) - Constructor for class co.aikar.commands.Locales
     
    -
    log(LogLevel, String) - Method in class co.aikar.commands.CommandManager
    +
    log(LogLevel, String) - Method in class co.aikar.commands.CommandManager
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.CommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.CommandManager
     
    -
    ltrim(String) - Static method in class co.aikar.commands.ACFUtil
    +
    ltrim(String) - Static method in class co.aikar.commands.ACFUtil
     
    - - - -

    M

    -
    -
    manager - Variable in class co.aikar.commands.CommandContexts
    +

    M

    +
    +
    manager - Variable in class co.aikar.commands.CommandContexts
     
    -
    MessageFormatter<FT> - Class in co.aikar.commands
    +
    MessageFormatter<FT> - Class in co.aikar.commands
    Handles formatting Messages and managing colors
    -
    MessageFormatter(FT...) - Constructor for class co.aikar.commands.MessageFormatter
    +
    MessageFormatter(FT...) - Constructor for class co.aikar.commands.MessageFormatter
     
    -
    MessageKeys - Enum in co.aikar.commands
    +
    MessageKeys - Enum in co.aikar.commands
    Enum Name = MessageKey in lowercase prefixed with acf-core.
    -
    MessageType - Class in co.aikar.commands
    +
    MessageType - Class in co.aikar.commands
     
    -
    MessageType() - Constructor for class co.aikar.commands.MessageType
    +
    MessageType() - Constructor for class co.aikar.commands.MessageType
     
    -
    MUST_BE_A_NUMBER - co.aikar.commands.MessageKeys
    +
    MUST_BE_A_NUMBER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    MUST_BE_MAX_LENGTH - co.aikar.commands.MessageKeys
    +
    MUST_BE_MAX_LENGTH - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    MUST_BE_MIN_LENGTH - co.aikar.commands.MessageKeys
    +
    MUST_BE_MIN_LENGTH - Enum constant in enum co.aikar.commands.MessageKeys
     
    - - - -

    N

    -
    -
    Name - Annotation Type in co.aikar.commands.annotation
    +

    N

    +
    +
    Name - Annotation Type in co.aikar.commands.annotation
     
    -
    NO_COMMAND_MATCHED_SEARCH - co.aikar.commands.MessageKeys
    +
    NO_COMMAND_MATCHED_SEARCH - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    normalize(String) - Static method in class co.aikar.commands.ACFUtil
    +
    normalize(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    NORWEGIAN_BOKMAAL - Static variable in class co.aikar.commands.Locales
    +
    NORWEGIAN_BOKMAAL - Static variable in class co.aikar.commands.Locales
     
    -
    NORWEGIAN_NYNORSK - Static variable in class co.aikar.commands.Locales
    +
    NORWEGIAN_NYNORSK - Static variable in class co.aikar.commands.Locales
     
    -
    NOT_ALLOWED_ON_CONSOLE - co.aikar.commands.MessageKeys
    +
    NOT_ALLOWED_ON_CONSOLE - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    notifyLocaleChange(I, Locale, Locale) - Method in class co.aikar.commands.CommandManager
    +
    notifyLocaleChange(I, Locale, Locale) - Method in class co.aikar.commands.CommandManager
     
    -
    nullDefault(Object, Object) - Static method in class co.aikar.commands.ACFUtil
    +
    nullDefault(Object, Object) - Static method in class co.aikar.commands.ACFUtil
     
    - - - -

    O

    -
    -
    obtainRootCommand(String) - Method in class co.aikar.commands.CommandManager
    +

    O

    +
    +
    obtainRootCommand(String) - Method in class co.aikar.commands.CommandManager
     
    -
    onBaseCommandRegister(BaseCommand, T) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onBaseCommandRegister(BaseCommand, T) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onCommandRegistered(RegisteredCommand, T) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onCommandRegistered(RegisteredCommand, T) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onIssuerLocaleChange(I, Locale, Locale) - Method in interface co.aikar.commands.IssuerLocaleChangedCallback
    +
    onIssuerLocaleChange(I, Locale, Locale) - Method in interface co.aikar.commands.IssuerLocaleChangedCallback
     
    -
    onLocaleChange(IssuerLocaleChangedCallback<I>) - Method in class co.aikar.commands.CommandManager
    +
    onLocaleChange(IssuerLocaleChangedCallback<I>) - Method in class co.aikar.commands.CommandManager
     
    -
    onParameterRegistered(RegisteredCommand, int, Parameter, T) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onParameterRegistered(RegisteredCommand, int, Parameter, T) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPostComand(CommandOperationContext) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onPostComand(CommandOperationContext) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPostContextResolution(CommandExecutionContext, Object) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onPostContextResolution(CommandExecutionContext, Object) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPostContextResolution(CommandExecutionContext, Object) - Method in class co.aikar.commands.processors.ConditionsProcessor
    +
    onPostContextResolution(CommandExecutionContext, Object) - Method in class co.aikar.commands.processors.ConditionsProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPreComand(CommandOperationContext) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onPreComand(CommandOperationContext) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPreComand(CommandOperationContext) - Method in class co.aikar.commands.processors.ConditionsProcessor
    +
    onPreComand(CommandOperationContext) - Method in class co.aikar.commands.processors.ConditionsProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    onPreContextResolution(CommandExecutionContext) - Method in interface co.aikar.commands.AnnotationProcessor
    +
    onPreContextResolution(CommandExecutionContext) - Method in interface co.aikar.commands.AnnotationProcessor
    -
    Deprecated.
    +
    Deprecated.
     
    -
    Optional - Annotation Type in co.aikar.commands.annotation
    +
    Optional - Annotation Type in co.aikar.commands.annotation
    Marks the parameter this is attached to as optional.
    -
    OptionalContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    +
    OptionalContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    The same as ContextResolver, however it can accept a null context.
    - - - -

    P

    -
    -
    padLeft(String, int) - Static method in class co.aikar.commands.ACFUtil
    +

    P

    +
    +
    padLeft(String, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    padRight(String, int) - Static method in class co.aikar.commands.ACFUtil
    +
    padRight(String, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseBigNumber(String, boolean) - Static method in class co.aikar.commands.ACFUtil
    +
    parseBigNumber(String, boolean) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseDouble(String) - Static method in class co.aikar.commands.ACFUtil
    +
    parseDouble(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseDouble(String, Double) - Static method in class co.aikar.commands.ACFUtil
    +
    parseDouble(String, Double) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseFloat(String) - Static method in class co.aikar.commands.ACFUtil
    +
    parseFloat(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseFloat(String, Float) - Static method in class co.aikar.commands.ACFUtil
    +
    parseFloat(String, Float) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseInt(String) - Static method in class co.aikar.commands.ACFUtil
    +
    parseInt(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseInt(String, Integer) - Static method in class co.aikar.commands.ACFUtil
    +
    parseInt(String, Integer) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseLong(String) - Static method in class co.aikar.commands.ACFUtil
    +
    parseLong(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseLong(String, Long) - Static method in class co.aikar.commands.ACFUtil
    +
    parseLong(String, Long) - Static method in class co.aikar.commands.ACFUtil
     
    -
    parseNumber(String, boolean) - Static method in class co.aikar.commands.ACFUtil
    +
    parseNumber(String, boolean) - Static method in class co.aikar.commands.ACFUtil
     
    -
    PERMISSION_DENIED - co.aikar.commands.MessageKeys
    +
    PERMISSION_DENIED - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    PERMISSION_DENIED_PARAMETER - co.aikar.commands.MessageKeys
    +
    PERMISSION_DENIED_PARAMETER - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    PLEASE_SPECIFY_AT_LEAST - co.aikar.commands.MessageKeys
    +
    PLEASE_SPECIFY_AT_LEAST - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    PLEASE_SPECIFY_AT_MOST - co.aikar.commands.MessageKeys
    +
    PLEASE_SPECIFY_AT_MOST - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    PLEASE_SPECIFY_ONE_OF - co.aikar.commands.MessageKeys
    +
    PLEASE_SPECIFY_ONE_OF - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    POLISH - Static variable in class co.aikar.commands.Locales
    +
    POLISH - Static variable in class co.aikar.commands.Locales
     
    -
    popFirstArg() - Method in class co.aikar.commands.CommandExecutionContext
    +
    popFirstArg() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    popLastArg() - Method in class co.aikar.commands.CommandExecutionContext
    +
    popLastArg() - Method in class co.aikar.commands.CommandExecutionContext
     
    -
    PORTUGUESE - Static variable in class co.aikar.commands.Locales
    +
    PORTUGUESE - Static variable in class co.aikar.commands.Locales
     
    -
    postCommand() - Method in class co.aikar.commands.RegisteredCommand
    +
    postCommand() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    precision(double, int) - Static method in class co.aikar.commands.ACFUtil
    +
    precision(double, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    preCommand() - Method in class co.aikar.commands.RegisteredCommand
    +
    preCommand() - Method in class co.aikar.commands.RegisteredCommand
     
    -
    PreCommand - Annotation Type in co.aikar.commands.annotation
    +
    PreCommand - Annotation Type in co.aikar.commands.annotation
    This runs before any other command method each time it is invoked.
    -
    preformOnImmutable(List<T>, Consumer<List<T>>) - Static method in class co.aikar.commands.ACFUtil
    +
    preformOnImmutable(List<T>, Consumer<List<T>>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printDetailedHelpFooter(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printDetailedHelpFooter(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printDetailedHelpHeader(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printDetailedHelpHeader(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printDetailedParameter(CommandHelp, CommandIssuer, HelpEntry, CommandParameter) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printDetailedParameter(CommandHelp, CommandIssuer, HelpEntry, CommandParameter) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printHelpCommand(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printHelpCommand(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printHelpFooter(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printHelpFooter(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printHelpHeader(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printHelpHeader(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printPartialStackTrace(PrintWriter) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    printPartialStackTrace(PrintWriter) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Prints the stack trace for this exception only--root cause not included--using the provided writer.
    -
    printSearchEntry(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printSearchEntry(CommandHelp, CommandIssuer, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printSearchFooter(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printSearchFooter(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printSearchHeader(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    printSearchHeader(CommandHelp, CommandIssuer) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    printStackTrace(PrintStream) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    printStackTrace(PrintStream) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Prints the stack trace of this exception to the specified print stream.
    -
    printStackTrace(PrintWriter) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    +
    printStackTrace(PrintWriter) - Method in interface co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil.Nestable
    Prints the stack trace of this exception to the specified print writer.
    -
    Private - Annotation Type in co.aikar.commands.annotation
    +
    Private - Annotation Type in co.aikar.commands.annotation
    Marks a command to not be included in stuff like tab completion and help pages
    - - - -

    R

    -
    -
    rand(double, double) - Static method in class co.aikar.commands.ACFUtil
    +

    R

    +
    +
    rand(double, double) - Static method in class co.aikar.commands.ACFUtil
     
    -
    rand(int, int) - Static method in class co.aikar.commands.ACFUtil
    +
    rand(int, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    rand(int, int, int, int) - Static method in class co.aikar.commands.ACFUtil
    +
    rand(int, int, int, int) - Static method in class co.aikar.commands.ACFUtil
    Calculate random between 2 points, excluding a center ex: Util.rand(-12, -6, 6, 12) would not return -5 to 5
    -
    randBool() - Static method in class co.aikar.commands.ACFUtil
    +
    randBool() - Static method in class co.aikar.commands.ACFUtil
     
    -
    random(Class<? extends T>) - Static method in class co.aikar.commands.ACFUtil
    +
    random(Class<? extends T>) - Static method in class co.aikar.commands.ACFUtil
    -
    Deprecated.
    +
    Deprecated.
    -
    random(List<T>) - Static method in class co.aikar.commands.ACFUtil
    +
    random(List<T>) - Static method in class co.aikar.commands.ACFUtil
     
    -
    random(T[]) - Static method in class co.aikar.commands.ACFUtil
    +
    random(T[]) - Static method in class co.aikar.commands.ACFUtil
     
    -
    RANDOM - Static variable in class co.aikar.commands.ACFUtil
    +
    RANDOM - Static variable in class co.aikar.commands.ACFUtil
     
    -
    registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler<C>) - Method in class co.aikar.commands.CommandCompletions
    +
    registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler<C>) - Method in class co.aikar.commands.CommandCompletions
    Registr a completion handler to provide command completions based on the user input.
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.CommandManager
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.CommandManager
    Registers a command with ACF
    -
    registerCompletion(String, CommandCompletions.CommandCompletionHandler<C>) - Method in class co.aikar.commands.CommandCompletions
    +
    registerCompletion(String, CommandCompletions.CommandCompletionHandler<C>) - Method in class co.aikar.commands.CommandCompletions
    Registr a completion handler to provide command completions based on the user input.
    -
    registerContext(Class<T>, ContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    +
    registerContext(Class<T>, ContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    Registers a context that requires input from the command issuer to resolve.
    -
    registerDependency(Class<? extends T>, String, T) - Method in class co.aikar.commands.CommandManager
    +
    registerDependency(Class<? extends T>, String, T) - Method in class co.aikar.commands.CommandManager
    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 Dependency with the provided instance.
    -
    registerDependency(Class<? extends T>, T) - Method in class co.aikar.commands.CommandManager
    +
    registerDependency(Class<? extends T>, T) - Method in class co.aikar.commands.CommandManager
    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 Dependency with the provided instance.
    -
    RegisteredCommand<CEC extends CommandExecutionContext<CEC,​? extends CommandIssuer>> - Class in co.aikar.commands
    +
    RegisteredCommand<CEC extends CommandExecutionContext<CEC,? extends CommandIssuer>> - Class in co.aikar.commands
     
    -
    registerIssuerAwareContext(Class<T>, IssuerAwareContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    +
    registerIssuerAwareContext(Class<T>, IssuerAwareContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    Registers a context resolver that may conditionally consume input, falling back to using the context of the issuer to potentially fulfill this context.
    -
    registerIssuerOnlyContext(Class<T>, IssuerOnlyContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    +
    registerIssuerOnlyContext(Class<T>, IssuerOnlyContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    Registers a context resolver that will never consume input.
    -
    registerOptionalContext(Class<T>, OptionalContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    +
    registerOptionalContext(Class<T>, OptionalContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    Registers a context that can safely accept a null input from the command issuer to resolve.
    -
    registerSenderAwareContext(Class<T>, IssuerAwareContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    +
    registerSenderAwareContext(Class<T>, IssuerAwareContextResolver<T, R>) - Method in class co.aikar.commands.CommandContexts
    -
    Deprecated. -
    Please switch to CommandContexts.registerIssuerAwareContext(Class, IssuerAwareContextResolver) +
    Deprecated. +
    Please switch to CommandContexts.registerIssuerAwareContext(Class, IssuerAwareContextResolver) as the core wants to use the platform agnostic term of "Issuer" instead of Sender
    -
    registerStaticCompletion(String, String) - Method in class co.aikar.commands.CommandCompletions
    +
    registerStaticCompletion(String, String) - Method in class co.aikar.commands.CommandCompletions
    Register a static list of command completions that will never change.
    -
    registerStaticCompletion(String, String[]) - Method in class co.aikar.commands.CommandCompletions
    +
    registerStaticCompletion(String, String[]) - Method in class co.aikar.commands.CommandCompletions
    Register a static list of command completions that will never change
    -
    registerStaticCompletion(String, Collection<String>) - Method in class co.aikar.commands.CommandCompletions
    +
    registerStaticCompletion(String, Collection<String>) - Method in class co.aikar.commands.CommandCompletions
    Register a static list of command completions that will never change
    -
    registerStaticCompletion(String, Supplier<Collection<String>>) - Method in class co.aikar.commands.CommandCompletions
    +
    registerStaticCompletion(String, Supplier<Collection<String>>) - Method in class co.aikar.commands.CommandCompletions
    Register a static list of command completions that will never change.
    -
    removeCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    removeCauseMethodName(String) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Removes from the list of method names used in the search for Throwable objects.
    -
    removeCommonFrames(List, List) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    removeCommonFrames(List, List) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Removes common frames from the cause trace given the two stack traces.
    -
    replace(String) - Method in class co.aikar.commands.CommandReplacements
    +
    replace(String) - Method in class co.aikar.commands.CommandReplacements
     
    -
    replace(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replace(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    Plain String replacement.
    -
    replace(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replace(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    Plain string replacement, escapes replace value.
    -
    replaceI18NStrings(String) - Method in class co.aikar.commands.Locales
    +
    replaceI18NStrings(String) - Method in class co.aikar.commands.Locales
     
    -
    replacements - Variable in class co.aikar.commands.CommandManager
    +
    replacements - Variable in class co.aikar.commands.CommandManager
     
    -
    replacePattern(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replacePattern(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    -
    replacePattern(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replacePattern(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    -
    replacePatternMatch(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replacePatternMatch(String, String, String) - Static method in class co.aikar.commands.ACFUtil
    Pure Regex Pattern matching and replacement, no escaping
    -
    replacePatternMatch(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    +
    replacePatternMatch(String, Pattern, String) - Static method in class co.aikar.commands.ACFUtil
    Pure Regex Pattern matching and replacement, no escaping
    -
    replacePatterns(String, String...) - Static method in class co.aikar.commands.ACFUtil
    +
    replacePatterns(String, String...) - Static method in class co.aikar.commands.ACFUtil
     
    -
    replaceStrings(String, String...) - Static method in class co.aikar.commands.ACFUtil
    +
    replaceStrings(String, String...) - Static method in class co.aikar.commands.ACFUtil
     
    -
    requiresInput() - Method in class co.aikar.commands.CommandParameter
    +
    requiresInput() - Method in class co.aikar.commands.CommandParameter
     
    -
    requiresPermission(String) - Method in class co.aikar.commands.BaseCommand
    +
    requiresPermission(String) - Method in class co.aikar.commands.BaseCommand
     
    -
    requiresPermission(String) - Method in class co.aikar.commands.ForwardingCommand
    +
    requiresPermission(String) - Method in class co.aikar.commands.ForwardingCommand
     
    -
    requiresPermission(String) - Method in class co.aikar.commands.RegisteredCommand
    +
    requiresPermission(String) - Method in class co.aikar.commands.RegisteredCommand
     
    -
    ROMANIAN - Static variable in class co.aikar.commands.Locales
    +
    ROMANIAN - Static variable in class co.aikar.commands.Locales
     
    -
    RootCommand - Interface in co.aikar.commands
    +
    RootCommand - Interface in co.aikar.commands
     
    -
    rootCommands - Variable in class co.aikar.commands.CommandManager
    +
    rootCommands - Variable in class co.aikar.commands.CommandManager
     
    -
    round(double, int) - Static method in class co.aikar.commands.ACFUtil
    +
    round(double, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    roundUp(int, int) - Static method in class co.aikar.commands.ACFUtil
    +
    roundUp(int, int) - Static method in class co.aikar.commands.ACFUtil
     
    -
    rtrim(String) - Static method in class co.aikar.commands.ACFUtil
    +
    rtrim(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    RUSSIAN - Static variable in class co.aikar.commands.Locales
    +
    RUSSIAN - Static variable in class co.aikar.commands.Locales
     
    - - - -

    S

    -
    -
    SenderAwareContextResolver<T,​C extends CommandExecutionContext<?,​? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    +

    S

    +
    +
    SenderAwareContextResolver<T,C extends CommandExecutionContext<?,? extends CommandIssuer>> - Interface in co.aikar.commands.contexts
    -
    Deprecated. - +
    Deprecated. +
    -
    sendError(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendError(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendError(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendError(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendInfo(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendInfo(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendInfo(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendInfo(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendMessage(CommandIssuer, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
    +
    sendMessage(CommandIssuer, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
     
    -
    sendMessage(MessageType, MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendMessage(MessageType, MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendMessage(MessageType, MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendMessage(MessageType, MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendMessage(IT, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
    +
    sendMessage(IT, MessageType, MessageKeyProvider, String...) - Method in class co.aikar.commands.CommandManager
     
    -
    sendMessage(String) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendMessage(String) - Method in interface co.aikar.commands.CommandIssuer
    Send the Command Issuer a message
    -
    sendMessageInternal(String) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendMessageInternal(String) - Method in interface co.aikar.commands.CommandIssuer
    -
    Deprecated. -
    Do not call this, for internal use. Not considered part of the API and may break.
    +
    Deprecated. +
    Do not call this, for internal use. Not considered part of the API and may break.
    -
    sendSyntax(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendSyntax(MessageKeyProvider, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    sendSyntax(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
    +
    sendSyntax(MessageKey, String...) - Method in interface co.aikar.commands.CommandIssuer
     
    -
    setCanConsumeInput(boolean) - Method in class co.aikar.commands.CommandParameter
    +
    setCanConsumeInput(boolean) - Method in class co.aikar.commands.CommandParameter
     
    -
    setCause(Throwable, Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    +
    setCause(Throwable, Throwable) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsExceptionUtil
    Sets the cause of a Throwable using introspection, allowing source code compatibility between pre-1.4 and post-1.4 Java releases.
    -
    setColor(int, FT) - Method in class co.aikar.commands.MessageFormatter
    +
    setColor(int, FT) - Method in class co.aikar.commands.MessageFormatter
     
    -
    setCommandIssuer(boolean) - Method in class co.aikar.commands.CommandParameter
    +
    setCommandIssuer(boolean) - Method in class co.aikar.commands.CommandParameter
     
    -
    setConditions(String) - Method in class co.aikar.commands.CommandParameter
    +
    setConditions(String) - Method in class co.aikar.commands.CommandParameter
     
    -
    setContextFlags(Class<?>, String) - Method in class co.aikar.commands.BaseCommand
    +
    setContextFlags(Class<?>, String) - Method in class co.aikar.commands.BaseCommand
     
    -
    setDefaultCompletion(String, Class...) - Method in class co.aikar.commands.CommandCompletions
    +
    setDefaultCompletion(String, Class...) - Method in class co.aikar.commands.CommandCompletions
    Registers a completion handler such as @players to default apply to all command parameters of the specified types
    -
    setDefaultExceptionHandler(ExceptionHandler) - Method in class co.aikar.commands.CommandManager
    +
    setDefaultExceptionHandler(ExceptionHandler) - Method in class co.aikar.commands.CommandManager
    Sets the default ExceptionHandler that is called when an exception occurs while executing a command, if the command doesn't have it's own exception handler registered.
    -
    setDefaultExceptionHandler(ExceptionHandler, boolean) - Method in class co.aikar.commands.CommandManager
    +
    setDefaultExceptionHandler(ExceptionHandler, boolean) - Method in class co.aikar.commands.CommandManager
    Sets the default ExceptionHandler that is called when an exception occurs while executing a command, if the command doesn't have it's own exception handler registered, and lets you control if ACF should also log the exception still.
    -
    setDefaultFormatter(MF) - Method in class co.aikar.commands.CommandManager
    +
    setDefaultFormatter(MF) - Method in class co.aikar.commands.CommandManager
     
    -
    setDefaultHelpPerPage(int) - Method in class co.aikar.commands.CommandManager
    +
    setDefaultHelpPerPage(int) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    setDefaultLocale(Locale) - Method in class co.aikar.commands.Locales
    +
    setDefaultLocale(Locale) - Method in class co.aikar.commands.Locales
     
    -
    setDefaultValue(String) - Method in class co.aikar.commands.CommandParameter
    +
    setDefaultValue(String) - Method in class co.aikar.commands.CommandParameter
     
    -
    setDescription(String) - Method in class co.aikar.commands.CommandParameter
    +
    setDescription(String) - Method in class co.aikar.commands.CommandParameter
     
    -
    setExceptionHandler(ExceptionHandler) - Method in class co.aikar.commands.BaseCommand
    +
    setExceptionHandler(ExceptionHandler) - Method in class co.aikar.commands.BaseCommand
     
    -
    setFlags(Map<String, String>) - Method in class co.aikar.commands.CommandParameter
    +
    setFlags(Map<String, String>) - Method in class co.aikar.commands.CommandParameter
     
    -
    setFormat(MessageType, int, FT) - Method in class co.aikar.commands.CommandManager
    +
    setFormat(MessageType, int, FT) - Method in class co.aikar.commands.CommandManager
     
    -
    setFormat(MessageType, FT...) - Method in class co.aikar.commands.CommandManager
    +
    setFormat(MessageType, FT...) - Method in class co.aikar.commands.CommandManager
     
    -
    setFormat(MessageType, MF) - Method in class co.aikar.commands.CommandManager
    +
    setFormat(MessageType, MF) - Method in class co.aikar.commands.CommandManager
     
    -
    setHelpFormatter(CommandHelpFormatter) - Method in class co.aikar.commands.CommandManager
    +
    setHelpFormatter(CommandHelpFormatter) - Method in class co.aikar.commands.CommandManager
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    setIssuerLocale(IT, Locale) - Method in class co.aikar.commands.CommandManager
    +
    setIssuerLocale(IT, Locale) - Method in class co.aikar.commands.CommandManager
     
    -
    setNextParam(CommandParameter<CEC>) - Method in class co.aikar.commands.CommandParameter
    +
    setNextParam(CommandParameter<CEC>) - Method in class co.aikar.commands.CommandParameter
     
    -
    setOptional(boolean) - Method in class co.aikar.commands.CommandParameter
    +
    setOptional(boolean) - Method in class co.aikar.commands.CommandParameter
     
    -
    setOptionalResolver(boolean) - Method in class co.aikar.commands.CommandParameter
    +
    setOptionalResolver(boolean) - Method in class co.aikar.commands.CommandParameter
     
    -
    setPage(int) - Method in class co.aikar.commands.CommandHelp
    +
    setPage(int) - Method in class co.aikar.commands.CommandHelp
     
    -
    setPage(int, int) - Method in class co.aikar.commands.CommandHelp
    +
    setPage(int, int) - Method in class co.aikar.commands.CommandHelp
     
    -
    setPerPage(int) - Method in class co.aikar.commands.CommandHelp
    +
    setPerPage(int) - Method in class co.aikar.commands.CommandHelp
     
    -
    setRegisteredCommand(RegisteredCommand) - Method in class co.aikar.commands.CommandOperationContext
    +
    setRegisteredCommand(RegisteredCommand) - Method in class co.aikar.commands.CommandOperationContext
     
    -
    setRequiresInput(boolean) - Method in class co.aikar.commands.CommandParameter
    +
    setRequiresInput(boolean) - Method in class co.aikar.commands.CommandParameter
     
    -
    setResolver(ContextResolver<?, CEC>) - Method in class co.aikar.commands.CommandParameter
    +
    setResolver(ContextResolver<?, CEC>) - Method in class co.aikar.commands.CommandParameter
     
    -
    setSearch(List<String>) - Method in class co.aikar.commands.CommandHelp
    +
    setSearch(List<String>) - Method in class co.aikar.commands.CommandHelp
     
    -
    setSearchScore(int) - Method in class co.aikar.commands.HelpEntry
    +
    setSearchScore(int) - Method in class co.aikar.commands.HelpEntry
     
    -
    setSyntax(String) - Method in class co.aikar.commands.CommandParameter
    +
    setSyntax(String) - Method in class co.aikar.commands.CommandParameter
     
    -
    setValues(String[]) - Method in class co.aikar.commands.CommandParameter
    +
    setValues(String[]) - Method in class co.aikar.commands.CommandParameter
     
    -
    shouldShow() - Method in class co.aikar.commands.HelpEntry
    +
    shouldShow() - Method in class co.aikar.commands.HelpEntry
     
    -
    showAllResults(CommandHelp, List<HelpEntry>) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    showAllResults(CommandHelp, List<HelpEntry>) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    showCommandHelp() - Method in class co.aikar.commands.BaseCommand
    +
    showCommandHelp() - Method in class co.aikar.commands.BaseCommand
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    ShowCommandHelp - Exception in co.aikar.commands
    +
    ShowCommandHelp - Exception in co.aikar.commands
     
    -
    ShowCommandHelp() - Constructor for exception co.aikar.commands.ShowCommandHelp
    +
    ShowCommandHelp() - Constructor for exception co.aikar.commands.ShowCommandHelp
     
    -
    ShowCommandHelp(boolean) - Constructor for exception co.aikar.commands.ShowCommandHelp
    +
    ShowCommandHelp(boolean) - Constructor for exception co.aikar.commands.ShowCommandHelp
     
    -
    ShowCommandHelp(List<String>) - Constructor for exception co.aikar.commands.ShowCommandHelp
    +
    ShowCommandHelp(List<String>) - Constructor for exception co.aikar.commands.ShowCommandHelp
     
    -
    showDetailedHelp(CommandHelp, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    showDetailedHelp(CommandHelp, HelpEntry) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    showHelp() - Method in class co.aikar.commands.CommandHelp
    +
    showHelp() - Method in class co.aikar.commands.CommandHelp
     
    -
    showHelp(CommandIssuer) - Method in class co.aikar.commands.CommandHelp
    +
    showHelp(CommandIssuer) - Method in class co.aikar.commands.CommandHelp
     
    -
    showSearchResults(CommandHelp, List<HelpEntry>) - Method in class co.aikar.commands.CommandHelpFormatter
    +
    showSearchResults(CommandHelp, List<HelpEntry>) - Method in class co.aikar.commands.CommandHelpFormatter
     
    -
    showSyntax(CommandIssuer, RegisteredCommand<?>) - Method in class co.aikar.commands.BaseCommand
    +
    showSyntax(CommandIssuer, RegisteredCommand<?>) - Method in class co.aikar.commands.BaseCommand
     
    -
    simpleMatch(Class<? extends Enum<?>>, String) - Static method in class co.aikar.commands.ACFUtil
    +
    simpleMatch(Class<? extends Enum<?>>, String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    SIMPLIFIED_CHINESE - Static variable in class co.aikar.commands.Locales
    +
    SIMPLIFIED_CHINESE - Static variable in class co.aikar.commands.Locales
     
    -
    simplifyString(String) - Static method in class co.aikar.commands.ACFUtil
    +
    simplifyString(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    Single - Annotation Type in co.aikar.commands.annotation
    +
    Single - Annotation Type in co.aikar.commands.annotation
    Don't join remaining arguments.
    -
    sneaky(Throwable) - Static method in class co.aikar.commands.ACFUtil
    +
    sneaky(Throwable) - Static method in class co.aikar.commands.ACFUtil
     
    -
    SPANISH - Static variable in class co.aikar.commands.Locales
    +
    SPANISH - Static variable in class co.aikar.commands.Locales
     
    -
    Split - Annotation Type in co.aikar.commands.annotation
    +
    Split - Annotation Type in co.aikar.commands.annotation
    Joins arguments into a single piece of text with the specified separator.
    -
    startsWith(CharSequence, CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    startsWith(CharSequence, CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Check if a CharSequence starts with a specified prefix.
    -
    startsWithIgnoreCase(CharSequence, CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    +
    startsWithIgnoreCase(CharSequence, CharSequence) - Static method in class co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil
    Case insensitive check if a CharSequence starts with a specified prefix.
    -
    Subcommand - Annotation Type in co.aikar.commands.annotation
    +
    Subcommand - Annotation Type in co.aikar.commands.annotation
    Defines the subcommand that can be used to execute this command.
    -
    supportedLanguages - Variable in class co.aikar.commands.CommandManager
    +
    supportedLanguages - Variable in class co.aikar.commands.CommandManager
     
    -
    SWEDISH - Static variable in class co.aikar.commands.Locales
    +
    SWEDISH - Static variable in class co.aikar.commands.Locales
     
    -
    SyncCompletionRequired() - Constructor for exception co.aikar.commands.CommandCompletions.SyncCompletionRequired
    +
    SyncCompletionRequired() - Constructor for exception co.aikar.commands.CommandCompletions.SyncCompletionRequired
     
    -
    Syntax - Annotation Type in co.aikar.commands.annotation
    +
    Syntax - Annotation Type in co.aikar.commands.annotation
    Specifies the syntax to be used when executing this command.
    -
    SYNTAX - Static variable in class co.aikar.commands.MessageType
    +
    SYNTAX - Static variable in class co.aikar.commands.MessageType
     
    - - - -

    T

    -
    -
    tabComplete(CommandIssuer, RootCommand, String[], boolean) - Method in class co.aikar.commands.ForwardingCommand
    +

    T

    +
    +
    tabComplete(CommandIssuer, RootCommand, String[], boolean) - Method in class co.aikar.commands.ForwardingCommand
     
    -
    tabComplete(CommandIssuer, String, String[]) - Method in class co.aikar.commands.BaseCommand
    +
    tabComplete(CommandIssuer, String, String[]) - Method in class co.aikar.commands.BaseCommand
    Gets tab completed data from the given command from the user.
    -
    tabComplete(CommandIssuer, String, String[], boolean) - Method in class co.aikar.commands.BaseCommand
    +
    tabComplete(CommandIssuer, String, String[], boolean) - Method in class co.aikar.commands.BaseCommand
    Gets the tab complete suggestions from a given command.
    -
    testExactMatch(String) - Method in class co.aikar.commands.CommandHelp
    +
    testExactMatch(String) - Method in class co.aikar.commands.CommandHelp
     
    -
    THAI - Static variable in class co.aikar.commands.Locales
    +
    THAI - Static variable in class co.aikar.commands.Locales
     
    -
    TRADITIONAL_CHINESE - Static variable in class co.aikar.commands.Locales
    +
    TRADITIONAL_CHINESE - Static variable in class co.aikar.commands.Locales
     
    -
    TURKISH - Static variable in class co.aikar.commands.Locales
    +
    TURKISH - Static variable in class co.aikar.commands.Locales
     
    - - - -

    U

    -
    -
    ucfirst(String) - Static method in class co.aikar.commands.ACFUtil
    +

    U

    +
    +
    ucfirst(String) - Static method in class co.aikar.commands.ACFUtil
     
    -
    UKRANIAN - Static variable in class co.aikar.commands.Locales
    +
    UKRANIAN - Static variable in class co.aikar.commands.Locales
     
    -
    UNKNOWN_COMMAND - co.aikar.commands.MessageKeys
    +
    UNKNOWN_COMMAND - Enum constant in enum co.aikar.commands.MessageKeys
     
    -
    UnknownHandler - Annotation Type in co.aikar.commands.annotation
    +
    UnknownHandler - Annotation Type in co.aikar.commands.annotation
    -
    -
    UnresolvedDependencyException - Exception in co.aikar.commands
    +
    UnresolvedDependencyException - Exception in co.aikar.commands
    Thrown when a command mananger couldn't find a registered instance for a field that is marked with Dependency
    -
    UnstableAPI - Annotation Type in co.aikar.commands
    +
    UnstableAPI - Annotation Type in co.aikar.commands
    -
    Deprecated.
    +
    Deprecated.
    -
    updateSearchScore(HelpEntry) - Method in class co.aikar.commands.CommandHelp
    +
    updateSearchScore(HelpEntry) - Method in class co.aikar.commands.CommandHelp
     
    -
    usePerIssuerLocale - Variable in class co.aikar.commands.CommandManager
    +
    usePerIssuerLocale - Variable in class co.aikar.commands.CommandManager
     
    -
    usePerIssuerLocale(boolean) - Method in class co.aikar.commands.CommandManager
    +
    usePerIssuerLocale(boolean) - Method in class co.aikar.commands.CommandManager
     
    -
    usingPerIssuerLocale() - Method in class co.aikar.commands.CommandManager
    +
    usingPerIssuerLocale() - Method in class co.aikar.commands.CommandManager
     
    - - - -

    V

    -
    -
    validateCondition(ConditionContext<I>) - Method in interface co.aikar.commands.CommandConditions.Condition
    +

    V

    +
    +
    validateCondition(ConditionContext<I>) - Method in interface co.aikar.commands.CommandConditions.Condition
     
    -
    validateCondition(ConditionContext<I>, CEC, P) - Method in interface co.aikar.commands.CommandConditions.ParameterCondition
    +
    validateCondition(ConditionContext<I>, CEC, P) - Method in interface co.aikar.commands.CommandConditions.ParameterCondition
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.CommandAlias
    +
    value() - Element in annotation type co.aikar.commands.annotation.CommandAlias
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.CommandCompletion
    +
    value() - Element in annotation type co.aikar.commands.annotation.CommandCompletion
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.CommandPermission
    +
    value() - Element in annotation type co.aikar.commands.annotation.CommandPermission
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Conditions
    +
    value() - Element in annotation type co.aikar.commands.annotation.Conditions
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Default
    +
    value() - Element in annotation type co.aikar.commands.annotation.Default
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Dependency
    +
    value() - Element in annotation type co.aikar.commands.annotation.Dependency
    The key that should be used to lookup the instances, defaults to \"\"
    -
    value() - Method in annotation type co.aikar.commands.annotation.Description
    +
    value() - Element in annotation type co.aikar.commands.annotation.Description
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Flags
    +
    value() - Element in annotation type co.aikar.commands.annotation.Flags
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.HelpCommand
    +
    value() - Element in annotation type co.aikar.commands.annotation.HelpCommand
    The value to forward to the @Subcommand annotation.
    -
    value() - Method in annotation type co.aikar.commands.annotation.HelpSearchTags
    +
    value() - Element in annotation type co.aikar.commands.annotation.HelpSearchTags
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Name
    +
    value() - Element in annotation type co.aikar.commands.annotation.Name
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Split
    +
    value() - Element in annotation type co.aikar.commands.annotation.Split
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Subcommand
    +
    value() - Element in annotation type co.aikar.commands.annotation.Subcommand
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Syntax
    +
    value() - Element in annotation type co.aikar.commands.annotation.Syntax
     
    -
    value() - Method in annotation type co.aikar.commands.annotation.Values
    +
    value() - Element in annotation type co.aikar.commands.annotation.Values
     
    -
    valueOf(String) - Static method in enum co.aikar.commands.MessageKeys
    +
    valueOf(String) - Static method in enum co.aikar.commands.MessageKeys
    Returns the enum constant of this type with the specified name.
    -
    values() - Static method in enum co.aikar.commands.MessageKeys
    +
    values() - Static method in enum co.aikar.commands.MessageKeys
    Returns an array containing the constants of this enum type, in the order they are declared.
    -
    Values - Annotation Type in co.aikar.commands.annotation
    +
    Values - Annotation Type in co.aikar.commands.annotation
    Specifies a list of values that the command input should be validated against, or else show an error.
    -
    VIETNAMESE - Static variable in class co.aikar.commands.Locales
    +
    VIETNAMESE - Static variable in class co.aikar.commands.Locales
     
    - - - -

    W

    -
    -
    WELSH - Static variable in class co.aikar.commands.Locales
    +

    W

    +
    +
    WELSH - Static variable in class co.aikar.commands.Locales
     
    -A B C D E F G H I J K L M N O P R S T U V W 
    All Classes All Packages
    -
    +A B C D E F G H I J K L M N O P R S T U V W 
    All Classes and Interfaces|All Packages|Constant Field Values|Serialized Form
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/index.html b/docs/acf-core/index.html index 6fbc251c..086d2bda 100644 --- a/docs/acf-core/index.html +++ b/docs/acf-core/index.html @@ -1,51 +1,33 @@ - - -Overview (ACF (Core) 0.5.0-SNAPSHOT API) + +Overview (ACF (Core) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (Core) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.annotation 
    co.aikar.commands.apachecommonslang 
    co.aikar.commands.contexts 
    co.aikar.commands.processors 
    +
    +

    ACF (Core) 0.5.1-SNAPSHOT API

    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-core/jquery-ui.overrides.css b/docs/acf-core/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-core/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-core/legal/COPYRIGHT b/docs/acf-core/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-core/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-core/legal/LICENSE b/docs/acf-core/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-core/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-core/legal/jquery.md b/docs/acf-core/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-core/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-core/legal/jqueryUI.md b/docs/acf-core/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-core/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-core/member-search-index.js b/docs/acf-core/member-search-index.js index fd9040c1..3195e93a 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...)","url":"addAll(T[],T...)"},{"p":"co.aikar.commands","c":"Locales","l":"addBundleClassLoader(ClassLoader)","url":"addBundleClassLoader(java.lang.ClassLoader)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"addCauseMethodName(String)","url":"addCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"RootCommand","l":"addChildShared(List, SetMultimap, BaseCommand)","url":"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)","url":"addCondition(java.lang.Class,java.lang.String,co.aikar.commands.CommandConditions.ParameterCondition)"},{"p":"co.aikar.commands","c":"CommandConditions","l":"addCondition(String, CommandConditions.Condition)","url":"addCondition(java.lang.String,co.aikar.commands.CommandConditions.Condition)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessage(Locale, MessageKeyProvider, String)","url":"addMessage(java.util.Locale,co.aikar.locales.MessageKeyProvider,java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(ClassLoader, String, Locale)","url":"addMessageBundle(java.lang.ClassLoader,java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundle(String, Locale)","url":"addMessageBundle(java.lang.String,java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageBundles(String...)","url":"addMessageBundles(java.lang.String...)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessages(Locale, Map)","url":"addMessages(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"Locales","l":"addMessageStrings(Locale, Map)","url":"addMessageStrings(java.util.Locale,java.util.Map)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacement(String, String)","url":"addReplacement(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"addReplacements(String...)","url":"addReplacements(java.lang.String...)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommand(String)","url":"addSubcommand(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"addSubcommands(Collection)","url":"addSubcommands(java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandManager","l":"addSupportedLanguage(Locale)","url":"addSupportedLanguage(java.util.Locale)"},{"p":"co.aikar.commands","c":"Locales","l":"AFRIKAANS"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"ApacheCommonsExceptionUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"ApacheCommonsLangUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"Locales","l":"ARABIC"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"BaseCommand(String)","url":"%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)","url":"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, char...)","url":"capitalize(java.lang.String,char...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalize(String, char[])","url":"capitalize(java.lang.String,char[])"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalize(String)","url":"capitalize(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String, char)","url":"capitalizeFirst(java.lang.String,char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"capitalizeFirst(String)","url":"capitalizeFirst(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String, char...)","url":"capitalizeFully(java.lang.String,char...)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"capitalizeFully(String)","url":"capitalizeFully(java.lang.String)"},{"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[], int)","url":"combine(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"combine(String[])","url":"combine(java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"CommandCompletions(CommandManager)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"CommandHelp(CommandManager, RootCommand, CommandIssuer)","url":"%3Cinit%3E(co.aikar.commands.CommandManager,co.aikar.commands.RootCommand,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"CommandHelpFormatter(CommandManager)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"CommandManager()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"CommandParameter","l":"CommandParameter(RegisteredCommand, Parameter, int, boolean)","url":"%3Cinit%3E(co.aikar.commands.RegisteredCommand,java.lang.reflect.Parameter,int,boolean)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKey, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(MessageKeyProvider, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"ConditionFailedException","l":"ConditionFailedException(String)","url":"%3Cinit%3E(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"conditions"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"ConditionsProcessor()","url":"%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)","url":"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[])","url":"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)","url":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","url":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"createRootCommand(String)","url":"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...)","url":"doHelp(co.aikar.commands.CommandIssuer,java.lang.String...)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"doHelp(Object, String...)","url":"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)","url":"enableUnstableAPI(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"ENGLISH"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Class>)","url":"enumNames(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"enumNames(Enum[])","url":"enumNames(java.lang.Enum[])"},{"p":"co.aikar.commands","c":"MessageType","l":"equals(Object)","url":"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)","url":"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)","url":"execute(co.aikar.commands.CommandIssuer,co.aikar.commands.CommandRouter.CommandRouteResult)"},{"p":"co.aikar.commands","c":"RootCommand","l":"execute(CommandIssuer, String, String[])","url":"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)","url":"format(int,java.lang.String)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"format(String)","url":"format(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"formatMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","url":"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)","url":"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)","url":"generateCommandHelp(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(CommandIssuer, String)","url":"generateCommandHelp(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"generateCommandHelp(String)","url":"generateCommandHelp(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"GERMAN"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotation(Class)","url":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotation(Class)","url":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getAnnotation(Class)","url":"getAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class, int)","url":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class, int)","url":"getAnnotationValue(java.lang.Class,int)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getAnnotationValue(Class)","url":"getAnnotationValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"getAnnotationValue(Class)","url":"getAnnotationValue(java.lang.Class)"},{"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, Boolean)","url":"getBooleanFlagValue(java.lang.String,java.lang.Boolean)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getBooleanFlagValue(String)","url":"getBooleanFlagValue(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getCause()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable, String[])","url":"getCause(java.lang.Throwable,java.lang.String[])"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getCause(Throwable)","url":"getCause(java.lang.Throwable)"},{"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)","url":"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)","url":"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, String)","url":"getConfig(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfig(String)","url":"getConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getConfigs()"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, Integer)","url":"getConfigValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"getConfigValue(String, String)","url":"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)","url":"getContextFlags(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class, Integer)","url":"getContextValue(java.lang.Class,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValue(Class)","url":"getContextValue(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"getContextValueByName(Class, String)","url":"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)","url":"getDisplayName(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getDoubleFlagValue(String, Number)","url":"getDoubleFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getEntryFormatReplacements(CommandHelp, HelpEntry)","url":"getEntryFormatReplacements(co.aikar.commands.CommandHelp,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String, T)","url":"getEnumFromName(T[],java.lang.String,T)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromName(T[], String)","url":"getEnumFromName(T[],java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"getEnumFromOrdinal(T[], int)","url":"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)","url":"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)","url":"getFlagValue(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Float)","url":"getFlagValue(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Integer)","url":"getFlagValue(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Long)","url":"getFlagValue(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, Number)","url":"getFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFlagValue(String, String)","url":"getFlagValue(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getFloatFlagValue(String, Number)","url":"getFloatFlagValue(java.lang.String,java.lang.Number)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getFormat(MessageType)","url":"getFormat(co.aikar.commands.MessageType)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getFullStackTrace(Throwable)","url":"getFullStackTrace(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"getHeaderFooterFormatReplacements(CommandHelp)","url":"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)","url":"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)","url":"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)","url":"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)","url":"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)","url":"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)","url":"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)","url":"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...)","url":"getResolvedArg(java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String, Class...)","url":"getResolvedArg(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"getResolvedArg(String)","url":"getResolvedArg(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"getResolver()"},{"p":"co.aikar.commands","c":"CommandContexts","l":"getResolver(Class)","url":"getResolver(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getRootCause(Throwable)","url":"getRootCause(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandManager","l":"getRootCommand(String)","url":"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)","url":"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)","url":"getSyntax(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText()"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"getSyntaxText(CommandIssuer)","url":"getSyntaxText(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean, boolean)","url":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean,boolean)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[], boolean)","url":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"RootCommand","l":"getTabCompletions(CommandIssuer, String, String[])","url":"getTabCompletions(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"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)","url":"getThrowableCount(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowableList(Throwable)","url":"getThrowableList(java.lang.Throwable)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"getThrowables()"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"getThrowables(Throwable)","url":"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)","url":"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)","url":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasAnnotation(Class)","url":"hasAnnotation(java.lang.Class)"},{"p":"co.aikar.commands","c":"RootCommand","l":"hasAnyPermission(CommandIssuer)","url":"hasAnyPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandCompletionContext","l":"hasConfig(String)","url":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"ConditionContext","l":"hasConfig(String)","url":"hasConfig(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandExecutionContext","l":"hasFlag(String)","url":"hasFlag(java.lang.String)"},{"p":"co.aikar.commands","c":"MessageType","l":"hashCode()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"hasIntersection(Collection, Collection)","url":"hasIntersection(java.util.Collection,java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, Set)","url":"hasPermission(co.aikar.commands.CommandIssuer,java.util.Set)"},{"p":"co.aikar.commands","c":"CommandManager","l":"hasPermission(CommandIssuer, String)","url":"hasPermission(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(CommandIssuer)","url":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(CommandIssuer)","url":"hasPermission(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"hasPermission(Object)","url":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"hasPermission(Object)","url":"hasPermission(java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"hasPermission(String)","url":"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[])","url":"help(co.aikar.commands.CommandIssuer,java.lang.String[])"},{"p":"co.aikar.commands","c":"BaseCommand","l":"help(Object, String[])","url":"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, int)","url":"indexOf(java.lang.Object[],java.lang.Object,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"indexOf(Object[], Object)","url":"indexOf(java.lang.Object[],java.lang.Object)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"indexOf(String, String[])","url":"indexOf(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class, int)","url":"indexOfThrowable(java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"indexOfThrowable(Class)","url":"indexOfThrowable(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class, int)","url":"indexOfThrowable(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfThrowable(Throwable, Class)","url":"indexOfThrowable(java.lang.Throwable,java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class, int)","url":"indexOfType(java.lang.Throwable,java.lang.Class,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"indexOfType(Throwable, Class)","url":"indexOfType(java.lang.Throwable,java.lang.Class)"},{"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)","url":"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()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(boolean)","url":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, boolean, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKey,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKey, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, boolean, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,boolean,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(MessageKeyProvider, String...)","url":"%3Cinit%3E(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String, boolean)","url":"%3Cinit%3E(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"InvalidCommandArgument","l":"InvalidCommandArgument(String)","url":"%3Cinit%3E(java.lang.String)"},{"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)","url":"isBetween(float,double,double)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"isCauseMethodName(String)","url":"isCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"isCommandIssuer()"},{"p":"co.aikar.commands","c":"CommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isDelimiter(char, char[])","url":"isDelimiter(char,char[])"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isDouble(String)","url":"isDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isFloat(String)","url":"isFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isInteger(String)","url":"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)","url":"isNestedThrowable(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"isNumber(String)","url":"isNumber(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"isNumeric(CharSequence)","url":"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)","url":"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, int, int)","url":"join(byte[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(byte[], char)","url":"join(byte[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char, int, int)","url":"join(char[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(char[], char)","url":"join(char[],char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection, String)","url":"join(java.util.Collection,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(Collection)","url":"join(java.util.Collection)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char, int, int)","url":"join(double[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(double[], char)","url":"join(double[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char, int, int)","url":"join(float[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(float[], char)","url":"join(float[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char, int, int)","url":"join(int[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(int[], char)","url":"join(int[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, char)","url":"join(java.lang.Iterable,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterable, String)","url":"join(java.lang.Iterable,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, char)","url":"join(java.util.Iterator,char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Iterator, String)","url":"join(java.util.Iterator,java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char, int, int)","url":"join(long[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(long[], char)","url":"join(long[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char, int, int)","url":"join(java.lang.Object[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], char)","url":"join(java.lang.Object[],char)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String, int, int)","url":"join(java.lang.Object[],java.lang.String,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(Object[], String)","url":"join(java.lang.Object[],java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char, int, int)","url":"join(short[],char,int,int)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"join(short[], char)","url":"join(short[],char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], char)","url":"join(java.lang.String[],char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int, char)","url":"join(java.lang.String[],int,char)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], int)","url":"join(java.lang.String[],int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[], String)","url":"join(java.lang.String[],java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"join(String[])","url":"join(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)","url":"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)","url":"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)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"CommandManager","l":"log(LogLevel, String)","url":"log(co.aikar.commands.LogLevel,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"ltrim(String)","url":"ltrim(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"manager"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"MessageFormatter(FT...)","url":"%3Cinit%3E(FT...)"},{"p":"co.aikar.commands","c":"MessageType","l":"MessageType()","url":"%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)","url":"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)","url":"notifyLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"nullDefault(Object, Object)","url":"nullDefault(java.lang.Object,java.lang.Object)"},{"p":"co.aikar.commands","c":"CommandManager","l":"obtainRootCommand(String)","url":"obtainRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onBaseCommandRegister(BaseCommand, T)","url":"onBaseCommandRegister(co.aikar.commands.BaseCommand,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onCommandRegistered(RegisteredCommand, T)","url":"onCommandRegistered(co.aikar.commands.RegisteredCommand,T)"},{"p":"co.aikar.commands","c":"IssuerLocaleChangedCallback","l":"onIssuerLocaleChange(I, Locale, Locale)","url":"onIssuerLocaleChange(I,java.util.Locale,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandManager","l":"onLocaleChange(IssuerLocaleChangedCallback)","url":"onLocaleChange(co.aikar.commands.IssuerLocaleChangedCallback)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onParameterRegistered(RegisteredCommand, int, Parameter, T)","url":"onParameterRegistered(co.aikar.commands.RegisteredCommand,int,java.lang.reflect.Parameter,T)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostComand(CommandOperationContext)","url":"onPostComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","url":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPostContextResolution(CommandExecutionContext, Object)","url":"onPostContextResolution(co.aikar.commands.CommandExecutionContext,java.lang.Object)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreComand(CommandOperationContext)","url":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands.processors","c":"ConditionsProcessor","l":"onPreComand(CommandOperationContext)","url":"onPreComand(co.aikar.commands.CommandOperationContext)"},{"p":"co.aikar.commands","c":"AnnotationProcessor","l":"onPreContextResolution(CommandExecutionContext)","url":"onPreContextResolution(co.aikar.commands.CommandExecutionContext)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padLeft(String, int)","url":"padLeft(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"padRight(String, int)","url":"padRight(java.lang.String,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseBigNumber(String, boolean)","url":"parseBigNumber(java.lang.String,boolean)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String, Double)","url":"parseDouble(java.lang.String,java.lang.Double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseDouble(String)","url":"parseDouble(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String, Float)","url":"parseFloat(java.lang.String,java.lang.Float)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseFloat(String)","url":"parseFloat(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String, Integer)","url":"parseInt(java.lang.String,java.lang.Integer)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseInt(String)","url":"parseInt(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String, Long)","url":"parseLong(java.lang.String,java.lang.Long)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseLong(String)","url":"parseLong(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"parseNumber(String, boolean)","url":"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)","url":"precision(double,int)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"ACFUtil","l":"preformOnImmutable(List, Consumer>)","url":"preformOnImmutable(java.util.List,java.util.function.Consumer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry)","url":"printDetailedHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpFooter(CommandHelp, CommandIssuer, HelpEntry)","url":"printDetailedHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printDetailedHelpHeader(CommandHelp, CommandIssuer, HelpEntry)","url":"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)","url":"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)","url":"printHelpCommand(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpFooter(CommandHelp, CommandIssuer)","url":"printHelpFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printHelpHeader(CommandHelp, CommandIssuer)","url":"printHelpHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printPartialStackTrace(PrintWriter)","url":"printPartialStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchEntry(CommandHelp, CommandIssuer, HelpEntry)","url":"printSearchEntry(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer,co.aikar.commands.HelpEntry)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchFooter(CommandHelp, CommandIssuer)","url":"printSearchFooter(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"printSearchHeader(CommandHelp, CommandIssuer)","url":"printSearchHeader(co.aikar.commands.CommandHelp,co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintStream)","url":"printStackTrace(java.io.PrintStream)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil.Nestable","l":"printStackTrace(PrintWriter)","url":"printStackTrace(java.io.PrintWriter)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(double, double)","url":"rand(double,double)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int, int, int)","url":"rand(int,int,int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rand(int, int)","url":"rand(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)","url":"random(java.lang.Class)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(List)","url":"random(java.util.List)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"random(T[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler)","url":"registerAsyncCompletion(java.lang.String,co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerCompletion(String, CommandCompletions.CommandCompletionHandler)","url":"registerCompletion(java.lang.String,co.aikar.commands.CommandCompletions.CommandCompletionHandler)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerContext(Class, ContextResolver)","url":"registerContext(java.lang.Class,co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, String, T)","url":"registerDependency(java.lang.Class,java.lang.String,T)"},{"p":"co.aikar.commands","c":"CommandManager","l":"registerDependency(Class, T)","url":"registerDependency(java.lang.Class,T)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerAwareContext(Class, IssuerAwareContextResolver)","url":"registerIssuerAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerIssuerOnlyContext(Class, IssuerOnlyContextResolver)","url":"registerIssuerOnlyContext(java.lang.Class,co.aikar.commands.contexts.IssuerOnlyContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerOptionalContext(Class, OptionalContextResolver)","url":"registerOptionalContext(java.lang.Class,co.aikar.commands.contexts.OptionalContextResolver)"},{"p":"co.aikar.commands","c":"CommandContexts","l":"registerSenderAwareContext(Class, IssuerAwareContextResolver)","url":"registerSenderAwareContext(java.lang.Class,co.aikar.commands.contexts.IssuerAwareContextResolver)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Collection)","url":"registerStaticCompletion(java.lang.String,java.util.Collection)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String)","url":"registerStaticCompletion(java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, String[])","url":"registerStaticCompletion(java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"registerStaticCompletion(String, Supplier>)","url":"registerStaticCompletion(java.lang.String,java.util.function.Supplier)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCauseMethodName(String)","url":"removeCauseMethodName(java.lang.String)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsExceptionUtil","l":"removeCommonFrames(List, List)","url":"removeCommonFrames(java.util.List,java.util.List)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, Pattern, String)","url":"replace(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replace(String, String, String)","url":"replace(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandReplacements","l":"replace(String)","url":"replace(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"replaceI18NStrings(String)","url":"replaceI18NStrings(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandManager","l":"replacements"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, Pattern, String)","url":"replacePattern(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePattern(String, String, String)","url":"replacePattern(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, Pattern, String)","url":"replacePatternMatch(java.lang.String,java.util.regex.Pattern,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatternMatch(String, String, String)","url":"replacePatternMatch(java.lang.String,java.lang.String,java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replacePatterns(String, String...)","url":"replacePatterns(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"replaceStrings(String, String...)","url":"replaceStrings(java.lang.String,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"requiresInput()"},{"p":"co.aikar.commands","c":"BaseCommand","l":"requiresPermission(String)","url":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"requiresPermission(String)","url":"requiresPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"RegisteredCommand","l":"requiresPermission(String)","url":"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)","url":"round(double,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"roundUp(int, int)","url":"roundUp(int,int)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"rtrim(String)","url":"rtrim(java.lang.String)"},{"p":"co.aikar.commands","c":"Locales","l":"RUSSIAN"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKey, String...)","url":"sendError(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendError(MessageKeyProvider, String...)","url":"sendError(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKey, String...)","url":"sendInfo(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendInfo(MessageKeyProvider, String...)","url":"sendInfo(co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"sendMessage(CommandIssuer, MessageType, MessageKeyProvider, String...)","url":"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...)","url":"sendMessage(IT,co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKey, String...)","url":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(MessageType, MessageKeyProvider, String...)","url":"sendMessage(co.aikar.commands.MessageType,co.aikar.locales.MessageKeyProvider,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessage(String)","url":"sendMessage(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKey, String...)","url":"sendSyntax(co.aikar.locales.MessageKey,java.lang.String...)"},{"p":"co.aikar.commands","c":"CommandIssuer","l":"sendSyntax(MessageKeyProvider, String...)","url":"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)","url":"setCause(java.lang.Throwable,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MessageFormatter","l":"setColor(int, FT)","url":"setColor(int,FT)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setCommandIssuer(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setConditions(String)","url":"setConditions(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setContextFlags(Class, String)","url":"setContextFlags(java.lang.Class,java.lang.String)"},{"p":"co.aikar.commands","c":"CommandCompletions","l":"setDefaultCompletion(String, Class...)","url":"setDefaultCompletion(java.lang.String,java.lang.Class...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler, boolean)","url":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler,boolean)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setDefaultExceptionHandler(ExceptionHandler)","url":"setDefaultExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"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)","url":"setDefaultLocale(java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDefaultValue(String)","url":"setDefaultValue(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setDescription(String)","url":"setDescription(java.lang.String)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"setExceptionHandler(ExceptionHandler)","url":"setExceptionHandler(co.aikar.commands.ExceptionHandler)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setFlags(Map)","url":"setFlags(java.util.Map)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, FT...)","url":"setFormat(co.aikar.commands.MessageType,FT...)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, int, FT)","url":"setFormat(co.aikar.commands.MessageType,int,FT)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setFormat(MessageType, MF)","url":"setFormat(co.aikar.commands.MessageType,MF)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setHelpFormatter(CommandHelpFormatter)","url":"setHelpFormatter(co.aikar.commands.CommandHelpFormatter)"},{"p":"co.aikar.commands","c":"CommandManager","l":"setIssuerLocale(IT, Locale)","url":"setIssuerLocale(IT,java.util.Locale)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setNextParam(CommandParameter)","url":"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, int)","url":"setPage(int,int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPage(int)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setPerPage(int)"},{"p":"co.aikar.commands","c":"CommandOperationContext","l":"setRegisteredCommand(RegisteredCommand)","url":"setRegisteredCommand(co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setRequiresInput(boolean)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setResolver(ContextResolver)","url":"setResolver(co.aikar.commands.contexts.ContextResolver)"},{"p":"co.aikar.commands","c":"CommandHelp","l":"setSearch(List)","url":"setSearch(java.util.List)"},{"p":"co.aikar.commands","c":"HelpEntry","l":"setSearchScore(int)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setSyntax(String)","url":"setSyntax(java.lang.String)"},{"p":"co.aikar.commands","c":"CommandParameter","l":"setValues(String[])","url":"setValues(java.lang.String[])"},{"p":"co.aikar.commands","c":"HelpEntry","l":"shouldShow()"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showAllResults(CommandHelp, List)","url":"showAllResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showCommandHelp()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(boolean)","url":"%3Cinit%3E(boolean)"},{"p":"co.aikar.commands","c":"ShowCommandHelp","l":"ShowCommandHelp(List)","url":"%3Cinit%3E(java.util.List)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showDetailedHelp(CommandHelp, HelpEntry)","url":"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)","url":"showHelp(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandHelpFormatter","l":"showSearchResults(CommandHelp, List)","url":"showSearchResults(co.aikar.commands.CommandHelp,java.util.List)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"showSyntax(CommandIssuer, RegisteredCommand)","url":"showSyntax(co.aikar.commands.CommandIssuer,co.aikar.commands.RegisteredCommand)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"simpleMatch(Class>, String)","url":"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)","url":"simplifyString(java.lang.String)"},{"p":"co.aikar.commands","c":"ACFUtil","l":"sneaky(Throwable)","url":"sneaky(java.lang.Throwable)"},{"p":"co.aikar.commands","c":"Locales","l":"SPANISH"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWith(CharSequence, CharSequence)","url":"startsWith(java.lang.CharSequence,java.lang.CharSequence)"},{"p":"co.aikar.commands.apachecommonslang","c":"ApacheCommonsLangUtil","l":"startsWithIgnoreCase(CharSequence, CharSequence)","url":"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()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"MessageType","l":"SYNTAX"},{"p":"co.aikar.commands","c":"ForwardingCommand","l":"tabComplete(CommandIssuer, RootCommand, String[], boolean)","url":"tabComplete(co.aikar.commands.CommandIssuer,co.aikar.commands.RootCommand,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[], boolean)","url":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[],boolean)"},{"p":"co.aikar.commands","c":"BaseCommand","l":"tabComplete(CommandIssuer, String, String[])","url":"tabComplete(co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"CommandHelp","l":"testExactMatch(String)","url":"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)","url":"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)","url":"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.ParameterCondition","l":"validateCondition(ConditionContext, CEC, P)","url":"validateCondition(co.aikar.commands.ConditionContext,CEC,P)"},{"p":"co.aikar.commands","c":"CommandConditions.Condition","l":"validateCondition(ConditionContext)","url":"validateCondition(co.aikar.commands.ConditionContext)"},{"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)","url":"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"}] \ 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":"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 diff --git a/docs/acf-core/module-search-index.js b/docs/acf-core/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-core/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-core/overview-summary.html b/docs/acf-core/overview-summary.html index 71459dad..83ef563e 100644 --- a/docs/acf-core/overview-summary.html +++ b/docs/acf-core/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (Core) 0.5.0-SNAPSHOT API + +ACF (Core) 0.5.1-SNAPSHOT API + + + + + - - - +

    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-core/src-html/co/aikar/commands/ACFUtil.html b/docs/acf-core/src-html/co/aikar/commands/ACFUtil.html index 30b4d546..5d00ca82 100644 --- a/docs/acf-core/src-html/co/aikar/commands/ACFUtil.html +++ b/docs/acf-core/src-html/co/aikar/commands/ACFUtil.html @@ -1,682 +1,692 @@ + Source code + + + - +
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026
    -027import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -028import org.jetbrains.annotations.Nullable;
    -029
    -030import java.math.BigDecimal;
    -031import java.text.Normalizer;
    -032import java.text.Normalizer.Form;
    -033import java.text.NumberFormat;
    -034import java.util.ArrayList;
    -035import java.util.Collection;
    -036import java.util.Iterator;
    -037import java.util.List;
    -038import java.util.Locale;
    -039import java.util.Random;
    -040import java.util.function.Consumer;
    -041import java.util.regex.Matcher;
    -042import java.util.regex.Pattern;
    -043import java.util.stream.Collectors;
    -044import java.util.stream.Stream;
    -045
    -046@SuppressWarnings({"WeakerAccess", "unused"})
    -047public final class ACFUtil {
    -048
    -049    public static final Random RANDOM = new Random();
    -050
    -051    private ACFUtil() {
    -052    }
    -053
    -054    public static String padRight(String s, int n) {
    -055        return String.format("%1$-" + n + "s", s);
    -056    }
    -057
    -058    public static String padLeft(String s, int n) {
    -059        return String.format("%1$" + n + "s", s);
    -060    }
    -061
    -062    public static String formatNumber(Integer balance) {
    -063        return NumberFormat.getInstance().format(balance);
    -064    }
    -065
    -066    public static <T extends Enum> T getEnumFromName(T[] types, String name) {
    -067        return getEnumFromName(types, name, null);
    -068    }
    -069
    -070    public static <T extends Enum> T getEnumFromName(T[] types, String name, T def) {
    -071        for (T type : types) {
    -072            if (type.name().equalsIgnoreCase(name)) {
    -073                return type;
    -074            }
    -075        }
    -076        return def;
    -077    }
    -078
    -079    public static <T extends Enum> T getEnumFromOrdinal(T[] types, int ordinal) {
    -080        for (T type : types) {
    -081            if (type.ordinal() == ordinal) {
    -082                return type;
    -083            }
    -084        }
    -085        return null;
    -086    }
    -087
    -088    public static String ucfirst(String str) {
    -089        return ApacheCommonsLangUtil.capitalizeFully(str);
    -090    }
    -091
    -092    public static Double parseDouble(String var) {
    -093        return parseDouble(var, null);
    -094    }
    -095
    -096    public static Double parseDouble(String var, Double def) {
    -097        if (var == null) {
    -098            return def;
    -099        }
    -100        try {
    -101            return Double.parseDouble(var);
    -102        } catch (NumberFormatException ignored) {
    -103        }
    -104        return def;
    -105    }
    -106
    -107    public static Float parseFloat(String var) {
    -108        return parseFloat(var, null);
    -109    }
    -110
    -111    public static Float parseFloat(String var, Float def) {
    -112        if (var == null) {
    -113            return def;
    -114        }
    -115        try {
    -116            return Float.parseFloat(var);
    -117        } catch (NumberFormatException ignored) {
    -118        }
    -119        return def;
    -120    }
    -121
    -122    public static Long parseLong(String var) {
    -123        return parseLong(var, null);
    -124    }
    -125
    -126    public static Long parseLong(String var, Long def) {
    -127        if (var == null) {
    -128            return def;
    -129        }
    -130        try {
    -131            return Long.parseLong(var);
    -132        } catch (NumberFormatException ignored) {
    -133        }
    -134        return def;
    -135    }
    -136
    -137    public static Integer parseInt(String var) {
    -138        return parseInt(var, null);
    -139    }
    -140
    -141    public static Integer parseInt(String var, Integer def) {
    -142        if (var == null) {
    -143            return def;
    -144        }
    -145        try {
    -146            return Integer.parseInt(var);
    -147        } catch (NumberFormatException ignored) {
    -148        }
    -149        return def;
    -150    }
    -151
    -152    public static boolean randBool() {
    -153        return RANDOM.nextBoolean();
    -154    }
    -155
    -156    public static <T> T nullDefault(Object val, Object def) {
    -157        //noinspection unchecked
    -158        return (T) (val != null ? val : def);
    -159    }
    -160
    -161    public static String join(Collection<String> args) {
    -162        return ApacheCommonsLangUtil.join(args, " ");
    -163    }
    -164
    -165    public static String join(Collection<String> args, String sep) {
    -166        return ApacheCommonsLangUtil.join(args, sep);
    -167    }
    -168
    -169    public static String join(String[] args) {
    -170        return join(args, 0, ' ');
    -171    }
    -172
    -173    public static String join(String[] args, String sep) {
    -174        return ApacheCommonsLangUtil.join(args, sep);
    -175    }
    -176
    -177    public static String join(String[] args, char sep) {
    -178        return join(args, 0, sep);
    -179    }
    -180
    -181    public static String join(String[] args, int index) {
    -182        return join(args, index, ' ');
    -183    }
    -184
    -185    public static String join(String[] args, int index, char sep) {
    -186        return ApacheCommonsLangUtil.join(args, sep, index, args.length);
    -187    }
    -188
    -189    public static String simplifyString(String str) {
    -190        if (str == null) {
    -191            return null;
    -192        }
    -193        return ACFPatterns.NON_ALPHA_NUMERIC.matcher(str.toLowerCase(Locale.ENGLISH)).replaceAll("");
    -194    }
    -195
    -196    public static double round(double x, int scale) {
    -197        try {
    -198            return (new BigDecimal
    -199                    (Double.toString(x))
    -200                    .setScale(scale, BigDecimal.ROUND_HALF_UP))
    -201                    .doubleValue();
    -202        } catch (NumberFormatException ex) {
    -203            if (Double.isInfinite(x)) {
    -204                return x;
    -205            } else {
    -206                return Double.NaN;
    -207            }
    -208        }
    -209    }
    -210
    -211    public static int roundUp(int num, int multiple) {
    -212        if (multiple == 0) {
    -213            return num;
    -214        }
    -215
    -216        int remainder = num % multiple;
    -217        if (remainder == 0) {
    -218            return num;
    -219        }
    -220        return num + multiple - remainder;
    -221
    -222    }
    -223
    -224    public static String limit(String str, int limit) {
    -225        return str.length() > limit ? str.substring(0, limit) : str;
    -226    }
    -227
    -228    /**
    -229     * Plain string replacement, escapes replace value.
    -230     *
    -231     * @param string
    -232     * @param pattern
    -233     * @param repl
    -234     * @return
    -235     */
    -236    public static String replace(String string, Pattern pattern, String repl) {
    -237        return pattern.matcher(string).replaceAll(Matcher.quoteReplacement(repl));
    -238    }
    -239
    -240    /**
    -241     * Regex version of {@link #replace(String, Pattern, String)}
    -242     *
    -243     * @param string
    -244     * @param pattern
    -245     * @param repl
    -246     * @return
    -247     */
    -248    public static String replacePattern(String string, Pattern pattern, String repl) {
    -249        return pattern.matcher(string).replaceAll(repl);
    -250    }
    -251
    -252    /**
    -253     * Plain String replacement. If you need regex patterns, see {@link #replacePattern(String, String, String)}
    -254     *
    -255     * @param string
    -256     * @param pattern
    -257     * @param repl
    -258     * @return
    -259     */
    -260    public static String replace(String string, String pattern, String repl) {
    -261        return replace(string, ACFPatterns.getPattern(Pattern.quote(pattern)), repl);
    -262    }
    -263
    -264    /**
    -265     * Regex version of {@link #replace(String, String, String)}
    -266     *
    -267     * @param string
    -268     * @param pattern
    -269     * @param repl
    -270     * @return
    -271     */
    -272    public static String replacePattern(String string, String pattern, String repl) {
    -273        return replace(string, ACFPatterns.getPattern(pattern), repl);
    -274    }
    -275
    -276    /**
    -277     * Pure Regex Pattern matching and replacement, no escaping
    -278     *
    -279     * @param string
    -280     * @param pattern
    -281     * @param repl
    -282     * @return
    -283     */
    -284    public static String replacePatternMatch(String string, Pattern pattern, String repl) {
    -285        return pattern.matcher(string).replaceAll(repl);
    -286    }
    -287
    -288    /**
    -289     * Pure Regex Pattern matching and replacement, no escaping
    -290     *
    -291     * @param string
    -292     * @param pattern
    -293     * @param repl
    -294     * @return
    -295     */
    -296    public static String replacePatternMatch(String string, String pattern, String repl) {
    -297        return replacePatternMatch(string, ACFPatterns.getPattern(pattern), repl);
    -298    }
    -299
    -300    public static String replaceStrings(String string, String... replacements) {
    -301        if (replacements.length < 2 || replacements.length % 2 != 0) {
    -302            throw new IllegalArgumentException("Invalid Replacements");
    -303        }
    -304        for (int i = 0; i < replacements.length; i += 2) {
    -305            String key = replacements[i];
    -306            String value = replacements[i + 1];
    -307            if (value == null) value = "";
    -308            string = replace(string, key, value);
    -309        }
    -310        return string;
    -311    }
    -312
    -313    public static String replacePatterns(String string, String... replacements) {
    -314        if (replacements.length < 2 || replacements.length % 2 != 0) {
    -315            throw new IllegalArgumentException("Invalid Replacements");
    -316        }
    -317        for (int i = 0; i < replacements.length; i += 2) {
    -318            String key = replacements[i];
    -319            String value = replacements[i + 1];
    -320            if (value == null) value = "";
    -321            string = replacePattern(string, key, value);
    -322        }
    -323        return string;
    -324    }
    -325
    -326    public static String capitalize(String str, char[] delimiters) {
    -327        return ApacheCommonsLangUtil.capitalize(str, delimiters);
    -328    }
    -329
    -330    private static boolean isDelimiter(char ch, char[] delimiters) {
    -331        return ApacheCommonsLangUtil.isDelimiter(ch, delimiters);
    -332    }
    -333
    -334    public static <T> T random(List<T> arr) {
    -335        if (arr == null || arr.isEmpty()) {
    -336            return null;
    -337        }
    -338        return arr.get(RANDOM.nextInt(arr.size()));
    -339    }
    -340
    -341    public static <T> T random(T[] arr) {
    -342        if (arr == null || arr.length == 0) {
    -343            return null;
    -344        }
    -345        return arr[RANDOM.nextInt(arr.length)];
    -346    }
    -347
    -348    /**
    -349     * Added as im sure we will try to "Find this" again. This is no different than Enum.values() passed to above method logically
    -350     * but the array version is slightly faster.
    -351     *
    -352     * @param enm
    -353     * @param <T>
    -354     * @return
    -355     */
    -356    @Deprecated
    -357    public static <T extends Enum<?>> T random(Class<? extends T> enm) {
    -358        return random(enm.getEnumConstants());
    -359    }
    -360
    -361    public static String normalize(String s) {
    -362        if (s == null) {
    -363            return null;
    -364        }
    -365        return ACFPatterns.NON_PRINTABLE_CHARACTERS.matcher(Normalizer.normalize(s, Form.NFD)).replaceAll("");
    -366    }
    -367
    -368    public static int indexOf(String arg, String[] split) {
    -369        for (int i = 0; i < split.length; i++) {
    -370            if (arg == null) {
    -371                if (split[i] == null) {
    -372                    return i;
    -373                }
    -374            } else if (arg.equals(split[i])) {
    -375                return i;
    -376            }
    -377        }
    -378        return -1;
    -379    }
    -380
    -381    public static String capitalizeFirst(String name) {
    -382        return capitalizeFirst(name, '_');
    -383    }
    -384
    -385    public static String capitalizeFirst(String name, char separator) {
    -386        name = name.toLowerCase(Locale.ENGLISH);
    -387        String[] split = name.split(Character.toString(separator));
    -388        StringBuilder total = new StringBuilder(3);
    -389        for (String s : split) {
    -390            total.append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).append(' ');
    -391        }
    -392
    -393        return total.toString().trim();
    -394    }
    -395
    -396    public static String ltrim(String s) {
    -397        int i = 0;
    -398        while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
    -399            i++;
    -400        }
    -401        return s.substring(i);
    -402    }
    -403
    -404    public static String rtrim(String s) {
    -405        int i = s.length() - 1;
    -406        while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
    -407            i--;
    -408        }
    -409        return s.substring(0, i + 1);
    -410    }
    -411
    -412    public static List<String> enumNames(Enum<?>[] values) {
    -413        return Stream.of(values).map(Enum::name).collect(Collectors.toList());
    -414    }
    -415
    -416    public static List<String> enumNames(Class<? extends Enum<?>> cls) {
    -417        return enumNames(cls.getEnumConstants());
    -418    }
    -419
    -420    public static String combine(String[] args) {
    -421        return combine(args, 0);
    -422    }
    -423
    -424    public static String combine(String[] args, int start) {
    -425        int size = 0;
    -426        for (int i = start; i < args.length; i++) {
    -427            size += args[i].length();
    -428        }
    -429        StringBuilder sb = new StringBuilder(size);
    -430        for (int i = start; i < args.length; i++) {
    -431            sb.append(args[i]);
    -432        }
    -433        return sb.toString();
    -434    }
    -435
    -436
    -437    @Nullable
    -438    public static <E extends Enum<E>> E simpleMatch(Class<? extends Enum<?>> list, String item) {
    -439        if (item == null) {
    -440            return null;
    -441        }
    -442        item = ACFUtil.simplifyString(item);
    -443        for (Enum<?> s : list.getEnumConstants()) {
    -444            String simple = ACFUtil.simplifyString(s.name());
    -445            if (item.equals(simple)) {
    -446                //noinspection unchecked
    -447                return (E) s;
    -448            }
    -449        }
    -450
    -451        return null;
    -452    }
    -453
    -454    public static boolean isTruthy(String test) {
    -455        switch (test) {
    -456            case "t":
    -457            case "true":
    -458            case "on":
    -459            case "y":
    -460            case "yes":
    -461            case "1":
    -462                return true;
    -463        }
    -464        return false;
    -465    }
    -466
    -467
    -468    public static Number parseNumber(String num, boolean suffixes) {
    -469        ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke();
    -470        num = applyModifierToNumber.getNum();
    -471        double mod = applyModifierToNumber.getMod();
    -472
    -473        return Double.parseDouble(num) * mod;
    -474    }
    -475
    -476    public static BigDecimal parseBigNumber(String num, boolean suffixes) {
    -477        ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke();
    -478        num = applyModifierToNumber.getNum();
    -479        double mod = applyModifierToNumber.getMod();
    -480
    -481        BigDecimal big = new BigDecimal(num);
    -482        return (mod == 1) ? big : big.multiply(new BigDecimal(mod));
    -483    }
    -484
    -485    public static <T> boolean hasIntersection(Collection<T> list1, Collection<T> list2) {
    -486        for (T t : list1) {
    -487            if (list2.contains(t)) {
    -488                return true;
    -489            }
    -490        }
    -491
    -492        return false;
    -493    }
    -494
    -495    public static <T> Collection<T> intersection(Collection<T> list1, Collection<T> list2) {
    -496        List<T> list = new ArrayList<>();
    -497
    -498        for (T t : list1) {
    -499            if (list2.contains(t)) {
    -500                list.add(t);
    -501            }
    -502        }
    -503
    -504        return list;
    -505    }
    -506
    -507    public static int rand(int min, int max) {
    -508        return min + RANDOM.nextInt(max - min + 1);
    -509    }
    -510
    -511    /**
    -512     * Calculate random between 2 points, excluding a center
    -513     * ex: Util.rand(-12, -6, 6, 12) would not return -5 to 5
    -514     *
    -515     * @param min1
    -516     * @param max1
    -517     * @param min2
    -518     * @param max2
    -519     * @return
    -520     */
    -521    public static int rand(int min1, int max1, int min2, int max2) {
    -522        return randBool() ? rand(min1, max1) : rand(min2, max2);
    -523    }
    -524
    -525    public static double rand(double min, double max) {
    -526        return RANDOM.nextDouble() * (max - min) + min;
    -527    }
    -528
    -529    public static boolean isNumber(String str) {
    -530        return ApacheCommonsLangUtil.isNumeric(str);
    -531    }
    -532
    -533    public static String intToRoman(int integer) {
    -534        if (integer == 1) {
    -535            return "I";
    -536        }
    -537        if (integer == 2) {
    -538            return "II";
    -539        }
    -540        if (integer == 3) {
    -541            return "III";
    -542        }
    -543        if (integer == 4) {
    -544            return "IV";
    -545        }
    -546        if (integer == 5) {
    -547            return "V";
    -548        }
    -549        if (integer == 6) {
    -550            return "VI";
    -551        }
    -552        if (integer == 7) {
    -553            return "VII";
    -554        }
    -555        if (integer == 8) {
    -556            return "VIII";
    -557        }
    -558        if (integer == 9) {
    -559            return "IX";
    -560        }
    -561        if (integer == 10) {
    -562            return "X";
    -563        }
    -564        return null;
    -565    }
    -566
    -567    public static boolean isInteger(String string) {
    -568        return ACFPatterns.INTEGER.matcher(string).matches();
    -569    }
    -570
    -571    public static boolean isFloat(String string) {
    -572        try {
    -573            //noinspection ResultOfMethodCallIgnored
    -574            Float.parseFloat(string);
    -575            return true;
    -576        } catch (Exception e) {
    -577            return false;
    -578        }
    -579    }
    -580
    -581    public static boolean isDouble(String string) {
    -582        try {
    -583            //noinspection ResultOfMethodCallIgnored
    -584            Double.parseDouble(string);
    -585            return true;
    -586        } catch (Exception e) {
    -587            return false;
    -588        }
    -589    }
    -590
    -591    public static boolean isBetween(float num, double min, double max) {
    -592        return num >= min && num <= max;
    -593    }
    -594
    -595    @SuppressWarnings("SameParameterValue")
    -596    public static double precision(double x, int p) {
    -597        double pow = Math.pow(10, p);
    -598        return Math.round(x * pow) / pow;
    -599    }
    -600
    -601    public static void sneaky(Throwable t) {
    -602        //noinspection RedundantTypeArguments
    -603        throw ACFUtil.<RuntimeException>superSneaky(t);
    -604    }
    -605
    -606    private static <T extends Throwable> T superSneaky(Throwable t) throws T {
    -607        //noinspection ConstantConditions,unchecked
    -608        throw (T) t;
    -609    }
    -610
    -611    public static <T> List<T> preformOnImmutable(List<T> list, Consumer<List<T>> action) {
    -612        try {
    -613            action.accept(list);
    -614        } catch (UnsupportedOperationException ex) {
    -615            list = new ArrayList<>(list);
    -616            action.accept(list);
    -617        }
    -618
    -619        return list;
    -620    }
    -621
    -622    public static <T> T getFirstElement(Iterable<T> iterable) {
    -623        if (iterable == null) {
    -624            return null;
    -625        }
    -626        Iterator<T> iterator = iterable.iterator();
    -627        if (iterator.hasNext()) {
    -628            return iterator.next();
    -629        }
    -630
    -631        return null;
    -632    }
    -633
    -634    private static class ApplyModifierToNumber {
    -635        private String num;
    -636        private boolean suffixes;
    -637        private double mod;
    -638
    -639        public ApplyModifierToNumber(String num, boolean suffixes) {
    -640            this.num = num;
    -641            this.suffixes = suffixes;
    -642        }
    -643
    -644        public String getNum() {
    -645            return num;
    -646        }
    -647
    -648        public double getMod() {
    -649            return mod;
    -650        }
    -651
    -652        public ApplyModifierToNumber invoke() {
    -653            mod = 1;
    -654            if (suffixes) {
    -655                switch (num.charAt(num.length() - 1)) {
    -656                    case 'M':
    -657                    case 'm':
    -658                        mod = 1000000D;
    -659                        num = num.substring(0, num.length() - 1);
    -660                        break;
    -661                    case 'K':
    -662                    case 'k':
    -663                        mod = 1000D;
    -664                        num = num.substring(0, num.length() - 1);
    -665                }
    -666            }
    -667            return this;
    -668        }
    -669    }
    -670}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026
    +027import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +028import org.jetbrains.annotations.Nullable;
    +029
    +030import java.math.BigDecimal;
    +031import java.text.Normalizer;
    +032import java.text.Normalizer.Form;
    +033import java.text.NumberFormat;
    +034import java.util.ArrayList;
    +035import java.util.Collection;
    +036import java.util.Iterator;
    +037import java.util.List;
    +038import java.util.Locale;
    +039import java.util.Random;
    +040import java.util.function.Consumer;
    +041import java.util.regex.Matcher;
    +042import java.util.regex.Pattern;
    +043import java.util.stream.Collectors;
    +044import java.util.stream.Stream;
    +045
    +046@SuppressWarnings({"WeakerAccess", "unused"})
    +047public final class ACFUtil {
    +048
    +049    public static final Random RANDOM = new Random();
    +050
    +051    private ACFUtil() {
    +052    }
    +053
    +054    public static String padRight(String s, int n) {
    +055        return String.format("%1$-" + n + "s", s);
    +056    }
    +057
    +058    public static String padLeft(String s, int n) {
    +059        return String.format("%1$" + n + "s", s);
    +060    }
    +061
    +062    public static String formatNumber(Integer balance) {
    +063        return NumberFormat.getInstance().format(balance);
    +064    }
    +065
    +066    public static <T extends Enum> T getEnumFromName(T[] types, String name) {
    +067        return getEnumFromName(types, name, null);
    +068    }
    +069
    +070    public static <T extends Enum> T getEnumFromName(T[] types, String name, T def) {
    +071        for (T type : types) {
    +072            if (type.name().equalsIgnoreCase(name)) {
    +073                return type;
    +074            }
    +075        }
    +076        return def;
    +077    }
    +078
    +079    public static <T extends Enum> T getEnumFromOrdinal(T[] types, int ordinal) {
    +080        for (T type : types) {
    +081            if (type.ordinal() == ordinal) {
    +082                return type;
    +083            }
    +084        }
    +085        return null;
    +086    }
    +087
    +088    public static String ucfirst(String str) {
    +089        return ApacheCommonsLangUtil.capitalizeFully(str);
    +090    }
    +091
    +092    public static Double parseDouble(String var) {
    +093        return parseDouble(var, null);
    +094    }
    +095
    +096    public static Double parseDouble(String var, Double def) {
    +097        if (var == null) {
    +098            return def;
    +099        }
    +100        try {
    +101            return Double.parseDouble(var);
    +102        } catch (NumberFormatException ignored) {
    +103        }
    +104        return def;
    +105    }
    +106
    +107    public static Float parseFloat(String var) {
    +108        return parseFloat(var, null);
    +109    }
    +110
    +111    public static Float parseFloat(String var, Float def) {
    +112        if (var == null) {
    +113            return def;
    +114        }
    +115        try {
    +116            return Float.parseFloat(var);
    +117        } catch (NumberFormatException ignored) {
    +118        }
    +119        return def;
    +120    }
    +121
    +122    public static Long parseLong(String var) {
    +123        return parseLong(var, null);
    +124    }
    +125
    +126    public static Long parseLong(String var, Long def) {
    +127        if (var == null) {
    +128            return def;
    +129        }
    +130        try {
    +131            return Long.parseLong(var);
    +132        } catch (NumberFormatException ignored) {
    +133        }
    +134        return def;
    +135    }
    +136
    +137    public static Integer parseInt(String var) {
    +138        return parseInt(var, null);
    +139    }
    +140
    +141    public static Integer parseInt(String var, Integer def) {
    +142        if (var == null) {
    +143            return def;
    +144        }
    +145        try {
    +146            return Integer.parseInt(var);
    +147        } catch (NumberFormatException ignored) {
    +148        }
    +149        return def;
    +150    }
    +151
    +152    public static boolean randBool() {
    +153        return RANDOM.nextBoolean();
    +154    }
    +155
    +156    public static <T> T nullDefault(Object val, Object def) {
    +157        //noinspection unchecked
    +158        return (T) (val != null ? val : def);
    +159    }
    +160
    +161    public static String join(Collection<String> args) {
    +162        return ApacheCommonsLangUtil.join(args, " ");
    +163    }
    +164
    +165    public static String join(Collection<String> args, String sep) {
    +166        return ApacheCommonsLangUtil.join(args, sep);
    +167    }
    +168
    +169    public static String join(String[] args) {
    +170        return join(args, 0, ' ');
    +171    }
    +172
    +173    public static String join(String[] args, String sep) {
    +174        return ApacheCommonsLangUtil.join(args, sep);
    +175    }
    +176
    +177    public static String join(String[] args, char sep) {
    +178        return join(args, 0, sep);
    +179    }
    +180
    +181    public static String join(String[] args, int index) {
    +182        return join(args, index, ' ');
    +183    }
    +184
    +185    public static String join(String[] args, int index, char sep) {
    +186        return ApacheCommonsLangUtil.join(args, sep, index, args.length);
    +187    }
    +188
    +189    public static String simplifyString(String str) {
    +190        if (str == null) {
    +191            return null;
    +192        }
    +193        return ACFPatterns.NON_ALPHA_NUMERIC.matcher(str.toLowerCase(Locale.ENGLISH)).replaceAll("");
    +194    }
    +195
    +196    public static double round(double x, int scale) {
    +197        try {
    +198            return (new BigDecimal
    +199                    (Double.toString(x))
    +200                    .setScale(scale, BigDecimal.ROUND_HALF_UP))
    +201                    .doubleValue();
    +202        } catch (NumberFormatException ex) {
    +203            if (Double.isInfinite(x)) {
    +204                return x;
    +205            } else {
    +206                return Double.NaN;
    +207            }
    +208        }
    +209    }
    +210
    +211    public static int roundUp(int num, int multiple) {
    +212        if (multiple == 0) {
    +213            return num;
    +214        }
    +215
    +216        int remainder = num % multiple;
    +217        if (remainder == 0) {
    +218            return num;
    +219        }
    +220        return num + multiple - remainder;
    +221
    +222    }
    +223
    +224    public static String limit(String str, int limit) {
    +225        return str.length() > limit ? str.substring(0, limit) : str;
    +226    }
    +227
    +228    /**
    +229     * Plain string replacement, escapes replace value.
    +230     *
    +231     * @param string
    +232     * @param pattern
    +233     * @param repl
    +234     * @return
    +235     */
    +236    public static String replace(String string, Pattern pattern, String repl) {
    +237        return pattern.matcher(string).replaceAll(Matcher.quoteReplacement(repl));
    +238    }
    +239
    +240    /**
    +241     * Regex version of {@link #replace(String, Pattern, String)}
    +242     *
    +243     * @param string
    +244     * @param pattern
    +245     * @param repl
    +246     * @return
    +247     */
    +248    public static String replacePattern(String string, Pattern pattern, String repl) {
    +249        return pattern.matcher(string).replaceAll(repl);
    +250    }
    +251
    +252    /**
    +253     * Plain String replacement. If you need regex patterns, see {@link #replacePattern(String, String, String)}
    +254     *
    +255     * @param string
    +256     * @param pattern
    +257     * @param repl
    +258     * @return
    +259     */
    +260    public static String replace(String string, String pattern, String repl) {
    +261        return replace(string, ACFPatterns.getPattern(Pattern.quote(pattern)), repl);
    +262    }
    +263
    +264    /**
    +265     * Regex version of {@link #replace(String, String, String)}
    +266     *
    +267     * @param string
    +268     * @param pattern
    +269     * @param repl
    +270     * @return
    +271     */
    +272    public static String replacePattern(String string, String pattern, String repl) {
    +273        return replace(string, ACFPatterns.getPattern(pattern), repl);
    +274    }
    +275
    +276    /**
    +277     * Pure Regex Pattern matching and replacement, no escaping
    +278     *
    +279     * @param string
    +280     * @param pattern
    +281     * @param repl
    +282     * @return
    +283     */
    +284    public static String replacePatternMatch(String string, Pattern pattern, String repl) {
    +285        return pattern.matcher(string).replaceAll(repl);
    +286    }
    +287
    +288    /**
    +289     * Pure Regex Pattern matching and replacement, no escaping
    +290     *
    +291     * @param string
    +292     * @param pattern
    +293     * @param repl
    +294     * @return
    +295     */
    +296    public static String replacePatternMatch(String string, String pattern, String repl) {
    +297        return replacePatternMatch(string, ACFPatterns.getPattern(pattern), repl);
    +298    }
    +299
    +300    public static String replaceStrings(String string, String... replacements) {
    +301        if (replacements.length < 2 || replacements.length % 2 != 0) {
    +302            throw new IllegalArgumentException("Invalid Replacements");
    +303        }
    +304        for (int i = 0; i < replacements.length; i += 2) {
    +305            String key = replacements[i];
    +306            String value = replacements[i + 1];
    +307            if (value == null) value = "";
    +308            string = replace(string, key, value);
    +309        }
    +310        return string;
    +311    }
    +312
    +313    public static String replacePatterns(String string, String... replacements) {
    +314        if (replacements.length < 2 || replacements.length % 2 != 0) {
    +315            throw new IllegalArgumentException("Invalid Replacements");
    +316        }
    +317        for (int i = 0; i < replacements.length; i += 2) {
    +318            String key = replacements[i];
    +319            String value = replacements[i + 1];
    +320            if (value == null) value = "";
    +321            string = replacePattern(string, key, value);
    +322        }
    +323        return string;
    +324    }
    +325
    +326    public static String capitalize(String str, char[] delimiters) {
    +327        return ApacheCommonsLangUtil.capitalize(str, delimiters);
    +328    }
    +329
    +330    private static boolean isDelimiter(char ch, char[] delimiters) {
    +331        return ApacheCommonsLangUtil.isDelimiter(ch, delimiters);
    +332    }
    +333
    +334    public static <T> T random(List<T> arr) {
    +335        if (arr == null || arr.isEmpty()) {
    +336            return null;
    +337        }
    +338        return arr.get(RANDOM.nextInt(arr.size()));
    +339    }
    +340
    +341    public static <T> T random(T[] arr) {
    +342        if (arr == null || arr.length == 0) {
    +343            return null;
    +344        }
    +345        return arr[RANDOM.nextInt(arr.length)];
    +346    }
    +347
    +348    /**
    +349     * Added as im sure we will try to "Find this" again. This is no different than Enum.values() passed to above method logically
    +350     * but the array version is slightly faster.
    +351     *
    +352     * @param enm
    +353     * @param <T>
    +354     * @return
    +355     */
    +356    @Deprecated
    +357    public static <T extends Enum<?>> T random(Class<? extends T> enm) {
    +358        return random(enm.getEnumConstants());
    +359    }
    +360
    +361    public static String normalize(String s) {
    +362        if (s == null) {
    +363            return null;
    +364        }
    +365        return ACFPatterns.NON_PRINTABLE_CHARACTERS.matcher(Normalizer.normalize(s, Form.NFD)).replaceAll("");
    +366    }
    +367
    +368    public static int indexOf(String arg, String[] split) {
    +369        for (int i = 0; i < split.length; i++) {
    +370            if (arg == null) {
    +371                if (split[i] == null) {
    +372                    return i;
    +373                }
    +374            } else if (arg.equals(split[i])) {
    +375                return i;
    +376            }
    +377        }
    +378        return -1;
    +379    }
    +380
    +381    public static String capitalizeFirst(String name) {
    +382        return capitalizeFirst(name, '_');
    +383    }
    +384
    +385    public static String capitalizeFirst(String name, char separator) {
    +386        name = name.toLowerCase(Locale.ENGLISH);
    +387        String[] split = name.split(Character.toString(separator));
    +388        StringBuilder total = new StringBuilder(3);
    +389        for (String s : split) {
    +390            total.append(Character.toUpperCase(s.charAt(0))).append(s.substring(1)).append(' ');
    +391        }
    +392
    +393        return total.toString().trim();
    +394    }
    +395
    +396    public static String ltrim(String s) {
    +397        int i = 0;
    +398        while (i < s.length() && Character.isWhitespace(s.charAt(i))) {
    +399            i++;
    +400        }
    +401        return s.substring(i);
    +402    }
    +403
    +404    public static String rtrim(String s) {
    +405        int i = s.length() - 1;
    +406        while (i >= 0 && Character.isWhitespace(s.charAt(i))) {
    +407            i--;
    +408        }
    +409        return s.substring(0, i + 1);
    +410    }
    +411
    +412    public static List<String> enumNames(Enum<?>[] values) {
    +413        return Stream.of(values).map(Enum::name).collect(Collectors.toList());
    +414    }
    +415
    +416    public static List<String> enumNames(Class<? extends Enum<?>> cls) {
    +417        return enumNames(cls.getEnumConstants());
    +418    }
    +419
    +420    public static String combine(String[] args) {
    +421        return combine(args, 0);
    +422    }
    +423
    +424    public static String combine(String[] args, int start) {
    +425        int size = 0;
    +426        for (int i = start; i < args.length; i++) {
    +427            size += args[i].length();
    +428        }
    +429        StringBuilder sb = new StringBuilder(size);
    +430        for (int i = start; i < args.length; i++) {
    +431            sb.append(args[i]);
    +432        }
    +433        return sb.toString();
    +434    }
    +435
    +436
    +437    @Nullable
    +438    public static <E extends Enum<E>> E simpleMatch(Class<? extends Enum<?>> list, String item) {
    +439        if (item == null) {
    +440            return null;
    +441        }
    +442        item = ACFUtil.simplifyString(item);
    +443        for (Enum<?> s : list.getEnumConstants()) {
    +444            String simple = ACFUtil.simplifyString(s.name());
    +445            if (item.equals(simple)) {
    +446                //noinspection unchecked
    +447                return (E) s;
    +448            }
    +449        }
    +450
    +451        return null;
    +452    }
    +453
    +454    public static boolean isTruthy(String test) {
    +455        switch (test) {
    +456            case "t":
    +457            case "true":
    +458            case "on":
    +459            case "y":
    +460            case "yes":
    +461            case "1":
    +462                return true;
    +463        }
    +464        return false;
    +465    }
    +466
    +467
    +468    public static Number parseNumber(String num, boolean suffixes) {
    +469        if (ACFPatterns.getPattern("^0x([0-9A-Fa-f]*)$").matcher(num).matches()) {
    +470            return Long.parseLong(num.substring(2), 16);
    +471        } else if (ACFPatterns.getPattern("^0b([01]*)$").matcher(num).matches()) {
    +472            return Long.parseLong(num.substring(2), 2);
    +473        } else {
    +474            ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke();
    +475            num = applyModifierToNumber.getNum();
    +476            double mod = applyModifierToNumber.getMod();
    +477
    +478            return Double.parseDouble(num) * mod;
    +479        }
    +480    }
    +481
    +482    public static BigDecimal parseBigNumber(String num, boolean suffixes) {
    +483        ApplyModifierToNumber applyModifierToNumber = new ApplyModifierToNumber(num, suffixes).invoke();
    +484        num = applyModifierToNumber.getNum();
    +485        double mod = applyModifierToNumber.getMod();
    +486
    +487        BigDecimal big = new BigDecimal(num);
    +488        return (mod == 1) ? big : big.multiply(new BigDecimal(mod));
    +489    }
    +490
    +491    public static <T> boolean hasIntersection(Collection<T> list1, Collection<T> list2) {
    +492        for (T t : list1) {
    +493            if (list2.contains(t)) {
    +494                return true;
    +495            }
    +496        }
    +497
    +498        return false;
    +499    }
    +500
    +501    public static <T> Collection<T> intersection(Collection<T> list1, Collection<T> list2) {
    +502        List<T> list = new ArrayList<>();
    +503
    +504        for (T t : list1) {
    +505            if (list2.contains(t)) {
    +506                list.add(t);
    +507            }
    +508        }
    +509
    +510        return list;
    +511    }
    +512
    +513    public static int rand(int min, int max) {
    +514        return min + RANDOM.nextInt(max - min + 1);
    +515    }
    +516
    +517    /**
    +518     * Calculate random between 2 points, excluding a center
    +519     * ex: Util.rand(-12, -6, 6, 12) would not return -5 to 5
    +520     *
    +521     * @param min1
    +522     * @param max1
    +523     * @param min2
    +524     * @param max2
    +525     * @return
    +526     */
    +527    public static int rand(int min1, int max1, int min2, int max2) {
    +528        return randBool() ? rand(min1, max1) : rand(min2, max2);
    +529    }
    +530
    +531    public static double rand(double min, double max) {
    +532        return RANDOM.nextDouble() * (max - min) + min;
    +533    }
    +534
    +535    public static boolean isNumber(String str) {
    +536        return ApacheCommonsLangUtil.isNumeric(str);
    +537    }
    +538
    +539    public static String intToRoman(int integer) {
    +540        if (integer == 1) {
    +541            return "I";
    +542        }
    +543        if (integer == 2) {
    +544            return "II";
    +545        }
    +546        if (integer == 3) {
    +547            return "III";
    +548        }
    +549        if (integer == 4) {
    +550            return "IV";
    +551        }
    +552        if (integer == 5) {
    +553            return "V";
    +554        }
    +555        if (integer == 6) {
    +556            return "VI";
    +557        }
    +558        if (integer == 7) {
    +559            return "VII";
    +560        }
    +561        if (integer == 8) {
    +562            return "VIII";
    +563        }
    +564        if (integer == 9) {
    +565            return "IX";
    +566        }
    +567        if (integer == 10) {
    +568            return "X";
    +569        }
    +570        return null;
    +571    }
    +572
    +573    public static boolean isInteger(String string) {
    +574        return ACFPatterns.INTEGER.matcher(string).matches();
    +575    }
    +576
    +577    public static boolean isFloat(String string) {
    +578        try {
    +579            //noinspection ResultOfMethodCallIgnored
    +580            Float.parseFloat(string);
    +581            return true;
    +582        } catch (Exception e) {
    +583            return false;
    +584        }
    +585    }
    +586
    +587    public static boolean isDouble(String string) {
    +588        try {
    +589            //noinspection ResultOfMethodCallIgnored
    +590            Double.parseDouble(string);
    +591            return true;
    +592        } catch (Exception e) {
    +593            return false;
    +594        }
    +595    }
    +596
    +597    public static boolean isBetween(float num, double min, double max) {
    +598        return num >= min && num <= max;
    +599    }
    +600
    +601    @SuppressWarnings("SameParameterValue")
    +602    public static double precision(double x, int p) {
    +603        double pow = Math.pow(10, p);
    +604        return Math.round(x * pow) / pow;
    +605    }
    +606
    +607    public static void sneaky(Throwable t) {
    +608        //noinspection RedundantTypeArguments
    +609        throw ACFUtil.<RuntimeException>superSneaky(t);
    +610    }
    +611
    +612    private static <T extends Throwable> T superSneaky(Throwable t) throws T {
    +613        //noinspection ConstantConditions,unchecked
    +614        throw (T) t;
    +615    }
    +616
    +617    public static <T> List<T> preformOnImmutable(List<T> list, Consumer<List<T>> action) {
    +618        try {
    +619            action.accept(list);
    +620        } catch (UnsupportedOperationException ex) {
    +621            list = new ArrayList<>(list);
    +622            action.accept(list);
    +623        }
    +624
    +625        return list;
    +626    }
    +627
    +628    public static <T> T getFirstElement(Iterable<T> iterable) {
    +629        if (iterable == null) {
    +630            return null;
    +631        }
    +632        Iterator<T> iterator = iterable.iterator();
    +633        if (iterator.hasNext()) {
    +634            return iterator.next();
    +635        }
    +636
    +637        return null;
    +638    }
    +639
    +640    private static class ApplyModifierToNumber {
    +641        private String num;
    +642        private boolean suffixes;
    +643        private double mod;
    +644
    +645        public ApplyModifierToNumber(String num, boolean suffixes) {
    +646            this.num = num;
    +647            this.suffixes = suffixes;
    +648        }
    +649
    +650        public String getNum() {
    +651            return num;
    +652        }
    +653
    +654        public double getMod() {
    +655            return mod;
    +656        }
    +657
    +658        public ApplyModifierToNumber invoke() {
    +659            mod = 1;
    +660            if (suffixes) {
    +661                switch (num.charAt(num.length() - 1)) {
    +662                    case 'M':
    +663                    case 'm':
    +664                        mod = 1000000D;
    +665                        num = num.substring(0, num.length() - 1);
    +666                        break;
    +667                    case 'K':
    +668                    case 'k':
    +669                        mod = 1000D;
    +670                        num = num.substring(0, num.length() - 1);
    +671                }
    +672            }
    +673            return this;
    +674        }
    +675    }
    +676}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/AnnotationProcessor.html b/docs/acf-core/src-html/co/aikar/commands/AnnotationProcessor.html
    index c64c7764..50c9c6c4 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/AnnotationProcessor.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/AnnotationProcessor.html
    @@ -1,74 +1,78 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import org.jetbrains.annotations.Nullable;
    -027
    -028import java.lang.annotation.Annotation;
    -029import java.lang.reflect.Parameter;
    -030import java.util.Set;
    -031
    -032@Deprecated /* @deprecated UNFINISHED */
    -033public interface AnnotationProcessor <T extends Annotation> {
    -034
    -035    @Nullable
    -036    default Set<Class<?>> getApplicableParameters() {
    -037        return null;
    -038    }
    -039
    -040    default void onBaseCommandRegister(BaseCommand command, T annotation) {
    -041
    -042    }
    -043    default void onCommandRegistered(RegisteredCommand command, T annotation) {
    -044
    -045    }
    -046    default void onParameterRegistered(RegisteredCommand command, int parameterIndex, Parameter p, T annotation) {
    -047
    -048    }
    -049    default void onPreComand(CommandOperationContext context) {
    -050
    -051    }
    -052    default void onPostComand(CommandOperationContext context) {
    -053
    -054    }
    -055    default void onPreContextResolution(CommandExecutionContext context) {
    -056
    -057    }
    -058    default void onPostContextResolution(CommandExecutionContext context, Object resolvedValue) {
    -059
    -060    }
    -061
    -062}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import org.jetbrains.annotations.Nullable;
    +027
    +028import java.lang.annotation.Annotation;
    +029import java.lang.reflect.Parameter;
    +030import java.util.Set;
    +031
    +032@Deprecated /* @deprecated UNFINISHED */
    +033public interface AnnotationProcessor <T extends Annotation> {
    +034
    +035    @Nullable
    +036    default Set<Class<?>> getApplicableParameters() {
    +037        return null;
    +038    }
    +039
    +040    default void onBaseCommandRegister(BaseCommand command, T annotation) {
    +041
    +042    }
    +043    default void onCommandRegistered(RegisteredCommand command, T annotation) {
    +044
    +045    }
    +046    default void onParameterRegistered(RegisteredCommand command, int parameterIndex, Parameter p, T annotation) {
    +047
    +048    }
    +049    default void onPreComand(CommandOperationContext context) {
    +050
    +051    }
    +052    default void onPostComand(CommandOperationContext context) {
    +053
    +054    }
    +055    default void onPreContextResolution(CommandExecutionContext context) {
    +056
    +057    }
    +058    default void onPostContextResolution(CommandExecutionContext context, Object resolvedValue) {
    +059
    +060    }
    +061
    +062}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/BaseCommand.html b/docs/acf-core/src-html/co/aikar/commands/BaseCommand.html
    index a485f73d..ed495112 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/BaseCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/BaseCommand.html
    @@ -1,862 +1,866 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.CommandRouter.RouteSearch;
    -027import co.aikar.commands.annotation.CatchAll;
    -028import co.aikar.commands.annotation.CatchUnknown;
    -029import co.aikar.commands.annotation.CommandAlias;
    -030import co.aikar.commands.annotation.CommandPermission;
    -031import co.aikar.commands.annotation.Conditions;
    -032import co.aikar.commands.annotation.Default;
    -033import co.aikar.commands.annotation.Description;
    -034import co.aikar.commands.annotation.HelpCommand;
    -035import co.aikar.commands.annotation.PreCommand;
    -036import co.aikar.commands.annotation.Subcommand;
    -037import co.aikar.commands.annotation.UnknownHandler;
    -038import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -039import com.google.common.collect.HashMultimap;
    -040import com.google.common.collect.SetMultimap;
    -041import org.jetbrains.annotations.Nullable;
    -042
    -043import java.lang.reflect.Constructor;
    -044import java.lang.reflect.InvocationTargetException;
    -045import java.lang.reflect.Method;
    -046import java.lang.reflect.Parameter;
    -047import java.util.ArrayList;
    -048import java.util.Arrays;
    -049import java.util.Collections;
    -050import java.util.HashMap;
    -051import java.util.HashSet;
    -052import java.util.LinkedHashSet;
    -053import java.util.List;
    -054import java.util.Locale;
    -055import java.util.Map;
    -056import java.util.Objects;
    -057import java.util.Set;
    -058import java.util.Stack;
    -059import java.util.stream.Collectors;
    -060import java.util.stream.Stream;
    -061
    -062/**
    -063 * A Base command is defined as a command group of related commands.
    -064 * A BaseCommand does not imply nor enforce that they use the same root command.
    -065 * <p>
    -066 * It is up to the end user how to organize their command. you could use 1 base command per
    -067 * command in your application.
    -068 * <p>
    -069 * Optionally (and encouraged), you can use the base command to represent a root command, and
    -070 * then each actionable command is a sub command
    -071 */
    -072
    -073public abstract class BaseCommand {
    -074
    -075    /**
    -076     * This is a field which contains the magic key in the {@link #subCommands} map for the method to catch any unknown
    -077     * argument to command states.
    -078     */
    -079    static final String CATCHUNKNOWN = "__catchunknown";
    -080    /**
    -081     * This is a field which contains the magic key in the {@link #subCommands} map for the method which is default for the
    -082     * entire base command.
    -083     */
    -084    static final String DEFAULT = "__default";
    -085
    -086    /**
    -087     * A map of all the registered commands for this base command, keyed to each potential subcommand to access it.
    -088     */
    -089    final SetMultimap<String, RegisteredCommand> subCommands = HashMultimap.create();
    -090    final Set<BaseCommand> subScopes = new HashSet<>();
    -091
    -092    /**
    -093     * A map of flags to pass to Context Resolution for every parameter of the type. This is like an automatic @Flags on each.
    -094     */
    -095    final Map<Class<?>, String> contextFlags = new HashMap<>();
    -096
    -097    /**
    -098     * What method was annoated with {@link PreCommand} to execute before commands.
    -099     */
    -100    @Nullable
    -101    private Method preCommandHandler;
    -102
    -103    /**
    -104     * What root command the user actually entered to access the currently executing command
    -105     */
    -106    @SuppressWarnings("WeakerAccess")
    -107    private String execLabel;
    -108    /**
    -109     * What subcommand the user actually entered to access the currently executing command
    -110     */
    -111    @SuppressWarnings("WeakerAccess")
    -112    private String execSubcommand;
    -113    /**
    -114     * What arguments the user actually entered after the root command to access the currently executing command
    -115     */
    -116    @SuppressWarnings("WeakerAccess")
    -117    private String[] origArgs;
    -118
    -119    /**
    -120     * The manager this is registered to
    -121     */
    -122    CommandManager<?, ?, ?, ?, ?, ?> manager = null;
    -123
    -124    /**
    -125     * The command which owns this. This may be null if there are no owners.
    -126     */
    -127    BaseCommand parentCommand;
    -128    Map<String, RootCommand> registeredCommands = new HashMap<>();
    -129    /**
    -130     * The description of the command. This may be null if no description has been provided.
    -131     * Used for help documentation
    -132     */
    -133    @Nullable String description;
    -134    /**
    -135     * The name of the command. This may be null if no name has been provided.
    -136     */
    -137    @Nullable String commandName;
    -138    /**
    -139     * The permission of the command. This may be null if no permission has been provided.
    -140     */
    -141    @Nullable String permission;
    -142    /**
    -143     * The conditions of the command. This may be null if no conditions has been provided.
    -144     */
    -145    @Nullable String conditions;
    -146    /**
    -147     * Identifies if the command has an explicit help command annotated with {@link HelpCommand}
    -148     */
    -149    boolean hasHelpCommand;
    -150
    -151    /**
    -152     * The handler of all uncaught exceptions thrown by the user's command implementation.
    -153     */
    -154    private ExceptionHandler exceptionHandler = null;
    -155    /**
    -156     * The last operative context data of this command. This may be null if this command hasn't been run yet.
    -157     */
    -158    private final ThreadLocal<CommandOperationContext> lastCommandOperationContext = new ThreadLocal<>();
    -159    /**
    -160     * If a parent exists to this command, and it has  a Subcommand annotation, prefix all subcommands in this class with this
    -161     */
    -162    @Nullable
    -163    private String parentSubcommand;
    -164
    -165    /**
    -166     * The permissions of the command.
    -167     */
    -168    private final Set<String> permissions = new HashSet<>();
    -169
    -170    public BaseCommand() {
    -171    }
    -172
    -173    /**
    -174     * Constructor based defining of commands will be removed in the next version bump.
    -175     *
    -176     * @param cmd
    -177     * @deprecated Please switch to {@link CommandAlias} for defining all root commands.
    -178     */
    -179    @Deprecated
    -180    public BaseCommand(@Nullable String cmd) {
    -181        this.commandName = cmd;
    -182    }
    -183
    -184    /**
    -185     * Returns a reference to the last used CommandOperationContext.
    -186     * This method is ThreadLocal, in that it can only be used on a thread that has executed a command
    -187     *
    -188     * @return
    -189     */
    -190    public CommandOperationContext getLastCommandOperationContext() {
    -191        return lastCommandOperationContext.get();
    -192    }
    -193
    -194    /**
    -195     * Gets the root command name that the user actually typed
    -196     *
    -197     * @return Name
    -198     */
    -199    public String getExecCommandLabel() {
    -200        return execLabel;
    -201    }
    -202
    -203    /**
    -204     * Gets the actual sub command name the user typed
    -205     *
    -206     * @return Name
    -207     */
    -208    public String getExecSubcommand() {
    -209        return execSubcommand;
    -210    }
    -211
    -212    /**
    -213     * Gets the actual args in string form the user typed
    -214     *
    -215     * @return Args
    -216     */
    -217    public String[] getOrigArgs() {
    -218        return origArgs;
    -219    }
    -220
    -221    /**
    -222     * This should be called whenever the command gets registered.
    -223     * It sets all required fields correctly and injects dependencies.
    -224     *
    -225     * @param manager The manager to register as this command's owner and handler.
    -226     */
    -227    void onRegister(CommandManager manager) {
    -228        onRegister(manager, this.commandName);
    -229    }
    -230
    -231    /**
    -232     * This should be called whenever the command gets registered.
    -233     * It sets all required fields correctly and injects dependencies.
    -234     *
    -235     * @param manager The manager to register as this command's owner and handler.
    -236     * @param cmd     The command name to use register with.
    -237     */
    -238    private void onRegister(CommandManager manager, String cmd) {
    -239        manager.injectDependencies(this);
    -240        this.manager = manager;
    -241
    -242        final Annotations annotations = manager.getAnnotations();
    -243        final Class<? extends BaseCommand> self = this.getClass();
    -244
    -245        String[] cmdAliases = annotations.getAnnotationValues(self, CommandAlias.class, Annotations.REPLACEMENTS | Annotations.LOWERCASE | Annotations.NO_EMPTY);
    -246
    -247        if (cmd == null && cmdAliases != null) {
    -248            cmd = cmdAliases[0];
    -249        }
    -250
    -251        this.commandName = cmd != null ? cmd : self.getSimpleName().toLowerCase(Locale.ENGLISH);
    -252        this.permission = annotations.getAnnotationValue(self, CommandPermission.class, Annotations.REPLACEMENTS);
    -253        this.description = annotations.getAnnotationValue(self, Description.class, Annotations.NO_EMPTY | Annotations.REPLACEMENTS);
    -254        this.parentSubcommand = getParentSubcommand(self);
    -255        this.conditions = annotations.getAnnotationValue(self, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -256
    -257        computePermissions(); // Must be before any subcommands so they can inherit permissions
    -258        registerSubcommands();
    -259        registerSubclasses(cmd);
    -260
    -261        if (cmdAliases != null) {
    -262            Set<String> cmdList = new HashSet<>();
    -263            Collections.addAll(cmdList, cmdAliases);
    -264            cmdList.remove(cmd);
    -265            for (String cmdAlias : cmdList) {
    -266                register(cmdAlias, this);
    -267            }
    -268        }
    -269
    -270        if (cmd != null) {
    -271            register(cmd, this);
    -272        }
    -273    }
    -274
    -275    /**
    -276     * This recursively registers all subclasses of the command as subcommands, if they are of type {@link BaseCommand}.
    -277     *
    -278     * @param cmd The command name of this command.
    -279     */
    -280    private void registerSubclasses(String cmd) {
    -281        for (Class<?> clazz : this.getClass().getDeclaredClasses()) {
    -282            if (BaseCommand.class.isAssignableFrom(clazz)) {
    -283                try {
    -284                    BaseCommand subScope = null;
    -285                    Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
    -286                    for (Constructor<?> declaredConstructor : declaredConstructors) {
    -287
    -288                        declaredConstructor.setAccessible(true);
    -289                        Parameter[] parameters = declaredConstructor.getParameters();
    -290                        if (parameters.length == 1) {
    -291                            subScope = (BaseCommand) declaredConstructor.newInstance(this);
    -292                        } else {
    -293                            manager.log(LogLevel.INFO, "Found unusable constructor: " + declaredConstructor.getName() + "(" + Stream.of(parameters).map(p -> p.getType().getSimpleName() + " " + p.getName()).collect(Collectors.joining("<c2>,</c2> ")) + ")");
    -294                        }
    -295                    }
    -296                    if (subScope != null) {
    -297                        subScope.parentCommand = this;
    -298                        this.subScopes.add(subScope);
    -299                        subScope.onRegister(manager, cmd);
    -300                        this.subCommands.putAll(subScope.subCommands);
    -301                        this.registeredCommands.putAll(subScope.registeredCommands);
    -302                    } else {
    -303                        this.manager.log(LogLevel.ERROR, "Could not find a subcommand ctor for " + clazz.getName());
    -304                    }
    -305                } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
    -306                    this.manager.log(LogLevel.ERROR, "Error registering subclass", e);
    -307                }
    -308            }
    -309        }
    -310    }
    -311
    -312    /**
    -313     * This registers all subcommands of the command.
    -314     */
    -315    private void registerSubcommands() {
    -316        final Annotations annotations = manager.getAnnotations();
    -317        boolean foundCatchUnknown = false;
    -318        boolean isParentEmpty = parentSubcommand == null || parentSubcommand.isEmpty();
    -319        Set<Method> methods = new LinkedHashSet<>();
    -320        Collections.addAll(methods, this.getClass().getDeclaredMethods());
    -321        Collections.addAll(methods, this.getClass().getMethods());
    -322
    -323        for (Method method : methods) {
    -324            method.setAccessible(true);
    -325            String sublist = null;
    -326            String sub = getSubcommandValue(method);
    -327            final String helpCommand = annotations.getAnnotationValue(method, HelpCommand.class, Annotations.NOTHING);
    -328            final String commandAliases = annotations.getAnnotationValue(method, CommandAlias.class, Annotations.NOTHING);
    -329
    -330            if (annotations.hasAnnotation(method, Default.class)) {
    -331                if (!isParentEmpty) {
    -332                    sub = parentSubcommand;
    -333                } else {
    -334                    registerSubcommand(method, DEFAULT);
    -335                }
    -336            }
    -337
    -338            if (sub != null) {
    -339                sublist = sub;
    -340            } else if (commandAliases != null) {
    -341                sublist = commandAliases;
    -342            } else if (helpCommand != null) {
    -343                sublist = helpCommand;
    -344                hasHelpCommand = true;
    -345            }
    -346
    -347            boolean preCommand = annotations.hasAnnotation(method, PreCommand.class);
    -348            boolean hasCatchUnknown = annotations.hasAnnotation(method, CatchUnknown.class) ||
    -349                    annotations.hasAnnotation(method, CatchAll.class) ||
    -350                    annotations.hasAnnotation(method, UnknownHandler.class);
    -351
    -352            if (hasCatchUnknown || (!foundCatchUnknown && helpCommand != null)) {
    -353                if (!foundCatchUnknown) {
    -354                    if (hasCatchUnknown) {
    -355                        this.subCommands.get(CATCHUNKNOWN).clear();
    -356                        foundCatchUnknown = true;
    -357                    }
    -358                    registerSubcommand(method, CATCHUNKNOWN);
    -359                } else {
    -360                    ACFUtil.sneaky(new IllegalStateException("Multiple @CatchUnknown/@HelpCommand commands, duplicate on " + method.getDeclaringClass().getName() + "#" + method.getName()));
    -361                }
    -362            } else if (preCommand) {
    -363                if (this.preCommandHandler == null) {
    -364                    this.preCommandHandler = method;
    -365                } else {
    -366                    ACFUtil.sneaky(new IllegalStateException("Multiple @PreCommand commands, duplicate on " + method.getDeclaringClass().getName() + "#" + method.getName()));
    -367                }
    -368            }
    -369            if (Objects.equals(method.getDeclaringClass(), this.getClass()) && sublist != null) {
    -370                registerSubcommand(method, sublist);
    -371            }
    -372        }
    -373    }
    -374
    -375    /**
    -376     * This registers all the permissions required to execute this command.
    -377     */
    -378    private void computePermissions() {
    -379        this.permissions.clear();
    -380        if (this.permission != null && !this.permission.isEmpty()) {
    -381            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    -382        }
    -383        if (this.parentCommand != null) {
    -384            this.permissions.addAll(this.parentCommand.getRequiredPermissions());
    -385        }
    -386        this.subCommands.values().forEach(RegisteredCommand::computePermissions);
    -387        this.subScopes.forEach(BaseCommand::computePermissions);
    -388    }
    -389
    -390    /**
    -391     * Gets the subcommand name of the method given.
    -392     *
    -393     * @param method The method to check.
    -394     * @return The name of the subcommand. It returns null if the input doesn't have {@link Subcommand} attached.
    -395     */
    -396    private String getSubcommandValue(Method method) {
    -397        final String sub = manager.getAnnotations().getAnnotationValue(method, Subcommand.class, Annotations.NOTHING);
    -398        if (sub == null) {
    -399            return null;
    -400        }
    -401        Class<?> clazz = method.getDeclaringClass();
    -402        String parent = getParentSubcommand(clazz);
    -403        return parent == null || parent.isEmpty() ? sub : parent + " " + sub;
    -404    }
    -405
    -406    private String getParentSubcommand(Class<?> clazz) {
    -407        List<String> subList = new ArrayList<>();
    -408        while (clazz != null) {
    -409            String sub = manager.getAnnotations().getAnnotationValue(clazz, Subcommand.class, Annotations.NOTHING);
    -410            if (sub != null) {
    -411                subList.add(sub);
    -412            }
    -413            clazz = clazz.getEnclosingClass();
    -414        }
    -415        Collections.reverse(subList);
    -416        return ACFUtil.join(subList, " ");
    -417    }
    -418
    -419    /**
    -420     * Registers the given {@link BaseCommand cmd} as a child of the {@link RootCommand} linked to the name given.
    -421     *
    -422     * @param name Name of the parent to cmd.
    -423     * @param cmd  The {@link BaseCommand} to add as a child to the {@link RootCommand} owned name field.
    -424     */
    -425    private void register(String name, BaseCommand cmd) {
    -426        String nameLower = name.toLowerCase(Locale.ENGLISH);
    -427        RootCommand rootCommand = manager.obtainRootCommand(nameLower);
    -428        rootCommand.addChild(cmd);
    -429
    -430        this.registeredCommands.put(nameLower, rootCommand);
    -431    }
    -432
    -433    /**
    -434     * Registers the given {@link Method} as a subcommand.
    -435     *
    -436     * @param method     The method to register as a subcommand.
    -437     * @param subCommand The subcommand's name(s).
    -438     */
    -439    private void registerSubcommand(Method method, String subCommand) {
    -440        subCommand = manager.getCommandReplacements().replace(subCommand.toLowerCase(Locale.ENGLISH));
    -441        final String[] subCommandParts = ACFPatterns.SPACE.split(subCommand);
    -442        // Must run getSubcommandPossibility BEFORE we rewrite it just after this.
    -443        Set<String> cmdList = getSubCommandPossibilityList(subCommandParts);
    -444
    -445        // Strip pipes off for auto complete addition
    -446        for (int i = 0; i < subCommandParts.length; i++) {
    -447            String[] split = ACFPatterns.PIPE.split(subCommandParts[i]);
    -448            if (split.length == 0 || split[0].isEmpty()) {
    -449                throw new IllegalArgumentException("Invalid @Subcommand configuration for " + method.getName() + " - parts can not start with | or be empty");
    -450            }
    -451            subCommandParts[i] = split[0];
    -452        }
    -453        String prefSubCommand = ApacheCommonsLangUtil.join(subCommandParts, " ");
    -454        final String[] aliasNames = manager.getAnnotations().getAnnotationValues(method, CommandAlias.class, Annotations.REPLACEMENTS | Annotations.LOWERCASE);
    -455
    -456        String cmdName = aliasNames != null ? aliasNames[0] : this.commandName + " ";
    -457        RegisteredCommand cmd = manager.createRegisteredCommand(this, cmdName, method, prefSubCommand);
    -458
    -459        for (String subcmd : cmdList) {
    -460            subCommands.put(subcmd, cmd);
    -461        }
    -462        cmd.addSubcommands(cmdList);
    -463
    -464        if (aliasNames != null) {
    -465            for (String name : aliasNames) {
    -466                register(name, new ForwardingCommand(this, cmd, subCommandParts));
    -467            }
    -468        }
    -469    }
    -470
    -471    /**
    -472     * Takes a string like "foo|bar baz|qux" and generates a list of
    -473     * - foo baz
    -474     * - foo qux
    -475     * - bar baz
    -476     * - bar qux
    -477     * <p>
    -478     * For every possible sub command combination
    -479     *
    -480     * @param subCommandParts
    -481     * @return List of all sub command possibilities
    -482     */
    -483    private static Set<String> getSubCommandPossibilityList(String[] subCommandParts) {
    -484        int i = 0;
    -485        Set<String> current = null;
    -486        while (true) {
    -487            Set<String> newList = new HashSet<>();
    -488
    -489            if (i < subCommandParts.length) {
    -490                for (String s1 : ACFPatterns.PIPE.split(subCommandParts[i])) {
    -491                    if (current != null) {
    -492                        newList.addAll(current.stream().map(s -> s + " " + s1).collect(Collectors.toList()));
    -493                    } else {
    -494                        newList.add(s1);
    -495                    }
    -496                }
    -497            }
    -498
    -499            if (i + 1 < subCommandParts.length) {
    -500                current = newList;
    -501                i = i + 1;
    -502                continue;
    -503            }
    -504
    -505            return newList;
    -506        }
    -507    }
    -508
    -509    void execute(CommandIssuer issuer, CommandRouter.CommandRouteResult command) {
    -510        try {
    -511            CommandOperationContext commandContext = preCommandOperation(issuer, command.commandLabel, command.args, false);
    -512            execSubcommand = command.subcommand;
    -513            executeCommand(commandContext, issuer, command.args, command.cmd);
    -514        } finally {
    -515            postCommandOperation();
    -516        }
    -517    }
    -518
    -519    /**
    -520     * This is ran after any command operation has been performed.
    -521     */
    -522    private void postCommandOperation() {
    -523        CommandManager.commandOperationContext.get().pop();
    -524        execSubcommand = null;
    -525        execLabel = null;
    -526        origArgs = new String[]{};
    -527    }
    -528
    -529    /**
    -530     * This is ran before any command operation has been performed.
    -531     *
    -532     * @param issuer       The user who executed the command.
    -533     * @param commandLabel The label the user used to execute the command. This is not the command name, but their input.
    -534     *                     When there is multiple aliases, this is which alias was used
    -535     * @param args         The arguments passed to the command when executing it.
    -536     * @param isAsync      Whether the command is executed off of the main thread.
    -537     * @return The context which is being registered to the {@link CommandManager}'s {@link
    -538     * CommandManager#commandOperationContext thread local stack}.
    -539     */
    -540    private CommandOperationContext preCommandOperation(CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) {
    -541        Stack<CommandOperationContext> contexts = CommandManager.commandOperationContext.get();
    -542        CommandOperationContext context = this.manager.createCommandOperationContext(this, issuer, commandLabel, args, isAsync);
    -543        contexts.push(context);
    -544        lastCommandOperationContext.set(context);
    -545        execSubcommand = null;
    -546        execLabel = commandLabel;
    -547        origArgs = args;
    -548        return context;
    -549    }
    -550
    -551    /**
    -552     * Gets the current command issuer.
    -553     *
    -554     * @return The current command issuer.
    -555     */
    -556    public CommandIssuer getCurrentCommandIssuer() {
    -557        return CommandManager.getCurrentCommandIssuer();
    -558    }
    -559
    -560    /**
    -561     * Gets the current command manager.
    -562     *
    -563     * @return The current command manager.
    -564     */
    -565    public CommandManager getCurrentCommandManager() {
    -566        return CommandManager.getCurrentCommandManager();
    -567    }
    -568
    -569    private void executeCommand(CommandOperationContext commandOperationContext,
    -570                                CommandIssuer issuer, String[] args, RegisteredCommand cmd) {
    -571        if (cmd.hasPermission(issuer)) {
    -572            commandOperationContext.setRegisteredCommand(cmd);
    -573            if (checkPrecommand(commandOperationContext, cmd, issuer, args)) {
    -574                return;
    -575            }
    -576            List<String> sargs = Arrays.asList(args);
    -577            cmd.invoke(issuer, sargs, commandOperationContext);
    -578        } else {
    -579            issuer.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED);
    -580        }
    -581    }
    -582
    -583    /**
    -584     * Please use command conditions for restricting execution
    -585     *
    -586     * @param issuer
    -587     * @param cmd
    -588     * @return
    -589     * @deprecated See {@link CommandConditions}
    -590     */
    -591    @SuppressWarnings("DeprecatedIsStillUsed")
    -592    @Deprecated
    -593    public boolean canExecute(CommandIssuer issuer, RegisteredCommand<?> cmd) {
    -594        return true;
    -595    }
    -596
    -597    /**
    -598     * Gets tab completed data from the given command from the user.
    -599     *
    -600     * @param issuer       The user who executed the tabcomplete.
    -601     * @param commandLabel The label which is being used by the user.
    -602     * @param args         The arguments the user has typed so far.
    -603     * @return All possibilities in the tab complete.
    -604     */
    -605    public List<String> tabComplete(CommandIssuer issuer, String commandLabel, String[] args) {
    -606        return tabComplete(issuer, commandLabel, args, false);
    -607    }
    -608
    -609    /**
    -610     * Gets the tab complete suggestions from a given command. This will automatically find anything
    -611     * which is valid for the specified command through the command's implementation.
    -612     *
    -613     * @param issuer       The issuer of the command.
    -614     * @param commandLabel The command name as entered by the user instead of the ACF registered name.
    -615     * @param args         All arguments entered by the user.
    -616     * @param isAsync      Whether this is run off of the main thread.
    -617     * @return The possibilities to tab complete in no particular order.
    -618     */
    -619    @SuppressWarnings("WeakerAccess")
    -620    public List<String> tabComplete(CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync)
    -621            throws IllegalArgumentException {
    -622        return tabComplete(issuer, manager.getRootCommand(commandLabel.toLowerCase(Locale.ENGLISH)), args, isAsync);
    -623    }
    -624
    -625    List<String> tabComplete(CommandIssuer issuer, RootCommand rootCommand, String[] args, boolean isAsync)
    -626            throws IllegalArgumentException {
    -627        if (args.length == 0) {
    -628            args = new String[]{""};
    -629        }
    -630        String commandLabel = rootCommand.getCommandName();
    -631        try {
    -632            CommandRouter router = manager.getRouter();
    -633
    -634            preCommandOperation(issuer, commandLabel, args, isAsync);
    -635
    -636            final RouteSearch search = router.routeCommand(rootCommand, commandLabel, args, true);
    -637
    -638            final List<String> cmds = new ArrayList<>();
    -639            if (search != null) {
    -640                CommandRouter.CommandRouteResult result = router.matchCommand(search, true);
    -641                if (result != null) {
    -642                    cmds.addAll(completeCommand(issuer, result.cmd, result.args, commandLabel, isAsync));
    -643                }
    -644            }
    -645
    -646            return filterTabComplete(args[args.length - 1], cmds);
    -647        } finally {
    -648            postCommandOperation();
    -649        }
    -650    }
    -651
    -652    /**
    -653     * Gets all subcommands which are possible to tabcomplete.
    -654     *
    -655     * @param issuer The command issuer.
    -656     * @param args
    -657     * @return
    -658     */
    -659    List<String> getCommandsForCompletion(CommandIssuer issuer, String[] args) {
    -660        final Set<String> cmds = new HashSet<>();
    -661        final int cmdIndex = Math.max(0, args.length - 1);
    -662        String argString = ApacheCommonsLangUtil.join(args, " ").toLowerCase(Locale.ENGLISH);
    -663        for (Map.Entry<String, RegisteredCommand> entry : subCommands.entries()) {
    -664            final String key = entry.getKey();
    -665            if (key.startsWith(argString) && !isSpecialSubcommand(key)) {
    -666                final RegisteredCommand value = entry.getValue();
    -667                if (!value.hasPermission(issuer) || value.isPrivate) {
    -668                    continue;
    -669                }
    -670
    -671                String[] split = ACFPatterns.SPACE.split(value.prefSubCommand);
    -672                cmds.add(split[cmdIndex]);
    -673            }
    -674        }
    -675        return new ArrayList<>(cmds);
    -676    }
    -677
    -678    static boolean isSpecialSubcommand(String key) {
    -679        return CATCHUNKNOWN.equals(key) || DEFAULT.equals(key);
    -680    }
    -681
    -682    /**
    -683     * Complete a command properly per issuer and input.
    -684     *
    -685     * @param issuer       The user who executed this.
    -686     * @param cmd          The command to be completed.
    -687     * @param args         All arguments given by the user.
    -688     * @param commandLabel The command name the user used.
    -689     * @param isAsync      Whether the command was executed async.
    -690     * @return All results to complete the command.
    -691     */
    -692    private List<String> completeCommand(CommandIssuer issuer, RegisteredCommand cmd, String[] args, String commandLabel, boolean isAsync) {
    -693        if (!cmd.hasPermission(issuer) || args.length == 0 || cmd.parameters.length == 0) {
    -694            return Collections.emptyList();
    -695        }
    -696
    -697        if (!cmd.parameters[cmd.parameters.length - 1].consumesRest && args.length > cmd.consumeInputResolvers) {
    -698            return Collections.emptyList();
    -699        }
    -700
    -701        List<String> cmds = manager.getCommandCompletions().of(cmd, issuer, args, isAsync);
    -702        return filterTabComplete(args[args.length - 1], cmds);
    -703    }
    -704
    -705    /**
    -706     * Gets the actual args in string form the user typed
    -707     * This returns a list of all tab complete options which are possible with the given argument and commands.
    -708     *
    -709     * @param arg  Argument which was pressed tab on.
    -710     * @param cmds The possibilities to return.
    -711     * @return All possible options. This may be empty.
    -712     */
    -713    private static List<String> filterTabComplete(String arg, List<String> cmds) {
    -714        return cmds.stream()
    -715                .distinct()
    -716                .filter(cmd -> cmd != null && (arg.isEmpty() || ApacheCommonsLangUtil.startsWithIgnoreCase(cmd, arg)))
    -717                .collect(Collectors.toList());
    -718    }
    -719
    -720    /**
    -721     * Executes the precommand and sees whether something is wrong. Ideally, you get false from this.
    -722     *
    -723     * @param commandOperationContext The context to use.
    -724     * @param cmd                     The command executed.
    -725     * @param issuer                  The issuer who executed the command.
    -726     * @param args                    The arguments the issuer provided.
    -727     * @return Whether something went wrong.
    -728     */
    -729    private boolean checkPrecommand(CommandOperationContext commandOperationContext, RegisteredCommand cmd, CommandIssuer issuer, String[] args) {
    -730        Method pre = this.preCommandHandler;
    -731        if (pre != null) {
    -732            try {
    -733                Class<?>[] types = pre.getParameterTypes();
    -734                Object[] parameters = new Object[pre.getParameterCount()];
    -735                for (int i = 0; i < parameters.length; i++) {
    -736                    Class<?> type = types[i];
    -737                    Object issuerObject = issuer.getIssuer();
    -738                    if (manager.isCommandIssuer(type) && type.isAssignableFrom(issuerObject.getClass())) {
    -739                        parameters[i] = issuerObject;
    -740                    } else if (CommandIssuer.class.isAssignableFrom(type)) {
    -741                        parameters[i] = issuer;
    -742                    } else if (RegisteredCommand.class.isAssignableFrom(type)) {
    -743                        parameters[i] = cmd;
    -744                    } else if (String[].class.isAssignableFrom((type))) {
    -745                        parameters[i] = args;
    -746                    } else {
    -747                        parameters[i] = null;
    -748                    }
    -749                }
    -750
    -751                return (boolean) pre.invoke(this, parameters);
    -752            } catch (IllegalAccessException | InvocationTargetException e) {
    -753                this.manager.log(LogLevel.ERROR, "Exception encountered while command pre-processing", e);
    -754            }
    -755        }
    -756        return false;
    -757    }
    -758
    -759    /**
    -760     * @deprecated Unstable API
    -761     */
    -762    @Deprecated
    -763    @UnstableAPI
    -764    public CommandHelp getCommandHelp() {
    -765        return manager.generateCommandHelp();
    -766    }
    -767
    -768    /**
    -769     * @deprecated Unstable API
    -770     */
    -771    @Deprecated
    -772    @UnstableAPI
    -773    public void showCommandHelp() {
    -774        getCommandHelp().showHelp();
    -775    }
    -776
    -777    public void help(Object issuer, String[] args) {
    -778        help(manager.getCommandIssuer(issuer), args);
    -779    }
    -780
    -781    public void help(CommandIssuer issuer, String[] args) {
    -782        issuer.sendMessage(MessageType.ERROR, MessageKeys.UNKNOWN_COMMAND);
    -783    }
    -784
    -785    public void doHelp(Object issuer, String... args) {
    -786        doHelp(manager.getCommandIssuer(issuer), args);
    -787    }
    -788
    -789    public void doHelp(CommandIssuer issuer, String... args) {
    -790        help(issuer, args);
    -791    }
    -792
    -793    public void showSyntax(CommandIssuer issuer, RegisteredCommand<?> cmd) {
    -794        issuer.sendMessage(MessageType.SYNTAX, MessageKeys.INVALID_SYNTAX,
    -795                "{command}", manager.getCommandPrefix(issuer) + cmd.command,
    -796                "{syntax}", cmd.getSyntaxText(issuer)
    -797        );
    -798    }
    -799
    -800    public boolean hasPermission(Object issuer) {
    -801        return hasPermission(manager.getCommandIssuer(issuer));
    -802    }
    -803
    -804    public boolean hasPermission(CommandIssuer issuer) {
    -805        return this.manager.hasPermission(issuer, getRequiredPermissions());
    -806    }
    -807
    -808    public Set<String> getRequiredPermissions() {
    -809        return this.permissions;
    -810    }
    -811
    -812    public boolean requiresPermission(String permission) {
    -813        return getRequiredPermissions().contains(permission);
    -814    }
    -815
    -816    public String getName() {
    -817        return commandName;
    -818    }
    -819
    -820    public ExceptionHandler getExceptionHandler() {
    -821        return exceptionHandler;
    -822    }
    -823
    -824    public BaseCommand setExceptionHandler(ExceptionHandler exceptionHandler) {
    -825        this.exceptionHandler = exceptionHandler;
    -826        return this;
    -827    }
    -828
    -829    public RegisteredCommand getDefaultRegisteredCommand() {
    -830        return ACFUtil.getFirstElement(this.subCommands.get(DEFAULT));
    -831    }
    -832
    -833    public String setContextFlags(Class<?> cls, String flags) {
    -834        return this.contextFlags.put(cls, flags);
    -835    }
    -836
    -837    public String getContextFlags(Class<?> cls) {
    -838        return this.contextFlags.get(cls);
    -839    }
    -840
    -841    public List<RegisteredCommand> getRegisteredCommands() {
    -842        List<RegisteredCommand> registeredCommands = new ArrayList<>();
    -843        registeredCommands.addAll(this.subCommands.values());
    -844        return registeredCommands;
    -845    }
    -846
    -847    protected SetMultimap<String, RegisteredCommand> getSubCommands() {
    -848        return subCommands;
    -849    }
    -850}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.CommandRouter.RouteSearch;
    +027import co.aikar.commands.annotation.CatchAll;
    +028import co.aikar.commands.annotation.CatchUnknown;
    +029import co.aikar.commands.annotation.CommandAlias;
    +030import co.aikar.commands.annotation.CommandPermission;
    +031import co.aikar.commands.annotation.Conditions;
    +032import co.aikar.commands.annotation.Default;
    +033import co.aikar.commands.annotation.Description;
    +034import co.aikar.commands.annotation.HelpCommand;
    +035import co.aikar.commands.annotation.PreCommand;
    +036import co.aikar.commands.annotation.Subcommand;
    +037import co.aikar.commands.annotation.UnknownHandler;
    +038import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +039import com.google.common.collect.HashMultimap;
    +040import com.google.common.collect.SetMultimap;
    +041import org.jetbrains.annotations.Nullable;
    +042
    +043import java.lang.reflect.Constructor;
    +044import java.lang.reflect.InvocationTargetException;
    +045import java.lang.reflect.Method;
    +046import java.lang.reflect.Parameter;
    +047import java.util.ArrayList;
    +048import java.util.Arrays;
    +049import java.util.Collections;
    +050import java.util.HashMap;
    +051import java.util.HashSet;
    +052import java.util.LinkedHashSet;
    +053import java.util.List;
    +054import java.util.Locale;
    +055import java.util.Map;
    +056import java.util.Objects;
    +057import java.util.Set;
    +058import java.util.Stack;
    +059import java.util.stream.Collectors;
    +060import java.util.stream.Stream;
    +061
    +062/**
    +063 * A Base command is defined as a command group of related commands.
    +064 * A BaseCommand does not imply nor enforce that they use the same root command.
    +065 * <p>
    +066 * It is up to the end user how to organize their command. you could use 1 base command per
    +067 * command in your application.
    +068 * <p>
    +069 * Optionally (and encouraged), you can use the base command to represent a root command, and
    +070 * then each actionable command is a sub command
    +071 */
    +072
    +073public abstract class BaseCommand {
    +074
    +075    /**
    +076     * This is a field which contains the magic key in the {@link #subCommands} map for the method to catch any unknown
    +077     * argument to command states.
    +078     */
    +079    static final String CATCHUNKNOWN = "__catchunknown";
    +080    /**
    +081     * This is a field which contains the magic key in the {@link #subCommands} map for the method which is default for the
    +082     * entire base command.
    +083     */
    +084    static final String DEFAULT = "__default";
    +085
    +086    /**
    +087     * A map of all the registered commands for this base command, keyed to each potential subcommand to access it.
    +088     */
    +089    final SetMultimap<String, RegisteredCommand> subCommands = HashMultimap.create();
    +090    final Set<BaseCommand> subScopes = new HashSet<>();
    +091
    +092    /**
    +093     * A map of flags to pass to Context Resolution for every parameter of the type. This is like an automatic @Flags on each.
    +094     */
    +095    final Map<Class<?>, String> contextFlags = new HashMap<>();
    +096
    +097    /**
    +098     * What method was annoated with {@link PreCommand} to execute before commands.
    +099     */
    +100    @Nullable
    +101    private Method preCommandHandler;
    +102
    +103    /**
    +104     * What root command the user actually entered to access the currently executing command
    +105     */
    +106    @SuppressWarnings("WeakerAccess")
    +107    private String execLabel;
    +108    /**
    +109     * What subcommand the user actually entered to access the currently executing command
    +110     */
    +111    @SuppressWarnings("WeakerAccess")
    +112    private String execSubcommand;
    +113    /**
    +114     * What arguments the user actually entered after the root command to access the currently executing command
    +115     */
    +116    @SuppressWarnings("WeakerAccess")
    +117    private String[] origArgs;
    +118
    +119    /**
    +120     * The manager this is registered to
    +121     */
    +122    CommandManager<?, ?, ?, ?, ?, ?> manager = null;
    +123
    +124    /**
    +125     * The command which owns this. This may be null if there are no owners.
    +126     */
    +127    BaseCommand parentCommand;
    +128    Map<String, RootCommand> registeredCommands = new HashMap<>();
    +129    /**
    +130     * The description of the command. This may be null if no description has been provided.
    +131     * Used for help documentation
    +132     */
    +133    @Nullable String description;
    +134    /**
    +135     * The name of the command. This may be null if no name has been provided.
    +136     */
    +137    @Nullable String commandName;
    +138    /**
    +139     * The permission of the command. This may be null if no permission has been provided.
    +140     */
    +141    @Nullable String permission;
    +142    /**
    +143     * The conditions of the command. This may be null if no conditions has been provided.
    +144     */
    +145    @Nullable String conditions;
    +146    /**
    +147     * Identifies if the command has an explicit help command annotated with {@link HelpCommand}
    +148     */
    +149    boolean hasHelpCommand;
    +150
    +151    /**
    +152     * The handler of all uncaught exceptions thrown by the user's command implementation.
    +153     */
    +154    private ExceptionHandler exceptionHandler = null;
    +155    /**
    +156     * The last operative context data of this command. This may be null if this command hasn't been run yet.
    +157     */
    +158    private final ThreadLocal<CommandOperationContext> lastCommandOperationContext = new ThreadLocal<>();
    +159    /**
    +160     * If a parent exists to this command, and it has  a Subcommand annotation, prefix all subcommands in this class with this
    +161     */
    +162    @Nullable
    +163    private String parentSubcommand;
    +164
    +165    /**
    +166     * The permissions of the command.
    +167     */
    +168    private final Set<String> permissions = new HashSet<>();
    +169
    +170    public BaseCommand() {
    +171    }
    +172
    +173    /**
    +174     * Constructor based defining of commands will be removed in the next version bump.
    +175     *
    +176     * @param cmd
    +177     * @deprecated Please switch to {@link CommandAlias} for defining all root commands.
    +178     */
    +179    @Deprecated
    +180    public BaseCommand(@Nullable String cmd) {
    +181        this.commandName = cmd;
    +182    }
    +183
    +184    /**
    +185     * Returns a reference to the last used CommandOperationContext.
    +186     * This method is ThreadLocal, in that it can only be used on a thread that has executed a command
    +187     *
    +188     * @return
    +189     */
    +190    public CommandOperationContext getLastCommandOperationContext() {
    +191        return lastCommandOperationContext.get();
    +192    }
    +193
    +194    /**
    +195     * Gets the root command name that the user actually typed
    +196     *
    +197     * @return Name
    +198     */
    +199    public String getExecCommandLabel() {
    +200        return execLabel;
    +201    }
    +202
    +203    /**
    +204     * Gets the actual sub command name the user typed
    +205     *
    +206     * @return Name
    +207     */
    +208    public String getExecSubcommand() {
    +209        return execSubcommand;
    +210    }
    +211
    +212    /**
    +213     * Gets the actual args in string form the user typed
    +214     *
    +215     * @return Args
    +216     */
    +217    public String[] getOrigArgs() {
    +218        return origArgs;
    +219    }
    +220
    +221    /**
    +222     * This should be called whenever the command gets registered.
    +223     * It sets all required fields correctly and injects dependencies.
    +224     *
    +225     * @param manager The manager to register as this command's owner and handler.
    +226     */
    +227    void onRegister(CommandManager manager) {
    +228        onRegister(manager, this.commandName);
    +229    }
    +230
    +231    /**
    +232     * This should be called whenever the command gets registered.
    +233     * It sets all required fields correctly and injects dependencies.
    +234     *
    +235     * @param manager The manager to register as this command's owner and handler.
    +236     * @param cmd     The command name to use register with.
    +237     */
    +238    private void onRegister(CommandManager manager, String cmd) {
    +239        manager.injectDependencies(this);
    +240        this.manager = manager;
    +241
    +242        final Annotations annotations = manager.getAnnotations();
    +243        final Class<? extends BaseCommand> self = this.getClass();
    +244
    +245        String[] cmdAliases = annotations.getAnnotationValues(self, CommandAlias.class, Annotations.REPLACEMENTS | Annotations.LOWERCASE | Annotations.NO_EMPTY);
    +246
    +247        if (cmd == null && cmdAliases != null) {
    +248            cmd = cmdAliases[0];
    +249        }
    +250
    +251        this.commandName = cmd != null ? cmd : self.getSimpleName().toLowerCase(Locale.ENGLISH);
    +252        this.permission = annotations.getAnnotationValue(self, CommandPermission.class, Annotations.REPLACEMENTS);
    +253        this.description = annotations.getAnnotationValue(self, Description.class, Annotations.NO_EMPTY | Annotations.REPLACEMENTS);
    +254        this.parentSubcommand = getParentSubcommand(self);
    +255        this.conditions = annotations.getAnnotationValue(self, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +256
    +257        computePermissions(); // Must be before any subcommands so they can inherit permissions
    +258        registerSubcommands();
    +259        registerSubclasses(cmd);
    +260
    +261        if (cmdAliases != null) {
    +262            Set<String> cmdList = new HashSet<>();
    +263            Collections.addAll(cmdList, cmdAliases);
    +264            cmdList.remove(cmd);
    +265            for (String cmdAlias : cmdList) {
    +266                register(cmdAlias, this);
    +267            }
    +268        }
    +269
    +270        if (cmd != null) {
    +271            register(cmd, this);
    +272        }
    +273    }
    +274
    +275    /**
    +276     * This recursively registers all subclasses of the command as subcommands, if they are of type {@link BaseCommand}.
    +277     *
    +278     * @param cmd The command name of this command.
    +279     */
    +280    private void registerSubclasses(String cmd) {
    +281        for (Class<?> clazz : this.getClass().getDeclaredClasses()) {
    +282            if (BaseCommand.class.isAssignableFrom(clazz)) {
    +283                try {
    +284                    BaseCommand subScope = null;
    +285                    Constructor<?>[] declaredConstructors = clazz.getDeclaredConstructors();
    +286                    for (Constructor<?> declaredConstructor : declaredConstructors) {
    +287
    +288                        declaredConstructor.setAccessible(true);
    +289                        Parameter[] parameters = declaredConstructor.getParameters();
    +290                        if (parameters.length == 1) {
    +291                            subScope = (BaseCommand) declaredConstructor.newInstance(this);
    +292                        } else {
    +293                            manager.log(LogLevel.INFO, "Found unusable constructor: " + declaredConstructor.getName() + "(" + Stream.of(parameters).map(p -> p.getType().getSimpleName() + " " + p.getName()).collect(Collectors.joining("<c2>,</c2> ")) + ")");
    +294                        }
    +295                    }
    +296                    if (subScope != null) {
    +297                        subScope.parentCommand = this;
    +298                        this.subScopes.add(subScope);
    +299                        subScope.onRegister(manager, cmd);
    +300                        this.subCommands.putAll(subScope.subCommands);
    +301                        this.registeredCommands.putAll(subScope.registeredCommands);
    +302                    } else {
    +303                        this.manager.log(LogLevel.ERROR, "Could not find a subcommand ctor for " + clazz.getName());
    +304                    }
    +305                } catch (InstantiationException | IllegalAccessException | InvocationTargetException e) {
    +306                    this.manager.log(LogLevel.ERROR, "Error registering subclass", e);
    +307                }
    +308            }
    +309        }
    +310    }
    +311
    +312    /**
    +313     * This registers all subcommands of the command.
    +314     */
    +315    private void registerSubcommands() {
    +316        final Annotations annotations = manager.getAnnotations();
    +317        boolean foundCatchUnknown = false;
    +318        boolean isParentEmpty = parentSubcommand == null || parentSubcommand.isEmpty();
    +319        Set<Method> methods = new LinkedHashSet<>();
    +320        Collections.addAll(methods, this.getClass().getDeclaredMethods());
    +321        Collections.addAll(methods, this.getClass().getMethods());
    +322
    +323        for (Method method : methods) {
    +324            method.setAccessible(true);
    +325            String sublist = null;
    +326            String sub = getSubcommandValue(method);
    +327            final String helpCommand = annotations.getAnnotationValue(method, HelpCommand.class, Annotations.NOTHING);
    +328            final String commandAliases = annotations.getAnnotationValue(method, CommandAlias.class, Annotations.NOTHING);
    +329
    +330            if (annotations.hasAnnotation(method, Default.class)) {
    +331                if (!isParentEmpty) {
    +332                    sub = parentSubcommand;
    +333                } else {
    +334                    registerSubcommand(method, DEFAULT);
    +335                }
    +336            }
    +337
    +338            if (sub != null) {
    +339                sublist = sub;
    +340            } else if (commandAliases != null) {
    +341                sublist = commandAliases;
    +342            } else if (helpCommand != null) {
    +343                sublist = helpCommand;
    +344                hasHelpCommand = true;
    +345            }
    +346
    +347            boolean preCommand = annotations.hasAnnotation(method, PreCommand.class);
    +348            boolean hasCatchUnknown = annotations.hasAnnotation(method, CatchUnknown.class) ||
    +349                    annotations.hasAnnotation(method, CatchAll.class) ||
    +350                    annotations.hasAnnotation(method, UnknownHandler.class);
    +351
    +352            if (hasCatchUnknown || (!foundCatchUnknown && helpCommand != null)) {
    +353                if (!foundCatchUnknown) {
    +354                    if (hasCatchUnknown) {
    +355                        this.subCommands.get(CATCHUNKNOWN).clear();
    +356                        foundCatchUnknown = true;
    +357                    }
    +358                    registerSubcommand(method, CATCHUNKNOWN);
    +359                } else {
    +360                    ACFUtil.sneaky(new IllegalStateException("Multiple @CatchUnknown/@HelpCommand commands, duplicate on " + method.getDeclaringClass().getName() + "#" + method.getName()));
    +361                }
    +362            } else if (preCommand) {
    +363                if (this.preCommandHandler == null) {
    +364                    this.preCommandHandler = method;
    +365                } else {
    +366                    ACFUtil.sneaky(new IllegalStateException("Multiple @PreCommand commands, duplicate on " + method.getDeclaringClass().getName() + "#" + method.getName()));
    +367                }
    +368            }
    +369            if (Objects.equals(method.getDeclaringClass(), this.getClass()) && sublist != null) {
    +370                registerSubcommand(method, sublist);
    +371            }
    +372        }
    +373    }
    +374
    +375    /**
    +376     * This registers all the permissions required to execute this command.
    +377     */
    +378    private void computePermissions() {
    +379        this.permissions.clear();
    +380        if (this.permission != null && !this.permission.isEmpty()) {
    +381            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    +382        }
    +383        if (this.parentCommand != null) {
    +384            this.permissions.addAll(this.parentCommand.getRequiredPermissions());
    +385        }
    +386        this.subCommands.values().forEach(RegisteredCommand::computePermissions);
    +387        this.subScopes.forEach(BaseCommand::computePermissions);
    +388    }
    +389
    +390    /**
    +391     * Gets the subcommand name of the method given.
    +392     *
    +393     * @param method The method to check.
    +394     * @return The name of the subcommand. It returns null if the input doesn't have {@link Subcommand} attached.
    +395     */
    +396    private String getSubcommandValue(Method method) {
    +397        final String sub = manager.getAnnotations().getAnnotationValue(method, Subcommand.class, Annotations.NOTHING);
    +398        if (sub == null) {
    +399            return null;
    +400        }
    +401        Class<?> clazz = method.getDeclaringClass();
    +402        String parent = getParentSubcommand(clazz);
    +403        return parent == null || parent.isEmpty() ? sub : parent + " " + sub;
    +404    }
    +405
    +406    private String getParentSubcommand(Class<?> clazz) {
    +407        List<String> subList = new ArrayList<>();
    +408        while (clazz != null) {
    +409            String sub = manager.getAnnotations().getAnnotationValue(clazz, Subcommand.class, Annotations.NOTHING);
    +410            if (sub != null) {
    +411                subList.add(sub);
    +412            }
    +413            clazz = clazz.getEnclosingClass();
    +414        }
    +415        Collections.reverse(subList);
    +416        return ACFUtil.join(subList, " ");
    +417    }
    +418
    +419    /**
    +420     * Registers the given {@link BaseCommand cmd} as a child of the {@link RootCommand} linked to the name given.
    +421     *
    +422     * @param name Name of the parent to cmd.
    +423     * @param cmd  The {@link BaseCommand} to add as a child to the {@link RootCommand} owned name field.
    +424     */
    +425    private void register(String name, BaseCommand cmd) {
    +426        String nameLower = name.toLowerCase(Locale.ENGLISH);
    +427        RootCommand rootCommand = manager.obtainRootCommand(nameLower);
    +428        rootCommand.addChild(cmd);
    +429
    +430        this.registeredCommands.put(nameLower, rootCommand);
    +431    }
    +432
    +433    /**
    +434     * Registers the given {@link Method} as a subcommand.
    +435     *
    +436     * @param method     The method to register as a subcommand.
    +437     * @param subCommand The subcommand's name(s).
    +438     */
    +439    private void registerSubcommand(Method method, String subCommand) {
    +440        subCommand = manager.getCommandReplacements().replace(subCommand.toLowerCase(Locale.ENGLISH));
    +441        final String[] subCommandParts = ACFPatterns.SPACE.split(subCommand);
    +442        // Must run getSubcommandPossibility BEFORE we rewrite it just after this.
    +443        Set<String> cmdList = getSubCommandPossibilityList(subCommandParts);
    +444
    +445        // Strip pipes off for auto complete addition
    +446        for (int i = 0; i < subCommandParts.length; i++) {
    +447            String[] split = ACFPatterns.PIPE.split(subCommandParts[i]);
    +448            if (split.length == 0 || split[0].isEmpty()) {
    +449                throw new IllegalArgumentException("Invalid @Subcommand configuration for " + method.getName() + " - parts can not start with | or be empty");
    +450            }
    +451            subCommandParts[i] = split[0];
    +452        }
    +453        String prefSubCommand = ApacheCommonsLangUtil.join(subCommandParts, " ");
    +454        final String[] aliasNames = manager.getAnnotations().getAnnotationValues(method, CommandAlias.class, Annotations.REPLACEMENTS | Annotations.LOWERCASE);
    +455
    +456        String cmdName = aliasNames != null ? aliasNames[0] : this.commandName + " ";
    +457        RegisteredCommand cmd = manager.createRegisteredCommand(this, cmdName, method, prefSubCommand);
    +458
    +459        for (String subcmd : cmdList) {
    +460            subCommands.put(subcmd, cmd);
    +461        }
    +462        cmd.addSubcommands(cmdList);
    +463
    +464        if (aliasNames != null) {
    +465            for (String name : aliasNames) {
    +466                register(name, new ForwardingCommand(this, cmd, subCommandParts));
    +467            }
    +468        }
    +469    }
    +470
    +471    /**
    +472     * Takes a string like "foo|bar baz|qux" and generates a list of
    +473     * - foo baz
    +474     * - foo qux
    +475     * - bar baz
    +476     * - bar qux
    +477     * <p>
    +478     * For every possible sub command combination
    +479     *
    +480     * @param subCommandParts
    +481     * @return List of all sub command possibilities
    +482     */
    +483    private static Set<String> getSubCommandPossibilityList(String[] subCommandParts) {
    +484        int i = 0;
    +485        Set<String> current = null;
    +486        while (true) {
    +487            Set<String> newList = new HashSet<>();
    +488
    +489            if (i < subCommandParts.length) {
    +490                for (String s1 : ACFPatterns.PIPE.split(subCommandParts[i])) {
    +491                    if (current != null) {
    +492                        newList.addAll(current.stream().map(s -> s + " " + s1).collect(Collectors.toList()));
    +493                    } else {
    +494                        newList.add(s1);
    +495                    }
    +496                }
    +497            }
    +498
    +499            if (i + 1 < subCommandParts.length) {
    +500                current = newList;
    +501                i = i + 1;
    +502                continue;
    +503            }
    +504
    +505            return newList;
    +506        }
    +507    }
    +508
    +509    void execute(CommandIssuer issuer, CommandRouter.CommandRouteResult command) {
    +510        try {
    +511            CommandOperationContext commandContext = preCommandOperation(issuer, command.commandLabel, command.args, false);
    +512            execSubcommand = command.subcommand;
    +513            executeCommand(commandContext, issuer, command.args, command.cmd);
    +514        } finally {
    +515            postCommandOperation();
    +516        }
    +517    }
    +518
    +519    /**
    +520     * This is ran after any command operation has been performed.
    +521     */
    +522    private void postCommandOperation() {
    +523        CommandManager.commandOperationContext.get().pop();
    +524        execSubcommand = null;
    +525        execLabel = null;
    +526        origArgs = new String[]{};
    +527    }
    +528
    +529    /**
    +530     * This is ran before any command operation has been performed.
    +531     *
    +532     * @param issuer       The user who executed the command.
    +533     * @param commandLabel The label the user used to execute the command. This is not the command name, but their input.
    +534     *                     When there is multiple aliases, this is which alias was used
    +535     * @param args         The arguments passed to the command when executing it.
    +536     * @param isAsync      Whether the command is executed off of the main thread.
    +537     * @return The context which is being registered to the {@link CommandManager}'s {@link
    +538     * CommandManager#commandOperationContext thread local stack}.
    +539     */
    +540    private CommandOperationContext preCommandOperation(CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync) {
    +541        Stack<CommandOperationContext> contexts = CommandManager.commandOperationContext.get();
    +542        CommandOperationContext context = this.manager.createCommandOperationContext(this, issuer, commandLabel, args, isAsync);
    +543        contexts.push(context);
    +544        lastCommandOperationContext.set(context);
    +545        execSubcommand = null;
    +546        execLabel = commandLabel;
    +547        origArgs = args;
    +548        return context;
    +549    }
    +550
    +551    /**
    +552     * Gets the current command issuer.
    +553     *
    +554     * @return The current command issuer.
    +555     */
    +556    public CommandIssuer getCurrentCommandIssuer() {
    +557        return CommandManager.getCurrentCommandIssuer();
    +558    }
    +559
    +560    /**
    +561     * Gets the current command manager.
    +562     *
    +563     * @return The current command manager.
    +564     */
    +565    public CommandManager getCurrentCommandManager() {
    +566        return CommandManager.getCurrentCommandManager();
    +567    }
    +568
    +569    private void executeCommand(CommandOperationContext commandOperationContext,
    +570                                CommandIssuer issuer, String[] args, RegisteredCommand cmd) {
    +571        if (cmd.hasPermission(issuer)) {
    +572            commandOperationContext.setRegisteredCommand(cmd);
    +573            if (checkPrecommand(commandOperationContext, cmd, issuer, args)) {
    +574                return;
    +575            }
    +576            List<String> sargs = Arrays.asList(args);
    +577            cmd.invoke(issuer, sargs, commandOperationContext);
    +578        } else {
    +579            issuer.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED);
    +580        }
    +581    }
    +582
    +583    /**
    +584     * Please use command conditions for restricting execution
    +585     *
    +586     * @param issuer
    +587     * @param cmd
    +588     * @return
    +589     * @deprecated See {@link CommandConditions}
    +590     */
    +591    @SuppressWarnings("DeprecatedIsStillUsed")
    +592    @Deprecated
    +593    public boolean canExecute(CommandIssuer issuer, RegisteredCommand<?> cmd) {
    +594        return true;
    +595    }
    +596
    +597    /**
    +598     * Gets tab completed data from the given command from the user.
    +599     *
    +600     * @param issuer       The user who executed the tabcomplete.
    +601     * @param commandLabel The label which is being used by the user.
    +602     * @param args         The arguments the user has typed so far.
    +603     * @return All possibilities in the tab complete.
    +604     */
    +605    public List<String> tabComplete(CommandIssuer issuer, String commandLabel, String[] args) {
    +606        return tabComplete(issuer, commandLabel, args, false);
    +607    }
    +608
    +609    /**
    +610     * Gets the tab complete suggestions from a given command. This will automatically find anything
    +611     * which is valid for the specified command through the command's implementation.
    +612     *
    +613     * @param issuer       The issuer of the command.
    +614     * @param commandLabel The command name as entered by the user instead of the ACF registered name.
    +615     * @param args         All arguments entered by the user.
    +616     * @param isAsync      Whether this is run off of the main thread.
    +617     * @return The possibilities to tab complete in no particular order.
    +618     */
    +619    @SuppressWarnings("WeakerAccess")
    +620    public List<String> tabComplete(CommandIssuer issuer, String commandLabel, String[] args, boolean isAsync)
    +621            throws IllegalArgumentException {
    +622        return tabComplete(issuer, manager.getRootCommand(commandLabel.toLowerCase(Locale.ENGLISH)), args, isAsync);
    +623    }
    +624
    +625    List<String> tabComplete(CommandIssuer issuer, RootCommand rootCommand, String[] args, boolean isAsync)
    +626            throws IllegalArgumentException {
    +627        if (args.length == 0) {
    +628            args = new String[]{""};
    +629        }
    +630        String commandLabel = rootCommand.getCommandName();
    +631        try {
    +632            CommandRouter router = manager.getRouter();
    +633
    +634            preCommandOperation(issuer, commandLabel, args, isAsync);
    +635
    +636            final RouteSearch search = router.routeCommand(rootCommand, commandLabel, args, true);
    +637
    +638            final List<String> cmds = new ArrayList<>();
    +639            if (search != null) {
    +640                CommandRouter.CommandRouteResult result = router.matchCommand(search, true);
    +641                if (result != null) {
    +642                    cmds.addAll(completeCommand(issuer, result.cmd, result.args, commandLabel, isAsync));
    +643                }
    +644            }
    +645
    +646            return filterTabComplete(args[args.length - 1], cmds);
    +647        } finally {
    +648            postCommandOperation();
    +649        }
    +650    }
    +651
    +652    /**
    +653     * Gets all subcommands which are possible to tabcomplete.
    +654     *
    +655     * @param issuer The command issuer.
    +656     * @param args
    +657     * @return
    +658     */
    +659    List<String> getCommandsForCompletion(CommandIssuer issuer, String[] args) {
    +660        final Set<String> cmds = new HashSet<>();
    +661        final int cmdIndex = Math.max(0, args.length - 1);
    +662        String argString = ApacheCommonsLangUtil.join(args, " ").toLowerCase(Locale.ENGLISH);
    +663        for (Map.Entry<String, RegisteredCommand> entry : subCommands.entries()) {
    +664            final String key = entry.getKey();
    +665            if (key.startsWith(argString) && !isSpecialSubcommand(key)) {
    +666                final RegisteredCommand value = entry.getValue();
    +667                if (!value.hasPermission(issuer) || value.isPrivate) {
    +668                    continue;
    +669                }
    +670
    +671                String[] split = ACFPatterns.SPACE.split(value.prefSubCommand);
    +672                cmds.add(split[cmdIndex]);
    +673            }
    +674        }
    +675        return new ArrayList<>(cmds);
    +676    }
    +677
    +678    static boolean isSpecialSubcommand(String key) {
    +679        return CATCHUNKNOWN.equals(key) || DEFAULT.equals(key);
    +680    }
    +681
    +682    /**
    +683     * Complete a command properly per issuer and input.
    +684     *
    +685     * @param issuer       The user who executed this.
    +686     * @param cmd          The command to be completed.
    +687     * @param args         All arguments given by the user.
    +688     * @param commandLabel The command name the user used.
    +689     * @param isAsync      Whether the command was executed async.
    +690     * @return All results to complete the command.
    +691     */
    +692    private List<String> completeCommand(CommandIssuer issuer, RegisteredCommand cmd, String[] args, String commandLabel, boolean isAsync) {
    +693        if (!cmd.hasPermission(issuer) || args.length == 0 || cmd.parameters.length == 0) {
    +694            return Collections.emptyList();
    +695        }
    +696
    +697        if (!cmd.parameters[cmd.parameters.length - 1].consumesRest && args.length > cmd.consumeInputResolvers) {
    +698            return Collections.emptyList();
    +699        }
    +700
    +701        List<String> cmds = manager.getCommandCompletions().of(cmd, issuer, args, isAsync);
    +702        return filterTabComplete(args[args.length - 1], cmds);
    +703    }
    +704
    +705    /**
    +706     * Gets the actual args in string form the user typed
    +707     * This returns a list of all tab complete options which are possible with the given argument and commands.
    +708     *
    +709     * @param arg  Argument which was pressed tab on.
    +710     * @param cmds The possibilities to return.
    +711     * @return All possible options. This may be empty.
    +712     */
    +713    private static List<String> filterTabComplete(String arg, List<String> cmds) {
    +714        return cmds.stream()
    +715                .distinct()
    +716                .filter(cmd -> cmd != null && (arg.isEmpty() || ApacheCommonsLangUtil.startsWithIgnoreCase(cmd, arg)))
    +717                .collect(Collectors.toList());
    +718    }
    +719
    +720    /**
    +721     * Executes the precommand and sees whether something is wrong. Ideally, you get false from this.
    +722     *
    +723     * @param commandOperationContext The context to use.
    +724     * @param cmd                     The command executed.
    +725     * @param issuer                  The issuer who executed the command.
    +726     * @param args                    The arguments the issuer provided.
    +727     * @return Whether something went wrong.
    +728     */
    +729    private boolean checkPrecommand(CommandOperationContext commandOperationContext, RegisteredCommand cmd, CommandIssuer issuer, String[] args) {
    +730        Method pre = this.preCommandHandler;
    +731        if (pre != null) {
    +732            try {
    +733                Class<?>[] types = pre.getParameterTypes();
    +734                Object[] parameters = new Object[pre.getParameterCount()];
    +735                for (int i = 0; i < parameters.length; i++) {
    +736                    Class<?> type = types[i];
    +737                    Object issuerObject = issuer.getIssuer();
    +738                    if (manager.isCommandIssuer(type) && type.isAssignableFrom(issuerObject.getClass())) {
    +739                        parameters[i] = issuerObject;
    +740                    } else if (CommandIssuer.class.isAssignableFrom(type)) {
    +741                        parameters[i] = issuer;
    +742                    } else if (RegisteredCommand.class.isAssignableFrom(type)) {
    +743                        parameters[i] = cmd;
    +744                    } else if (String[].class.isAssignableFrom((type))) {
    +745                        parameters[i] = args;
    +746                    } else {
    +747                        parameters[i] = null;
    +748                    }
    +749                }
    +750
    +751                return (boolean) pre.invoke(this, parameters);
    +752            } catch (IllegalAccessException | InvocationTargetException e) {
    +753                this.manager.log(LogLevel.ERROR, "Exception encountered while command pre-processing", e);
    +754            }
    +755        }
    +756        return false;
    +757    }
    +758
    +759    /**
    +760     * @deprecated Unstable API
    +761     */
    +762    @Deprecated
    +763    @UnstableAPI
    +764    public CommandHelp getCommandHelp() {
    +765        return manager.generateCommandHelp();
    +766    }
    +767
    +768    /**
    +769     * @deprecated Unstable API
    +770     */
    +771    @Deprecated
    +772    @UnstableAPI
    +773    public void showCommandHelp() {
    +774        getCommandHelp().showHelp();
    +775    }
    +776
    +777    public void help(Object issuer, String[] args) {
    +778        help(manager.getCommandIssuer(issuer), args);
    +779    }
    +780
    +781    public void help(CommandIssuer issuer, String[] args) {
    +782        issuer.sendMessage(MessageType.ERROR, MessageKeys.UNKNOWN_COMMAND);
    +783    }
    +784
    +785    public void doHelp(Object issuer, String... args) {
    +786        doHelp(manager.getCommandIssuer(issuer), args);
    +787    }
    +788
    +789    public void doHelp(CommandIssuer issuer, String... args) {
    +790        help(issuer, args);
    +791    }
    +792
    +793    public void showSyntax(CommandIssuer issuer, RegisteredCommand<?> cmd) {
    +794        issuer.sendMessage(MessageType.SYNTAX, MessageKeys.INVALID_SYNTAX,
    +795                "{command}", manager.getCommandPrefix(issuer) + cmd.command,
    +796                "{syntax}", cmd.getSyntaxText(issuer)
    +797        );
    +798    }
    +799
    +800    public boolean hasPermission(Object issuer) {
    +801        return hasPermission(manager.getCommandIssuer(issuer));
    +802    }
    +803
    +804    public boolean hasPermission(CommandIssuer issuer) {
    +805        return this.manager.hasPermission(issuer, getRequiredPermissions());
    +806    }
    +807
    +808    public Set<String> getRequiredPermissions() {
    +809        return this.permissions;
    +810    }
    +811
    +812    public boolean requiresPermission(String permission) {
    +813        return getRequiredPermissions().contains(permission);
    +814    }
    +815
    +816    public String getName() {
    +817        return commandName;
    +818    }
    +819
    +820    public ExceptionHandler getExceptionHandler() {
    +821        return exceptionHandler;
    +822    }
    +823
    +824    public BaseCommand setExceptionHandler(ExceptionHandler exceptionHandler) {
    +825        this.exceptionHandler = exceptionHandler;
    +826        return this;
    +827    }
    +828
    +829    public RegisteredCommand getDefaultRegisteredCommand() {
    +830        return ACFUtil.getFirstElement(this.subCommands.get(DEFAULT));
    +831    }
    +832
    +833    public String setContextFlags(Class<?> cls, String flags) {
    +834        return this.contextFlags.put(cls, flags);
    +835    }
    +836
    +837    public String getContextFlags(Class<?> cls) {
    +838        return this.contextFlags.get(cls);
    +839    }
    +840
    +841    public List<RegisteredCommand> getRegisteredCommands() {
    +842        List<RegisteredCommand> registeredCommands = new ArrayList<>();
    +843        registeredCommands.addAll(this.subCommands.values());
    +844        return registeredCommands;
    +845    }
    +846
    +847    protected SetMultimap<String, RegisteredCommand> getSubCommands() {
    +848        return subCommands;
    +849    }
    +850}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandCompletionContext.html b/docs/acf-core/src-html/co/aikar/commands/CommandCompletionContext.html
    index afaf52d4..0cc800bb 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandCompletionContext.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandCompletionContext.html
    @@ -1,145 +1,149 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.Arrays;
    -027import java.util.HashMap;
    -028import java.util.List;
    -029import java.util.Locale;
    -030import java.util.Map;
    -031
    -032public class CommandCompletionContext<I extends CommandIssuer> {
    -033    private final RegisteredCommand command;
    -034    protected final I issuer;
    -035    private final String input;
    -036    private final String config;
    -037    private final Map<String, String> configs = new HashMap<>();
    -038    private final List<String> args;
    -039
    -040    CommandCompletionContext(RegisteredCommand command, I issuer, String input, String config, String[] args) {
    -041        this.command = command;
    -042        this.issuer = issuer;
    -043        this.input = input;
    -044        if (config != null) {
    -045            String[] configs = ACFPatterns.COMMA.split(config);
    -046            for (String conf : configs) {
    -047                String[] confsplit = ACFPatterns.EQUALS.split(conf, 2);
    -048                this.configs.put(confsplit[0].toLowerCase(Locale.ENGLISH), confsplit.length > 1 ? confsplit[1] : null);
    -049            }
    -050            this.config = configs[0];
    -051        } else {
    -052            this.config = null;
    -053        }
    -054
    -055        this.args = Arrays.asList(args);
    -056    }
    -057
    -058    public Map<String, String> getConfigs() {
    -059        return configs;
    -060    }
    -061
    -062    public String getConfig(String key) {
    -063        return getConfig(key, null);
    -064    }
    -065
    -066    public String getConfig(String key, String def) {
    -067        return this.configs.getOrDefault(key.toLowerCase(Locale.ENGLISH), def);
    -068    }
    -069
    -070    public boolean hasConfig(String key) {
    -071        return this.configs.containsKey(key.toLowerCase(Locale.ENGLISH));
    -072    }
    -073
    -074    public <T> T getContextValue(Class<? extends T> clazz) throws InvalidCommandArgument {
    -075        return getContextValue(clazz, null);
    -076    }
    -077
    -078    public <T> T getContextValue(Class<? extends T> clazz, Integer paramIdx) throws InvalidCommandArgument {
    -079        String name = null;
    -080        if (paramIdx != null) {
    -081            if (paramIdx >= command.parameters.length) {
    -082                throw new IllegalArgumentException("Param index is higher than number of parameters");
    -083            }
    -084            CommandParameter param = command.parameters[paramIdx];
    -085            Class<?> paramType = param.getType();
    -086            if (!clazz.isAssignableFrom(paramType)) {
    -087                throw new IllegalArgumentException(param.getName() + ":" + paramType.getName() + " can not satisfy " + clazz.getName());
    -088            }
    -089            name = param.getName();
    -090        } else {
    -091            CommandParameter[] parameters = command.parameters;
    -092            for (int i = 0; i < parameters.length; i++) {
    -093                final CommandParameter parameter = parameters[i];
    -094                if (clazz.isAssignableFrom(parameter.getType())) {
    -095                    paramIdx = i;
    -096                    name = parameter.getName();
    -097                    break;
    -098                }
    -099            }
    -100            if (paramIdx == null) {
    -101                throw new IllegalStateException("Can not find any parameter that can satisfy " + clazz.getName());
    -102            }
    -103        }
    -104        return getContextValueByName(clazz, name);
    -105    }
    -106
    -107    public <T> T getContextValueByName(Class<? extends T> clazz, String name) throws InvalidCommandArgument {
    -108        //noinspection unchecked
    -109        Map<String, Object> resolved = command.resolveContexts(issuer, args, name);
    -110        if (resolved == null || !resolved.containsKey(name)) {
    -111            ACFUtil.sneaky(new CommandCompletionTextLookupException());
    -112        }
    -113
    -114        //noinspection unchecked
    -115        return (T) resolved.get(name);
    -116    }
    -117
    -118    public CommandIssuer getIssuer() {
    -119        return issuer;
    -120    }
    -121
    -122    public String getInput() {
    -123        return input;
    -124    }
    -125
    -126    public String getConfig() {
    -127        return config;
    -128    }
    -129
    -130    public boolean isAsync() {
    -131        return CommandManager.getCurrentCommandOperationContext().isAsync();
    -132    }
    -133}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.Arrays;
    +027import java.util.HashMap;
    +028import java.util.List;
    +029import java.util.Locale;
    +030import java.util.Map;
    +031
    +032public class CommandCompletionContext<I extends CommandIssuer> {
    +033    private final RegisteredCommand command;
    +034    protected final I issuer;
    +035    private final String input;
    +036    private final String config;
    +037    private final Map<String, String> configs = new HashMap<>();
    +038    private final List<String> args;
    +039
    +040    CommandCompletionContext(RegisteredCommand command, I issuer, String input, String config, String[] args) {
    +041        this.command = command;
    +042        this.issuer = issuer;
    +043        this.input = input;
    +044        if (config != null) {
    +045            String[] configs = ACFPatterns.COMMA.split(config);
    +046            for (String conf : configs) {
    +047                String[] confsplit = ACFPatterns.EQUALS.split(conf, 2);
    +048                this.configs.put(confsplit[0].toLowerCase(Locale.ENGLISH), confsplit.length > 1 ? confsplit[1] : null);
    +049            }
    +050            this.config = configs[0];
    +051        } else {
    +052            this.config = null;
    +053        }
    +054
    +055        this.args = Arrays.asList(args);
    +056    }
    +057
    +058    public Map<String, String> getConfigs() {
    +059        return configs;
    +060    }
    +061
    +062    public String getConfig(String key) {
    +063        return getConfig(key, null);
    +064    }
    +065
    +066    public String getConfig(String key, String def) {
    +067        return this.configs.getOrDefault(key.toLowerCase(Locale.ENGLISH), def);
    +068    }
    +069
    +070    public boolean hasConfig(String key) {
    +071        return this.configs.containsKey(key.toLowerCase(Locale.ENGLISH));
    +072    }
    +073
    +074    public <T> T getContextValue(Class<? extends T> clazz) throws InvalidCommandArgument {
    +075        return getContextValue(clazz, null);
    +076    }
    +077
    +078    public <T> T getContextValue(Class<? extends T> clazz, Integer paramIdx) throws InvalidCommandArgument {
    +079        String name = null;
    +080        if (paramIdx != null) {
    +081            if (paramIdx >= command.parameters.length) {
    +082                throw new IllegalArgumentException("Param index is higher than number of parameters");
    +083            }
    +084            CommandParameter param = command.parameters[paramIdx];
    +085            Class<?> paramType = param.getType();
    +086            if (!clazz.isAssignableFrom(paramType)) {
    +087                throw new IllegalArgumentException(param.getName() + ":" + paramType.getName() + " can not satisfy " + clazz.getName());
    +088            }
    +089            name = param.getName();
    +090        } else {
    +091            CommandParameter[] parameters = command.parameters;
    +092            for (int i = 0; i < parameters.length; i++) {
    +093                final CommandParameter parameter = parameters[i];
    +094                if (clazz.isAssignableFrom(parameter.getType())) {
    +095                    paramIdx = i;
    +096                    name = parameter.getName();
    +097                    break;
    +098                }
    +099            }
    +100            if (paramIdx == null) {
    +101                throw new IllegalStateException("Can not find any parameter that can satisfy " + clazz.getName());
    +102            }
    +103        }
    +104        return getContextValueByName(clazz, name);
    +105    }
    +106
    +107    public <T> T getContextValueByName(Class<? extends T> clazz, String name) throws InvalidCommandArgument {
    +108        //noinspection unchecked
    +109        Map<String, Object> resolved = command.resolveContexts(issuer, args, name);
    +110        if (resolved == null || !resolved.containsKey(name)) {
    +111            ACFUtil.sneaky(new CommandCompletionTextLookupException());
    +112        }
    +113
    +114        //noinspection unchecked
    +115        return (T) resolved.get(name);
    +116    }
    +117
    +118    public CommandIssuer getIssuer() {
    +119        return issuer;
    +120    }
    +121
    +122    public String getInput() {
    +123        return input;
    +124    }
    +125
    +126    public String getConfig() {
    +127        return config;
    +128    }
    +129
    +130    public boolean isAsync() {
    +131        return CommandManager.getCurrentCommandOperationContext().isAsync();
    +132    }
    +133}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html
    index 69176277..97d29c25 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html
    @@ -1,322 +1,326 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.ArrayList;
    -030import java.util.Arrays;
    -031import java.util.Collection;
    -032import java.util.Collections;
    -033import java.util.HashMap;
    -034import java.util.List;
    -035import java.util.Locale;
    -036import java.util.Map;
    -037import java.util.function.Supplier;
    -038import java.util.stream.Collectors;
    -039import java.util.stream.IntStream;
    -040
    -041
    -042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    -043public class CommandCompletions<C extends CommandCompletionContext> {
    -044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    -045    private final CommandManager manager;
    -046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    -047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    -048    private Map<Class, String> defaultCompletions = new HashMap<>();
    -049
    -050    public CommandCompletions(CommandManager manager) {
    -051        this.manager = manager;
    -052        registerStaticCompletion("empty", Collections.emptyList());
    -053        registerStaticCompletion("nothing", Collections.emptyList());
    -054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    -055        registerAsyncCompletion("range", (c) -> {
    -056            String config = c.getConfig();
    -057            if (config == null) {
    -058                return Collections.emptyList();
    -059            }
    -060            final String[] ranges = ACFPatterns.DASH.split(config);
    -061            int start;
    -062            int end;
    -063            if (ranges.length != 2) {
    -064                start = 0;
    -065                end = ACFUtil.parseInt(ranges[0], 0);
    -066            } else {
    -067                start = ACFUtil.parseInt(ranges[0], 0);
    -068                end = ACFUtil.parseInt(ranges[1], 0);
    -069            }
    -070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    -071        });
    -072    }
    -073
    -074    /**
    -075     * Registr a completion handler to provide command completions based on the user input.
    -076     *
    -077     * @param id
    -078     * @param handler
    -079     * @return
    -080     */
    -081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    -082        return this.completionMap.put(prepareCompletionId(id), handler);
    -083    }
    -084
    -085    /**
    -086     * Registr a completion handler to provide command completions based on the user input.
    -087     * This handler is declared to be safe to be executed asynchronously.
    -088     * <p>
    -089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    -090     * your handler will be executed on the main thread.
    -091     * <p>
    -092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    -093     * <p>
    -094     * Use context.isAsync() to determine if you are async or not.
    -095     *
    -096     * @param id
    -097     * @param handler
    -098     * @return
    -099     */
    -100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    -101        return this.completionMap.put(prepareCompletionId(id), handler);
    -102    }
    -103
    -104    /**
    -105     * Register a static list of command completions that will never change.
    -106     * Like @CommandCompletion, values are | (PIPE) separated.
    -107     * <p>
    -108     * Example: foo|bar|baz
    -109     *
    -110     * @param id
    -111     * @param list
    -112     * @return
    -113     */
    -114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    -115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    -116    }
    -117
    -118    /**
    -119     * Register a static list of command completions that will never change
    -120     *
    -121     * @param id
    -122     * @param completions
    -123     * @return
    -124     */
    -125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    -126        return registerStaticCompletion(id, Arrays.asList(completions));
    -127    }
    -128
    -129    /**
    -130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    -131     * immediately as part of this method call.
    -132     *
    -133     * @param id
    -134     * @param supplier
    -135     * @return
    -136     */
    -137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    -138        return registerStaticCompletion(id, supplier.get());
    -139    }
    -140
    -141    /**
    -142     * Register a static list of command completions that will never change
    -143     *
    -144     * @param id
    -145     * @param completions
    -146     * @return
    -147     */
    -148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    -149        return registerAsyncCompletion(id, x -> completions);
    -150    }
    -151
    -152    /**
    -153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    -154     * <p>
    -155     * This enables automatic completion support for parameters without manually defining it for custom objects
    -156     *
    -157     * @param id
    -158     * @param classes
    -159     */
    -160    public void setDefaultCompletion(String id, Class... classes) {
    -161        // get completion with specified id
    -162        id = prepareCompletionId(id);
    -163        CommandCompletionHandler completion = completionMap.get(id);
    -164
    -165        if (completion == null) {
    -166            // Throw something because no completion with specified id
    -167            throw new IllegalStateException("Completion not registered for " + id);
    -168        }
    -169
    -170        for (Class clazz : classes) {
    -171            defaultCompletions.put(clazz, id);
    -172        }
    -173    }
    -174
    -175    @NotNull
    -176    private static String prepareCompletionId(String id) {
    -177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    -178    }
    -179
    -180    @NotNull
    -181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    -182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    -183        final int argIndex = args.length - 1;
    -184
    -185        String input = args[argIndex];
    -186
    -187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    -188        if (completion == null || "*".equals(completion)) {
    -189            completion = findDefaultCompletion(cmd, args);
    -190        }
    -191
    -192        if (completion == null && completions.length > 0) {
    -193            String last = completions[completions.length - 1];
    -194            if (last.startsWith("repeat@")) {
    -195                completion = last;
    -196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    -197                completion = last;
    -198            }
    -199        }
    -200
    -201        if (completion == null) {
    -202            return Collections.singletonList(input);
    -203        }
    -204
    -205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    -206    }
    -207
    -208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    -209        int i = 0;
    -210        for (CommandParameter param : cmd.parameters) {
    -211            if (param.canConsumeInput() && ++i == args.length) {
    -212                Class type = param.getType();
    -213                while (type != null) {
    -214                    String completion = this.defaultCompletions.get(type);
    -215                    if (completion != null) {
    -216                        return completion;
    -217                    }
    -218                    type = type.getSuperclass();
    -219                }
    -220                if (param.getType().isEnum()) {
    -221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    -222                    //noinspection unchecked
    -223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    -224                    return DEFAULT_ENUM_ID;
    -225                }
    -226                break;
    -227            }
    -228        }
    -229        return null;
    -230    }
    -231
    -232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    -233        if (DEFAULT_ENUM_ID.equals(completion)) {
    -234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    -235            return ctx.enumCompletionValues;
    -236        }
    -237        boolean repeat = completion.startsWith("repeat@");
    -238        if (repeat) {
    -239            completion = completion.substring(6);
    -240        }
    -241        completion = manager.getCommandReplacements().replace(completion);
    -242
    -243        List<String> allCompletions = new ArrayList<>();
    -244        String input = args.length > 0 ? args[args.length - 1] : "";
    -245
    -246        for (String value : ACFPatterns.PIPE.split(completion)) {
    -247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    -248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    -249            if (handler != null) {
    -250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    -251                    ACFUtil.sneaky(new SyncCompletionRequired());
    -252                    return null;
    -253                }
    -254                String config = complete.length == 1 ? null : complete[1];
    -255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    -256
    -257                try {
    -258                    //noinspection unchecked
    -259                    Collection<String> completions = handler.getCompletions(context);
    -260
    -261                    //Handle completions with more than one word:
    -262                    if (!repeat && completions != null
    -263                            && command.parameters[command.parameters.length - 1].consumesRest
    -264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    -265                        String start = String.join(" ", args);
    -266                        completions = completions.stream()
    -267                                .map(s -> {
    -268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    -269                                        String[] completionArgs = s.split(" ");
    -270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    -271                                    } else {
    -272                                        return s;
    -273                                    }
    -274                                }).collect(Collectors.toList());
    -275                    }
    -276
    -277                    if (completions != null) {
    -278                        allCompletions.addAll(completions);
    -279                        continue;
    -280                    }
    -281                    //noinspection ConstantIfStatement,ConstantConditions
    -282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    -283                        throw new CommandCompletionTextLookupException();
    -284                    }
    -285                } catch (CommandCompletionTextLookupException ignored) {
    -286                    // This should only happen if some other feedback error occured.
    -287                } catch (Exception e) {
    -288                    command.handleException(sender, Arrays.asList(args), e);
    -289                }
    -290                // Something went wrong in lookup, fall back to input
    -291                return Collections.singletonList(input);
    -292            } else {
    -293                // Plaintext value
    -294                allCompletions.add(value);
    -295            }
    -296        }
    -297        return allCompletions;
    -298    }
    -299
    -300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    -301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    -302    }
    -303
    -304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    -305    }
    -306
    -307    public static class SyncCompletionRequired extends RuntimeException {
    -308    }
    -309
    -310}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.ArrayList;
    +030import java.util.Arrays;
    +031import java.util.Collection;
    +032import java.util.Collections;
    +033import java.util.HashMap;
    +034import java.util.List;
    +035import java.util.Locale;
    +036import java.util.Map;
    +037import java.util.function.Supplier;
    +038import java.util.stream.Collectors;
    +039import java.util.stream.IntStream;
    +040
    +041
    +042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    +043public class CommandCompletions<C extends CommandCompletionContext> {
    +044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    +045    private final CommandManager manager;
    +046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    +047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    +048    private Map<Class, String> defaultCompletions = new HashMap<>();
    +049
    +050    public CommandCompletions(CommandManager manager) {
    +051        this.manager = manager;
    +052        registerStaticCompletion("empty", Collections.emptyList());
    +053        registerStaticCompletion("nothing", Collections.emptyList());
    +054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    +055        registerAsyncCompletion("range", (c) -> {
    +056            String config = c.getConfig();
    +057            if (config == null) {
    +058                return Collections.emptyList();
    +059            }
    +060            final String[] ranges = ACFPatterns.DASH.split(config);
    +061            int start;
    +062            int end;
    +063            if (ranges.length != 2) {
    +064                start = 0;
    +065                end = ACFUtil.parseInt(ranges[0], 0);
    +066            } else {
    +067                start = ACFUtil.parseInt(ranges[0], 0);
    +068                end = ACFUtil.parseInt(ranges[1], 0);
    +069            }
    +070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    +071        });
    +072    }
    +073
    +074    /**
    +075     * Registr a completion handler to provide command completions based on the user input.
    +076     *
    +077     * @param id
    +078     * @param handler
    +079     * @return
    +080     */
    +081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    +082        return this.completionMap.put(prepareCompletionId(id), handler);
    +083    }
    +084
    +085    /**
    +086     * Registr a completion handler to provide command completions based on the user input.
    +087     * This handler is declared to be safe to be executed asynchronously.
    +088     * <p>
    +089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    +090     * your handler will be executed on the main thread.
    +091     * <p>
    +092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    +093     * <p>
    +094     * Use context.isAsync() to determine if you are async or not.
    +095     *
    +096     * @param id
    +097     * @param handler
    +098     * @return
    +099     */
    +100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    +101        return this.completionMap.put(prepareCompletionId(id), handler);
    +102    }
    +103
    +104    /**
    +105     * Register a static list of command completions that will never change.
    +106     * Like @CommandCompletion, values are | (PIPE) separated.
    +107     * <p>
    +108     * Example: foo|bar|baz
    +109     *
    +110     * @param id
    +111     * @param list
    +112     * @return
    +113     */
    +114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    +115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    +116    }
    +117
    +118    /**
    +119     * Register a static list of command completions that will never change
    +120     *
    +121     * @param id
    +122     * @param completions
    +123     * @return
    +124     */
    +125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    +126        return registerStaticCompletion(id, Arrays.asList(completions));
    +127    }
    +128
    +129    /**
    +130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    +131     * immediately as part of this method call.
    +132     *
    +133     * @param id
    +134     * @param supplier
    +135     * @return
    +136     */
    +137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    +138        return registerStaticCompletion(id, supplier.get());
    +139    }
    +140
    +141    /**
    +142     * Register a static list of command completions that will never change
    +143     *
    +144     * @param id
    +145     * @param completions
    +146     * @return
    +147     */
    +148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    +149        return registerAsyncCompletion(id, x -> completions);
    +150    }
    +151
    +152    /**
    +153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    +154     * <p>
    +155     * This enables automatic completion support for parameters without manually defining it for custom objects
    +156     *
    +157     * @param id
    +158     * @param classes
    +159     */
    +160    public void setDefaultCompletion(String id, Class... classes) {
    +161        // get completion with specified id
    +162        id = prepareCompletionId(id);
    +163        CommandCompletionHandler completion = completionMap.get(id);
    +164
    +165        if (completion == null) {
    +166            // Throw something because no completion with specified id
    +167            throw new IllegalStateException("Completion not registered for " + id);
    +168        }
    +169
    +170        for (Class clazz : classes) {
    +171            defaultCompletions.put(clazz, id);
    +172        }
    +173    }
    +174
    +175    @NotNull
    +176    private static String prepareCompletionId(String id) {
    +177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    +178    }
    +179
    +180    @NotNull
    +181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    +182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    +183        final int argIndex = args.length - 1;
    +184
    +185        String input = args[argIndex];
    +186
    +187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    +188        if (completion == null || completion.isEmpty() || "*".equals(completion)) {
    +189            completion = findDefaultCompletion(cmd, args);
    +190        }
    +191
    +192        if (completion == null && completions.length > 0) {
    +193            String last = completions[completions.length - 1];
    +194            if (last.startsWith("repeat@")) {
    +195                completion = last;
    +196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    +197                completion = last;
    +198            }
    +199        }
    +200
    +201        if (completion == null) {
    +202            return Collections.singletonList(input);
    +203        }
    +204
    +205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    +206    }
    +207
    +208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    +209        int i = 0;
    +210        for (CommandParameter param : cmd.parameters) {
    +211            if (param.canConsumeInput() && ++i == args.length) {
    +212                Class type = param.getType();
    +213                while (type != null) {
    +214                    String completion = this.defaultCompletions.get(type);
    +215                    if (completion != null) {
    +216                        return completion;
    +217                    }
    +218                    type = type.getSuperclass();
    +219                }
    +220                if (param.getType().isEnum()) {
    +221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    +222                    //noinspection unchecked
    +223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    +224                    return DEFAULT_ENUM_ID;
    +225                }
    +226                break;
    +227            }
    +228        }
    +229        return null;
    +230    }
    +231
    +232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    +233        if (DEFAULT_ENUM_ID.equals(completion)) {
    +234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    +235            return ctx.enumCompletionValues;
    +236        }
    +237        boolean repeat = completion.startsWith("repeat@");
    +238        if (repeat) {
    +239            completion = completion.substring(6);
    +240        }
    +241        completion = manager.getCommandReplacements().replace(completion);
    +242
    +243        List<String> allCompletions = new ArrayList<>();
    +244        String input = args.length > 0 ? args[args.length - 1] : "";
    +245
    +246        for (String value : ACFPatterns.PIPE.split(completion)) {
    +247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    +248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    +249            if (handler != null) {
    +250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    +251                    ACFUtil.sneaky(new SyncCompletionRequired());
    +252                    return null;
    +253                }
    +254                String config = complete.length == 1 ? null : complete[1];
    +255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    +256
    +257                try {
    +258                    //noinspection unchecked
    +259                    Collection<String> completions = handler.getCompletions(context);
    +260
    +261                    //Handle completions with more than one word:
    +262                    if (!repeat && completions != null
    +263                            && command.parameters[command.parameters.length - 1].consumesRest
    +264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    +265                        String start = String.join(" ", args);
    +266                        completions = completions.stream()
    +267                                .map(s -> {
    +268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    +269                                        String[] completionArgs = s.split(" ");
    +270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    +271                                    } else {
    +272                                        return s;
    +273                                    }
    +274                                }).collect(Collectors.toList());
    +275                    }
    +276
    +277                    if (completions != null) {
    +278                        allCompletions.addAll(completions);
    +279                        continue;
    +280                    }
    +281                    //noinspection ConstantIfStatement,ConstantConditions
    +282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    +283                        throw new CommandCompletionTextLookupException();
    +284                    }
    +285                } catch (CommandCompletionTextLookupException ignored) {
    +286                    // This should only happen if some other feedback error occured.
    +287                } catch (Exception e) {
    +288                    command.handleException(sender, Arrays.asList(args), e);
    +289                }
    +290                // Something went wrong in lookup, fall back to input
    +291                return Collections.singletonList(input);
    +292            } else {
    +293                // Plaintext value
    +294                allCompletions.add(value);
    +295            }
    +296        }
    +297        return allCompletions;
    +298    }
    +299
    +300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    +301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    +302    }
    +303
    +304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    +305    }
    +306
    +307    public static class SyncCompletionRequired extends RuntimeException {
    +308    }
    +309
    +310}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html
    index 69176277..1b5e5039 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html
    @@ -1,322 +1,326 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.ArrayList;
    -030import java.util.Arrays;
    -031import java.util.Collection;
    -032import java.util.Collections;
    -033import java.util.HashMap;
    -034import java.util.List;
    -035import java.util.Locale;
    -036import java.util.Map;
    -037import java.util.function.Supplier;
    -038import java.util.stream.Collectors;
    -039import java.util.stream.IntStream;
    -040
    -041
    -042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    -043public class CommandCompletions<C extends CommandCompletionContext> {
    -044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    -045    private final CommandManager manager;
    -046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    -047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    -048    private Map<Class, String> defaultCompletions = new HashMap<>();
    -049
    -050    public CommandCompletions(CommandManager manager) {
    -051        this.manager = manager;
    -052        registerStaticCompletion("empty", Collections.emptyList());
    -053        registerStaticCompletion("nothing", Collections.emptyList());
    -054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    -055        registerAsyncCompletion("range", (c) -> {
    -056            String config = c.getConfig();
    -057            if (config == null) {
    -058                return Collections.emptyList();
    -059            }
    -060            final String[] ranges = ACFPatterns.DASH.split(config);
    -061            int start;
    -062            int end;
    -063            if (ranges.length != 2) {
    -064                start = 0;
    -065                end = ACFUtil.parseInt(ranges[0], 0);
    -066            } else {
    -067                start = ACFUtil.parseInt(ranges[0], 0);
    -068                end = ACFUtil.parseInt(ranges[1], 0);
    -069            }
    -070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    -071        });
    -072    }
    -073
    -074    /**
    -075     * Registr a completion handler to provide command completions based on the user input.
    -076     *
    -077     * @param id
    -078     * @param handler
    -079     * @return
    -080     */
    -081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    -082        return this.completionMap.put(prepareCompletionId(id), handler);
    -083    }
    -084
    -085    /**
    -086     * Registr a completion handler to provide command completions based on the user input.
    -087     * This handler is declared to be safe to be executed asynchronously.
    -088     * <p>
    -089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    -090     * your handler will be executed on the main thread.
    -091     * <p>
    -092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    -093     * <p>
    -094     * Use context.isAsync() to determine if you are async or not.
    -095     *
    -096     * @param id
    -097     * @param handler
    -098     * @return
    -099     */
    -100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    -101        return this.completionMap.put(prepareCompletionId(id), handler);
    -102    }
    -103
    -104    /**
    -105     * Register a static list of command completions that will never change.
    -106     * Like @CommandCompletion, values are | (PIPE) separated.
    -107     * <p>
    -108     * Example: foo|bar|baz
    -109     *
    -110     * @param id
    -111     * @param list
    -112     * @return
    -113     */
    -114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    -115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    -116    }
    -117
    -118    /**
    -119     * Register a static list of command completions that will never change
    -120     *
    -121     * @param id
    -122     * @param completions
    -123     * @return
    -124     */
    -125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    -126        return registerStaticCompletion(id, Arrays.asList(completions));
    -127    }
    -128
    -129    /**
    -130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    -131     * immediately as part of this method call.
    -132     *
    -133     * @param id
    -134     * @param supplier
    -135     * @return
    -136     */
    -137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    -138        return registerStaticCompletion(id, supplier.get());
    -139    }
    -140
    -141    /**
    -142     * Register a static list of command completions that will never change
    -143     *
    -144     * @param id
    -145     * @param completions
    -146     * @return
    -147     */
    -148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    -149        return registerAsyncCompletion(id, x -> completions);
    -150    }
    -151
    -152    /**
    -153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    -154     * <p>
    -155     * This enables automatic completion support for parameters without manually defining it for custom objects
    -156     *
    -157     * @param id
    -158     * @param classes
    -159     */
    -160    public void setDefaultCompletion(String id, Class... classes) {
    -161        // get completion with specified id
    -162        id = prepareCompletionId(id);
    -163        CommandCompletionHandler completion = completionMap.get(id);
    -164
    -165        if (completion == null) {
    -166            // Throw something because no completion with specified id
    -167            throw new IllegalStateException("Completion not registered for " + id);
    -168        }
    -169
    -170        for (Class clazz : classes) {
    -171            defaultCompletions.put(clazz, id);
    -172        }
    -173    }
    -174
    -175    @NotNull
    -176    private static String prepareCompletionId(String id) {
    -177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    -178    }
    -179
    -180    @NotNull
    -181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    -182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    -183        final int argIndex = args.length - 1;
    -184
    -185        String input = args[argIndex];
    -186
    -187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    -188        if (completion == null || "*".equals(completion)) {
    -189            completion = findDefaultCompletion(cmd, args);
    -190        }
    -191
    -192        if (completion == null && completions.length > 0) {
    -193            String last = completions[completions.length - 1];
    -194            if (last.startsWith("repeat@")) {
    -195                completion = last;
    -196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    -197                completion = last;
    -198            }
    -199        }
    -200
    -201        if (completion == null) {
    -202            return Collections.singletonList(input);
    -203        }
    -204
    -205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    -206    }
    -207
    -208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    -209        int i = 0;
    -210        for (CommandParameter param : cmd.parameters) {
    -211            if (param.canConsumeInput() && ++i == args.length) {
    -212                Class type = param.getType();
    -213                while (type != null) {
    -214                    String completion = this.defaultCompletions.get(type);
    -215                    if (completion != null) {
    -216                        return completion;
    -217                    }
    -218                    type = type.getSuperclass();
    -219                }
    -220                if (param.getType().isEnum()) {
    -221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    -222                    //noinspection unchecked
    -223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    -224                    return DEFAULT_ENUM_ID;
    -225                }
    -226                break;
    -227            }
    -228        }
    -229        return null;
    -230    }
    -231
    -232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    -233        if (DEFAULT_ENUM_ID.equals(completion)) {
    -234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    -235            return ctx.enumCompletionValues;
    -236        }
    -237        boolean repeat = completion.startsWith("repeat@");
    -238        if (repeat) {
    -239            completion = completion.substring(6);
    -240        }
    -241        completion = manager.getCommandReplacements().replace(completion);
    -242
    -243        List<String> allCompletions = new ArrayList<>();
    -244        String input = args.length > 0 ? args[args.length - 1] : "";
    -245
    -246        for (String value : ACFPatterns.PIPE.split(completion)) {
    -247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    -248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    -249            if (handler != null) {
    -250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    -251                    ACFUtil.sneaky(new SyncCompletionRequired());
    -252                    return null;
    -253                }
    -254                String config = complete.length == 1 ? null : complete[1];
    -255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    -256
    -257                try {
    -258                    //noinspection unchecked
    -259                    Collection<String> completions = handler.getCompletions(context);
    -260
    -261                    //Handle completions with more than one word:
    -262                    if (!repeat && completions != null
    -263                            && command.parameters[command.parameters.length - 1].consumesRest
    -264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    -265                        String start = String.join(" ", args);
    -266                        completions = completions.stream()
    -267                                .map(s -> {
    -268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    -269                                        String[] completionArgs = s.split(" ");
    -270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    -271                                    } else {
    -272                                        return s;
    -273                                    }
    -274                                }).collect(Collectors.toList());
    -275                    }
    -276
    -277                    if (completions != null) {
    -278                        allCompletions.addAll(completions);
    -279                        continue;
    -280                    }
    -281                    //noinspection ConstantIfStatement,ConstantConditions
    -282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    -283                        throw new CommandCompletionTextLookupException();
    -284                    }
    -285                } catch (CommandCompletionTextLookupException ignored) {
    -286                    // This should only happen if some other feedback error occured.
    -287                } catch (Exception e) {
    -288                    command.handleException(sender, Arrays.asList(args), e);
    -289                }
    -290                // Something went wrong in lookup, fall back to input
    -291                return Collections.singletonList(input);
    -292            } else {
    -293                // Plaintext value
    -294                allCompletions.add(value);
    -295            }
    -296        }
    -297        return allCompletions;
    -298    }
    -299
    -300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    -301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    -302    }
    -303
    -304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    -305    }
    -306
    -307    public static class SyncCompletionRequired extends RuntimeException {
    -308    }
    -309
    -310}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.ArrayList;
    +030import java.util.Arrays;
    +031import java.util.Collection;
    +032import java.util.Collections;
    +033import java.util.HashMap;
    +034import java.util.List;
    +035import java.util.Locale;
    +036import java.util.Map;
    +037import java.util.function.Supplier;
    +038import java.util.stream.Collectors;
    +039import java.util.stream.IntStream;
    +040
    +041
    +042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    +043public class CommandCompletions<C extends CommandCompletionContext> {
    +044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    +045    private final CommandManager manager;
    +046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    +047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    +048    private Map<Class, String> defaultCompletions = new HashMap<>();
    +049
    +050    public CommandCompletions(CommandManager manager) {
    +051        this.manager = manager;
    +052        registerStaticCompletion("empty", Collections.emptyList());
    +053        registerStaticCompletion("nothing", Collections.emptyList());
    +054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    +055        registerAsyncCompletion("range", (c) -> {
    +056            String config = c.getConfig();
    +057            if (config == null) {
    +058                return Collections.emptyList();
    +059            }
    +060            final String[] ranges = ACFPatterns.DASH.split(config);
    +061            int start;
    +062            int end;
    +063            if (ranges.length != 2) {
    +064                start = 0;
    +065                end = ACFUtil.parseInt(ranges[0], 0);
    +066            } else {
    +067                start = ACFUtil.parseInt(ranges[0], 0);
    +068                end = ACFUtil.parseInt(ranges[1], 0);
    +069            }
    +070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    +071        });
    +072    }
    +073
    +074    /**
    +075     * Registr a completion handler to provide command completions based on the user input.
    +076     *
    +077     * @param id
    +078     * @param handler
    +079     * @return
    +080     */
    +081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    +082        return this.completionMap.put(prepareCompletionId(id), handler);
    +083    }
    +084
    +085    /**
    +086     * Registr a completion handler to provide command completions based on the user input.
    +087     * This handler is declared to be safe to be executed asynchronously.
    +088     * <p>
    +089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    +090     * your handler will be executed on the main thread.
    +091     * <p>
    +092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    +093     * <p>
    +094     * Use context.isAsync() to determine if you are async or not.
    +095     *
    +096     * @param id
    +097     * @param handler
    +098     * @return
    +099     */
    +100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    +101        return this.completionMap.put(prepareCompletionId(id), handler);
    +102    }
    +103
    +104    /**
    +105     * Register a static list of command completions that will never change.
    +106     * Like @CommandCompletion, values are | (PIPE) separated.
    +107     * <p>
    +108     * Example: foo|bar|baz
    +109     *
    +110     * @param id
    +111     * @param list
    +112     * @return
    +113     */
    +114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    +115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    +116    }
    +117
    +118    /**
    +119     * Register a static list of command completions that will never change
    +120     *
    +121     * @param id
    +122     * @param completions
    +123     * @return
    +124     */
    +125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    +126        return registerStaticCompletion(id, Arrays.asList(completions));
    +127    }
    +128
    +129    /**
    +130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    +131     * immediately as part of this method call.
    +132     *
    +133     * @param id
    +134     * @param supplier
    +135     * @return
    +136     */
    +137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    +138        return registerStaticCompletion(id, supplier.get());
    +139    }
    +140
    +141    /**
    +142     * Register a static list of command completions that will never change
    +143     *
    +144     * @param id
    +145     * @param completions
    +146     * @return
    +147     */
    +148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    +149        return registerAsyncCompletion(id, x -> completions);
    +150    }
    +151
    +152    /**
    +153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    +154     * <p>
    +155     * This enables automatic completion support for parameters without manually defining it for custom objects
    +156     *
    +157     * @param id
    +158     * @param classes
    +159     */
    +160    public void setDefaultCompletion(String id, Class... classes) {
    +161        // get completion with specified id
    +162        id = prepareCompletionId(id);
    +163        CommandCompletionHandler completion = completionMap.get(id);
    +164
    +165        if (completion == null) {
    +166            // Throw something because no completion with specified id
    +167            throw new IllegalStateException("Completion not registered for " + id);
    +168        }
    +169
    +170        for (Class clazz : classes) {
    +171            defaultCompletions.put(clazz, id);
    +172        }
    +173    }
    +174
    +175    @NotNull
    +176    private static String prepareCompletionId(String id) {
    +177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    +178    }
    +179
    +180    @NotNull
    +181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    +182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    +183        final int argIndex = args.length - 1;
    +184
    +185        String input = args[argIndex];
    +186
    +187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    +188        if (completion == null || completion.isEmpty() || "*".equals(completion)) {
    +189            completion = findDefaultCompletion(cmd, args);
    +190        }
    +191
    +192        if (completion == null && completions.length > 0) {
    +193            String last = completions[completions.length - 1];
    +194            if (last.startsWith("repeat@")) {
    +195                completion = last;
    +196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    +197                completion = last;
    +198            }
    +199        }
    +200
    +201        if (completion == null) {
    +202            return Collections.singletonList(input);
    +203        }
    +204
    +205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    +206    }
    +207
    +208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    +209        int i = 0;
    +210        for (CommandParameter param : cmd.parameters) {
    +211            if (param.canConsumeInput() && ++i == args.length) {
    +212                Class type = param.getType();
    +213                while (type != null) {
    +214                    String completion = this.defaultCompletions.get(type);
    +215                    if (completion != null) {
    +216                        return completion;
    +217                    }
    +218                    type = type.getSuperclass();
    +219                }
    +220                if (param.getType().isEnum()) {
    +221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    +222                    //noinspection unchecked
    +223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    +224                    return DEFAULT_ENUM_ID;
    +225                }
    +226                break;
    +227            }
    +228        }
    +229        return null;
    +230    }
    +231
    +232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    +233        if (DEFAULT_ENUM_ID.equals(completion)) {
    +234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    +235            return ctx.enumCompletionValues;
    +236        }
    +237        boolean repeat = completion.startsWith("repeat@");
    +238        if (repeat) {
    +239            completion = completion.substring(6);
    +240        }
    +241        completion = manager.getCommandReplacements().replace(completion);
    +242
    +243        List<String> allCompletions = new ArrayList<>();
    +244        String input = args.length > 0 ? args[args.length - 1] : "";
    +245
    +246        for (String value : ACFPatterns.PIPE.split(completion)) {
    +247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    +248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    +249            if (handler != null) {
    +250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    +251                    ACFUtil.sneaky(new SyncCompletionRequired());
    +252                    return null;
    +253                }
    +254                String config = complete.length == 1 ? null : complete[1];
    +255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    +256
    +257                try {
    +258                    //noinspection unchecked
    +259                    Collection<String> completions = handler.getCompletions(context);
    +260
    +261                    //Handle completions with more than one word:
    +262                    if (!repeat && completions != null
    +263                            && command.parameters[command.parameters.length - 1].consumesRest
    +264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    +265                        String start = String.join(" ", args);
    +266                        completions = completions.stream()
    +267                                .map(s -> {
    +268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    +269                                        String[] completionArgs = s.split(" ");
    +270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    +271                                    } else {
    +272                                        return s;
    +273                                    }
    +274                                }).collect(Collectors.toList());
    +275                    }
    +276
    +277                    if (completions != null) {
    +278                        allCompletions.addAll(completions);
    +279                        continue;
    +280                    }
    +281                    //noinspection ConstantIfStatement,ConstantConditions
    +282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    +283                        throw new CommandCompletionTextLookupException();
    +284                    }
    +285                } catch (CommandCompletionTextLookupException ignored) {
    +286                    // This should only happen if some other feedback error occured.
    +287                } catch (Exception e) {
    +288                    command.handleException(sender, Arrays.asList(args), e);
    +289                }
    +290                // Something went wrong in lookup, fall back to input
    +291                return Collections.singletonList(input);
    +292            } else {
    +293                // Plaintext value
    +294                allCompletions.add(value);
    +295            }
    +296        }
    +297        return allCompletions;
    +298    }
    +299
    +300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    +301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    +302    }
    +303
    +304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    +305    }
    +306
    +307    public static class SyncCompletionRequired extends RuntimeException {
    +308    }
    +309
    +310}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html
    index 69176277..c6147437 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html
    @@ -1,322 +1,326 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.ArrayList;
    -030import java.util.Arrays;
    -031import java.util.Collection;
    -032import java.util.Collections;
    -033import java.util.HashMap;
    -034import java.util.List;
    -035import java.util.Locale;
    -036import java.util.Map;
    -037import java.util.function.Supplier;
    -038import java.util.stream.Collectors;
    -039import java.util.stream.IntStream;
    -040
    -041
    -042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    -043public class CommandCompletions<C extends CommandCompletionContext> {
    -044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    -045    private final CommandManager manager;
    -046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    -047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    -048    private Map<Class, String> defaultCompletions = new HashMap<>();
    -049
    -050    public CommandCompletions(CommandManager manager) {
    -051        this.manager = manager;
    -052        registerStaticCompletion("empty", Collections.emptyList());
    -053        registerStaticCompletion("nothing", Collections.emptyList());
    -054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    -055        registerAsyncCompletion("range", (c) -> {
    -056            String config = c.getConfig();
    -057            if (config == null) {
    -058                return Collections.emptyList();
    -059            }
    -060            final String[] ranges = ACFPatterns.DASH.split(config);
    -061            int start;
    -062            int end;
    -063            if (ranges.length != 2) {
    -064                start = 0;
    -065                end = ACFUtil.parseInt(ranges[0], 0);
    -066            } else {
    -067                start = ACFUtil.parseInt(ranges[0], 0);
    -068                end = ACFUtil.parseInt(ranges[1], 0);
    -069            }
    -070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    -071        });
    -072    }
    -073
    -074    /**
    -075     * Registr a completion handler to provide command completions based on the user input.
    -076     *
    -077     * @param id
    -078     * @param handler
    -079     * @return
    -080     */
    -081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    -082        return this.completionMap.put(prepareCompletionId(id), handler);
    -083    }
    -084
    -085    /**
    -086     * Registr a completion handler to provide command completions based on the user input.
    -087     * This handler is declared to be safe to be executed asynchronously.
    -088     * <p>
    -089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    -090     * your handler will be executed on the main thread.
    -091     * <p>
    -092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    -093     * <p>
    -094     * Use context.isAsync() to determine if you are async or not.
    -095     *
    -096     * @param id
    -097     * @param handler
    -098     * @return
    -099     */
    -100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    -101        return this.completionMap.put(prepareCompletionId(id), handler);
    -102    }
    -103
    -104    /**
    -105     * Register a static list of command completions that will never change.
    -106     * Like @CommandCompletion, values are | (PIPE) separated.
    -107     * <p>
    -108     * Example: foo|bar|baz
    -109     *
    -110     * @param id
    -111     * @param list
    -112     * @return
    -113     */
    -114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    -115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    -116    }
    -117
    -118    /**
    -119     * Register a static list of command completions that will never change
    -120     *
    -121     * @param id
    -122     * @param completions
    -123     * @return
    -124     */
    -125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    -126        return registerStaticCompletion(id, Arrays.asList(completions));
    -127    }
    -128
    -129    /**
    -130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    -131     * immediately as part of this method call.
    -132     *
    -133     * @param id
    -134     * @param supplier
    -135     * @return
    -136     */
    -137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    -138        return registerStaticCompletion(id, supplier.get());
    -139    }
    -140
    -141    /**
    -142     * Register a static list of command completions that will never change
    -143     *
    -144     * @param id
    -145     * @param completions
    -146     * @return
    -147     */
    -148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    -149        return registerAsyncCompletion(id, x -> completions);
    -150    }
    -151
    -152    /**
    -153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    -154     * <p>
    -155     * This enables automatic completion support for parameters without manually defining it for custom objects
    -156     *
    -157     * @param id
    -158     * @param classes
    -159     */
    -160    public void setDefaultCompletion(String id, Class... classes) {
    -161        // get completion with specified id
    -162        id = prepareCompletionId(id);
    -163        CommandCompletionHandler completion = completionMap.get(id);
    -164
    -165        if (completion == null) {
    -166            // Throw something because no completion with specified id
    -167            throw new IllegalStateException("Completion not registered for " + id);
    -168        }
    -169
    -170        for (Class clazz : classes) {
    -171            defaultCompletions.put(clazz, id);
    -172        }
    -173    }
    -174
    -175    @NotNull
    -176    private static String prepareCompletionId(String id) {
    -177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    -178    }
    -179
    -180    @NotNull
    -181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    -182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    -183        final int argIndex = args.length - 1;
    -184
    -185        String input = args[argIndex];
    -186
    -187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    -188        if (completion == null || "*".equals(completion)) {
    -189            completion = findDefaultCompletion(cmd, args);
    -190        }
    -191
    -192        if (completion == null && completions.length > 0) {
    -193            String last = completions[completions.length - 1];
    -194            if (last.startsWith("repeat@")) {
    -195                completion = last;
    -196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    -197                completion = last;
    -198            }
    -199        }
    -200
    -201        if (completion == null) {
    -202            return Collections.singletonList(input);
    -203        }
    -204
    -205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    -206    }
    -207
    -208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    -209        int i = 0;
    -210        for (CommandParameter param : cmd.parameters) {
    -211            if (param.canConsumeInput() && ++i == args.length) {
    -212                Class type = param.getType();
    -213                while (type != null) {
    -214                    String completion = this.defaultCompletions.get(type);
    -215                    if (completion != null) {
    -216                        return completion;
    -217                    }
    -218                    type = type.getSuperclass();
    -219                }
    -220                if (param.getType().isEnum()) {
    -221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    -222                    //noinspection unchecked
    -223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    -224                    return DEFAULT_ENUM_ID;
    -225                }
    -226                break;
    -227            }
    -228        }
    -229        return null;
    -230    }
    -231
    -232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    -233        if (DEFAULT_ENUM_ID.equals(completion)) {
    -234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    -235            return ctx.enumCompletionValues;
    -236        }
    -237        boolean repeat = completion.startsWith("repeat@");
    -238        if (repeat) {
    -239            completion = completion.substring(6);
    -240        }
    -241        completion = manager.getCommandReplacements().replace(completion);
    -242
    -243        List<String> allCompletions = new ArrayList<>();
    -244        String input = args.length > 0 ? args[args.length - 1] : "";
    -245
    -246        for (String value : ACFPatterns.PIPE.split(completion)) {
    -247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    -248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    -249            if (handler != null) {
    -250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    -251                    ACFUtil.sneaky(new SyncCompletionRequired());
    -252                    return null;
    -253                }
    -254                String config = complete.length == 1 ? null : complete[1];
    -255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    -256
    -257                try {
    -258                    //noinspection unchecked
    -259                    Collection<String> completions = handler.getCompletions(context);
    -260
    -261                    //Handle completions with more than one word:
    -262                    if (!repeat && completions != null
    -263                            && command.parameters[command.parameters.length - 1].consumesRest
    -264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    -265                        String start = String.join(" ", args);
    -266                        completions = completions.stream()
    -267                                .map(s -> {
    -268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    -269                                        String[] completionArgs = s.split(" ");
    -270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    -271                                    } else {
    -272                                        return s;
    -273                                    }
    -274                                }).collect(Collectors.toList());
    -275                    }
    -276
    -277                    if (completions != null) {
    -278                        allCompletions.addAll(completions);
    -279                        continue;
    -280                    }
    -281                    //noinspection ConstantIfStatement,ConstantConditions
    -282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    -283                        throw new CommandCompletionTextLookupException();
    -284                    }
    -285                } catch (CommandCompletionTextLookupException ignored) {
    -286                    // This should only happen if some other feedback error occured.
    -287                } catch (Exception e) {
    -288                    command.handleException(sender, Arrays.asList(args), e);
    -289                }
    -290                // Something went wrong in lookup, fall back to input
    -291                return Collections.singletonList(input);
    -292            } else {
    -293                // Plaintext value
    -294                allCompletions.add(value);
    -295            }
    -296        }
    -297        return allCompletions;
    -298    }
    -299
    -300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    -301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    -302    }
    -303
    -304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    -305    }
    -306
    -307    public static class SyncCompletionRequired extends RuntimeException {
    -308    }
    -309
    -310}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.ArrayList;
    +030import java.util.Arrays;
    +031import java.util.Collection;
    +032import java.util.Collections;
    +033import java.util.HashMap;
    +034import java.util.List;
    +035import java.util.Locale;
    +036import java.util.Map;
    +037import java.util.function.Supplier;
    +038import java.util.stream.Collectors;
    +039import java.util.stream.IntStream;
    +040
    +041
    +042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    +043public class CommandCompletions<C extends CommandCompletionContext> {
    +044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    +045    private final CommandManager manager;
    +046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    +047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    +048    private Map<Class, String> defaultCompletions = new HashMap<>();
    +049
    +050    public CommandCompletions(CommandManager manager) {
    +051        this.manager = manager;
    +052        registerStaticCompletion("empty", Collections.emptyList());
    +053        registerStaticCompletion("nothing", Collections.emptyList());
    +054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    +055        registerAsyncCompletion("range", (c) -> {
    +056            String config = c.getConfig();
    +057            if (config == null) {
    +058                return Collections.emptyList();
    +059            }
    +060            final String[] ranges = ACFPatterns.DASH.split(config);
    +061            int start;
    +062            int end;
    +063            if (ranges.length != 2) {
    +064                start = 0;
    +065                end = ACFUtil.parseInt(ranges[0], 0);
    +066            } else {
    +067                start = ACFUtil.parseInt(ranges[0], 0);
    +068                end = ACFUtil.parseInt(ranges[1], 0);
    +069            }
    +070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    +071        });
    +072    }
    +073
    +074    /**
    +075     * Registr a completion handler to provide command completions based on the user input.
    +076     *
    +077     * @param id
    +078     * @param handler
    +079     * @return
    +080     */
    +081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    +082        return this.completionMap.put(prepareCompletionId(id), handler);
    +083    }
    +084
    +085    /**
    +086     * Registr a completion handler to provide command completions based on the user input.
    +087     * This handler is declared to be safe to be executed asynchronously.
    +088     * <p>
    +089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    +090     * your handler will be executed on the main thread.
    +091     * <p>
    +092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    +093     * <p>
    +094     * Use context.isAsync() to determine if you are async or not.
    +095     *
    +096     * @param id
    +097     * @param handler
    +098     * @return
    +099     */
    +100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    +101        return this.completionMap.put(prepareCompletionId(id), handler);
    +102    }
    +103
    +104    /**
    +105     * Register a static list of command completions that will never change.
    +106     * Like @CommandCompletion, values are | (PIPE) separated.
    +107     * <p>
    +108     * Example: foo|bar|baz
    +109     *
    +110     * @param id
    +111     * @param list
    +112     * @return
    +113     */
    +114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    +115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    +116    }
    +117
    +118    /**
    +119     * Register a static list of command completions that will never change
    +120     *
    +121     * @param id
    +122     * @param completions
    +123     * @return
    +124     */
    +125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    +126        return registerStaticCompletion(id, Arrays.asList(completions));
    +127    }
    +128
    +129    /**
    +130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    +131     * immediately as part of this method call.
    +132     *
    +133     * @param id
    +134     * @param supplier
    +135     * @return
    +136     */
    +137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    +138        return registerStaticCompletion(id, supplier.get());
    +139    }
    +140
    +141    /**
    +142     * Register a static list of command completions that will never change
    +143     *
    +144     * @param id
    +145     * @param completions
    +146     * @return
    +147     */
    +148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    +149        return registerAsyncCompletion(id, x -> completions);
    +150    }
    +151
    +152    /**
    +153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    +154     * <p>
    +155     * This enables automatic completion support for parameters without manually defining it for custom objects
    +156     *
    +157     * @param id
    +158     * @param classes
    +159     */
    +160    public void setDefaultCompletion(String id, Class... classes) {
    +161        // get completion with specified id
    +162        id = prepareCompletionId(id);
    +163        CommandCompletionHandler completion = completionMap.get(id);
    +164
    +165        if (completion == null) {
    +166            // Throw something because no completion with specified id
    +167            throw new IllegalStateException("Completion not registered for " + id);
    +168        }
    +169
    +170        for (Class clazz : classes) {
    +171            defaultCompletions.put(clazz, id);
    +172        }
    +173    }
    +174
    +175    @NotNull
    +176    private static String prepareCompletionId(String id) {
    +177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    +178    }
    +179
    +180    @NotNull
    +181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    +182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    +183        final int argIndex = args.length - 1;
    +184
    +185        String input = args[argIndex];
    +186
    +187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    +188        if (completion == null || completion.isEmpty() || "*".equals(completion)) {
    +189            completion = findDefaultCompletion(cmd, args);
    +190        }
    +191
    +192        if (completion == null && completions.length > 0) {
    +193            String last = completions[completions.length - 1];
    +194            if (last.startsWith("repeat@")) {
    +195                completion = last;
    +196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    +197                completion = last;
    +198            }
    +199        }
    +200
    +201        if (completion == null) {
    +202            return Collections.singletonList(input);
    +203        }
    +204
    +205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    +206    }
    +207
    +208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    +209        int i = 0;
    +210        for (CommandParameter param : cmd.parameters) {
    +211            if (param.canConsumeInput() && ++i == args.length) {
    +212                Class type = param.getType();
    +213                while (type != null) {
    +214                    String completion = this.defaultCompletions.get(type);
    +215                    if (completion != null) {
    +216                        return completion;
    +217                    }
    +218                    type = type.getSuperclass();
    +219                }
    +220                if (param.getType().isEnum()) {
    +221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    +222                    //noinspection unchecked
    +223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    +224                    return DEFAULT_ENUM_ID;
    +225                }
    +226                break;
    +227            }
    +228        }
    +229        return null;
    +230    }
    +231
    +232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    +233        if (DEFAULT_ENUM_ID.equals(completion)) {
    +234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    +235            return ctx.enumCompletionValues;
    +236        }
    +237        boolean repeat = completion.startsWith("repeat@");
    +238        if (repeat) {
    +239            completion = completion.substring(6);
    +240        }
    +241        completion = manager.getCommandReplacements().replace(completion);
    +242
    +243        List<String> allCompletions = new ArrayList<>();
    +244        String input = args.length > 0 ? args[args.length - 1] : "";
    +245
    +246        for (String value : ACFPatterns.PIPE.split(completion)) {
    +247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    +248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    +249            if (handler != null) {
    +250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    +251                    ACFUtil.sneaky(new SyncCompletionRequired());
    +252                    return null;
    +253                }
    +254                String config = complete.length == 1 ? null : complete[1];
    +255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    +256
    +257                try {
    +258                    //noinspection unchecked
    +259                    Collection<String> completions = handler.getCompletions(context);
    +260
    +261                    //Handle completions with more than one word:
    +262                    if (!repeat && completions != null
    +263                            && command.parameters[command.parameters.length - 1].consumesRest
    +264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    +265                        String start = String.join(" ", args);
    +266                        completions = completions.stream()
    +267                                .map(s -> {
    +268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    +269                                        String[] completionArgs = s.split(" ");
    +270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    +271                                    } else {
    +272                                        return s;
    +273                                    }
    +274                                }).collect(Collectors.toList());
    +275                    }
    +276
    +277                    if (completions != null) {
    +278                        allCompletions.addAll(completions);
    +279                        continue;
    +280                    }
    +281                    //noinspection ConstantIfStatement,ConstantConditions
    +282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    +283                        throw new CommandCompletionTextLookupException();
    +284                    }
    +285                } catch (CommandCompletionTextLookupException ignored) {
    +286                    // This should only happen if some other feedback error occured.
    +287                } catch (Exception e) {
    +288                    command.handleException(sender, Arrays.asList(args), e);
    +289                }
    +290                // Something went wrong in lookup, fall back to input
    +291                return Collections.singletonList(input);
    +292            } else {
    +293                // Plaintext value
    +294                allCompletions.add(value);
    +295            }
    +296        }
    +297        return allCompletions;
    +298    }
    +299
    +300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    +301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    +302    }
    +303
    +304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    +305    }
    +306
    +307    public static class SyncCompletionRequired extends RuntimeException {
    +308    }
    +309
    +310}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.html b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.html
    index 69176277..59bbae74 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandCompletions.html
    @@ -1,322 +1,326 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.ArrayList;
    -030import java.util.Arrays;
    -031import java.util.Collection;
    -032import java.util.Collections;
    -033import java.util.HashMap;
    -034import java.util.List;
    -035import java.util.Locale;
    -036import java.util.Map;
    -037import java.util.function.Supplier;
    -038import java.util.stream.Collectors;
    -039import java.util.stream.IntStream;
    -040
    -041
    -042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    -043public class CommandCompletions<C extends CommandCompletionContext> {
    -044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    -045    private final CommandManager manager;
    -046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    -047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    -048    private Map<Class, String> defaultCompletions = new HashMap<>();
    -049
    -050    public CommandCompletions(CommandManager manager) {
    -051        this.manager = manager;
    -052        registerStaticCompletion("empty", Collections.emptyList());
    -053        registerStaticCompletion("nothing", Collections.emptyList());
    -054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    -055        registerAsyncCompletion("range", (c) -> {
    -056            String config = c.getConfig();
    -057            if (config == null) {
    -058                return Collections.emptyList();
    -059            }
    -060            final String[] ranges = ACFPatterns.DASH.split(config);
    -061            int start;
    -062            int end;
    -063            if (ranges.length != 2) {
    -064                start = 0;
    -065                end = ACFUtil.parseInt(ranges[0], 0);
    -066            } else {
    -067                start = ACFUtil.parseInt(ranges[0], 0);
    -068                end = ACFUtil.parseInt(ranges[1], 0);
    -069            }
    -070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    -071        });
    -072    }
    -073
    -074    /**
    -075     * Registr a completion handler to provide command completions based on the user input.
    -076     *
    -077     * @param id
    -078     * @param handler
    -079     * @return
    -080     */
    -081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    -082        return this.completionMap.put(prepareCompletionId(id), handler);
    -083    }
    -084
    -085    /**
    -086     * Registr a completion handler to provide command completions based on the user input.
    -087     * This handler is declared to be safe to be executed asynchronously.
    -088     * <p>
    -089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    -090     * your handler will be executed on the main thread.
    -091     * <p>
    -092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    -093     * <p>
    -094     * Use context.isAsync() to determine if you are async or not.
    -095     *
    -096     * @param id
    -097     * @param handler
    -098     * @return
    -099     */
    -100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    -101        return this.completionMap.put(prepareCompletionId(id), handler);
    -102    }
    -103
    -104    /**
    -105     * Register a static list of command completions that will never change.
    -106     * Like @CommandCompletion, values are | (PIPE) separated.
    -107     * <p>
    -108     * Example: foo|bar|baz
    -109     *
    -110     * @param id
    -111     * @param list
    -112     * @return
    -113     */
    -114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    -115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    -116    }
    -117
    -118    /**
    -119     * Register a static list of command completions that will never change
    -120     *
    -121     * @param id
    -122     * @param completions
    -123     * @return
    -124     */
    -125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    -126        return registerStaticCompletion(id, Arrays.asList(completions));
    -127    }
    -128
    -129    /**
    -130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    -131     * immediately as part of this method call.
    -132     *
    -133     * @param id
    -134     * @param supplier
    -135     * @return
    -136     */
    -137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    -138        return registerStaticCompletion(id, supplier.get());
    -139    }
    -140
    -141    /**
    -142     * Register a static list of command completions that will never change
    -143     *
    -144     * @param id
    -145     * @param completions
    -146     * @return
    -147     */
    -148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    -149        return registerAsyncCompletion(id, x -> completions);
    -150    }
    -151
    -152    /**
    -153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    -154     * <p>
    -155     * This enables automatic completion support for parameters without manually defining it for custom objects
    -156     *
    -157     * @param id
    -158     * @param classes
    -159     */
    -160    public void setDefaultCompletion(String id, Class... classes) {
    -161        // get completion with specified id
    -162        id = prepareCompletionId(id);
    -163        CommandCompletionHandler completion = completionMap.get(id);
    -164
    -165        if (completion == null) {
    -166            // Throw something because no completion with specified id
    -167            throw new IllegalStateException("Completion not registered for " + id);
    -168        }
    -169
    -170        for (Class clazz : classes) {
    -171            defaultCompletions.put(clazz, id);
    -172        }
    -173    }
    -174
    -175    @NotNull
    -176    private static String prepareCompletionId(String id) {
    -177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    -178    }
    -179
    -180    @NotNull
    -181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    -182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    -183        final int argIndex = args.length - 1;
    -184
    -185        String input = args[argIndex];
    -186
    -187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    -188        if (completion == null || "*".equals(completion)) {
    -189            completion = findDefaultCompletion(cmd, args);
    -190        }
    -191
    -192        if (completion == null && completions.length > 0) {
    -193            String last = completions[completions.length - 1];
    -194            if (last.startsWith("repeat@")) {
    -195                completion = last;
    -196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    -197                completion = last;
    -198            }
    -199        }
    -200
    -201        if (completion == null) {
    -202            return Collections.singletonList(input);
    -203        }
    -204
    -205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    -206    }
    -207
    -208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    -209        int i = 0;
    -210        for (CommandParameter param : cmd.parameters) {
    -211            if (param.canConsumeInput() && ++i == args.length) {
    -212                Class type = param.getType();
    -213                while (type != null) {
    -214                    String completion = this.defaultCompletions.get(type);
    -215                    if (completion != null) {
    -216                        return completion;
    -217                    }
    -218                    type = type.getSuperclass();
    -219                }
    -220                if (param.getType().isEnum()) {
    -221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    -222                    //noinspection unchecked
    -223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    -224                    return DEFAULT_ENUM_ID;
    -225                }
    -226                break;
    -227            }
    -228        }
    -229        return null;
    -230    }
    -231
    -232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    -233        if (DEFAULT_ENUM_ID.equals(completion)) {
    -234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    -235            return ctx.enumCompletionValues;
    -236        }
    -237        boolean repeat = completion.startsWith("repeat@");
    -238        if (repeat) {
    -239            completion = completion.substring(6);
    -240        }
    -241        completion = manager.getCommandReplacements().replace(completion);
    -242
    -243        List<String> allCompletions = new ArrayList<>();
    -244        String input = args.length > 0 ? args[args.length - 1] : "";
    -245
    -246        for (String value : ACFPatterns.PIPE.split(completion)) {
    -247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    -248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    -249            if (handler != null) {
    -250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    -251                    ACFUtil.sneaky(new SyncCompletionRequired());
    -252                    return null;
    -253                }
    -254                String config = complete.length == 1 ? null : complete[1];
    -255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    -256
    -257                try {
    -258                    //noinspection unchecked
    -259                    Collection<String> completions = handler.getCompletions(context);
    -260
    -261                    //Handle completions with more than one word:
    -262                    if (!repeat && completions != null
    -263                            && command.parameters[command.parameters.length - 1].consumesRest
    -264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    -265                        String start = String.join(" ", args);
    -266                        completions = completions.stream()
    -267                                .map(s -> {
    -268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    -269                                        String[] completionArgs = s.split(" ");
    -270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    -271                                    } else {
    -272                                        return s;
    -273                                    }
    -274                                }).collect(Collectors.toList());
    -275                    }
    -276
    -277                    if (completions != null) {
    -278                        allCompletions.addAll(completions);
    -279                        continue;
    -280                    }
    -281                    //noinspection ConstantIfStatement,ConstantConditions
    -282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    -283                        throw new CommandCompletionTextLookupException();
    -284                    }
    -285                } catch (CommandCompletionTextLookupException ignored) {
    -286                    // This should only happen if some other feedback error occured.
    -287                } catch (Exception e) {
    -288                    command.handleException(sender, Arrays.asList(args), e);
    -289                }
    -290                // Something went wrong in lookup, fall back to input
    -291                return Collections.singletonList(input);
    -292            } else {
    -293                // Plaintext value
    -294                allCompletions.add(value);
    -295            }
    -296        }
    -297        return allCompletions;
    -298    }
    -299
    -300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    -301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    -302    }
    -303
    -304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    -305    }
    -306
    -307    public static class SyncCompletionRequired extends RuntimeException {
    -308    }
    -309
    -310}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.apachecommonslang.ApacheCommonsLangUtil;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.ArrayList;
    +030import java.util.Arrays;
    +031import java.util.Collection;
    +032import java.util.Collections;
    +033import java.util.HashMap;
    +034import java.util.List;
    +035import java.util.Locale;
    +036import java.util.Map;
    +037import java.util.function.Supplier;
    +038import java.util.stream.Collectors;
    +039import java.util.stream.IntStream;
    +040
    +041
    +042@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})
    +043public class CommandCompletions<C extends CommandCompletionContext> {
    +044    private static final String DEFAULT_ENUM_ID = "@__defaultenum__";
    +045    private final CommandManager manager;
    +046    // TODO: use a CompletionProvider that can return a delegated Id or provide values such as enum support
    +047    private Map<String, CommandCompletionHandler> completionMap = new HashMap<>();
    +048    private Map<Class, String> defaultCompletions = new HashMap<>();
    +049
    +050    public CommandCompletions(CommandManager manager) {
    +051        this.manager = manager;
    +052        registerStaticCompletion("empty", Collections.emptyList());
    +053        registerStaticCompletion("nothing", Collections.emptyList());
    +054        registerStaticCompletion("timeunits", Arrays.asList("minutes", "hours", "days", "weeks", "months", "years"));
    +055        registerAsyncCompletion("range", (c) -> {
    +056            String config = c.getConfig();
    +057            if (config == null) {
    +058                return Collections.emptyList();
    +059            }
    +060            final String[] ranges = ACFPatterns.DASH.split(config);
    +061            int start;
    +062            int end;
    +063            if (ranges.length != 2) {
    +064                start = 0;
    +065                end = ACFUtil.parseInt(ranges[0], 0);
    +066            } else {
    +067                start = ACFUtil.parseInt(ranges[0], 0);
    +068                end = ACFUtil.parseInt(ranges[1], 0);
    +069            }
    +070            return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());
    +071        });
    +072    }
    +073
    +074    /**
    +075     * Registr a completion handler to provide command completions based on the user input.
    +076     *
    +077     * @param id
    +078     * @param handler
    +079     * @return
    +080     */
    +081    public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler<C> handler) {
    +082        return this.completionMap.put(prepareCompletionId(id), handler);
    +083    }
    +084
    +085    /**
    +086     * Registr a completion handler to provide command completions based on the user input.
    +087     * This handler is declared to be safe to be executed asynchronously.
    +088     * <p>
    +089     * Not all platforms support this, so if the platform does not support asynchronous execution,
    +090     * your handler will be executed on the main thread.
    +091     * <p>
    +092     * Use this anytime your handler does not need to access state that is not considered thread safe.
    +093     * <p>
    +094     * Use context.isAsync() to determine if you are async or not.
    +095     *
    +096     * @param id
    +097     * @param handler
    +098     * @return
    +099     */
    +100    public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler<C> handler) {
    +101        return this.completionMap.put(prepareCompletionId(id), handler);
    +102    }
    +103
    +104    /**
    +105     * Register a static list of command completions that will never change.
    +106     * Like @CommandCompletion, values are | (PIPE) separated.
    +107     * <p>
    +108     * Example: foo|bar|baz
    +109     *
    +110     * @param id
    +111     * @param list
    +112     * @return
    +113     */
    +114    public CommandCompletionHandler registerStaticCompletion(String id, String list) {
    +115        return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));
    +116    }
    +117
    +118    /**
    +119     * Register a static list of command completions that will never change
    +120     *
    +121     * @param id
    +122     * @param completions
    +123     * @return
    +124     */
    +125    public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {
    +126        return registerStaticCompletion(id, Arrays.asList(completions));
    +127    }
    +128
    +129    /**
    +130     * Register a static list of command completions that will never change. The list is obtained from the supplier
    +131     * immediately as part of this method call.
    +132     *
    +133     * @param id
    +134     * @param supplier
    +135     * @return
    +136     */
    +137    public CommandCompletionHandler registerStaticCompletion(String id, Supplier<Collection<String>> supplier) {
    +138        return registerStaticCompletion(id, supplier.get());
    +139    }
    +140
    +141    /**
    +142     * Register a static list of command completions that will never change
    +143     *
    +144     * @param id
    +145     * @param completions
    +146     * @return
    +147     */
    +148    public CommandCompletionHandler registerStaticCompletion(String id, Collection<String> completions) {
    +149        return registerAsyncCompletion(id, x -> completions);
    +150    }
    +151
    +152    /**
    +153     * Registers a completion handler such as @players to default apply to all command parameters of the specified types
    +154     * <p>
    +155     * This enables automatic completion support for parameters without manually defining it for custom objects
    +156     *
    +157     * @param id
    +158     * @param classes
    +159     */
    +160    public void setDefaultCompletion(String id, Class... classes) {
    +161        // get completion with specified id
    +162        id = prepareCompletionId(id);
    +163        CommandCompletionHandler completion = completionMap.get(id);
    +164
    +165        if (completion == null) {
    +166            // Throw something because no completion with specified id
    +167            throw new IllegalStateException("Completion not registered for " + id);
    +168        }
    +169
    +170        for (Class clazz : classes) {
    +171            defaultCompletions.put(clazz, id);
    +172        }
    +173    }
    +174
    +175    @NotNull
    +176    private static String prepareCompletionId(String id) {
    +177        return (id.startsWith("@") ? "" : "@") + id.toLowerCase(Locale.ENGLISH);
    +178    }
    +179
    +180    @NotNull
    +181    List<String> of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {
    +182        String[] completions = ACFPatterns.SPACE.split(cmd.complete);
    +183        final int argIndex = args.length - 1;
    +184
    +185        String input = args[argIndex];
    +186
    +187        String completion = argIndex < completions.length ? completions[argIndex] : null;
    +188        if (completion == null || completion.isEmpty() || "*".equals(completion)) {
    +189            completion = findDefaultCompletion(cmd, args);
    +190        }
    +191
    +192        if (completion == null && completions.length > 0) {
    +193            String last = completions[completions.length - 1];
    +194            if (last.startsWith("repeat@")) {
    +195                completion = last;
    +196            } else if (argIndex >= completions.length && cmd.parameters[cmd.parameters.length - 1].consumesRest) {
    +197                completion = last;
    +198            }
    +199        }
    +200
    +201        if (completion == null) {
    +202            return Collections.singletonList(input);
    +203        }
    +204
    +205        return getCompletionValues(cmd, sender, completion, args, isAsync);
    +206    }
    +207
    +208    String findDefaultCompletion(RegisteredCommand cmd, String[] args) {
    +209        int i = 0;
    +210        for (CommandParameter param : cmd.parameters) {
    +211            if (param.canConsumeInput() && ++i == args.length) {
    +212                Class type = param.getType();
    +213                while (type != null) {
    +214                    String completion = this.defaultCompletions.get(type);
    +215                    if (completion != null) {
    +216                        return completion;
    +217                    }
    +218                    type = type.getSuperclass();
    +219                }
    +220                if (param.getType().isEnum()) {
    +221                    CommandOperationContext ctx = CommandManager.getCurrentCommandOperationContext();
    +222                    //noinspection unchecked
    +223                    ctx.enumCompletionValues = ACFUtil.enumNames((Class<? extends Enum<?>>) param.getType());
    +224                    return DEFAULT_ENUM_ID;
    +225                }
    +226                break;
    +227            }
    +228        }
    +229        return null;
    +230    }
    +231
    +232    List<String> getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {
    +233        if (DEFAULT_ENUM_ID.equals(completion)) {
    +234            CommandOperationContext<?> ctx = CommandManager.getCurrentCommandOperationContext();
    +235            return ctx.enumCompletionValues;
    +236        }
    +237        boolean repeat = completion.startsWith("repeat@");
    +238        if (repeat) {
    +239            completion = completion.substring(6);
    +240        }
    +241        completion = manager.getCommandReplacements().replace(completion);
    +242
    +243        List<String> allCompletions = new ArrayList<>();
    +244        String input = args.length > 0 ? args[args.length - 1] : "";
    +245
    +246        for (String value : ACFPatterns.PIPE.split(completion)) {
    +247            String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);
    +248            CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase(Locale.ENGLISH));
    +249            if (handler != null) {
    +250                if (isAsync && !(handler instanceof AsyncCommandCompletionHandler)) {
    +251                    ACFUtil.sneaky(new SyncCompletionRequired());
    +252                    return null;
    +253                }
    +254                String config = complete.length == 1 ? null : complete[1];
    +255                CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);
    +256
    +257                try {
    +258                    //noinspection unchecked
    +259                    Collection<String> completions = handler.getCompletions(context);
    +260
    +261                    //Handle completions with more than one word:
    +262                    if (!repeat && completions != null
    +263                            && command.parameters[command.parameters.length - 1].consumesRest
    +264                            && args.length > ACFPatterns.SPACE.split(command.complete).length) {
    +265                        String start = String.join(" ", args);
    +266                        completions = completions.stream()
    +267                                .map(s -> {
    +268                                    if (s != null && s.split(" ").length >= args.length && ApacheCommonsLangUtil.startsWithIgnoreCase(s, start)) {
    +269                                        String[] completionArgs = s.split(" ");
    +270                                        return String.join(" ", Arrays.copyOfRange(completionArgs, args.length - 1, completionArgs.length));
    +271                                    } else {
    +272                                        return s;
    +273                                    }
    +274                                }).collect(Collectors.toList());
    +275                    }
    +276
    +277                    if (completions != null) {
    +278                        allCompletions.addAll(completions);
    +279                        continue;
    +280                    }
    +281                    //noinspection ConstantIfStatement,ConstantConditions
    +282                    if (false) { // Hack to fool compiler. since its sneakily thrown.
    +283                        throw new CommandCompletionTextLookupException();
    +284                    }
    +285                } catch (CommandCompletionTextLookupException ignored) {
    +286                    // This should only happen if some other feedback error occured.
    +287                } catch (Exception e) {
    +288                    command.handleException(sender, Arrays.asList(args), e);
    +289                }
    +290                // Something went wrong in lookup, fall back to input
    +291                return Collections.singletonList(input);
    +292            } else {
    +293                // Plaintext value
    +294                allCompletions.add(value);
    +295            }
    +296        }
    +297        return allCompletions;
    +298    }
    +299
    +300    public interface CommandCompletionHandler<C extends CommandCompletionContext> {
    +301        Collection<String> getCompletions(C context) throws InvalidCommandArgument;
    +302    }
    +303
    +304    public interface AsyncCommandCompletionHandler<C extends CommandCompletionContext> extends CommandCompletionHandler<C> {
    +305    }
    +306
    +307    public static class SyncCompletionRequired extends RuntimeException {
    +308    }
    +309
    +310}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.Condition.html b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.Condition.html
    index 8cb7fa23..f2df9cb7 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.Condition.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.Condition.html
    @@ -1,151 +1,155 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.util.Table;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.HashMap;
    -030import java.util.Locale;
    -031import java.util.Map;
    -032
    -033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    -034public class CommandConditions <
    -035        I extends CommandIssuer,
    -036        CEC extends CommandExecutionContext<CEC, I>,
    -037        CC extends ConditionContext<I>
    -038    > {
    -039    private CommandManager manager;
    -040    private Map<String, Condition<I>> conditions = new HashMap<>();
    -041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    -042
    -043    CommandConditions(CommandManager manager) {
    -044        this.manager = manager;
    -045    }
    -046
    -047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    -048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    -049    }
    -050
    -051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    -052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    -053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    -054    }
    -055
    -056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    -057        RegisteredCommand cmd = context.getRegisteredCommand();
    -058
    -059        validateConditions(cmd.conditions, context);
    -060        validateConditions(cmd.scope, context);
    -061    }
    -062
    -063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    -064        validateConditions(scope.conditions, operationContext);
    -065
    -066        if (scope.parentCommand != null) {
    -067            validateConditions(scope.parentCommand, operationContext);
    -068        }
    -069    }
    -070
    -071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    -072        if (conditions == null) {
    -073            return;
    -074        }
    -075
    -076        conditions = this.manager.getCommandReplacements().replace(conditions);
    -077        CommandIssuer issuer = context.getCommandIssuer();
    -078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -079            String[] split = ACFPatterns.COLON.split(cond, 2);
    -080            String id = split[0].toLowerCase(Locale.ENGLISH);
    -081            Condition<I> condition = this.conditions.get(id);
    -082            if (condition == null) {
    -083                RegisteredCommand cmd = context.getRegisteredCommand();
    -084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    -085                continue;
    -086            }
    -087
    -088            String config = split.length == 2 ? split[1] : null;
    -089            //noinspection unchecked
    -090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -091            //noinspection unchecked
    -092            condition.validateCondition(conditionContext);
    -093        }
    -094    }
    -095
    -096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    -097        String conditions = execContext.getCommandParameter().getConditions();
    -098        if (conditions == null) {
    -099            return;
    -100        }
    -101        conditions = this.manager.getCommandReplacements().replace(conditions);
    -102        I issuer = execContext.getIssuer();
    -103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -104            String[] split = ACFPatterns.COLON.split(cond, 2);
    -105            ParameterCondition condition;
    -106            Class<?> cls = execContext.getParam().getType();
    -107            String id = split[0].toLowerCase(Locale.ENGLISH);
    -108            do {
    -109                condition = this.paramConditions.get(cls, id);
    -110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    -111                    cls = cls.getSuperclass();
    -112                } else {
    -113                    break;
    -114                }
    -115            } while (cls != null);
    -116
    -117
    -118            if (condition == null) {
    -119                RegisteredCommand cmd = execContext.getCmd();
    -120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    -121                continue;
    -122            }
    -123            String config = split.length == 2 ? split[1] : null;
    -124            //noinspection unchecked
    -125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -126
    -127            //noinspection unchecked
    -128            condition.validateCondition(conditionContext, execContext, value);
    -129        }
    -130    }
    -131
    -132    public interface Condition <I extends CommandIssuer> {
    -133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    -134    }
    -135
    -136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    -137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    -138    }
    -139}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.util.Table;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.HashMap;
    +030import java.util.Locale;
    +031import java.util.Map;
    +032
    +033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    +034public class CommandConditions <
    +035        I extends CommandIssuer,
    +036        CEC extends CommandExecutionContext<CEC, I>,
    +037        CC extends ConditionContext<I>
    +038    > {
    +039    private CommandManager manager;
    +040    private Map<String, Condition<I>> conditions = new HashMap<>();
    +041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    +042
    +043    CommandConditions(CommandManager manager) {
    +044        this.manager = manager;
    +045    }
    +046
    +047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    +048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    +049    }
    +050
    +051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    +052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    +053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    +054    }
    +055
    +056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    +057        RegisteredCommand cmd = context.getRegisteredCommand();
    +058
    +059        validateConditions(cmd.conditions, context);
    +060        validateConditions(cmd.scope, context);
    +061    }
    +062
    +063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    +064        validateConditions(scope.conditions, operationContext);
    +065
    +066        if (scope.parentCommand != null) {
    +067            validateConditions(scope.parentCommand, operationContext);
    +068        }
    +069    }
    +070
    +071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    +072        if (conditions == null) {
    +073            return;
    +074        }
    +075
    +076        conditions = this.manager.getCommandReplacements().replace(conditions);
    +077        CommandIssuer issuer = context.getCommandIssuer();
    +078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +079            String[] split = ACFPatterns.COLON.split(cond, 2);
    +080            String id = split[0].toLowerCase(Locale.ENGLISH);
    +081            Condition<I> condition = this.conditions.get(id);
    +082            if (condition == null) {
    +083                RegisteredCommand cmd = context.getRegisteredCommand();
    +084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    +085                continue;
    +086            }
    +087
    +088            String config = split.length == 2 ? split[1] : null;
    +089            //noinspection unchecked
    +090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +091            //noinspection unchecked
    +092            condition.validateCondition(conditionContext);
    +093        }
    +094    }
    +095
    +096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    +097        String conditions = execContext.getCommandParameter().getConditions();
    +098        if (conditions == null) {
    +099            return;
    +100        }
    +101        conditions = this.manager.getCommandReplacements().replace(conditions);
    +102        I issuer = execContext.getIssuer();
    +103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +104            String[] split = ACFPatterns.COLON.split(cond, 2);
    +105            ParameterCondition condition;
    +106            Class<?> cls = execContext.getParam().getType();
    +107            String id = split[0].toLowerCase(Locale.ENGLISH);
    +108            do {
    +109                condition = this.paramConditions.get(cls, id);
    +110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    +111                    cls = cls.getSuperclass();
    +112                } else {
    +113                    break;
    +114                }
    +115            } while (cls != null);
    +116
    +117
    +118            if (condition == null) {
    +119                RegisteredCommand cmd = execContext.getCmd();
    +120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    +121                continue;
    +122            }
    +123            String config = split.length == 2 ? split[1] : null;
    +124            //noinspection unchecked
    +125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +126
    +127            //noinspection unchecked
    +128            condition.validateCondition(conditionContext, execContext, value);
    +129        }
    +130    }
    +131
    +132    public interface Condition <I extends CommandIssuer> {
    +133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    +134    }
    +135
    +136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    +137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    +138    }
    +139}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.ParameterCondition.html b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.ParameterCondition.html
    index 8cb7fa23..eb792d6b 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.ParameterCondition.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.ParameterCondition.html
    @@ -1,151 +1,155 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.util.Table;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.HashMap;
    -030import java.util.Locale;
    -031import java.util.Map;
    -032
    -033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    -034public class CommandConditions <
    -035        I extends CommandIssuer,
    -036        CEC extends CommandExecutionContext<CEC, I>,
    -037        CC extends ConditionContext<I>
    -038    > {
    -039    private CommandManager manager;
    -040    private Map<String, Condition<I>> conditions = new HashMap<>();
    -041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    -042
    -043    CommandConditions(CommandManager manager) {
    -044        this.manager = manager;
    -045    }
    -046
    -047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    -048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    -049    }
    -050
    -051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    -052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    -053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    -054    }
    -055
    -056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    -057        RegisteredCommand cmd = context.getRegisteredCommand();
    -058
    -059        validateConditions(cmd.conditions, context);
    -060        validateConditions(cmd.scope, context);
    -061    }
    -062
    -063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    -064        validateConditions(scope.conditions, operationContext);
    -065
    -066        if (scope.parentCommand != null) {
    -067            validateConditions(scope.parentCommand, operationContext);
    -068        }
    -069    }
    -070
    -071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    -072        if (conditions == null) {
    -073            return;
    -074        }
    -075
    -076        conditions = this.manager.getCommandReplacements().replace(conditions);
    -077        CommandIssuer issuer = context.getCommandIssuer();
    -078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -079            String[] split = ACFPatterns.COLON.split(cond, 2);
    -080            String id = split[0].toLowerCase(Locale.ENGLISH);
    -081            Condition<I> condition = this.conditions.get(id);
    -082            if (condition == null) {
    -083                RegisteredCommand cmd = context.getRegisteredCommand();
    -084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    -085                continue;
    -086            }
    -087
    -088            String config = split.length == 2 ? split[1] : null;
    -089            //noinspection unchecked
    -090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -091            //noinspection unchecked
    -092            condition.validateCondition(conditionContext);
    -093        }
    -094    }
    -095
    -096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    -097        String conditions = execContext.getCommandParameter().getConditions();
    -098        if (conditions == null) {
    -099            return;
    -100        }
    -101        conditions = this.manager.getCommandReplacements().replace(conditions);
    -102        I issuer = execContext.getIssuer();
    -103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -104            String[] split = ACFPatterns.COLON.split(cond, 2);
    -105            ParameterCondition condition;
    -106            Class<?> cls = execContext.getParam().getType();
    -107            String id = split[0].toLowerCase(Locale.ENGLISH);
    -108            do {
    -109                condition = this.paramConditions.get(cls, id);
    -110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    -111                    cls = cls.getSuperclass();
    -112                } else {
    -113                    break;
    -114                }
    -115            } while (cls != null);
    -116
    -117
    -118            if (condition == null) {
    -119                RegisteredCommand cmd = execContext.getCmd();
    -120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    -121                continue;
    -122            }
    -123            String config = split.length == 2 ? split[1] : null;
    -124            //noinspection unchecked
    -125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -126
    -127            //noinspection unchecked
    -128            condition.validateCondition(conditionContext, execContext, value);
    -129        }
    -130    }
    -131
    -132    public interface Condition <I extends CommandIssuer> {
    -133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    -134    }
    -135
    -136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    -137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    -138    }
    -139}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.util.Table;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.HashMap;
    +030import java.util.Locale;
    +031import java.util.Map;
    +032
    +033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    +034public class CommandConditions <
    +035        I extends CommandIssuer,
    +036        CEC extends CommandExecutionContext<CEC, I>,
    +037        CC extends ConditionContext<I>
    +038    > {
    +039    private CommandManager manager;
    +040    private Map<String, Condition<I>> conditions = new HashMap<>();
    +041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    +042
    +043    CommandConditions(CommandManager manager) {
    +044        this.manager = manager;
    +045    }
    +046
    +047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    +048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    +049    }
    +050
    +051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    +052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    +053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    +054    }
    +055
    +056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    +057        RegisteredCommand cmd = context.getRegisteredCommand();
    +058
    +059        validateConditions(cmd.conditions, context);
    +060        validateConditions(cmd.scope, context);
    +061    }
    +062
    +063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    +064        validateConditions(scope.conditions, operationContext);
    +065
    +066        if (scope.parentCommand != null) {
    +067            validateConditions(scope.parentCommand, operationContext);
    +068        }
    +069    }
    +070
    +071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    +072        if (conditions == null) {
    +073            return;
    +074        }
    +075
    +076        conditions = this.manager.getCommandReplacements().replace(conditions);
    +077        CommandIssuer issuer = context.getCommandIssuer();
    +078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +079            String[] split = ACFPatterns.COLON.split(cond, 2);
    +080            String id = split[0].toLowerCase(Locale.ENGLISH);
    +081            Condition<I> condition = this.conditions.get(id);
    +082            if (condition == null) {
    +083                RegisteredCommand cmd = context.getRegisteredCommand();
    +084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    +085                continue;
    +086            }
    +087
    +088            String config = split.length == 2 ? split[1] : null;
    +089            //noinspection unchecked
    +090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +091            //noinspection unchecked
    +092            condition.validateCondition(conditionContext);
    +093        }
    +094    }
    +095
    +096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    +097        String conditions = execContext.getCommandParameter().getConditions();
    +098        if (conditions == null) {
    +099            return;
    +100        }
    +101        conditions = this.manager.getCommandReplacements().replace(conditions);
    +102        I issuer = execContext.getIssuer();
    +103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +104            String[] split = ACFPatterns.COLON.split(cond, 2);
    +105            ParameterCondition condition;
    +106            Class<?> cls = execContext.getParam().getType();
    +107            String id = split[0].toLowerCase(Locale.ENGLISH);
    +108            do {
    +109                condition = this.paramConditions.get(cls, id);
    +110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    +111                    cls = cls.getSuperclass();
    +112                } else {
    +113                    break;
    +114                }
    +115            } while (cls != null);
    +116
    +117
    +118            if (condition == null) {
    +119                RegisteredCommand cmd = execContext.getCmd();
    +120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    +121                continue;
    +122            }
    +123            String config = split.length == 2 ? split[1] : null;
    +124            //noinspection unchecked
    +125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +126
    +127            //noinspection unchecked
    +128            condition.validateCondition(conditionContext, execContext, value);
    +129        }
    +130    }
    +131
    +132    public interface Condition <I extends CommandIssuer> {
    +133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    +134    }
    +135
    +136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    +137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    +138    }
    +139}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.html b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.html
    index 8cb7fa23..5e0851f9 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandConditions.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandConditions.html
    @@ -1,151 +1,155 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.util.Table;
    -027import org.jetbrains.annotations.NotNull;
    -028
    -029import java.util.HashMap;
    -030import java.util.Locale;
    -031import java.util.Map;
    -032
    -033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    -034public class CommandConditions <
    -035        I extends CommandIssuer,
    -036        CEC extends CommandExecutionContext<CEC, I>,
    -037        CC extends ConditionContext<I>
    -038    > {
    -039    private CommandManager manager;
    -040    private Map<String, Condition<I>> conditions = new HashMap<>();
    -041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    -042
    -043    CommandConditions(CommandManager manager) {
    -044        this.manager = manager;
    -045    }
    -046
    -047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    -048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    -049    }
    -050
    -051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    -052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    -053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    -054    }
    -055
    -056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    -057        RegisteredCommand cmd = context.getRegisteredCommand();
    -058
    -059        validateConditions(cmd.conditions, context);
    -060        validateConditions(cmd.scope, context);
    -061    }
    -062
    -063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    -064        validateConditions(scope.conditions, operationContext);
    -065
    -066        if (scope.parentCommand != null) {
    -067            validateConditions(scope.parentCommand, operationContext);
    -068        }
    -069    }
    -070
    -071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    -072        if (conditions == null) {
    -073            return;
    -074        }
    -075
    -076        conditions = this.manager.getCommandReplacements().replace(conditions);
    -077        CommandIssuer issuer = context.getCommandIssuer();
    -078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -079            String[] split = ACFPatterns.COLON.split(cond, 2);
    -080            String id = split[0].toLowerCase(Locale.ENGLISH);
    -081            Condition<I> condition = this.conditions.get(id);
    -082            if (condition == null) {
    -083                RegisteredCommand cmd = context.getRegisteredCommand();
    -084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    -085                continue;
    -086            }
    -087
    -088            String config = split.length == 2 ? split[1] : null;
    -089            //noinspection unchecked
    -090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -091            //noinspection unchecked
    -092            condition.validateCondition(conditionContext);
    -093        }
    -094    }
    -095
    -096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    -097        String conditions = execContext.getCommandParameter().getConditions();
    -098        if (conditions == null) {
    -099            return;
    -100        }
    -101        conditions = this.manager.getCommandReplacements().replace(conditions);
    -102        I issuer = execContext.getIssuer();
    -103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    -104            String[] split = ACFPatterns.COLON.split(cond, 2);
    -105            ParameterCondition condition;
    -106            Class<?> cls = execContext.getParam().getType();
    -107            String id = split[0].toLowerCase(Locale.ENGLISH);
    -108            do {
    -109                condition = this.paramConditions.get(cls, id);
    -110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    -111                    cls = cls.getSuperclass();
    -112                } else {
    -113                    break;
    -114                }
    -115            } while (cls != null);
    -116
    -117
    -118            if (condition == null) {
    -119                RegisteredCommand cmd = execContext.getCmd();
    -120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    -121                continue;
    -122            }
    -123            String config = split.length == 2 ? split[1] : null;
    -124            //noinspection unchecked
    -125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    -126
    -127            //noinspection unchecked
    -128            condition.validateCondition(conditionContext, execContext, value);
    -129        }
    -130    }
    -131
    -132    public interface Condition <I extends CommandIssuer> {
    -133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    -134    }
    -135
    -136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    -137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    -138    }
    -139}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.util.Table;
    +027import org.jetbrains.annotations.NotNull;
    +028
    +029import java.util.HashMap;
    +030import java.util.Locale;
    +031import java.util.Map;
    +032
    +033@SuppressWarnings("BooleanMethodIsAlwaysInverted") // No IDEA, you are wrong
    +034public class CommandConditions <
    +035        I extends CommandIssuer,
    +036        CEC extends CommandExecutionContext<CEC, I>,
    +037        CC extends ConditionContext<I>
    +038    > {
    +039    private CommandManager manager;
    +040    private Map<String, Condition<I>> conditions = new HashMap<>();
    +041    private Table<Class<?>, String, ParameterCondition<?, ?, ?>> paramConditions = new Table<>();
    +042
    +043    CommandConditions(CommandManager manager) {
    +044        this.manager = manager;
    +045    }
    +046
    +047    public Condition<I> addCondition(@NotNull String id, @NotNull Condition<I> handler) {
    +048        return this.conditions.put(id.toLowerCase(Locale.ENGLISH), handler);
    +049    }
    +050
    +051    public <P> ParameterCondition addCondition(Class<P> clazz, @NotNull String id,
    +052                                               @NotNull ParameterCondition<P, CEC, I> handler) {
    +053        return this.paramConditions.put(clazz, id.toLowerCase(Locale.ENGLISH), handler);
    +054    }
    +055
    +056    void validateConditions(CommandOperationContext context) throws InvalidCommandArgument {
    +057        RegisteredCommand cmd = context.getRegisteredCommand();
    +058
    +059        validateConditions(cmd.conditions, context);
    +060        validateConditions(cmd.scope, context);
    +061    }
    +062
    +063    private void validateConditions(BaseCommand scope, CommandOperationContext operationContext) throws InvalidCommandArgument {
    +064        validateConditions(scope.conditions, operationContext);
    +065
    +066        if (scope.parentCommand != null) {
    +067            validateConditions(scope.parentCommand, operationContext);
    +068        }
    +069    }
    +070
    +071    private void validateConditions(String conditions, CommandOperationContext context) throws InvalidCommandArgument {
    +072        if (conditions == null) {
    +073            return;
    +074        }
    +075
    +076        conditions = this.manager.getCommandReplacements().replace(conditions);
    +077        CommandIssuer issuer = context.getCommandIssuer();
    +078        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +079            String[] split = ACFPatterns.COLON.split(cond, 2);
    +080            String id = split[0].toLowerCase(Locale.ENGLISH);
    +081            Condition<I> condition = this.conditions.get(id);
    +082            if (condition == null) {
    +083                RegisteredCommand cmd = context.getRegisteredCommand();
    +084                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName());
    +085                continue;
    +086            }
    +087
    +088            String config = split.length == 2 ? split[1] : null;
    +089            //noinspection unchecked
    +090            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +091            //noinspection unchecked
    +092            condition.validateCondition(conditionContext);
    +093        }
    +094    }
    +095
    +096    void validateConditions(CEC execContext, Object value) throws InvalidCommandArgument {
    +097        String conditions = execContext.getCommandParameter().getConditions();
    +098        if (conditions == null) {
    +099            return;
    +100        }
    +101        conditions = this.manager.getCommandReplacements().replace(conditions);
    +102        I issuer = execContext.getIssuer();
    +103        for (String cond : ACFPatterns.PIPE.split(conditions)) {
    +104            String[] split = ACFPatterns.COLON.split(cond, 2);
    +105            ParameterCondition condition;
    +106            Class<?> cls = execContext.getParam().getType();
    +107            String id = split[0].toLowerCase(Locale.ENGLISH);
    +108            do {
    +109                condition = this.paramConditions.get(cls, id);
    +110                if (condition == null && cls.getSuperclass() != null && cls.getSuperclass() != Object.class) {
    +111                    cls = cls.getSuperclass();
    +112                } else {
    +113                    break;
    +114                }
    +115            } while (cls != null);
    +116
    +117
    +118            if (condition == null) {
    +119                RegisteredCommand cmd = execContext.getCmd();
    +120                this.manager.log(LogLevel.ERROR, "Could not find command condition " + id + " for " + cmd.method.getName() + "::" +execContext.getParam().getName());
    +121                continue;
    +122            }
    +123            String config = split.length == 2 ? split[1] : null;
    +124            //noinspection unchecked
    +125            CC conditionContext = (CC) this.manager.createConditionContext(issuer, config);
    +126
    +127            //noinspection unchecked
    +128            condition.validateCondition(conditionContext, execContext, value);
    +129        }
    +130    }
    +131
    +132    public interface Condition <I extends CommandIssuer> {
    +133        void validateCondition(ConditionContext<I> context) throws InvalidCommandArgument;
    +134    }
    +135
    +136    public interface ParameterCondition <P, CEC extends CommandExecutionContext, I extends CommandIssuer> {
    +137        void validateCondition(ConditionContext<I> context, CEC execContext, P value) throws InvalidCommandArgument;
    +138    }
    +139}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandContexts.html b/docs/acf-core/src-html/co/aikar/commands/CommandContexts.html
    index 22faa5b7..f283db5a 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandContexts.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandContexts.html
    @@ -1,366 +1,370 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.annotation.Single;
    -027import co.aikar.commands.annotation.Split;
    -028import co.aikar.commands.annotation.Values;
    -029import co.aikar.commands.contexts.ContextResolver;
    -030import co.aikar.commands.contexts.IssuerAwareContextResolver;
    -031import co.aikar.commands.contexts.IssuerOnlyContextResolver;
    -032import co.aikar.commands.contexts.OptionalContextResolver;
    -033import org.jetbrains.annotations.NotNull;
    -034
    -035import java.math.BigDecimal;
    -036import java.math.BigInteger;
    -037import java.util.HashMap;
    -038import java.util.List;
    -039import java.util.Map;
    -040
    -041@SuppressWarnings("WeakerAccess")
    -042public class CommandContexts<R extends CommandExecutionContext<?, ? extends CommandIssuer>> {
    -043    protected final Map<Class<?>, ContextResolver<?, R>> contextMap = new HashMap<>();
    -044    protected final CommandManager manager;
    -045
    -046    CommandContexts(CommandManager manager) {
    -047        this.manager = manager;
    -048        registerIssuerOnlyContext(CommandIssuer.class, c -> c.getIssuer());
    -049        registerContext(Short.class, (c) -> {
    -050            String number = c.popFirstArg();
    -051            try {
    -052                return parseAndValidateNumber(number, c, Short.MIN_VALUE, Short.MAX_VALUE).shortValue();
    -053            } catch (NumberFormatException e) {
    -054                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -055            }
    -056        });
    -057        registerContext(short.class, (c) -> {
    -058            String number = c.popFirstArg();
    -059            try {
    -060                return parseAndValidateNumber(number, c, Short.MIN_VALUE, Short.MAX_VALUE).shortValue();
    -061            } catch (NumberFormatException e) {
    -062                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -063            }
    -064        });
    -065        registerContext(Integer.class, (c) -> {
    -066            String number = c.popFirstArg();
    -067            try {
    -068                return parseAndValidateNumber(number, c, Integer.MIN_VALUE, Integer.MAX_VALUE).intValue();
    -069            } catch (NumberFormatException e) {
    -070                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -071            }
    -072        });
    -073        registerContext(int.class, (c) -> {
    -074            String number = c.popFirstArg();
    -075            try {
    -076                return parseAndValidateNumber(number, c, Integer.MIN_VALUE, Integer.MAX_VALUE).intValue();
    -077            } catch (NumberFormatException e) {
    -078                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -079            }
    -080        });
    -081        registerContext(Long.class, (c) -> {
    -082            String number = c.popFirstArg();
    -083            try {
    -084                return parseAndValidateNumber(number, c, Long.MIN_VALUE, Long.MAX_VALUE).longValue();
    -085            } catch (NumberFormatException e) {
    -086                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -087            }
    -088        });
    -089        registerContext(long.class, (c) -> {
    -090            String number = c.popFirstArg();
    -091            try {
    -092                return parseAndValidateNumber(number, c, Long.MIN_VALUE, Long.MAX_VALUE).longValue();
    -093            } catch (NumberFormatException e) {
    -094                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -095            }
    -096        });
    -097        registerContext(Float.class, (c) -> {
    -098            String number = c.popFirstArg();
    -099            try {
    -100                return parseAndValidateNumber(number, c, -Float.MAX_VALUE, Float.MAX_VALUE).floatValue();
    -101            } catch (NumberFormatException e) {
    -102                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -103            }
    -104        });
    -105        registerContext(float.class, (c) -> {
    -106            String number = c.popFirstArg();
    -107            try {
    -108                return parseAndValidateNumber(number, c, -Float.MAX_VALUE, Float.MAX_VALUE).floatValue();
    -109            } catch (NumberFormatException e) {
    -110                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -111            }
    -112        });
    -113        registerContext(Double.class, (c) -> {
    -114            String number = c.popFirstArg();
    -115            try {
    -116                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE).doubleValue();
    -117            } catch (NumberFormatException e) {
    -118                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -119            }
    -120        });
    -121        registerContext(double.class, (c) -> {
    -122            String number = c.popFirstArg();
    -123            try {
    -124                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE).doubleValue();
    -125            } catch (NumberFormatException e) {
    -126                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -127            }
    -128        });
    -129        registerContext(Number.class, (c) -> {
    -130            String number = c.popFirstArg();
    -131            try {
    -132                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE);
    -133            } catch (NumberFormatException e) {
    -134                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    -135            }
    -136        });
    -137        registerContext(BigDecimal.class, (c) -> {
    -138            String numberStr = c.popFirstArg();
    -139            try {
    -140                BigDecimal number = ACFUtil.parseBigNumber(numberStr, c.hasFlag("suffixes"));
    -141                validateMinMax(c, number);
    -142                return number;
    -143            } catch (NumberFormatException e) {
    -144                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", numberStr);
    -145            }
    -146        });
    -147        registerContext(BigInteger.class, (c) -> {
    -148            String numberStr = c.popFirstArg();
    -149            try {
    -150                BigDecimal number = ACFUtil.parseBigNumber(numberStr, c.hasFlag("suffixes"));
    -151                validateMinMax(c, number);
    -152                return number.toBigIntegerExact();
    -153            } catch (NumberFormatException e) {
    -154                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", numberStr);
    -155            }
    -156        });
    -157        registerContext(Boolean.class, (c) -> ACFUtil.isTruthy(c.popFirstArg()));
    -158        registerContext(boolean.class, (c) -> ACFUtil.isTruthy(c.popFirstArg()));
    -159        registerContext(char.class, c -> {
    -160            String s = c.popFirstArg();
    -161            if (s.length() > 1) {
    -162                throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(1));
    -163            }
    -164            return s.charAt(0);
    -165        });
    -166        registerContext(String.class, (c) -> {
    -167            // This will fail fast, its either in the values or its not
    -168            if (c.hasAnnotation(Values.class)) {
    -169                return c.popFirstArg();
    -170            }
    -171            String ret = (c.isLastArg() && !c.hasAnnotation(Single.class)) ?
    -172                    ACFUtil.join(c.getArgs())
    -173                    :
    -174                    c.popFirstArg();
    -175
    -176            Integer minLen = c.getFlagValue("minlen", (Integer) null);
    -177            Integer maxLen = c.getFlagValue("maxlen", (Integer) null);
    -178            if (minLen != null) {
    -179                if (ret.length() < minLen) {
    -180                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_MIN_LENGTH, "{min}", String.valueOf(minLen));
    -181                }
    -182            }
    -183            if (maxLen != null) {
    -184                if (ret.length() > maxLen) {
    -185                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(maxLen));
    -186                }
    -187            }
    -188
    -189            return ret;
    -190        });
    -191        registerContext(String[].class, (c) -> {
    -192            String val;
    -193            List<String> args = c.getArgs();
    -194            if (c.isLastArg() && !c.hasAnnotation(Single.class)) {
    -195                val = ACFUtil.join(args);
    -196            } else {
    -197                val = c.popFirstArg();
    -198            }
    -199            String split = c.getAnnotationValue(Split.class, Annotations.NOTHING | Annotations.NO_EMPTY);
    -200            if (split != null) {
    -201                if (val.isEmpty()) {
    -202                    throw new InvalidCommandArgument();
    -203                }
    -204                return ACFPatterns.getPattern(split).split(val);
    -205            } else if (!c.isLastArg()) {
    -206                ACFUtil.sneaky(new IllegalStateException("Weird Command signature... String[] should be last or @Split"));
    -207            }
    -208
    -209            String[] result = args.toArray(new String[0]);
    -210            args.clear();
    -211            return result;
    -212        });
    -213
    -214        registerContext(Enum.class, (c) -> {
    -215            final String first = c.popFirstArg();
    -216            //noinspection unchecked
    -217            Class<? extends Enum<?>> enumCls = (Class<? extends Enum<?>>) c.getParam().getType();
    -218            Enum<?> match = ACFUtil.simpleMatch(enumCls, first);
    -219            if (match == null) {
    -220                List<String> names = ACFUtil.enumNames(enumCls);
    -221                throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF, "{valid}", ACFUtil.join(names, ", "));
    -222            }
    -223            return match;
    -224        });
    -225        registerOptionalContext(CommandHelp.class, (c) -> {
    -226            String first = c.getFirstArg();
    -227            String last = c.getLastArg();
    -228            Integer page = 1;
    -229            List<String> search = null;
    -230            if (last != null && ACFUtil.isInteger(last)) {
    -231                c.popLastArg();
    -232                page = ACFUtil.parseInt(last);
    -233                if (page == null) {
    -234                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", last);
    -235                }
    -236                if (!c.getArgs().isEmpty()) {
    -237                    search = c.getArgs();
    -238                }
    -239            } else if (first != null && ACFUtil.isInteger(first)) {
    -240                c.popFirstArg();
    -241                page = ACFUtil.parseInt(first);
    -242                if (page == null){
    -243                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", first);
    -244                }
    -245                if (!c.getArgs().isEmpty()) {
    -246                    search = c.getArgs();
    -247                }
    -248            } else if (!c.getArgs().isEmpty()) {
    -249                search = c.getArgs();
    -250            }
    -251            CommandHelp commandHelp = manager.generateCommandHelp();
    -252            commandHelp.setPage(page);
    -253            Integer perPage = c.getFlagValue("perpage", (Integer) null);
    -254            if (perPage != null) {
    -255                commandHelp.setPerPage(perPage);
    -256            }
    -257
    -258            // check if we have an exact match and should display the help page for that sub command instead
    -259            if (search != null) {
    -260                String cmd = String.join(" ", search);
    -261                if (commandHelp.testExactMatch(cmd)) {
    -262                    return commandHelp;
    -263                }
    -264            }
    -265
    -266            commandHelp.setSearch(search);
    -267            return commandHelp;
    -268        });
    -269    }
    -270
    -271    @NotNull
    -272    private Number parseAndValidateNumber(String number, R c, Number minValue, Number maxValue) throws InvalidCommandArgument {
    -273        final Number val = ACFUtil.parseNumber(number, c.hasFlag("suffixes"));
    -274        validateMinMax(c, val, minValue, maxValue);
    -275        return val;
    -276    }
    -277
    -278    private void validateMinMax(R c, Number val) throws InvalidCommandArgument {
    -279        validateMinMax(c, val, null, null);
    -280    }
    -281
    -282    private void validateMinMax(R c, Number val, Number minValue, Number maxValue) throws InvalidCommandArgument {
    -283        minValue = c.getFlagValue("min", minValue);
    -284        maxValue = c.getFlagValue("max", maxValue);
    -285        if (maxValue != null && val.doubleValue() > maxValue.doubleValue()) {
    -286            throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_AT_MOST, "{max}", String.valueOf(maxValue));
    -287        }
    -288        if (minValue != null && val.doubleValue() < minValue.doubleValue()) {
    -289            throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_AT_LEAST, "{min}", String.valueOf(minValue));
    -290        }
    -291    }
    -292
    -293
    -294    /**
    -295     * @see #registerIssuerAwareContext(Class, IssuerAwareContextResolver)
    -296     * @deprecated Please switch to {@link #registerIssuerAwareContext(Class, IssuerAwareContextResolver)}
    -297     * as the core wants to use the platform agnostic term of "Issuer" instead of Sender
    -298     */
    -299    @Deprecated
    -300    public <T> void registerSenderAwareContext(Class<T> context, IssuerAwareContextResolver<T, R> supplier) {
    -301        contextMap.put(context, supplier);
    -302    }
    -303
    -304    /**
    -305     * Registers a context resolver that may conditionally consume input, falling back to using the context of the
    -306     * issuer to potentially fulfill this context.
    -307     * You may call {@link CommandExecutionContext#getFirstArg()} and then conditionally call {@link CommandExecutionContext#popFirstArg()}
    -308     * if you want to consume that input.
    -309     */
    -310    public <T> void registerIssuerAwareContext(Class<T> context, IssuerAwareContextResolver<T, R> supplier) {
    -311        contextMap.put(context, supplier);
    -312    }
    -313
    -314    /**
    -315     * Registers a context resolver that will never consume input. It will always satisfy its context based on the
    -316     * issuer of the command, so it will not appear in syntax strings.
    -317     */
    -318    public <T> void registerIssuerOnlyContext(Class<T> context, IssuerOnlyContextResolver<T, R> supplier) {
    -319        contextMap.put(context, supplier);
    -320    }
    -321
    -322    /**
    -323     * Registers a context that can safely accept a null input from the command issuer to resolve. This resolver should always
    -324     * call {@link CommandExecutionContext#popFirstArg()}
    -325     */
    -326    public <T> void registerOptionalContext(Class<T> context, OptionalContextResolver<T, R> supplier) {
    -327        contextMap.put(context, supplier);
    -328    }
    -329
    -330    /**
    -331     * Registers a context that requires input from the command issuer to resolve. This resolver should always
    -332     * call {@link CommandExecutionContext#popFirstArg()}
    -333     */
    -334    public <T> void registerContext(Class<T> context, ContextResolver<T, R> supplier) {
    -335        contextMap.put(context, supplier);
    -336    }
    -337
    -338    public ContextResolver<?, R> getResolver(Class<?> type) {
    -339        Class<?> rootType = type;
    -340        do {
    -341            if (type == Object.class) {
    -342                break;
    -343            }
    -344
    -345            final ContextResolver<?, R> resolver = contextMap.get(type);
    -346            if (resolver != null) {
    -347                return resolver;
    -348            }
    -349        } while ((type = type.getSuperclass()) != null);
    -350
    -351        this.manager.log(LogLevel.ERROR, "Could not find context resolver", new IllegalStateException("No context resolver defined for " + rootType.getName()));
    -352        return null;
    -353    }
    -354}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.annotation.Single;
    +027import co.aikar.commands.annotation.Split;
    +028import co.aikar.commands.annotation.Values;
    +029import co.aikar.commands.contexts.ContextResolver;
    +030import co.aikar.commands.contexts.IssuerAwareContextResolver;
    +031import co.aikar.commands.contexts.IssuerOnlyContextResolver;
    +032import co.aikar.commands.contexts.OptionalContextResolver;
    +033import org.jetbrains.annotations.NotNull;
    +034
    +035import java.math.BigDecimal;
    +036import java.math.BigInteger;
    +037import java.util.HashMap;
    +038import java.util.List;
    +039import java.util.Map;
    +040
    +041@SuppressWarnings("WeakerAccess")
    +042public class CommandContexts<R extends CommandExecutionContext<?, ? extends CommandIssuer>> {
    +043    protected final Map<Class<?>, ContextResolver<?, R>> contextMap = new HashMap<>();
    +044    protected final CommandManager manager;
    +045
    +046    CommandContexts(CommandManager manager) {
    +047        this.manager = manager;
    +048        registerIssuerOnlyContext(CommandIssuer.class, c -> c.getIssuer());
    +049        registerContext(Short.class, (c) -> {
    +050            String number = c.popFirstArg();
    +051            try {
    +052                return parseAndValidateNumber(number, c, Short.MIN_VALUE, Short.MAX_VALUE).shortValue();
    +053            } catch (NumberFormatException e) {
    +054                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +055            }
    +056        });
    +057        registerContext(short.class, (c) -> {
    +058            String number = c.popFirstArg();
    +059            try {
    +060                return parseAndValidateNumber(number, c, Short.MIN_VALUE, Short.MAX_VALUE).shortValue();
    +061            } catch (NumberFormatException e) {
    +062                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +063            }
    +064        });
    +065        registerContext(Integer.class, (c) -> {
    +066            String number = c.popFirstArg();
    +067            try {
    +068                return parseAndValidateNumber(number, c, Integer.MIN_VALUE, Integer.MAX_VALUE).intValue();
    +069            } catch (NumberFormatException e) {
    +070                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +071            }
    +072        });
    +073        registerContext(int.class, (c) -> {
    +074            String number = c.popFirstArg();
    +075            try {
    +076                return parseAndValidateNumber(number, c, Integer.MIN_VALUE, Integer.MAX_VALUE).intValue();
    +077            } catch (NumberFormatException e) {
    +078                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +079            }
    +080        });
    +081        registerContext(Long.class, (c) -> {
    +082            String number = c.popFirstArg();
    +083            try {
    +084                return parseAndValidateNumber(number, c, Long.MIN_VALUE, Long.MAX_VALUE).longValue();
    +085            } catch (NumberFormatException e) {
    +086                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +087            }
    +088        });
    +089        registerContext(long.class, (c) -> {
    +090            String number = c.popFirstArg();
    +091            try {
    +092                return parseAndValidateNumber(number, c, Long.MIN_VALUE, Long.MAX_VALUE).longValue();
    +093            } catch (NumberFormatException e) {
    +094                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +095            }
    +096        });
    +097        registerContext(Float.class, (c) -> {
    +098            String number = c.popFirstArg();
    +099            try {
    +100                return parseAndValidateNumber(number, c, -Float.MAX_VALUE, Float.MAX_VALUE).floatValue();
    +101            } catch (NumberFormatException e) {
    +102                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +103            }
    +104        });
    +105        registerContext(float.class, (c) -> {
    +106            String number = c.popFirstArg();
    +107            try {
    +108                return parseAndValidateNumber(number, c, -Float.MAX_VALUE, Float.MAX_VALUE).floatValue();
    +109            } catch (NumberFormatException e) {
    +110                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +111            }
    +112        });
    +113        registerContext(Double.class, (c) -> {
    +114            String number = c.popFirstArg();
    +115            try {
    +116                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE).doubleValue();
    +117            } catch (NumberFormatException e) {
    +118                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +119            }
    +120        });
    +121        registerContext(double.class, (c) -> {
    +122            String number = c.popFirstArg();
    +123            try {
    +124                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE).doubleValue();
    +125            } catch (NumberFormatException e) {
    +126                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +127            }
    +128        });
    +129        registerContext(Number.class, (c) -> {
    +130            String number = c.popFirstArg();
    +131            try {
    +132                return parseAndValidateNumber(number, c, -Double.MAX_VALUE, Double.MAX_VALUE);
    +133            } catch (NumberFormatException e) {
    +134                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", number);
    +135            }
    +136        });
    +137        registerContext(BigDecimal.class, (c) -> {
    +138            String numberStr = c.popFirstArg();
    +139            try {
    +140                BigDecimal number = ACFUtil.parseBigNumber(numberStr, c.hasFlag("suffixes"));
    +141                validateMinMax(c, number);
    +142                return number;
    +143            } catch (NumberFormatException e) {
    +144                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", numberStr);
    +145            }
    +146        });
    +147        registerContext(BigInteger.class, (c) -> {
    +148            String numberStr = c.popFirstArg();
    +149            try {
    +150                BigDecimal number = ACFUtil.parseBigNumber(numberStr, c.hasFlag("suffixes"));
    +151                validateMinMax(c, number);
    +152                return number.toBigIntegerExact();
    +153            } catch (NumberFormatException e) {
    +154                throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", numberStr);
    +155            }
    +156        });
    +157        registerContext(Boolean.class, (c) -> ACFUtil.isTruthy(c.popFirstArg()));
    +158        registerContext(boolean.class, (c) -> ACFUtil.isTruthy(c.popFirstArg()));
    +159        registerContext(char.class, c -> {
    +160            String s = c.popFirstArg();
    +161            if (s.length() > 1) {
    +162                throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(1));
    +163            }
    +164            return s.charAt(0);
    +165        });
    +166        registerContext(String.class, (c) -> {
    +167            // This will fail fast, its either in the values or its not
    +168            if (c.hasAnnotation(Values.class)) {
    +169                return c.popFirstArg();
    +170            }
    +171            String ret = (c.isLastArg() && !c.hasAnnotation(Single.class)) ?
    +172                    ACFUtil.join(c.getArgs())
    +173                    :
    +174                    c.popFirstArg();
    +175
    +176            Integer minLen = c.getFlagValue("minlen", (Integer) null);
    +177            Integer maxLen = c.getFlagValue("maxlen", (Integer) null);
    +178            if (minLen != null) {
    +179                if (ret.length() < minLen) {
    +180                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_MIN_LENGTH, "{min}", String.valueOf(minLen));
    +181                }
    +182            }
    +183            if (maxLen != null) {
    +184                if (ret.length() > maxLen) {
    +185                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_MAX_LENGTH, "{max}", String.valueOf(maxLen));
    +186                }
    +187            }
    +188
    +189            return ret;
    +190        });
    +191        registerContext(String[].class, (c) -> {
    +192            String val;
    +193            List<String> args = c.getArgs();
    +194            if (c.isLastArg() && !c.hasAnnotation(Single.class)) {
    +195                val = ACFUtil.join(args);
    +196            } else {
    +197                val = c.popFirstArg();
    +198            }
    +199            String split = c.getAnnotationValue(Split.class, Annotations.NOTHING | Annotations.NO_EMPTY);
    +200            if (split != null) {
    +201                if (val.isEmpty()) {
    +202                    throw new InvalidCommandArgument();
    +203                }
    +204                return ACFPatterns.getPattern(split).split(val);
    +205            } else if (!c.isLastArg()) {
    +206                ACFUtil.sneaky(new IllegalStateException("Weird Command signature... String[] should be last or @Split"));
    +207            }
    +208
    +209            String[] result = args.toArray(new String[0]);
    +210            args.clear();
    +211            return result;
    +212        });
    +213
    +214        registerContext(Enum.class, (c) -> {
    +215            final String first = c.popFirstArg();
    +216            //noinspection unchecked
    +217            Class<? extends Enum<?>> enumCls = (Class<? extends Enum<?>>) c.getParam().getType();
    +218            Enum<?> match = ACFUtil.simpleMatch(enumCls, first);
    +219            if (match == null) {
    +220                List<String> names = ACFUtil.enumNames(enumCls);
    +221                throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF, "{valid}", ACFUtil.join(names, ", "));
    +222            }
    +223            return match;
    +224        });
    +225        registerOptionalContext(CommandHelp.class, (c) -> {
    +226            String first = c.getFirstArg();
    +227            String last = c.getLastArg();
    +228            Integer page = 1;
    +229            List<String> search = null;
    +230            if (last != null && ACFUtil.isInteger(last)) {
    +231                c.popLastArg();
    +232                page = ACFUtil.parseInt(last);
    +233                if (page == null) {
    +234                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", last);
    +235                }
    +236                if (!c.getArgs().isEmpty()) {
    +237                    search = c.getArgs();
    +238                }
    +239            } else if (first != null && ACFUtil.isInteger(first)) {
    +240                c.popFirstArg();
    +241                page = ACFUtil.parseInt(first);
    +242                if (page == null){
    +243                    throw new InvalidCommandArgument(MessageKeys.MUST_BE_A_NUMBER, "{num}", first);
    +244                }
    +245                if (!c.getArgs().isEmpty()) {
    +246                    search = c.getArgs();
    +247                }
    +248            } else if (!c.getArgs().isEmpty()) {
    +249                search = c.getArgs();
    +250            }
    +251            CommandHelp commandHelp = manager.generateCommandHelp();
    +252            commandHelp.setPage(page);
    +253            Integer perPage = c.getFlagValue("perpage", (Integer) null);
    +254            if (perPage != null) {
    +255                commandHelp.setPerPage(perPage);
    +256            }
    +257
    +258            // check if we have an exact match and should display the help page for that sub command instead
    +259            if (search != null) {
    +260                String cmd = String.join(" ", search);
    +261                if (commandHelp.testExactMatch(cmd)) {
    +262                    return commandHelp;
    +263                }
    +264            }
    +265
    +266            commandHelp.setSearch(search);
    +267            return commandHelp;
    +268        });
    +269    }
    +270
    +271    @NotNull
    +272    private Number parseAndValidateNumber(String number, R c, Number minValue, Number maxValue) throws InvalidCommandArgument {
    +273        final Number val = ACFUtil.parseNumber(number, c.hasFlag("suffixes"));
    +274        validateMinMax(c, val, minValue, maxValue);
    +275        return val;
    +276    }
    +277
    +278    private void validateMinMax(R c, Number val) throws InvalidCommandArgument {
    +279        validateMinMax(c, val, null, null);
    +280    }
    +281
    +282    private void validateMinMax(R c, Number val, Number minValue, Number maxValue) throws InvalidCommandArgument {
    +283        minValue = c.getFlagValue("min", minValue);
    +284        maxValue = c.getFlagValue("max", maxValue);
    +285        if (maxValue != null && val.doubleValue() > maxValue.doubleValue()) {
    +286            throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_AT_MOST, "{max}", String.valueOf(maxValue));
    +287        }
    +288        if (minValue != null && val.doubleValue() < minValue.doubleValue()) {
    +289            throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_AT_LEAST, "{min}", String.valueOf(minValue));
    +290        }
    +291    }
    +292
    +293
    +294    /**
    +295     * @see #registerIssuerAwareContext(Class, IssuerAwareContextResolver)
    +296     * @deprecated Please switch to {@link #registerIssuerAwareContext(Class, IssuerAwareContextResolver)}
    +297     * as the core wants to use the platform agnostic term of "Issuer" instead of Sender
    +298     */
    +299    @Deprecated
    +300    public <T> void registerSenderAwareContext(Class<T> context, IssuerAwareContextResolver<T, R> supplier) {
    +301        contextMap.put(context, supplier);
    +302    }
    +303
    +304    /**
    +305     * Registers a context resolver that may conditionally consume input, falling back to using the context of the
    +306     * issuer to potentially fulfill this context.
    +307     * You may call {@link CommandExecutionContext#getFirstArg()} and then conditionally call {@link CommandExecutionContext#popFirstArg()}
    +308     * if you want to consume that input.
    +309     */
    +310    public <T> void registerIssuerAwareContext(Class<T> context, IssuerAwareContextResolver<T, R> supplier) {
    +311        contextMap.put(context, supplier);
    +312    }
    +313
    +314    /**
    +315     * Registers a context resolver that will never consume input. It will always satisfy its context based on the
    +316     * issuer of the command, so it will not appear in syntax strings.
    +317     */
    +318    public <T> void registerIssuerOnlyContext(Class<T> context, IssuerOnlyContextResolver<T, R> supplier) {
    +319        contextMap.put(context, supplier);
    +320    }
    +321
    +322    /**
    +323     * Registers a context that can safely accept a null input from the command issuer to resolve. This resolver should always
    +324     * call {@link CommandExecutionContext#popFirstArg()}
    +325     */
    +326    public <T> void registerOptionalContext(Class<T> context, OptionalContextResolver<T, R> supplier) {
    +327        contextMap.put(context, supplier);
    +328    }
    +329
    +330    /**
    +331     * Registers a context that requires input from the command issuer to resolve. This resolver should always
    +332     * call {@link CommandExecutionContext#popFirstArg()}
    +333     */
    +334    public <T> void registerContext(Class<T> context, ContextResolver<T, R> supplier) {
    +335        contextMap.put(context, supplier);
    +336    }
    +337
    +338    public ContextResolver<?, R> getResolver(Class<?> type) {
    +339        Class<?> rootType = type;
    +340        do {
    +341            if (type == Object.class) {
    +342                break;
    +343            }
    +344
    +345            final ContextResolver<?, R> resolver = contextMap.get(type);
    +346            if (resolver != null) {
    +347                return resolver;
    +348            }
    +349        } while ((type = type.getSuperclass()) != null);
    +350
    +351        this.manager.log(LogLevel.ERROR, "Could not find context resolver", new IllegalStateException("No context resolver defined for " + rootType.getName()));
    +352        return null;
    +353    }
    +354}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandExecutionContext.html b/docs/acf-core/src-html/co/aikar/commands/CommandExecutionContext.html
    index 2fb819f7..f74f0dd2 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandExecutionContext.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandExecutionContext.html
    @@ -1,250 +1,254 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.lang.annotation.Annotation;
    -027import java.lang.reflect.Parameter;
    -028import java.util.List;
    -029import java.util.Map;
    -030import java.util.Set;
    -031
    -032@SuppressWarnings({"WeakerAccess", "unchecked"})
    -033public class CommandExecutionContext<CEC extends CommandExecutionContext, I extends CommandIssuer> {
    -034    private final RegisteredCommand cmd;
    -035    private final CommandParameter param;
    -036    protected final I issuer;
    -037    private final List<String> args;
    -038    private final int index;
    -039    private final Map<String, Object> passedArgs;
    -040    private final Map<String, String> flags;
    -041    private final CommandManager manager;
    -042
    -043    CommandExecutionContext(RegisteredCommand cmd, CommandParameter param, I sender, List<String> args,
    -044                            int index, Map<String, Object> passedArgs) {
    -045        this.cmd = cmd;
    -046        this.manager = cmd.scope.manager;
    -047        this.param = param;
    -048        this.issuer = sender;
    -049        this.args = args;
    -050        this.index = index;
    -051        this.passedArgs = passedArgs;
    -052        this.flags = param.getFlags();
    -053
    -054    }
    -055
    -056    public String popFirstArg() {
    -057        return !args.isEmpty() ? args.remove(0) : null;
    -058    }
    -059
    -060    public String popLastArg() {
    -061        return !args.isEmpty() ? args.remove(args.size() - 1) : null;
    -062    }
    -063
    -064    public String getFirstArg() {
    -065        return !args.isEmpty() ? args.get(0) : null;
    -066    }
    -067
    -068    public String getLastArg() {
    -069        return !args.isEmpty() ? args.get(args.size() - 1) : null;
    -070    }
    -071
    -072    public boolean isLastArg() {
    -073        return cmd.parameters.length - 1 == index;
    -074    }
    -075
    -076    public int getNumParams() {
    -077        return cmd.parameters.length;
    -078    }
    -079
    -080    public boolean canOverridePlayerContext() {
    -081        return cmd.requiredResolvers >= args.size();
    -082    }
    -083
    -084    public Object getResolvedArg(String arg) {
    -085        return passedArgs.get(arg);
    -086    }
    -087
    -088    public Object getResolvedArg(Class<?>... classes) {
    -089        for (Class<?> clazz : classes) {
    -090            for (Object passedArg : passedArgs.values()) {
    -091                if (clazz.isInstance(passedArg)) {
    -092                    return passedArg;
    -093                }
    -094            }
    -095        }
    -096
    -097        return null;
    -098    }
    -099
    -100    public <T> T getResolvedArg(String key, Class<?>... classes) {
    -101        final Object o = passedArgs.get(key);
    -102        for (Class<?> clazz : classes) {
    -103            if (clazz.isInstance(o)) {
    -104                return (T) o;
    -105            }
    -106        }
    -107
    -108        return null;
    -109    }
    -110
    -111    public Set<String> getParameterPermissions() {
    -112        return param.getRequiredPermissions();
    -113    }
    -114
    -115    public boolean isOptional() {
    -116        return param.isOptional();
    -117    }
    -118
    -119    public boolean hasFlag(String flag) {
    -120        return flags.containsKey(flag);
    -121    }
    -122
    -123    public String getFlagValue(String flag, String def) {
    -124        return flags.getOrDefault(flag, def);
    -125    }
    -126
    -127    public Integer getFlagValue(String flag, Integer def) {
    -128        return ACFUtil.parseInt(this.flags.get(flag), def);
    -129    }
    -130
    -131    public Long getFlagValue(String flag, Long def) {
    -132        return ACFUtil.parseLong(this.flags.get(flag), def);
    -133    }
    -134
    -135    public Float getFlagValue(String flag, Float def) {
    -136        return ACFUtil.parseFloat(this.flags.get(flag), def);
    -137    }
    -138
    -139    public Double getFlagValue(String flag, Double def) {
    -140        return ACFUtil.parseDouble(this.flags.get(flag), def);
    -141    }
    -142
    -143    public Integer getIntFlagValue(String flag, Number def) {
    -144        return ACFUtil.parseInt(this.flags.get(flag), def != null ? def.intValue() : null);
    -145    }
    -146
    -147    public Long getLongFlagValue(String flag, Number def) {
    -148        return ACFUtil.parseLong(this.flags.get(flag), def != null ? def.longValue() : null);
    -149    }
    -150
    -151    public Float getFloatFlagValue(String flag, Number def) {
    -152        return ACFUtil.parseFloat(this.flags.get(flag), def != null ? def.floatValue() : null);
    -153    }
    -154
    -155    public Double getDoubleFlagValue(String flag, Number def) {
    -156        return ACFUtil.parseDouble(this.flags.get(flag), def != null ? def.doubleValue() : null);
    -157    }
    -158
    -159    public Boolean getBooleanFlagValue(String flag) {
    -160        return getBooleanFlagValue(flag, false);
    -161    }
    -162
    -163    public Boolean getBooleanFlagValue(String flag, Boolean def) {
    -164        String val = this.flags.get(flag);
    -165        if (val == null) {
    -166            return def;
    -167        }
    -168        return ACFUtil.isTruthy(val);
    -169    }
    -170
    -171    public Double getFlagValue(String flag, Number def) {
    -172        return ACFUtil.parseDouble(this.flags.get(flag), def != null ? def.doubleValue() : null);
    -173    }
    -174
    -175    /**
    -176     * This method will not support annotation processors!! use getAnnotationValue or hasAnnotation
    -177     *
    -178     * @deprecated Use {@link #getAnnotationValue(Class)}
    -179     */
    -180    @Deprecated
    -181    public <T extends Annotation> T getAnnotation(Class<T> cls) {
    -182        return param.getParameter().getAnnotation(cls);
    -183    }
    -184
    -185    public <T extends Annotation> String getAnnotationValue(Class<T> cls) {
    -186        return manager.getAnnotations().getAnnotationValue(param.getParameter(), cls);
    -187    }
    -188
    -189    public <T extends Annotation> String getAnnotationValue(Class<T> cls, int options) {
    -190        return manager.getAnnotations().getAnnotationValue(param.getParameter(), cls, options);
    -191    }
    -192
    -193    public <T extends Annotation> boolean hasAnnotation(Class<T> cls) {
    -194        return manager.getAnnotations().hasAnnotation(param.getParameter(), cls);
    -195    }
    -196
    -197    public RegisteredCommand getCmd() {
    -198        return this.cmd;
    -199    }
    -200
    -201    @UnstableAPI
    -202    CommandParameter getCommandParameter() {
    -203        return this.param;
    -204    }
    -205
    -206    @Deprecated
    -207    public Parameter getParam() {
    -208        return this.param.getParameter();
    -209    }
    -210
    -211    public I getIssuer() {
    -212        return this.issuer;
    -213    }
    -214
    -215    public List<String> getArgs() {
    -216        return this.args;
    -217    }
    -218
    -219    public int getIndex() {
    -220        return this.index;
    -221    }
    -222
    -223    public Map<String, Object> getPassedArgs() {
    -224        return this.passedArgs;
    -225    }
    -226
    -227    public Map<String, String> getFlags() {
    -228        return this.flags;
    -229    }
    -230
    -231    public String joinArgs() {
    -232        return ACFUtil.join(args, " ");
    -233    }
    -234
    -235    public String joinArgs(String sep) {
    -236        return ACFUtil.join(args, sep);
    -237    }
    -238}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.lang.annotation.Annotation;
    +027import java.lang.reflect.Parameter;
    +028import java.util.List;
    +029import java.util.Map;
    +030import java.util.Set;
    +031
    +032@SuppressWarnings({"WeakerAccess", "unchecked"})
    +033public class CommandExecutionContext<CEC extends CommandExecutionContext, I extends CommandIssuer> {
    +034    private final RegisteredCommand cmd;
    +035    private final CommandParameter param;
    +036    protected final I issuer;
    +037    private final List<String> args;
    +038    private final int index;
    +039    private final Map<String, Object> passedArgs;
    +040    private final Map<String, String> flags;
    +041    private final CommandManager manager;
    +042
    +043    CommandExecutionContext(RegisteredCommand cmd, CommandParameter param, I sender, List<String> args,
    +044                            int index, Map<String, Object> passedArgs) {
    +045        this.cmd = cmd;
    +046        this.manager = cmd.scope.manager;
    +047        this.param = param;
    +048        this.issuer = sender;
    +049        this.args = args;
    +050        this.index = index;
    +051        this.passedArgs = passedArgs;
    +052        this.flags = param.getFlags();
    +053
    +054    }
    +055
    +056    public String popFirstArg() {
    +057        return !args.isEmpty() ? args.remove(0) : null;
    +058    }
    +059
    +060    public String popLastArg() {
    +061        return !args.isEmpty() ? args.remove(args.size() - 1) : null;
    +062    }
    +063
    +064    public String getFirstArg() {
    +065        return !args.isEmpty() ? args.get(0) : null;
    +066    }
    +067
    +068    public String getLastArg() {
    +069        return !args.isEmpty() ? args.get(args.size() - 1) : null;
    +070    }
    +071
    +072    public boolean isLastArg() {
    +073        return cmd.parameters.length - 1 == index;
    +074    }
    +075
    +076    public int getNumParams() {
    +077        return cmd.parameters.length;
    +078    }
    +079
    +080    public boolean canOverridePlayerContext() {
    +081        return cmd.requiredResolvers >= args.size();
    +082    }
    +083
    +084    public Object getResolvedArg(String arg) {
    +085        return passedArgs.get(arg);
    +086    }
    +087
    +088    public Object getResolvedArg(Class<?>... classes) {
    +089        for (Class<?> clazz : classes) {
    +090            for (Object passedArg : passedArgs.values()) {
    +091                if (clazz.isInstance(passedArg)) {
    +092                    return passedArg;
    +093                }
    +094            }
    +095        }
    +096
    +097        return null;
    +098    }
    +099
    +100    public <T> T getResolvedArg(String key, Class<?>... classes) {
    +101        final Object o = passedArgs.get(key);
    +102        for (Class<?> clazz : classes) {
    +103            if (clazz.isInstance(o)) {
    +104                return (T) o;
    +105            }
    +106        }
    +107
    +108        return null;
    +109    }
    +110
    +111    public Set<String> getParameterPermissions() {
    +112        return param.getRequiredPermissions();
    +113    }
    +114
    +115    public boolean isOptional() {
    +116        return param.isOptional();
    +117    }
    +118
    +119    public boolean hasFlag(String flag) {
    +120        return flags.containsKey(flag);
    +121    }
    +122
    +123    public String getFlagValue(String flag, String def) {
    +124        return flags.getOrDefault(flag, def);
    +125    }
    +126
    +127    public Integer getFlagValue(String flag, Integer def) {
    +128        return ACFUtil.parseInt(this.flags.get(flag), def);
    +129    }
    +130
    +131    public Long getFlagValue(String flag, Long def) {
    +132        return ACFUtil.parseLong(this.flags.get(flag), def);
    +133    }
    +134
    +135    public Float getFlagValue(String flag, Float def) {
    +136        return ACFUtil.parseFloat(this.flags.get(flag), def);
    +137    }
    +138
    +139    public Double getFlagValue(String flag, Double def) {
    +140        return ACFUtil.parseDouble(this.flags.get(flag), def);
    +141    }
    +142
    +143    public Integer getIntFlagValue(String flag, Number def) {
    +144        return ACFUtil.parseInt(this.flags.get(flag), def != null ? def.intValue() : null);
    +145    }
    +146
    +147    public Long getLongFlagValue(String flag, Number def) {
    +148        return ACFUtil.parseLong(this.flags.get(flag), def != null ? def.longValue() : null);
    +149    }
    +150
    +151    public Float getFloatFlagValue(String flag, Number def) {
    +152        return ACFUtil.parseFloat(this.flags.get(flag), def != null ? def.floatValue() : null);
    +153    }
    +154
    +155    public Double getDoubleFlagValue(String flag, Number def) {
    +156        return ACFUtil.parseDouble(this.flags.get(flag), def != null ? def.doubleValue() : null);
    +157    }
    +158
    +159    public Boolean getBooleanFlagValue(String flag) {
    +160        return getBooleanFlagValue(flag, false);
    +161    }
    +162
    +163    public Boolean getBooleanFlagValue(String flag, Boolean def) {
    +164        String val = this.flags.get(flag);
    +165        if (val == null) {
    +166            return def;
    +167        }
    +168        return ACFUtil.isTruthy(val);
    +169    }
    +170
    +171    public Double getFlagValue(String flag, Number def) {
    +172        return ACFUtil.parseDouble(this.flags.get(flag), def != null ? def.doubleValue() : null);
    +173    }
    +174
    +175    /**
    +176     * This method will not support annotation processors!! use getAnnotationValue or hasAnnotation
    +177     *
    +178     * @deprecated Use {@link #getAnnotationValue(Class)}
    +179     */
    +180    @Deprecated
    +181    public <T extends Annotation> T getAnnotation(Class<T> cls) {
    +182        return param.getParameter().getAnnotation(cls);
    +183    }
    +184
    +185    public <T extends Annotation> String getAnnotationValue(Class<T> cls) {
    +186        return manager.getAnnotations().getAnnotationValue(param.getParameter(), cls);
    +187    }
    +188
    +189    public <T extends Annotation> String getAnnotationValue(Class<T> cls, int options) {
    +190        return manager.getAnnotations().getAnnotationValue(param.getParameter(), cls, options);
    +191    }
    +192
    +193    public <T extends Annotation> boolean hasAnnotation(Class<T> cls) {
    +194        return manager.getAnnotations().hasAnnotation(param.getParameter(), cls);
    +195    }
    +196
    +197    public RegisteredCommand getCmd() {
    +198        return this.cmd;
    +199    }
    +200
    +201    @UnstableAPI
    +202    CommandParameter getCommandParameter() {
    +203        return this.param;
    +204    }
    +205
    +206    @Deprecated
    +207    public Parameter getParam() {
    +208        return this.param.getParameter();
    +209    }
    +210
    +211    public I getIssuer() {
    +212        return this.issuer;
    +213    }
    +214
    +215    public List<String> getArgs() {
    +216        return this.args;
    +217    }
    +218
    +219    public int getIndex() {
    +220        return this.index;
    +221    }
    +222
    +223    public Map<String, Object> getPassedArgs() {
    +224        return this.passedArgs;
    +225    }
    +226
    +227    public Map<String, String> getFlags() {
    +228        return this.flags;
    +229    }
    +230
    +231    public String joinArgs() {
    +232        return ACFUtil.join(args, " ");
    +233    }
    +234
    +235    public String joinArgs(String sep) {
    +236        return ACFUtil.join(args, sep);
    +237    }
    +238}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandHelp.html b/docs/acf-core/src-html/co/aikar/commands/CommandHelp.html
    index d3c6558a..222b6fd2 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandHelp.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandHelp.html
    @@ -1,268 +1,272 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import com.google.common.collect.SetMultimap;
    -027
    -028import java.util.ArrayList;
    -029import java.util.Comparator;
    -030import java.util.HashSet;
    -031import java.util.Iterator;
    -032import java.util.List;
    -033import java.util.Set;
    -034import java.util.regex.Pattern;
    -035import java.util.stream.Collectors;
    -036
    -037@SuppressWarnings("WeakerAccess")
    -038public class CommandHelp {
    -039    private final CommandManager manager;
    -040    private final CommandIssuer issuer;
    -041    private final List<HelpEntry> helpEntries = new ArrayList<>();
    -042    private final String commandName;
    -043    final String commandPrefix;
    -044    private int page = 1;
    -045    private int perPage;
    -046    List<String> search;
    -047    private Set<HelpEntry> selectedEntry = new HashSet<>();
    -048    private int totalResults;
    -049    private int totalPages;
    -050    private boolean lastPage;
    -051
    -052    public CommandHelp(CommandManager manager, RootCommand rootCommand, CommandIssuer issuer) {
    -053        this.manager = manager;
    -054        this.issuer = issuer;
    -055        this.perPage = manager.defaultHelpPerPage;
    -056        this.commandPrefix = manager.getCommandPrefix(issuer);
    -057        this.commandName = rootCommand.getCommandName();
    -058
    -059
    -060        SetMultimap<String, RegisteredCommand> subCommands = rootCommand.getSubCommands();
    -061        Set<RegisteredCommand> seen = new HashSet<>();
    -062
    -063        if (!rootCommand.getDefCommand().hasHelpCommand) {
    -064            RegisteredCommand defCommand = rootCommand.getDefaultRegisteredCommand();
    -065            if (defCommand != null) {
    -066                helpEntries.add(new HelpEntry(this, defCommand));
    -067                seen.add(defCommand);
    -068            }
    -069        }
    -070
    -071        subCommands.entries().forEach(e -> {
    -072            String key = e.getKey();
    -073            if (key.equals(BaseCommand.DEFAULT) || key.equals(BaseCommand.CATCHUNKNOWN)) {
    -074                return;
    -075            }
    -076
    -077            RegisteredCommand regCommand = e.getValue();
    -078
    -079            if (!regCommand.isPrivate && regCommand.hasPermission(issuer) && !seen.contains(regCommand)) {
    -080                this.helpEntries.add(new HelpEntry(this, regCommand));
    -081                seen.add(regCommand);
    -082            }
    -083        });
    -084    }
    -085
    -086    @UnstableAPI // Not sure on this one yet even when API becomes unstable
    -087    protected void updateSearchScore(HelpEntry help) {
    -088        if (this.search == null || this.search.isEmpty()) {
    -089            help.setSearchScore(1);
    -090            return;
    -091        }
    -092        final RegisteredCommand<?> cmd = help.getRegisteredCommand();
    -093
    -094        int searchScore = 0;
    -095        for (String word : this.search) {
    -096            Pattern pattern = Pattern.compile(".*" + Pattern.quote(word) + ".*", Pattern.CASE_INSENSITIVE);
    -097            for (String subCmd : cmd.registeredSubcommands) {
    -098                Pattern subCmdPattern = Pattern.compile(".*" + Pattern.quote(subCmd) + ".*", Pattern.CASE_INSENSITIVE);
    -099                if (pattern.matcher(subCmd).matches()) {
    -100                    searchScore += 3;
    -101                } else if (subCmdPattern.matcher(word).matches()) {
    -102                    searchScore++;
    -103                }
    -104            }
    -105
    -106
    -107            if (pattern.matcher(help.getDescription()).matches()) {
    -108                searchScore += 2;
    -109            }
    -110            if (pattern.matcher(help.getParameterSyntax(issuer)).matches()) {
    -111                searchScore++;
    -112            }
    -113            if (help.getSearchTags() != null && pattern.matcher(help.getSearchTags()).matches()) {
    -114                searchScore += 2;
    -115            }
    -116        }
    -117        help.setSearchScore(searchScore);
    -118    }
    -119
    -120    public CommandManager getManager() {
    -121        return manager;
    -122    }
    -123
    -124    public boolean testExactMatch(String command) {
    -125        selectedEntry.clear();
    -126        for (HelpEntry helpEntry : helpEntries) {
    -127            if (helpEntry.getCommand().endsWith(" " + command)) {
    -128                selectedEntry.add(helpEntry);
    -129            }
    -130        }
    -131        return !selectedEntry.isEmpty();
    -132    }
    -133
    -134    public void showHelp() {
    -135        showHelp(issuer);
    -136    }
    -137
    -138    public void showHelp(CommandIssuer issuer) {
    -139        CommandHelpFormatter formatter = manager.getHelpFormatter();
    -140        if (!selectedEntry.isEmpty()) {
    -141            HelpEntry first = ACFUtil.getFirstElement(selectedEntry);
    -142            formatter.printDetailedHelpHeader(this, issuer, first);
    -143
    -144            for (HelpEntry helpEntry : selectedEntry) {
    -145                formatter.showDetailedHelp(this, helpEntry);
    -146            }
    -147
    -148            formatter.printDetailedHelpFooter(this, issuer, first);
    -149            return;
    -150        }
    -151
    -152        List<HelpEntry> helpEntries = getHelpEntries().stream().filter(HelpEntry::shouldShow).collect(Collectors.toList());
    -153        Iterator<HelpEntry> results = helpEntries.stream()
    -154                .sorted(Comparator.comparingInt(helpEntry -> helpEntry.getSearchScore() * -1)).iterator();
    -155        if (!results.hasNext()) {
    -156            issuer.sendMessage(MessageType.ERROR, MessageKeys.NO_COMMAND_MATCHED_SEARCH, "{search}", ACFUtil.join(this.search, " "));
    -157            helpEntries = getHelpEntries();
    -158            results = helpEntries.iterator();
    -159        }
    -160        this.totalResults = helpEntries.size();
    -161        int min = (this.page - 1) * this.perPage; // TODO: per page configurable?
    -162        int max = min + this.perPage;
    -163        this.totalPages = (int) Math.ceil((float) totalResults / (float) this.perPage);
    -164        int i = 0;
    -165        if (min >= totalResults) {
    -166            issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_NO_RESULTS);
    -167            return;
    -168        }
    -169
    -170        List<HelpEntry> printEntries = new ArrayList<>();
    -171        while (results.hasNext()) {
    -172            HelpEntry e = results.next();
    -173            if (i >= max) {
    -174                break;
    -175            }
    -176            if (i++ < min) {
    -177                continue;
    -178            }
    -179            printEntries.add(e);
    -180        }
    -181        this.lastPage = max >= totalResults;
    -182
    -183        if (search == null) {
    -184            formatter.showAllResults(this, printEntries);
    -185        } else {
    -186            formatter.showSearchResults(this, printEntries);
    -187        }
    -188
    -189    }
    -190
    -191    public List<HelpEntry> getHelpEntries() {
    -192        return helpEntries;
    -193    }
    -194
    -195    public void setPerPage(int perPage) {
    -196        this.perPage = perPage;
    -197    }
    -198
    -199    public void setPage(int page) {
    -200        this.page = page;
    -201    }
    -202
    -203    public void setPage(int page, int perPage) {
    -204        this.setPage(page);
    -205        this.setPerPage(perPage);
    -206    }
    -207
    -208    public void setSearch(List<String> search) {
    -209        this.search = search;
    -210        getHelpEntries().forEach(this::updateSearchScore);
    -211    }
    -212
    -213    public CommandIssuer getIssuer() {
    -214        return issuer;
    -215    }
    -216
    -217    public String getCommandName() {
    -218        return commandName;
    -219    }
    -220
    -221    public String getCommandPrefix() {
    -222        return commandPrefix;
    -223    }
    -224
    -225    public int getPage() {
    -226        return page;
    -227    }
    -228
    -229    public int getPerPage() {
    -230        return perPage;
    -231    }
    -232
    -233    public List<String> getSearch() {
    -234        return search;
    -235    }
    -236
    -237    public Set<HelpEntry> getSelectedEntry() {
    -238        return selectedEntry;
    -239    }
    -240
    -241    public int getTotalResults() {
    -242        return totalResults;
    -243    }
    -244
    -245    public int getTotalPages() {
    -246        return totalPages;
    -247    }
    -248
    -249    public boolean isOnlyPage() {
    -250        return this.page == 1 && lastPage;
    -251    }
    -252
    -253    public boolean isLastPage() {
    -254        return lastPage;
    -255    }
    -256}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import com.google.common.collect.SetMultimap;
    +027
    +028import java.util.ArrayList;
    +029import java.util.Comparator;
    +030import java.util.HashSet;
    +031import java.util.Iterator;
    +032import java.util.List;
    +033import java.util.Set;
    +034import java.util.regex.Pattern;
    +035import java.util.stream.Collectors;
    +036
    +037@SuppressWarnings("WeakerAccess")
    +038public class CommandHelp {
    +039    private final CommandManager manager;
    +040    private final CommandIssuer issuer;
    +041    private final List<HelpEntry> helpEntries = new ArrayList<>();
    +042    private final String commandName;
    +043    final String commandPrefix;
    +044    private int page = 1;
    +045    private int perPage;
    +046    List<String> search;
    +047    private Set<HelpEntry> selectedEntry = new HashSet<>();
    +048    private int totalResults;
    +049    private int totalPages;
    +050    private boolean lastPage;
    +051
    +052    public CommandHelp(CommandManager manager, RootCommand rootCommand, CommandIssuer issuer) {
    +053        this.manager = manager;
    +054        this.issuer = issuer;
    +055        this.perPage = manager.defaultHelpPerPage;
    +056        this.commandPrefix = manager.getCommandPrefix(issuer);
    +057        this.commandName = rootCommand.getCommandName();
    +058
    +059
    +060        SetMultimap<String, RegisteredCommand> subCommands = rootCommand.getSubCommands();
    +061        Set<RegisteredCommand> seen = new HashSet<>();
    +062
    +063        if (!rootCommand.getDefCommand().hasHelpCommand) {
    +064            RegisteredCommand defCommand = rootCommand.getDefaultRegisteredCommand();
    +065            if (defCommand != null) {
    +066                helpEntries.add(new HelpEntry(this, defCommand));
    +067                seen.add(defCommand);
    +068            }
    +069        }
    +070
    +071        subCommands.entries().forEach(e -> {
    +072            String key = e.getKey();
    +073            if (key.equals(BaseCommand.DEFAULT) || key.equals(BaseCommand.CATCHUNKNOWN)) {
    +074                return;
    +075            }
    +076
    +077            RegisteredCommand regCommand = e.getValue();
    +078
    +079            if (!regCommand.isPrivate && regCommand.hasPermission(issuer) && !seen.contains(regCommand)) {
    +080                this.helpEntries.add(new HelpEntry(this, regCommand));
    +081                seen.add(regCommand);
    +082            }
    +083        });
    +084    }
    +085
    +086    @UnstableAPI // Not sure on this one yet even when API becomes unstable
    +087    protected void updateSearchScore(HelpEntry help) {
    +088        if (this.search == null || this.search.isEmpty()) {
    +089            help.setSearchScore(1);
    +090            return;
    +091        }
    +092        final RegisteredCommand<?> cmd = help.getRegisteredCommand();
    +093
    +094        int searchScore = 0;
    +095        for (String word : this.search) {
    +096            Pattern pattern = Pattern.compile(".*" + Pattern.quote(word) + ".*", Pattern.CASE_INSENSITIVE);
    +097            for (String subCmd : cmd.registeredSubcommands) {
    +098                Pattern subCmdPattern = Pattern.compile(".*" + Pattern.quote(subCmd) + ".*", Pattern.CASE_INSENSITIVE);
    +099                if (pattern.matcher(subCmd).matches()) {
    +100                    searchScore += 3;
    +101                } else if (subCmdPattern.matcher(word).matches()) {
    +102                    searchScore++;
    +103                }
    +104            }
    +105
    +106
    +107            if (pattern.matcher(help.getDescription()).matches()) {
    +108                searchScore += 2;
    +109            }
    +110            if (pattern.matcher(help.getParameterSyntax(issuer)).matches()) {
    +111                searchScore++;
    +112            }
    +113            if (help.getSearchTags() != null && pattern.matcher(help.getSearchTags()).matches()) {
    +114                searchScore += 2;
    +115            }
    +116        }
    +117        help.setSearchScore(searchScore);
    +118    }
    +119
    +120    public CommandManager getManager() {
    +121        return manager;
    +122    }
    +123
    +124    public boolean testExactMatch(String command) {
    +125        selectedEntry.clear();
    +126        for (HelpEntry helpEntry : helpEntries) {
    +127            if (helpEntry.getCommand().endsWith(" " + command)) {
    +128                selectedEntry.add(helpEntry);
    +129            }
    +130        }
    +131        return !selectedEntry.isEmpty();
    +132    }
    +133
    +134    public void showHelp() {
    +135        showHelp(issuer);
    +136    }
    +137
    +138    public void showHelp(CommandIssuer issuer) {
    +139        CommandHelpFormatter formatter = manager.getHelpFormatter();
    +140        if (!selectedEntry.isEmpty()) {
    +141            HelpEntry first = ACFUtil.getFirstElement(selectedEntry);
    +142            formatter.printDetailedHelpHeader(this, issuer, first);
    +143
    +144            for (HelpEntry helpEntry : selectedEntry) {
    +145                formatter.showDetailedHelp(this, helpEntry);
    +146            }
    +147
    +148            formatter.printDetailedHelpFooter(this, issuer, first);
    +149            return;
    +150        }
    +151
    +152        List<HelpEntry> helpEntries = getHelpEntries().stream().filter(HelpEntry::shouldShow).collect(Collectors.toList());
    +153        Iterator<HelpEntry> results = helpEntries.stream()
    +154                .sorted(Comparator.comparingInt(helpEntry -> helpEntry.getSearchScore() * -1)).iterator();
    +155        if (!results.hasNext()) {
    +156            issuer.sendMessage(MessageType.ERROR, MessageKeys.NO_COMMAND_MATCHED_SEARCH, "{search}", ACFUtil.join(this.search, " "));
    +157            helpEntries = getHelpEntries();
    +158            results = helpEntries.iterator();
    +159        }
    +160        this.totalResults = helpEntries.size();
    +161        int min = (this.page - 1) * this.perPage; // TODO: per page configurable?
    +162        int max = min + this.perPage;
    +163        this.totalPages = (int) Math.ceil((float) totalResults / (float) this.perPage);
    +164        int i = 0;
    +165        if (min >= totalResults) {
    +166            issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_NO_RESULTS);
    +167            return;
    +168        }
    +169
    +170        List<HelpEntry> printEntries = new ArrayList<>();
    +171        while (results.hasNext()) {
    +172            HelpEntry e = results.next();
    +173            if (i >= max) {
    +174                break;
    +175            }
    +176            if (i++ < min) {
    +177                continue;
    +178            }
    +179            printEntries.add(e);
    +180        }
    +181        this.lastPage = max >= totalResults;
    +182
    +183        if (search == null) {
    +184            formatter.showAllResults(this, printEntries);
    +185        } else {
    +186            formatter.showSearchResults(this, printEntries);
    +187        }
    +188
    +189    }
    +190
    +191    public List<HelpEntry> getHelpEntries() {
    +192        return helpEntries;
    +193    }
    +194
    +195    public void setPerPage(int perPage) {
    +196        this.perPage = perPage;
    +197    }
    +198
    +199    public void setPage(int page) {
    +200        this.page = page;
    +201    }
    +202
    +203    public void setPage(int page, int perPage) {
    +204        this.setPage(page);
    +205        this.setPerPage(perPage);
    +206    }
    +207
    +208    public void setSearch(List<String> search) {
    +209        this.search = search;
    +210        getHelpEntries().forEach(this::updateSearchScore);
    +211    }
    +212
    +213    public CommandIssuer getIssuer() {
    +214        return issuer;
    +215    }
    +216
    +217    public String getCommandName() {
    +218        return commandName;
    +219    }
    +220
    +221    public String getCommandPrefix() {
    +222        return commandPrefix;
    +223    }
    +224
    +225    public int getPage() {
    +226        return page;
    +227    }
    +228
    +229    public int getPerPage() {
    +230        return perPage;
    +231    }
    +232
    +233    public List<String> getSearch() {
    +234        return search;
    +235    }
    +236
    +237    public Set<HelpEntry> getSelectedEntry() {
    +238        return selectedEntry;
    +239    }
    +240
    +241    public int getTotalResults() {
    +242        return totalResults;
    +243    }
    +244
    +245    public int getTotalPages() {
    +246        return totalPages;
    +247    }
    +248
    +249    public boolean isOnlyPage() {
    +250        return this.page == 1 && lastPage;
    +251    }
    +252
    +253    public boolean isLastPage() {
    +254        return lastPage;
    +255    }
    +256}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandHelpFormatter.html b/docs/acf-core/src-html/co/aikar/commands/CommandHelpFormatter.html
    index b9d8f646..f0534108 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandHelpFormatter.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandHelpFormatter.html
    @@ -1,216 +1,220 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import org.jetbrains.annotations.NotNull;
    -027
    -028import java.util.List;
    -029
    -030public class CommandHelpFormatter {
    -031
    -032    private final CommandManager manager;
    -033
    -034    public CommandHelpFormatter(CommandManager manager) {
    -035        this.manager = manager;
    -036    }
    -037
    -038
    -039    public void showAllResults(CommandHelp commandHelp, List<HelpEntry> entries) {
    -040        CommandIssuer issuer = commandHelp.getIssuer();
    -041        printHelpHeader(commandHelp, issuer);
    -042        for (HelpEntry e : entries) {
    -043            printHelpCommand(commandHelp, issuer, e);
    -044        }
    -045        printHelpFooter(commandHelp, issuer);
    -046    }
    -047
    -048    public void showSearchResults(CommandHelp commandHelp, List<HelpEntry> entries) {
    -049        CommandIssuer issuer = commandHelp.getIssuer();
    -050        printSearchHeader(commandHelp, issuer);
    -051        for (HelpEntry e : entries) {
    -052            printSearchEntry(commandHelp, issuer, e);
    -053        }
    -054        printSearchFooter(commandHelp, issuer);
    -055    }
    -056
    -057    public void showDetailedHelp(CommandHelp commandHelp, HelpEntry entry) {
    -058        CommandIssuer issuer = commandHelp.getIssuer();
    -059
    -060        // normal help line
    -061        printDetailedHelpCommand(commandHelp, issuer, entry);
    -062
    -063        // additionally detailed help for params
    -064        for (CommandParameter param : entry.getParameters()) {
    -065            String description = param.getDescription();
    -066            if (description != null && !description.isEmpty()) {
    -067                printDetailedParameter(commandHelp, issuer, entry, param);
    -068            }
    -069        }
    -070    }
    -071
    -072    // ########
    -073    // # help #
    -074    // ########
    -075
    -076    public void printHelpHeader(CommandHelp help, CommandIssuer issuer) {
    -077        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_HEADER, getHeaderFooterFormatReplacements(help));
    -078    }
    -079
    -080    public void printHelpCommand(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    -081        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getEntryFormatReplacements(help, entry));
    -082        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    -083            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    -084        }
    -085    }
    -086
    -087    public void printHelpFooter(CommandHelp help, CommandIssuer issuer) {
    -088        if (help.isOnlyPage()) {
    -089            return;
    -090        }
    -091        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, getHeaderFooterFormatReplacements(help));
    -092    }
    -093
    -094    // ##########
    -095    // # search #
    -096    // ##########
    -097
    -098    public void printSearchHeader(CommandHelp help, CommandIssuer issuer) {
    -099        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_SEARCH_HEADER, getHeaderFooterFormatReplacements(help));
    -100    }
    -101
    -102    public void printSearchEntry(CommandHelp help, CommandIssuer issuer, HelpEntry page) {
    -103        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getEntryFormatReplacements(help, page));
    -104        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    -105            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    -106        }
    -107    }
    -108
    -109    public void printSearchFooter(CommandHelp help, CommandIssuer issuer) {
    -110        if (help.isOnlyPage()) {
    -111            return;
    -112        }
    -113        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, getHeaderFooterFormatReplacements(help));
    -114    }
    -115
    -116
    -117    // ############
    -118    // # detailed #
    -119    // ############
    -120
    -121    public void printDetailedHelpHeader(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    -122        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_DETAILED_HEADER,
    -123                "{command}", entry.getCommand(),
    -124                "{commandprefix}", help.getCommandPrefix()
    -125        );
    -126    }
    -127
    -128
    -129    public void printDetailedHelpCommand(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    -130        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_COMMAND_FORMAT, getEntryFormatReplacements(help, entry));
    -131        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    -132            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    -133        }
    -134    }
    -135
    -136    public void printDetailedParameter(CommandHelp help, CommandIssuer issuer, HelpEntry entry, CommandParameter param) {
    -137        String formattedMsg = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_PARAMETER_FORMAT, getParameterFormatReplacements(help, param, entry));
    -138        for (String msg : ACFPatterns.NEWLINE.split(formattedMsg)) {
    -139            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    -140        }
    -141    }
    -142
    -143    public void printDetailedHelpFooter(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    -144        // default doesn't have a footer
    -145    }
    -146
    -147    /**
    -148     * Override this to control replacements
    -149     *
    -150     * @param help
    -151     * @return
    -152     */
    -153    public String[] getHeaderFooterFormatReplacements(CommandHelp help) {
    -154        return new String[]{
    -155                "{search}", help.search != null ? String.join(" ", help.search) : "",
    -156                "{command}", help.getCommandName(),
    -157                "{commandprefix}", help.getCommandPrefix(),
    -158                "{rootcommand}", help.getCommandName(),
    -159                "{page}", "" + help.getPage(),
    -160                "{totalpages}", "" + help.getTotalPages(),
    -161                "{results}", "" + help.getTotalResults()
    -162        };
    -163    }
    -164
    -165    /**
    -166     * Override this to control replacements
    -167     *
    -168     * @param help
    -169     * @param entry
    -170     * @return
    -171     */
    -172    public String[] getEntryFormatReplacements(CommandHelp help, HelpEntry entry) {
    -173        //{command} {parameters} {separator} {description}
    -174        return new String[]{
    -175                "{command}", entry.getCommand(),
    -176                "{commandprefix}", help.getCommandPrefix(),
    -177                "{parameters}", entry.getParameterSyntax(help.getIssuer()),
    -178                "{separator}", entry.getDescription().isEmpty() ? "" : "-",
    -179                "{description}", entry.getDescription()
    -180        };
    -181    }
    -182
    -183    /**
    -184     * Override this to control replacements
    -185     *
    -186     * @param help
    -187     * @param param
    -188     * @param entry
    -189     * @return
    -190     */
    -191    @NotNull
    -192    public String[] getParameterFormatReplacements(CommandHelp help, CommandParameter param, HelpEntry entry) {
    -193        //{name} {description}
    -194        return new String[]{
    -195                "{name}", param.getDisplayName(help.getIssuer()),
    -196                "{syntaxorname}", ACFUtil.nullDefault(param.getSyntax(help.getIssuer()), param.getDisplayName(help.getIssuer())),
    -197                "{syntax}", ACFUtil.nullDefault(param.getSyntax(help.getIssuer()), ""),
    -198                "{description}", ACFUtil.nullDefault(param.getDescription(), ""),
    -199                "{command}", help.getCommandName(),
    -200                "{fullcommand}", entry.getCommand(),
    -201                "{commandprefix}", help.getCommandPrefix()
    -202        };
    -203    }
    -204}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import org.jetbrains.annotations.NotNull;
    +027
    +028import java.util.List;
    +029
    +030public class CommandHelpFormatter {
    +031
    +032    private final CommandManager manager;
    +033
    +034    public CommandHelpFormatter(CommandManager manager) {
    +035        this.manager = manager;
    +036    }
    +037
    +038
    +039    public void showAllResults(CommandHelp commandHelp, List<HelpEntry> entries) {
    +040        CommandIssuer issuer = commandHelp.getIssuer();
    +041        printHelpHeader(commandHelp, issuer);
    +042        for (HelpEntry e : entries) {
    +043            printHelpCommand(commandHelp, issuer, e);
    +044        }
    +045        printHelpFooter(commandHelp, issuer);
    +046    }
    +047
    +048    public void showSearchResults(CommandHelp commandHelp, List<HelpEntry> entries) {
    +049        CommandIssuer issuer = commandHelp.getIssuer();
    +050        printSearchHeader(commandHelp, issuer);
    +051        for (HelpEntry e : entries) {
    +052            printSearchEntry(commandHelp, issuer, e);
    +053        }
    +054        printSearchFooter(commandHelp, issuer);
    +055    }
    +056
    +057    public void showDetailedHelp(CommandHelp commandHelp, HelpEntry entry) {
    +058        CommandIssuer issuer = commandHelp.getIssuer();
    +059
    +060        // normal help line
    +061        printDetailedHelpCommand(commandHelp, issuer, entry);
    +062
    +063        // additionally detailed help for params
    +064        for (CommandParameter param : entry.getParameters()) {
    +065            String description = param.getDescription();
    +066            if (description != null && !description.isEmpty()) {
    +067                printDetailedParameter(commandHelp, issuer, entry, param);
    +068            }
    +069        }
    +070    }
    +071
    +072    // ########
    +073    // # help #
    +074    // ########
    +075
    +076    public void printHelpHeader(CommandHelp help, CommandIssuer issuer) {
    +077        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_HEADER, getHeaderFooterFormatReplacements(help));
    +078    }
    +079
    +080    public void printHelpCommand(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    +081        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getEntryFormatReplacements(help, entry));
    +082        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    +083            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    +084        }
    +085    }
    +086
    +087    public void printHelpFooter(CommandHelp help, CommandIssuer issuer) {
    +088        if (help.isOnlyPage()) {
    +089            return;
    +090        }
    +091        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, getHeaderFooterFormatReplacements(help));
    +092    }
    +093
    +094    // ##########
    +095    // # search #
    +096    // ##########
    +097
    +098    public void printSearchHeader(CommandHelp help, CommandIssuer issuer) {
    +099        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_SEARCH_HEADER, getHeaderFooterFormatReplacements(help));
    +100    }
    +101
    +102    public void printSearchEntry(CommandHelp help, CommandIssuer issuer, HelpEntry page) {
    +103        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_FORMAT, getEntryFormatReplacements(help, page));
    +104        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    +105            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    +106        }
    +107    }
    +108
    +109    public void printSearchFooter(CommandHelp help, CommandIssuer issuer) {
    +110        if (help.isOnlyPage()) {
    +111            return;
    +112        }
    +113        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_PAGE_INFORMATION, getHeaderFooterFormatReplacements(help));
    +114    }
    +115
    +116
    +117    // ############
    +118    // # detailed #
    +119    // ############
    +120
    +121    public void printDetailedHelpHeader(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    +122        issuer.sendMessage(MessageType.HELP, MessageKeys.HELP_DETAILED_HEADER,
    +123                "{command}", entry.getCommand(),
    +124                "{commandprefix}", help.getCommandPrefix()
    +125        );
    +126    }
    +127
    +128
    +129    public void printDetailedHelpCommand(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    +130        String formatted = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_COMMAND_FORMAT, getEntryFormatReplacements(help, entry));
    +131        for (String msg : ACFPatterns.NEWLINE.split(formatted)) {
    +132            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    +133        }
    +134    }
    +135
    +136    public void printDetailedParameter(CommandHelp help, CommandIssuer issuer, HelpEntry entry, CommandParameter param) {
    +137        String formattedMsg = this.manager.formatMessage(issuer, MessageType.HELP, MessageKeys.HELP_DETAILED_PARAMETER_FORMAT, getParameterFormatReplacements(help, param, entry));
    +138        for (String msg : ACFPatterns.NEWLINE.split(formattedMsg)) {
    +139            issuer.sendMessageInternal(ACFUtil.rtrim(msg));
    +140        }
    +141    }
    +142
    +143    public void printDetailedHelpFooter(CommandHelp help, CommandIssuer issuer, HelpEntry entry) {
    +144        // default doesn't have a footer
    +145    }
    +146
    +147    /**
    +148     * Override this to control replacements
    +149     *
    +150     * @param help
    +151     * @return
    +152     */
    +153    public String[] getHeaderFooterFormatReplacements(CommandHelp help) {
    +154        return new String[]{
    +155                "{search}", help.search != null ? String.join(" ", help.search) : "",
    +156                "{command}", help.getCommandName(),
    +157                "{commandprefix}", help.getCommandPrefix(),
    +158                "{rootcommand}", help.getCommandName(),
    +159                "{page}", "" + help.getPage(),
    +160                "{totalpages}", "" + help.getTotalPages(),
    +161                "{results}", "" + help.getTotalResults()
    +162        };
    +163    }
    +164
    +165    /**
    +166     * Override this to control replacements
    +167     *
    +168     * @param help
    +169     * @param entry
    +170     * @return
    +171     */
    +172    public String[] getEntryFormatReplacements(CommandHelp help, HelpEntry entry) {
    +173        //{command} {parameters} {separator} {description}
    +174        return new String[]{
    +175                "{command}", entry.getCommand(),
    +176                "{commandprefix}", help.getCommandPrefix(),
    +177                "{parameters}", entry.getParameterSyntax(help.getIssuer()),
    +178                "{separator}", entry.getDescription().isEmpty() ? "" : "-",
    +179                "{description}", entry.getDescription()
    +180        };
    +181    }
    +182
    +183    /**
    +184     * Override this to control replacements
    +185     *
    +186     * @param help
    +187     * @param param
    +188     * @param entry
    +189     * @return
    +190     */
    +191    @NotNull
    +192    public String[] getParameterFormatReplacements(CommandHelp help, CommandParameter param, HelpEntry entry) {
    +193        //{name} {description}
    +194        return new String[]{
    +195                "{name}", param.getDisplayName(help.getIssuer()),
    +196                "{syntaxorname}", ACFUtil.nullDefault(param.getSyntax(help.getIssuer()), param.getDisplayName(help.getIssuer())),
    +197                "{syntax}", ACFUtil.nullDefault(param.getSyntax(help.getIssuer()), ""),
    +198                "{description}", ACFUtil.nullDefault(param.getDescription(), ""),
    +199                "{command}", help.getCommandName(),
    +200                "{fullcommand}", entry.getCommand(),
    +201                "{commandprefix}", help.getCommandPrefix()
    +202        };
    +203    }
    +204}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandIssuer.html b/docs/acf-core/src-html/co/aikar/commands/CommandIssuer.html
    index c845537a..e32f2989 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandIssuer.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandIssuer.html
    @@ -1,111 +1,115 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.locales.MessageKey;
    -027import co.aikar.locales.MessageKeyProvider;
    -028import org.jetbrains.annotations.NotNull;
    -029
    -030import java.util.UUID;
    -031
    -032public interface CommandIssuer {
    -033    /**
    -034     * Gets the issuer in the platforms native object
    -035     * @param <T>
    -036     * @return
    -037     */
    -038    <T> T getIssuer();
    -039
    -040    CommandManager getManager();
    -041
    -042    /**
    -043     * Is this issue a player, or server/console sender
    -044     * @return
    -045     */
    -046    boolean isPlayer();
    -047
    -048    /**
    -049     * Send the Command Issuer a message
    -050     * @param message
    -051     */
    -052    default void sendMessage(String message) {
    -053        getManager().sendMessage(this, MessageType.INFO, MessageKeys.INFO_MESSAGE, "{message}", message);
    -054    }
    -055
    -056    /**
    -057     * @return the unique id of that issuer
    -058     */
    -059    @NotNull UUID getUniqueId();
    -060
    -061    /**
    -062     * Has permission node
    -063     * @param permission
    -064     * @return
    -065     */
    -066    boolean hasPermission(String permission);
    -067
    -068    default void sendError(MessageKeyProvider key, String... replacements) {
    -069        sendMessage(MessageType.ERROR, key.getMessageKey(), replacements);
    -070    }
    -071    default void sendSyntax(MessageKeyProvider key, String... replacements) {
    -072        sendMessage(MessageType.SYNTAX, key.getMessageKey(), replacements);
    -073    }
    -074    default void sendInfo(MessageKeyProvider key, String... replacements) {
    -075        sendMessage(MessageType.INFO, key.getMessageKey(), replacements);
    -076    }
    -077    default void sendError(MessageKey key, String... replacements) {
    -078        sendMessage(MessageType.ERROR, key, replacements);
    -079    }
    -080    default void sendSyntax(MessageKey key, String... replacements) {
    -081        sendMessage(MessageType.SYNTAX, key, replacements);
    -082    }
    -083    default void sendInfo(MessageKey key, String... replacements) {
    -084        sendMessage(MessageType.INFO, key, replacements);
    -085    }
    -086    default void sendMessage(MessageType type, MessageKeyProvider key, String... replacements) {
    -087        sendMessage(type, key.getMessageKey(), replacements);
    -088    }
    -089    default void sendMessage(MessageType type, MessageKey key, String... replacements) {
    -090        getManager().sendMessage(this, type, key, replacements);
    -091    }
    -092
    -093    /**
    -094     * @deprecated Do not call this, for internal use. Not considered part of the API and may break.
    -095     * @param message
    -096     */
    -097    @Deprecated
    -098    void sendMessageInternal(String message);
    -099}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.locales.MessageKey;
    +027import co.aikar.locales.MessageKeyProvider;
    +028import org.jetbrains.annotations.NotNull;
    +029
    +030import java.util.UUID;
    +031
    +032public interface CommandIssuer {
    +033    /**
    +034     * Gets the issuer in the platforms native object
    +035     * @param <T>
    +036     * @return
    +037     */
    +038    <T> T getIssuer();
    +039
    +040    CommandManager getManager();
    +041
    +042    /**
    +043     * Is this issue a player, or server/console sender
    +044     * @return
    +045     */
    +046    boolean isPlayer();
    +047
    +048    /**
    +049     * Send the Command Issuer a message
    +050     * @param message
    +051     */
    +052    default void sendMessage(String message) {
    +053        getManager().sendMessage(this, MessageType.INFO, MessageKeys.INFO_MESSAGE, "{message}", message);
    +054    }
    +055
    +056    /**
    +057     * @return the unique id of that issuer
    +058     */
    +059    @NotNull UUID getUniqueId();
    +060
    +061    /**
    +062     * Has permission node
    +063     * @param permission
    +064     * @return
    +065     */
    +066    boolean hasPermission(String permission);
    +067
    +068    default void sendError(MessageKeyProvider key, String... replacements) {
    +069        sendMessage(MessageType.ERROR, key.getMessageKey(), replacements);
    +070    }
    +071    default void sendSyntax(MessageKeyProvider key, String... replacements) {
    +072        sendMessage(MessageType.SYNTAX, key.getMessageKey(), replacements);
    +073    }
    +074    default void sendInfo(MessageKeyProvider key, String... replacements) {
    +075        sendMessage(MessageType.INFO, key.getMessageKey(), replacements);
    +076    }
    +077    default void sendError(MessageKey key, String... replacements) {
    +078        sendMessage(MessageType.ERROR, key, replacements);
    +079    }
    +080    default void sendSyntax(MessageKey key, String... replacements) {
    +081        sendMessage(MessageType.SYNTAX, key, replacements);
    +082    }
    +083    default void sendInfo(MessageKey key, String... replacements) {
    +084        sendMessage(MessageType.INFO, key, replacements);
    +085    }
    +086    default void sendMessage(MessageType type, MessageKeyProvider key, String... replacements) {
    +087        sendMessage(type, key.getMessageKey(), replacements);
    +088    }
    +089    default void sendMessage(MessageType type, MessageKey key, String... replacements) {
    +090        getManager().sendMessage(this, type, key, replacements);
    +091    }
    +092
    +093    /**
    +094     * @deprecated Do not call this, for internal use. Not considered part of the API and may break.
    +095     * @param message
    +096     */
    +097    @Deprecated
    +098    void sendMessageInternal(String message);
    +099}
     
     
     
    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 d981b8a1..72d9eb0a 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandManager.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandManager.html
    @@ -1,596 +1,600 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.annotation.Dependency;
    -027import co.aikar.locales.MessageKeyProvider;
    -028import co.aikar.util.Table;
    -029import org.jetbrains.annotations.NotNull;
    -030
    -031import java.lang.reflect.Field;
    -032import java.lang.reflect.InvocationTargetException;
    -033import java.lang.reflect.Method;
    -034import java.util.ArrayList;
    -035import java.util.Arrays;
    -036import java.util.Collection;
    -037import java.util.HashMap;
    -038import java.util.HashSet;
    -039import java.util.IdentityHashMap;
    -040import java.util.List;
    -041import java.util.Locale;
    -042import java.util.Map;
    -043import java.util.Objects;
    -044import java.util.Set;
    -045import java.util.Stack;
    -046import java.util.UUID;
    -047import java.util.concurrent.ConcurrentHashMap;
    -048
    -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.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));
    -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<>();
    -085
    -086    private Set<String> unstableAPIs = new HashSet<>();
    -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();
    -251
    -252    public abstract boolean isCommandIssuer(Class<?> type);
    -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);
    -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;
    -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);
    -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 it's 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 it's 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.
    -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        }
    -411
    -412        message = getCommandReplacements().replace(message);
    -413        message = getLocales().replaceI18NStrings(message);
    -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    }
    -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        });
    -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    }
    -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
    -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
    -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
    -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;
    -579    }
    -580
    -581    public String getCommandPrefix(CommandIssuer issuer) {
    -582        return "";
    -583    }
    -584}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.annotation.Dependency;
    +027import co.aikar.locales.MessageKeyProvider;
    +028import co.aikar.util.Table;
    +029import org.jetbrains.annotations.NotNull;
    +030
    +031import java.lang.reflect.Field;
    +032import java.lang.reflect.InvocationTargetException;
    +033import java.lang.reflect.Method;
    +034import java.util.ArrayList;
    +035import java.util.Arrays;
    +036import java.util.Collection;
    +037import java.util.HashMap;
    +038import java.util.HashSet;
    +039import java.util.IdentityHashMap;
    +040import java.util.List;
    +041import java.util.Locale;
    +042import java.util.Map;
    +043import java.util.Objects;
    +044import java.util.Set;
    +045import java.util.Stack;
    +046import java.util.UUID;
    +047import java.util.concurrent.ConcurrentHashMap;
    +048
    +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));
    +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<>();
    +085
    +086    private Set<String> unstableAPIs = new HashSet<>();
    +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();
    +251
    +252    public abstract boolean isCommandIssuer(Class<?> type);
    +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);
    +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;
    +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);
    +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 it's 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 it's 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.
    +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        }
    +411
    +412        message = getCommandReplacements().replace(message);
    +413        message = getLocales().replaceI18NStrings(message);
    +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    }
    +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        });
    +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    }
    +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
    +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
    +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
    +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;
    +579    }
    +580
    +581    public String getCommandPrefix(CommandIssuer issuer) {
    +582        return "";
    +583    }
    +584}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandOperationContext.html b/docs/acf-core/src-html/co/aikar/commands/CommandOperationContext.html
    index b2a235a3..0e23a969 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandOperationContext.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandOperationContext.html
    @@ -1,118 +1,122 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.lang.annotation.Annotation;
    -027import java.util.List;
    -028
    -029/**
    -030 * Holds information about the currently executing command on this thread
    -031 */
    -032public class CommandOperationContext<I extends CommandIssuer> {
    -033
    -034    private final CommandManager manager;
    -035    private final I issuer;
    -036    private final BaseCommand command;
    -037    private final String commandLabel;
    -038    private final String[] args;
    -039    private final boolean isAsync;
    -040    private RegisteredCommand registeredCommand;
    -041    List<String> enumCompletionValues;
    -042
    -043    CommandOperationContext(CommandManager manager, I issuer, BaseCommand command, String commandLabel, String[] args, boolean isAsync) {
    -044        this.manager = manager;
    -045        this.issuer = issuer;
    -046        this.command = command;
    -047        this.commandLabel = commandLabel;
    -048        this.args = args;
    -049        this.isAsync = isAsync;
    -050    }
    -051
    -052    public CommandManager getCommandManager() {
    -053        return manager;
    -054    }
    -055
    -056    public I getCommandIssuer() {
    -057        return issuer;
    -058    }
    -059
    -060    public BaseCommand getCommand() {
    -061        return command;
    -062    }
    -063
    -064    public String getCommandLabel() {
    -065        return commandLabel;
    -066    }
    -067
    -068    public String[] getArgs() {
    -069        return args;
    -070    }
    -071
    -072    public boolean isAsync() {
    -073        return isAsync;
    -074    }
    -075
    -076    public void setRegisteredCommand(RegisteredCommand registeredCommand) {
    -077        this.registeredCommand = registeredCommand;
    -078    }
    -079
    -080    public RegisteredCommand getRegisteredCommand() {
    -081        return registeredCommand;
    -082    }
    -083
    -084    /**
    -085     * This method will not support annotation processors!! use getAnnotationValue or hasAnnotation
    -086     *
    -087     * @deprecated Use {@link #getAnnotationValue(Class)}
    -088     */
    -089    @Deprecated
    -090    public <T extends Annotation> T getAnnotation(Class<T> anno) {
    -091        return registeredCommand.method.getAnnotation(anno);
    -092    }
    -093
    -094    public <T extends Annotation> String getAnnotationValue(Class<T> cls) {
    -095        return manager.getAnnotations().getAnnotationValue(registeredCommand.method, cls);
    -096    }
    -097
    -098    public <T extends Annotation> String getAnnotationValue(Class<T> cls, int options) {
    -099        return manager.getAnnotations().getAnnotationValue(registeredCommand.method, cls, options);
    -100    }
    -101
    -102    public boolean hasAnnotation(Class<? extends Annotation> anno) {
    -103        return getAnnotation(anno) != null;
    -104    }
    -105
    -106}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.lang.annotation.Annotation;
    +027import java.util.List;
    +028
    +029/**
    +030 * Holds information about the currently executing command on this thread
    +031 */
    +032public class CommandOperationContext<I extends CommandIssuer> {
    +033
    +034    private final CommandManager manager;
    +035    private final I issuer;
    +036    private final BaseCommand command;
    +037    private final String commandLabel;
    +038    private final String[] args;
    +039    private final boolean isAsync;
    +040    private RegisteredCommand registeredCommand;
    +041    List<String> enumCompletionValues;
    +042
    +043    CommandOperationContext(CommandManager manager, I issuer, BaseCommand command, String commandLabel, String[] args, boolean isAsync) {
    +044        this.manager = manager;
    +045        this.issuer = issuer;
    +046        this.command = command;
    +047        this.commandLabel = commandLabel;
    +048        this.args = args;
    +049        this.isAsync = isAsync;
    +050    }
    +051
    +052    public CommandManager getCommandManager() {
    +053        return manager;
    +054    }
    +055
    +056    public I getCommandIssuer() {
    +057        return issuer;
    +058    }
    +059
    +060    public BaseCommand getCommand() {
    +061        return command;
    +062    }
    +063
    +064    public String getCommandLabel() {
    +065        return commandLabel;
    +066    }
    +067
    +068    public String[] getArgs() {
    +069        return args;
    +070    }
    +071
    +072    public boolean isAsync() {
    +073        return isAsync;
    +074    }
    +075
    +076    public void setRegisteredCommand(RegisteredCommand registeredCommand) {
    +077        this.registeredCommand = registeredCommand;
    +078    }
    +079
    +080    public RegisteredCommand getRegisteredCommand() {
    +081        return registeredCommand;
    +082    }
    +083
    +084    /**
    +085     * This method will not support annotation processors!! use getAnnotationValue or hasAnnotation
    +086     *
    +087     * @deprecated Use {@link #getAnnotationValue(Class)}
    +088     */
    +089    @Deprecated
    +090    public <T extends Annotation> T getAnnotation(Class<T> anno) {
    +091        return registeredCommand.method.getAnnotation(anno);
    +092    }
    +093
    +094    public <T extends Annotation> String getAnnotationValue(Class<T> cls) {
    +095        return manager.getAnnotations().getAnnotationValue(registeredCommand.method, cls);
    +096    }
    +097
    +098    public <T extends Annotation> String getAnnotationValue(Class<T> cls, int options) {
    +099        return manager.getAnnotations().getAnnotationValue(registeredCommand.method, cls, options);
    +100    }
    +101
    +102    public boolean hasAnnotation(Class<? extends Annotation> anno) {
    +103        return getAnnotation(anno) != null;
    +104    }
    +105
    +106}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandParameter.html b/docs/acf-core/src-html/co/aikar/commands/CommandParameter.html
    index 2a97d6b3..8bbade86 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandParameter.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandParameter.html
    @@ -1,329 +1,333 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.annotation.CommandPermission;
    -027import co.aikar.commands.annotation.Conditions;
    -028import co.aikar.commands.annotation.Default;
    -029import co.aikar.commands.annotation.Description;
    -030import co.aikar.commands.annotation.Flags;
    -031import co.aikar.commands.annotation.Name;
    -032import co.aikar.commands.annotation.Optional;
    -033import co.aikar.commands.annotation.Single;
    -034import co.aikar.commands.annotation.Syntax;
    -035import co.aikar.commands.annotation.Values;
    -036import co.aikar.commands.contexts.ContextResolver;
    -037import co.aikar.commands.contexts.IssuerAwareContextResolver;
    -038import co.aikar.commands.contexts.IssuerOnlyContextResolver;
    -039import co.aikar.commands.contexts.OptionalContextResolver;
    -040import co.aikar.locales.MessageKey;
    -041
    -042import java.lang.reflect.Parameter;
    -043import java.util.Arrays;
    -044import java.util.HashMap;
    -045import java.util.HashSet;
    -046import java.util.Map;
    -047import java.util.Set;
    -048
    -049public class CommandParameter<CEC extends CommandExecutionContext<CEC, ? extends CommandIssuer>> {
    -050    private final Parameter parameter;
    -051    private final Class<?> type;
    -052    private final String name;
    -053    private final CommandManager manager;
    -054    private final int paramIndex;
    -055
    -056    private ContextResolver<?, CEC> resolver;
    -057    private boolean optional;
    -058    private Set<String> permissions = new HashSet<>();
    -059    private String permission;
    -060    private String description;
    -061    private String defaultValue;
    -062    private String syntax;
    -063    private String conditions;
    -064    private boolean requiresInput;
    -065    private boolean commandIssuer;
    -066    private String[] values;
    -067    private Map<String, String> flags;
    -068    private boolean canConsumeInput;
    -069    private boolean optionalResolver;
    -070    boolean consumesRest;
    -071    private boolean isLast;
    -072    private boolean isOptionalInput;
    -073    private CommandParameter<CEC> nextParam;
    -074
    -075    public CommandParameter(RegisteredCommand<CEC> command, Parameter param, int paramIndex, boolean isLast) {
    -076        this.parameter = param;
    -077        this.isLast = isLast;
    -078        this.type = param.getType();
    -079        this.manager = command.manager;
    -080        this.paramIndex = paramIndex;
    -081        Annotations annotations = manager.getAnnotations();
    -082
    -083        String annotationName = annotations.getAnnotationValue(param, Name.class, Annotations.REPLACEMENTS);
    -084        this.name = annotationName != null ? annotationName : param.getName();
    -085        this.defaultValue = annotations.getAnnotationValue(param, Default.class, Annotations.REPLACEMENTS | (type != String.class ? Annotations.NO_EMPTY : 0));
    -086        this.description = annotations.getAnnotationValue(param, Description.class, Annotations.REPLACEMENTS | Annotations.DEFAULT_EMPTY);
    -087        this.conditions = annotations.getAnnotationValue(param, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -088
    -089        //noinspection unchecked
    -090        this.resolver = manager.getCommandContexts().getResolver(type);
    -091        if (this.resolver == null) {
    -092            ACFUtil.sneaky(new InvalidCommandContextException(
    -093                    "Parameter " + type.getSimpleName() + " of " + command + " has no applicable context resolver"
    -094            ));
    -095        }
    -096
    -097        this.optional = annotations.hasAnnotation(param, Optional.class) || this.defaultValue != null || (isLast && type == String[].class);
    -098        this.permission = annotations.getAnnotationValue(param, CommandPermission.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -099        this.optionalResolver = isOptionalResolver(resolver);
    -100        this.requiresInput = !this.optional && !this.optionalResolver;
    -101        //noinspection unchecked
    -102        this.commandIssuer = paramIndex == 0 && manager.isCommandIssuer(type);
    -103        this.canConsumeInput = !this.commandIssuer && !(resolver instanceof IssuerOnlyContextResolver);
    -104        this.consumesRest = (type == String.class && !annotations.hasAnnotation(param, Single.class)) || (isLast && type == String[].class);
    -105
    -106        this.values = annotations.getAnnotationValues(param, Values.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -107
    -108        this.syntax = null;
    -109        this.isOptionalInput = !requiresInput && canConsumeInput;
    -110
    -111        if (!commandIssuer) {
    -112            this.syntax = annotations.getAnnotationValue(param, Syntax.class);
    -113        }
    -114
    -115        this.flags = new HashMap<>();
    -116        String flags = annotations.getAnnotationValue(param, Flags.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -117        if (flags != null) {
    -118            parseFlags(flags);
    -119        }
    -120        inheritContextFlags(command.scope);
    -121        this.computePermissions();
    -122    }
    -123
    -124    private void inheritContextFlags(BaseCommand scope) {
    -125        if (!scope.contextFlags.isEmpty()) {
    -126            Class<?> pCls = this.type;
    -127            do {
    -128                parseFlags(scope.contextFlags.get(pCls));
    -129            } while ((pCls = pCls.getSuperclass()) != null);
    -130        }
    -131        if (scope.parentCommand != null) {
    -132            inheritContextFlags(scope.parentCommand);
    -133        }
    -134    }
    -135
    -136    private void parseFlags(String flags) {
    -137        if (flags != null) {
    -138            for (String s : ACFPatterns.COMMA.split(manager.getCommandReplacements().replace(flags))) {
    -139                String[] v = ACFPatterns.EQUALS.split(s, 2);
    -140                if (!this.flags.containsKey(v[0])) {
    -141                    this.flags.put(v[0], v.length > 1 ? v[1] : null);
    -142                }
    -143            }
    -144        }
    -145    }
    -146
    -147    private void computePermissions() {
    -148        this.permissions.clear();
    -149        if (this.permission != null && !this.permission.isEmpty()) {
    -150            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    -151        }
    -152    }
    -153
    -154    private boolean isOptionalResolver(ContextResolver<?, CEC> resolver) {
    -155        return resolver instanceof IssuerAwareContextResolver
    -156                || resolver instanceof IssuerOnlyContextResolver
    -157                || resolver instanceof OptionalContextResolver;
    -158    }
    -159
    -160
    -161    public Parameter getParameter() {
    -162        return parameter;
    -163    }
    -164
    -165    public Class<?> getType() {
    -166        return type;
    -167    }
    -168
    -169    public String getName() {
    -170        return name;
    -171    }
    -172
    -173    public String getDisplayName(CommandIssuer issuer) {
    -174        String translated = manager.getLocales().getOptionalMessage(issuer, MessageKey.of("acf-core.parameter." + name.toLowerCase()));
    -175        return translated != null ? translated : name;
    -176    }
    -177
    -178    public CommandManager getManager() {
    -179        return manager;
    -180    }
    -181
    -182    public int getParamIndex() {
    -183        return paramIndex;
    -184    }
    -185
    -186    public ContextResolver<?, CEC> getResolver() {
    -187        return resolver;
    -188    }
    -189
    -190    public void setResolver(ContextResolver<?, CEC> resolver) {
    -191        this.resolver = resolver;
    -192    }
    -193
    -194    public boolean isOptionalInput() {
    -195        return isOptionalInput;
    -196    }
    -197
    -198    public boolean isOptional() {
    -199        return optional;
    -200    }
    -201
    -202    public void setOptional(boolean optional) {
    -203        this.optional = optional;
    -204    }
    -205
    -206    public String getDescription() {
    -207        return description;
    -208    }
    -209
    -210    public void setDescription(String description) {
    -211        this.description = description;
    -212    }
    -213
    -214    public String getDefaultValue() {
    -215        return defaultValue;
    -216    }
    -217
    -218    public void setDefaultValue(String defaultValue) {
    -219        this.defaultValue = defaultValue;
    -220    }
    -221
    -222    public boolean isCommandIssuer() {
    -223        return commandIssuer;
    -224    }
    -225
    -226    public void setCommandIssuer(boolean commandIssuer) {
    -227        this.commandIssuer = commandIssuer;
    -228    }
    -229
    -230    public String[] getValues() {
    -231        return values;
    -232    }
    -233
    -234    public void setValues(String[] values) {
    -235        this.values = values;
    -236    }
    -237
    -238    public Map<String, String> getFlags() {
    -239        return flags;
    -240    }
    -241
    -242    public void setFlags(Map<String, String> flags) {
    -243        this.flags = flags;
    -244    }
    -245
    -246    public boolean canConsumeInput() {
    -247        return canConsumeInput;
    -248    }
    -249
    -250    public void setCanConsumeInput(boolean canConsumeInput) {
    -251        this.canConsumeInput = canConsumeInput;
    -252    }
    -253
    -254    public void setOptionalResolver(boolean optionalResolver) {
    -255        this.optionalResolver = optionalResolver;
    -256    }
    -257
    -258    public boolean isOptionalResolver() {
    -259        return optionalResolver;
    -260    }
    -261
    -262    public boolean requiresInput() {
    -263        return requiresInput;
    -264    }
    -265
    -266    public void setRequiresInput(boolean requiresInput) {
    -267        this.requiresInput = requiresInput;
    -268    }
    -269
    -270    public String getSyntax() {
    -271        return getSyntax(null);
    -272    }
    -273
    -274    public String getSyntax(CommandIssuer issuer) {
    -275        if (commandIssuer) return null;
    -276        if (syntax == null) {
    -277            if (isOptionalInput) {
    -278                return "[" + getDisplayName(issuer) + "]";
    -279            } else if (requiresInput) {
    -280                return "<" + getDisplayName(issuer) + ">";
    -281            }
    -282        }
    -283        return syntax;
    -284    }
    -285
    -286    public void setSyntax(String syntax) {
    -287        this.syntax = syntax;
    -288    }
    -289
    -290    public String getConditions() {
    -291        return conditions;
    -292    }
    -293
    -294    public void setConditions(String conditions) {
    -295        this.conditions = conditions;
    -296    }
    -297
    -298    public Set<String> getRequiredPermissions() {
    -299        return permissions;
    -300    }
    -301
    -302    public void setNextParam(CommandParameter<CEC> nextParam) {
    -303        this.nextParam = nextParam;
    -304    }
    -305
    -306    public CommandParameter<CEC> getNextParam() {
    -307        return nextParam;
    -308    }
    -309
    -310    public boolean canExecuteWithoutInput() {
    -311        return (!canConsumeInput || isOptionalInput()) && (nextParam == null || nextParam.canExecuteWithoutInput());
    -312    }
    -313
    -314    public boolean isLast() {
    -315        return isLast;
    -316    }
    -317}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.annotation.CommandPermission;
    +027import co.aikar.commands.annotation.Conditions;
    +028import co.aikar.commands.annotation.Default;
    +029import co.aikar.commands.annotation.Description;
    +030import co.aikar.commands.annotation.Flags;
    +031import co.aikar.commands.annotation.Name;
    +032import co.aikar.commands.annotation.Optional;
    +033import co.aikar.commands.annotation.Single;
    +034import co.aikar.commands.annotation.Syntax;
    +035import co.aikar.commands.annotation.Values;
    +036import co.aikar.commands.contexts.ContextResolver;
    +037import co.aikar.commands.contexts.IssuerAwareContextResolver;
    +038import co.aikar.commands.contexts.IssuerOnlyContextResolver;
    +039import co.aikar.commands.contexts.OptionalContextResolver;
    +040import co.aikar.locales.MessageKey;
    +041
    +042import java.lang.reflect.Parameter;
    +043import java.util.Arrays;
    +044import java.util.HashMap;
    +045import java.util.HashSet;
    +046import java.util.Map;
    +047import java.util.Set;
    +048
    +049public class CommandParameter<CEC extends CommandExecutionContext<CEC, ? extends CommandIssuer>> {
    +050    private final Parameter parameter;
    +051    private final Class<?> type;
    +052    private final String name;
    +053    private final CommandManager manager;
    +054    private final int paramIndex;
    +055
    +056    private ContextResolver<?, CEC> resolver;
    +057    private boolean optional;
    +058    private Set<String> permissions = new HashSet<>();
    +059    private String permission;
    +060    private String description;
    +061    private String defaultValue;
    +062    private String syntax;
    +063    private String conditions;
    +064    private boolean requiresInput;
    +065    private boolean commandIssuer;
    +066    private String[] values;
    +067    private Map<String, String> flags;
    +068    private boolean canConsumeInput;
    +069    private boolean optionalResolver;
    +070    boolean consumesRest;
    +071    private boolean isLast;
    +072    private boolean isOptionalInput;
    +073    private CommandParameter<CEC> nextParam;
    +074
    +075    public CommandParameter(RegisteredCommand<CEC> command, Parameter param, int paramIndex, boolean isLast) {
    +076        this.parameter = param;
    +077        this.isLast = isLast;
    +078        this.type = param.getType();
    +079        this.manager = command.manager;
    +080        this.paramIndex = paramIndex;
    +081        Annotations annotations = manager.getAnnotations();
    +082
    +083        String annotationName = annotations.getAnnotationValue(param, Name.class, Annotations.REPLACEMENTS);
    +084        this.name = annotationName != null ? annotationName : param.getName();
    +085        this.defaultValue = annotations.getAnnotationValue(param, Default.class, Annotations.REPLACEMENTS | (type != String.class ? Annotations.NO_EMPTY : 0));
    +086        this.description = annotations.getAnnotationValue(param, Description.class, Annotations.REPLACEMENTS | Annotations.DEFAULT_EMPTY);
    +087        this.conditions = annotations.getAnnotationValue(param, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +088
    +089        //noinspection unchecked
    +090        this.resolver = manager.getCommandContexts().getResolver(type);
    +091        if (this.resolver == null) {
    +092            ACFUtil.sneaky(new InvalidCommandContextException(
    +093                    "Parameter " + type.getSimpleName() + " of " + command + " has no applicable context resolver"
    +094            ));
    +095        }
    +096
    +097        this.optional = annotations.hasAnnotation(param, Optional.class) || this.defaultValue != null || (isLast && type == String[].class);
    +098        this.permission = annotations.getAnnotationValue(param, CommandPermission.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +099        this.optionalResolver = isOptionalResolver(resolver);
    +100        this.requiresInput = !this.optional && !this.optionalResolver;
    +101        //noinspection unchecked
    +102        this.commandIssuer = paramIndex == 0 && manager.isCommandIssuer(type);
    +103        this.canConsumeInput = !this.commandIssuer && !(resolver instanceof IssuerOnlyContextResolver);
    +104        this.consumesRest = (type == String.class && !annotations.hasAnnotation(param, Single.class)) || (isLast && type == String[].class);
    +105
    +106        this.values = annotations.getAnnotationValues(param, Values.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +107
    +108        this.syntax = null;
    +109        this.isOptionalInput = !requiresInput && canConsumeInput;
    +110
    +111        if (!commandIssuer) {
    +112            this.syntax = annotations.getAnnotationValue(param, Syntax.class);
    +113        }
    +114
    +115        this.flags = new HashMap<>();
    +116        String flags = annotations.getAnnotationValue(param, Flags.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +117        if (flags != null) {
    +118            parseFlags(flags);
    +119        }
    +120        inheritContextFlags(command.scope);
    +121        this.computePermissions();
    +122    }
    +123
    +124    private void inheritContextFlags(BaseCommand scope) {
    +125        if (!scope.contextFlags.isEmpty()) {
    +126            Class<?> pCls = this.type;
    +127            do {
    +128                parseFlags(scope.contextFlags.get(pCls));
    +129            } while ((pCls = pCls.getSuperclass()) != null);
    +130        }
    +131        if (scope.parentCommand != null) {
    +132            inheritContextFlags(scope.parentCommand);
    +133        }
    +134    }
    +135
    +136    private void parseFlags(String flags) {
    +137        if (flags != null) {
    +138            for (String s : ACFPatterns.COMMA.split(manager.getCommandReplacements().replace(flags))) {
    +139                String[] v = ACFPatterns.EQUALS.split(s, 2);
    +140                if (!this.flags.containsKey(v[0])) {
    +141                    this.flags.put(v[0], v.length > 1 ? v[1] : null);
    +142                }
    +143            }
    +144        }
    +145    }
    +146
    +147    private void computePermissions() {
    +148        this.permissions.clear();
    +149        if (this.permission != null && !this.permission.isEmpty()) {
    +150            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    +151        }
    +152    }
    +153
    +154    private boolean isOptionalResolver(ContextResolver<?, CEC> resolver) {
    +155        return resolver instanceof IssuerAwareContextResolver
    +156                || resolver instanceof IssuerOnlyContextResolver
    +157                || resolver instanceof OptionalContextResolver;
    +158    }
    +159
    +160
    +161    public Parameter getParameter() {
    +162        return parameter;
    +163    }
    +164
    +165    public Class<?> getType() {
    +166        return type;
    +167    }
    +168
    +169    public String getName() {
    +170        return name;
    +171    }
    +172
    +173    public String getDisplayName(CommandIssuer issuer) {
    +174        String translated = manager.getLocales().getOptionalMessage(issuer, MessageKey.of("acf-core.parameter." + name.toLowerCase()));
    +175        return translated != null ? translated : name;
    +176    }
    +177
    +178    public CommandManager getManager() {
    +179        return manager;
    +180    }
    +181
    +182    public int getParamIndex() {
    +183        return paramIndex;
    +184    }
    +185
    +186    public ContextResolver<?, CEC> getResolver() {
    +187        return resolver;
    +188    }
    +189
    +190    public void setResolver(ContextResolver<?, CEC> resolver) {
    +191        this.resolver = resolver;
    +192    }
    +193
    +194    public boolean isOptionalInput() {
    +195        return isOptionalInput;
    +196    }
    +197
    +198    public boolean isOptional() {
    +199        return optional;
    +200    }
    +201
    +202    public void setOptional(boolean optional) {
    +203        this.optional = optional;
    +204    }
    +205
    +206    public String getDescription() {
    +207        return description;
    +208    }
    +209
    +210    public void setDescription(String description) {
    +211        this.description = description;
    +212    }
    +213
    +214    public String getDefaultValue() {
    +215        return defaultValue;
    +216    }
    +217
    +218    public void setDefaultValue(String defaultValue) {
    +219        this.defaultValue = defaultValue;
    +220    }
    +221
    +222    public boolean isCommandIssuer() {
    +223        return commandIssuer;
    +224    }
    +225
    +226    public void setCommandIssuer(boolean commandIssuer) {
    +227        this.commandIssuer = commandIssuer;
    +228    }
    +229
    +230    public String[] getValues() {
    +231        return values;
    +232    }
    +233
    +234    public void setValues(String[] values) {
    +235        this.values = values;
    +236    }
    +237
    +238    public Map<String, String> getFlags() {
    +239        return flags;
    +240    }
    +241
    +242    public void setFlags(Map<String, String> flags) {
    +243        this.flags = flags;
    +244    }
    +245
    +246    public boolean canConsumeInput() {
    +247        return canConsumeInput;
    +248    }
    +249
    +250    public void setCanConsumeInput(boolean canConsumeInput) {
    +251        this.canConsumeInput = canConsumeInput;
    +252    }
    +253
    +254    public void setOptionalResolver(boolean optionalResolver) {
    +255        this.optionalResolver = optionalResolver;
    +256    }
    +257
    +258    public boolean isOptionalResolver() {
    +259        return optionalResolver;
    +260    }
    +261
    +262    public boolean requiresInput() {
    +263        return requiresInput;
    +264    }
    +265
    +266    public void setRequiresInput(boolean requiresInput) {
    +267        this.requiresInput = requiresInput;
    +268    }
    +269
    +270    public String getSyntax() {
    +271        return getSyntax(null);
    +272    }
    +273
    +274    public String getSyntax(CommandIssuer issuer) {
    +275        if (commandIssuer) return null;
    +276        if (syntax == null) {
    +277            if (isOptionalInput) {
    +278                return "[" + getDisplayName(issuer) + "]";
    +279            } else if (requiresInput) {
    +280                return "<" + getDisplayName(issuer) + ">";
    +281            }
    +282        }
    +283        return syntax;
    +284    }
    +285
    +286    public void setSyntax(String syntax) {
    +287        this.syntax = syntax;
    +288    }
    +289
    +290    public String getConditions() {
    +291        return conditions;
    +292    }
    +293
    +294    public void setConditions(String conditions) {
    +295        this.conditions = conditions;
    +296    }
    +297
    +298    public Set<String> getRequiredPermissions() {
    +299        return permissions;
    +300    }
    +301
    +302    public void setNextParam(CommandParameter<CEC> nextParam) {
    +303        this.nextParam = nextParam;
    +304    }
    +305
    +306    public CommandParameter<CEC> getNextParam() {
    +307        return nextParam;
    +308    }
    +309
    +310    public boolean canExecuteWithoutInput() {
    +311        return (!canConsumeInput || isOptionalInput()) && (nextParam == null || nextParam.canExecuteWithoutInput());
    +312    }
    +313
    +314    public boolean isLast() {
    +315        return isLast;
    +316    }
    +317}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/CommandReplacements.html b/docs/acf-core/src-html/co/aikar/commands/CommandReplacements.html
    index 38f5b639..f9e1f038 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/CommandReplacements.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/CommandReplacements.html
    @@ -1,106 +1,110 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import org.jetbrains.annotations.Nullable;
    -027
    -028import java.util.AbstractMap;
    -029import java.util.LinkedHashMap;
    -030import java.util.Locale;
    -031import java.util.Map;
    -032import java.util.regex.Matcher;
    -033import java.util.regex.Pattern;
    -034
    -035/**
    -036 * Manages replacement template strings
    -037 */
    -038public class CommandReplacements {
    -039
    -040    private final CommandManager manager;
    -041    private final Map<String, Map.Entry<Pattern, String>> replacements = new LinkedHashMap<>();
    -042
    -043    CommandReplacements(CommandManager manager) {
    -044        this.manager = manager;
    -045        addReplacement0("truthy", "true|false|yes|no|1|0|on|off|t|f");
    -046    }
    -047
    -048    public void addReplacements(String... replacements) {
    -049        if (replacements.length == 0 || replacements.length % 2 != 0) {
    -050            throw new IllegalArgumentException("Must pass a number of arguments divisible by 2.");
    -051        }
    -052        for (int i = 0; i < replacements.length; i += 2) {
    -053            addReplacement(replacements[i], replacements[i+1]);
    -054        }
    -055    }
    -056
    -057    public String addReplacement(String key, String val) {
    -058        return addReplacement0(key, val);
    -059    }
    -060
    -061    @Nullable
    -062    private String addReplacement0(String key, String val) {
    -063        key = ACFPatterns.PERCENTAGE.matcher(key.toLowerCase(Locale.ENGLISH)).replaceAll("");
    -064        Pattern pattern = Pattern.compile("%" + Pattern.quote(key) + "\\b", Pattern.CASE_INSENSITIVE);
    -065
    -066        Map.Entry<Pattern, String> entry = new AbstractMap.SimpleImmutableEntry<>(pattern, val);
    -067        Map.Entry<Pattern, String> replaced = replacements.put(key, entry);
    -068
    -069        if (replaced != null) {
    -070            return replaced.getValue();
    -071        }
    -072
    -073        return null;
    -074    }
    -075
    -076    public String replace(String text) {
    -077        if (text == null) {
    -078            return null;
    -079        }
    -080
    -081        for (Map.Entry<Pattern, String> entry : replacements.values()) {
    -082            text = entry.getKey().matcher(text).replaceAll(entry.getValue());
    -083        }
    -084
    -085        // check for unregistered replacements
    -086        Pattern pattern = Pattern.compile("%.[^\\s]*");
    -087        Matcher matcher = pattern.matcher(text);
    -088        while (matcher.find()) {
    -089            this.manager.log(LogLevel.ERROR, "Found unregistered replacement: " + matcher.group());
    -090        }
    -091
    -092        return text;
    -093    }
    -094}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import org.jetbrains.annotations.Nullable;
    +027
    +028import java.util.AbstractMap;
    +029import java.util.LinkedHashMap;
    +030import java.util.Locale;
    +031import java.util.Map;
    +032import java.util.regex.Matcher;
    +033import java.util.regex.Pattern;
    +034
    +035/**
    +036 * Manages replacement template strings
    +037 */
    +038public class CommandReplacements {
    +039
    +040    private final CommandManager manager;
    +041    private final Map<String, Map.Entry<Pattern, String>> replacements = new LinkedHashMap<>();
    +042
    +043    CommandReplacements(CommandManager manager) {
    +044        this.manager = manager;
    +045        addReplacement0("truthy", "true|false|yes|no|1|0|on|off|t|f");
    +046    }
    +047
    +048    public void addReplacements(String... replacements) {
    +049        if (replacements.length == 0 || replacements.length % 2 != 0) {
    +050            throw new IllegalArgumentException("Must pass a number of arguments divisible by 2.");
    +051        }
    +052        for (int i = 0; i < replacements.length; i += 2) {
    +053            addReplacement(replacements[i], replacements[i + 1]);
    +054        }
    +055    }
    +056
    +057    public String addReplacement(String key, String val) {
    +058        return addReplacement0(key, val);
    +059    }
    +060
    +061    @Nullable
    +062    private String addReplacement0(String key, String val) {
    +063        key = ACFPatterns.PERCENTAGE.matcher(key.toLowerCase(Locale.ENGLISH)).replaceAll("");
    +064        Pattern pattern = Pattern.compile("%\\{" + Pattern.quote(key) + "}|%" + Pattern.quote(key) + "\\b",
    +065                Pattern.CASE_INSENSITIVE);
    +066
    +067        Map.Entry<Pattern, String> entry = new AbstractMap.SimpleImmutableEntry<>(pattern, val);
    +068        Map.Entry<Pattern, String> replaced = replacements.put(key, entry);
    +069
    +070        if (replaced != null) {
    +071            return replaced.getValue();
    +072        }
    +073
    +074        return null;
    +075    }
    +076
    +077    public String replace(String text) {
    +078        if (text == null) {
    +079            return null;
    +080        }
    +081
    +082        for (Map.Entry<Pattern, String> entry : replacements.values()) {
    +083            text = entry.getKey().matcher(text).replaceAll(entry.getValue());
    +084        }
    +085
    +086        // check for unregistered replacements
    +087        Matcher matcher = ACFPatterns.REPLACEMENT_PATTERN.matcher(text);
    +088        while (matcher.find()) {
    +089            this.manager.log(LogLevel.ERROR, "Found unregistered replacement: " + matcher.group());
    +090        }
    +091
    +092        return text;
    +093    }
    +094}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/ConditionContext.html b/docs/acf-core/src-html/co/aikar/commands/ConditionContext.html
    index 6fb887bf..1c121f17 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/ConditionContext.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/ConditionContext.html
    @@ -1,78 +1,82 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.HashMap;
    -027import java.util.Map;
    -028
    -029public class ConditionContext <I extends CommandIssuer> {
    -030
    -031    private final I issuer;
    -032    private final String config;
    -033    private final Map<String, String> configs;
    -034
    -035    ConditionContext(I issuer, String config) {
    -036        this.issuer = issuer;
    -037        this.config = config;
    -038        this.configs = new HashMap<>();
    -039        if (config != null) {
    -040            for (String s : ACFPatterns.COMMA.split(config)) {
    -041                String[] v = ACFPatterns.EQUALS.split(s, 2);
    -042                this.configs.put(v[0], v.length > 1 ? v[1] : null);
    -043            }
    -044        }
    -045    }
    -046
    -047
    -048    public I getIssuer() {
    -049        return issuer;
    -050    }
    -051
    -052    public String getConfig() {
    -053        return this.config;
    -054    }
    -055    public boolean hasConfig(String flag) {
    -056        return configs.containsKey(flag);
    -057    }
    -058
    -059    public String getConfigValue(String flag, String def) {
    -060        return configs.getOrDefault(flag, def);
    -061    }
    -062
    -063    public Integer getConfigValue(String flag, Integer def) {
    -064        return ACFUtil.parseInt(this.configs.get(flag), def);
    -065    }
    -066}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.HashMap;
    +027import java.util.Map;
    +028
    +029public class ConditionContext <I extends CommandIssuer> {
    +030
    +031    private final I issuer;
    +032    private final String config;
    +033    private final Map<String, String> configs;
    +034
    +035    ConditionContext(I issuer, String config) {
    +036        this.issuer = issuer;
    +037        this.config = config;
    +038        this.configs = new HashMap<>();
    +039        if (config != null) {
    +040            for (String s : ACFPatterns.COMMA.split(config)) {
    +041                String[] v = ACFPatterns.EQUALS.split(s, 2);
    +042                this.configs.put(v[0], v.length > 1 ? v[1] : null);
    +043            }
    +044        }
    +045    }
    +046
    +047
    +048    public I getIssuer() {
    +049        return issuer;
    +050    }
    +051
    +052    public String getConfig() {
    +053        return this.config;
    +054    }
    +055    public boolean hasConfig(String flag) {
    +056        return configs.containsKey(flag);
    +057    }
    +058
    +059    public String getConfigValue(String flag, String def) {
    +060        return configs.getOrDefault(flag, def);
    +061    }
    +062
    +063    public Integer getConfigValue(String flag, Integer def) {
    +064        return ACFUtil.parseInt(this.configs.get(flag), def);
    +065    }
    +066}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/ConditionFailedException.html b/docs/acf-core/src-html/co/aikar/commands/ConditionFailedException.html
    index d6cee759..5aed0ab1 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/ConditionFailedException.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/ConditionFailedException.html
    @@ -1,57 +1,61 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.locales.MessageKey;
    -027import co.aikar.locales.MessageKeyProvider;
    -028
    -029public class ConditionFailedException extends InvalidCommandArgument {
    -030    public ConditionFailedException() {
    -031        super(false);
    -032    }
    -033
    -034    public ConditionFailedException(MessageKeyProvider key, String... replacements) {
    -035        super(key, false, replacements);
    -036    }
    -037
    -038    public ConditionFailedException(MessageKey key, String... replacements) {
    -039        super(key, false, replacements);
    -040    }
    -041
    -042    public ConditionFailedException(String message) {
    -043        super(message, false);
    -044    }
    -045}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.locales.MessageKey;
    +027import co.aikar.locales.MessageKeyProvider;
    +028
    +029public class ConditionFailedException extends InvalidCommandArgument {
    +030    public ConditionFailedException() {
    +031        super(false);
    +032    }
    +033
    +034    public ConditionFailedException(MessageKeyProvider key, String... replacements) {
    +035        super(key, false, replacements);
    +036    }
    +037
    +038    public ConditionFailedException(MessageKey key, String... replacements) {
    +039        super(key, false, replacements);
    +040    }
    +041
    +042    public ConditionFailedException(String message) {
    +043        super(message, false);
    +044    }
    +045}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/ExceptionHandler.html b/docs/acf-core/src-html/co/aikar/commands/ExceptionHandler.html
    index 891bc73f..97833da4 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/ExceptionHandler.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/ExceptionHandler.html
    @@ -1,60 +1,64 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.List;
    -027
    -028/**
    -029 * Functional interface to allow plugins to handle uncaught excetpions
    -030 */
    -031@FunctionalInterface
    -032public interface ExceptionHandler {
    -033
    -034  /**
    -035   * Called when an exception occurs while executing a command<br>
    -036   * If an exception handler properly handles an exception, the user will not be noticied by the
    -037   * framework that something went unexceptected.
    -038   *
    -039   * @param command the command that was executed
    -040   * @param registeredCommand the registered command
    -041   * @param sender the issuer who send the command
    -042   * @param args the args he used
    -043   * @param t the throwable that caused this exception
    -044   *
    -045   * @return if the exception was handeled by the exception handler.
    -046   */
    -047  boolean execute(BaseCommand command, RegisteredCommand registeredCommand, CommandIssuer sender, List<String> args, Throwable t);
    -048}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.List;
    +027
    +028/**
    +029 * Functional interface to allow plugins to handle uncaught excetpions
    +030 */
    +031@FunctionalInterface
    +032public interface ExceptionHandler {
    +033
    +034  /**
    +035   * Called when an exception occurs while executing a command<br>
    +036   * If an exception handler properly handles an exception, the user will not be noticied by the
    +037   * framework that something went unexceptected.
    +038   *
    +039   * @param command the command that was executed
    +040   * @param registeredCommand the registered command
    +041   * @param sender the issuer who send the command
    +042   * @param args the args he used
    +043   * @param t the throwable that caused this exception
    +044   *
    +045   * @return if the exception was handeled by the exception handler.
    +046   */
    +047  boolean execute(BaseCommand command, RegisteredCommand registeredCommand, CommandIssuer sender, List<String> args, Throwable t);
    +048}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/ForwardingCommand.html b/docs/acf-core/src-html/co/aikar/commands/ForwardingCommand.html
    index 1b8db844..9d418ed0 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/ForwardingCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/ForwardingCommand.html
    @@ -1,100 +1,104 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.Collections;
    -027import java.util.List;
    -028import java.util.Set;
    -029
    -030public class ForwardingCommand extends BaseCommand {
    -031    private final BaseCommand command;
    -032    private final String[] baseArgs;
    -033    private final RegisteredCommand regCommand;
    -034
    -035    ForwardingCommand(BaseCommand baseCommand, RegisteredCommand regCommand, String[] baseArgs) {
    -036        this.regCommand = regCommand;
    -037        this.commandName = baseCommand.commandName;
    -038        this.command = baseCommand;
    -039        this.baseArgs = baseArgs;
    -040        this.manager = baseCommand.manager;
    -041        this.subCommands.put(DEFAULT, regCommand);
    -042    }
    -043
    -044    @Override
    -045    public List<RegisteredCommand> getRegisteredCommands() {
    -046        return Collections.singletonList(regCommand);
    -047    }
    -048
    -049    @Override
    -050    public CommandOperationContext getLastCommandOperationContext() {
    -051        return command.getLastCommandOperationContext();
    -052    }
    -053
    -054    @Override
    -055    public Set<String> getRequiredPermissions() {
    -056        return command.getRequiredPermissions();
    -057    }
    -058
    -059    @Override
    -060    public boolean hasPermission(Object issuer) {
    -061        return command.hasPermission(issuer);
    -062    }
    -063
    -064    @Override
    -065    public boolean requiresPermission(String permission) {
    -066        return command.requiresPermission(permission);
    -067    }
    -068
    -069    @Override
    -070    public boolean hasPermission(CommandIssuer sender) {
    -071        return command.hasPermission(sender);
    -072    }
    -073
    -074    @Override
    -075    public List<String> tabComplete(CommandIssuer issuer, RootCommand rootCommand, String[] args, boolean isAsync) throws IllegalArgumentException {
    -076        return command.tabComplete(issuer, rootCommand, args, isAsync);
    -077    }
    -078
    -079    @Override
    -080    public void execute(CommandIssuer issuer, CommandRouter.CommandRouteResult result) {
    -081        result = new CommandRouter.CommandRouteResult(regCommand, result.args, ACFUtil.join(baseArgs), result.commandLabel);
    -082        command.execute(issuer, result);
    -083    }
    -084
    -085    BaseCommand getCommand() {
    -086        return command;
    -087    }
    -088}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.Collections;
    +027import java.util.List;
    +028import java.util.Set;
    +029
    +030public class ForwardingCommand extends BaseCommand {
    +031    private final BaseCommand command;
    +032    private final String[] baseArgs;
    +033    private final RegisteredCommand regCommand;
    +034
    +035    ForwardingCommand(BaseCommand baseCommand, RegisteredCommand regCommand, String[] baseArgs) {
    +036        this.regCommand = regCommand;
    +037        this.commandName = baseCommand.commandName;
    +038        this.command = baseCommand;
    +039        this.baseArgs = baseArgs;
    +040        this.manager = baseCommand.manager;
    +041        this.subCommands.put(DEFAULT, regCommand);
    +042    }
    +043
    +044    @Override
    +045    public List<RegisteredCommand> getRegisteredCommands() {
    +046        return Collections.singletonList(regCommand);
    +047    }
    +048
    +049    @Override
    +050    public CommandOperationContext getLastCommandOperationContext() {
    +051        return command.getLastCommandOperationContext();
    +052    }
    +053
    +054    @Override
    +055    public Set<String> getRequiredPermissions() {
    +056        return command.getRequiredPermissions();
    +057    }
    +058
    +059    @Override
    +060    public boolean hasPermission(Object issuer) {
    +061        return command.hasPermission(issuer);
    +062    }
    +063
    +064    @Override
    +065    public boolean requiresPermission(String permission) {
    +066        return command.requiresPermission(permission);
    +067    }
    +068
    +069    @Override
    +070    public boolean hasPermission(CommandIssuer sender) {
    +071        return command.hasPermission(sender);
    +072    }
    +073
    +074    @Override
    +075    public List<String> tabComplete(CommandIssuer issuer, RootCommand rootCommand, String[] args, boolean isAsync) throws IllegalArgumentException {
    +076        return command.tabComplete(issuer, rootCommand, args, isAsync);
    +077    }
    +078
    +079    @Override
    +080    public void execute(CommandIssuer issuer, CommandRouter.CommandRouteResult result) {
    +081        result = new CommandRouter.CommandRouteResult(regCommand, result.args, ACFUtil.join(baseArgs), result.commandLabel);
    +082        command.execute(issuer, result);
    +083    }
    +084
    +085    BaseCommand getCommand() {
    +086        return command;
    +087    }
    +088}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/HelpEntry.html b/docs/acf-core/src-html/co/aikar/commands/HelpEntry.html
    index b6804eea..db638756 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/HelpEntry.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/HelpEntry.html
    @@ -1,93 +1,97 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026public class HelpEntry {
    -027
    -028    private final CommandHelp commandHelp;
    -029    private final RegisteredCommand command;
    -030    private int searchScore = 1;
    -031
    -032    HelpEntry(CommandHelp commandHelp, RegisteredCommand command) {
    -033        this.commandHelp = commandHelp;
    -034        this.command = command;
    -035    }
    -036
    -037    RegisteredCommand getRegisteredCommand() {
    -038        return this.command;
    -039    }
    -040
    -041    public String getCommand() {
    -042        return this.command.command;
    -043    }
    -044
    -045    public String getCommandPrefix() {
    -046        return this.commandHelp.getCommandPrefix();
    -047    }
    -048
    -049    public String getParameterSyntax() {
    -050        return this.getParameterSyntax(null);
    -051    }
    -052
    -053    public String getParameterSyntax(CommandIssuer issuer) {
    -054        String translated = this.command.getSyntaxText(issuer);
    -055        return translated != null ? translated : "";
    -056    }
    -057
    -058    public String getDescription(){
    -059        return this.command.getHelpText();
    -060    }
    -061
    -062    public void setSearchScore(int searchScore) {
    -063        this.searchScore = searchScore;
    -064    }
    -065
    -066    public boolean shouldShow() {
    -067        return this.searchScore > 0;
    -068    }
    -069
    -070    public int getSearchScore() {
    -071        return searchScore;
    -072    }
    -073
    -074    public String getSearchTags() {
    -075        return command.helpSearchTags;
    -076    }
    -077
    -078    public CommandParameter[] getParameters() {
    -079        return command.parameters;
    -080    }
    -081}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026public class HelpEntry {
    +027
    +028    private final CommandHelp commandHelp;
    +029    private final RegisteredCommand command;
    +030    private int searchScore = 1;
    +031
    +032    HelpEntry(CommandHelp commandHelp, RegisteredCommand command) {
    +033        this.commandHelp = commandHelp;
    +034        this.command = command;
    +035    }
    +036
    +037    RegisteredCommand getRegisteredCommand() {
    +038        return this.command;
    +039    }
    +040
    +041    public String getCommand() {
    +042        return this.command.command;
    +043    }
    +044
    +045    public String getCommandPrefix() {
    +046        return this.commandHelp.getCommandPrefix();
    +047    }
    +048
    +049    public String getParameterSyntax() {
    +050        return this.getParameterSyntax(null);
    +051    }
    +052
    +053    public String getParameterSyntax(CommandIssuer issuer) {
    +054        String translated = this.command.getSyntaxText(issuer);
    +055        return translated != null ? translated : "";
    +056    }
    +057
    +058    public String getDescription(){
    +059        return this.command.getHelpText();
    +060    }
    +061
    +062    public void setSearchScore(int searchScore) {
    +063        this.searchScore = searchScore;
    +064    }
    +065
    +066    public boolean shouldShow() {
    +067        return this.searchScore > 0;
    +068    }
    +069
    +070    public int getSearchScore() {
    +071        return searchScore;
    +072    }
    +073
    +074    public String getSearchTags() {
    +075        return command.helpSearchTags;
    +076    }
    +077
    +078    public CommandParameter[] getParameters() {
    +079        return command.parameters;
    +080    }
    +081}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/InvalidCommandArgument.html b/docs/acf-core/src-html/co/aikar/commands/InvalidCommandArgument.html
    index f44ddc33..5d0e4838 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/InvalidCommandArgument.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/InvalidCommandArgument.html
    @@ -1,83 +1,87 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.locales.MessageKey;
    -027import co.aikar.locales.MessageKeyProvider;
    -028
    -029public class InvalidCommandArgument extends RuntimeException {
    -030    final boolean showSyntax;
    -031    final MessageKey key;
    -032    final String[] replacements;
    -033
    -034    public InvalidCommandArgument() {
    -035        this(null, true);
    -036    }
    -037
    -038    public InvalidCommandArgument(boolean showSyntax) {
    -039        this(null, showSyntax);
    -040    }
    -041
    -042    public InvalidCommandArgument(MessageKeyProvider key, String... replacements) {
    -043        this(key.getMessageKey(), replacements);
    -044    }
    -045
    -046    public InvalidCommandArgument(MessageKey key, String... replacements) {
    -047        this(key, true, replacements);
    -048    }
    -049
    -050    public InvalidCommandArgument(MessageKeyProvider key, boolean showSyntax, String... replacements) {
    -051        this(key.getMessageKey(), showSyntax, replacements);
    -052    }
    -053
    -054    public InvalidCommandArgument(MessageKey key, boolean showSyntax, String... replacements) {
    -055        super(key.getKey(), null, false, false);
    -056        this.showSyntax = showSyntax;
    -057        this.key = key;
    -058        this.replacements = replacements;
    -059    }
    -060
    -061    public InvalidCommandArgument(String message) {
    -062        this(message, true);
    -063    }
    -064
    -065    public InvalidCommandArgument(String message, boolean showSyntax) {
    -066        super(message, null, false, false);
    -067        this.showSyntax = showSyntax;
    -068        this.replacements = null;
    -069        this.key = null;
    -070    }
    -071}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.locales.MessageKey;
    +027import co.aikar.locales.MessageKeyProvider;
    +028
    +029public class InvalidCommandArgument extends RuntimeException {
    +030    final boolean showSyntax;
    +031    final MessageKey key;
    +032    final String[] replacements;
    +033
    +034    public InvalidCommandArgument() {
    +035        this(null, true);
    +036    }
    +037
    +038    public InvalidCommandArgument(boolean showSyntax) {
    +039        this(null, showSyntax);
    +040    }
    +041
    +042    public InvalidCommandArgument(MessageKeyProvider key, String... replacements) {
    +043        this(key.getMessageKey(), replacements);
    +044    }
    +045
    +046    public InvalidCommandArgument(MessageKey key, String... replacements) {
    +047        this(key, true, replacements);
    +048    }
    +049
    +050    public InvalidCommandArgument(MessageKeyProvider key, boolean showSyntax, String... replacements) {
    +051        this(key.getMessageKey(), showSyntax, replacements);
    +052    }
    +053
    +054    public InvalidCommandArgument(MessageKey key, boolean showSyntax, String... replacements) {
    +055        super(key.getKey(), null, false, false);
    +056        this.showSyntax = showSyntax;
    +057        this.key = key;
    +058        this.replacements = replacements;
    +059    }
    +060
    +061    public InvalidCommandArgument(String message) {
    +062        this(message, true);
    +063    }
    +064
    +065    public InvalidCommandArgument(String message, boolean showSyntax) {
    +066        super(message, null, false, false);
    +067        this.showSyntax = showSyntax;
    +068        this.replacements = null;
    +069        this.key = null;
    +070    }
    +071}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/InvalidCommandContextException.html b/docs/acf-core/src-html/co/aikar/commands/InvalidCommandContextException.html
    index 9d6143c4..722d42aa 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/InvalidCommandContextException.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/InvalidCommandContextException.html
    @@ -1,42 +1,46 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026public class InvalidCommandContextException extends RuntimeException {
    -027    InvalidCommandContextException(String message) {
    -028        super(message);
    -029    }
    -030}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026public class InvalidCommandContextException extends RuntimeException {
    +027    InvalidCommandContextException(String message) {
    +028        super(message);
    +029    }
    +030}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/IssuerLocaleChangedCallback.html b/docs/acf-core/src-html/co/aikar/commands/IssuerLocaleChangedCallback.html
    index 9935b66b..28548d4c 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/IssuerLocaleChangedCallback.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/IssuerLocaleChangedCallback.html
    @@ -1,42 +1,46 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.Locale;
    -027
    -028public interface IssuerLocaleChangedCallback <I extends CommandIssuer> {
    -029    void onIssuerLocaleChange(I issuer, Locale oldLocale, Locale newLocale);
    -030}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.Locale;
    +027
    +028public interface IssuerLocaleChangedCallback <I extends CommandIssuer> {
    +029    void onIssuerLocaleChange(I issuer, Locale oldLocale, Locale newLocale);
    +030}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/Locales.html b/docs/acf-core/src-html/co/aikar/commands/Locales.html
    index 02823353..43769d9b 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/Locales.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/Locales.html
    @@ -1,227 +1,231 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.locales.LocaleManager;
    -027import co.aikar.locales.MessageKey;
    -028import co.aikar.locales.MessageKeyProvider;
    -029import com.google.common.collect.HashMultimap;
    -030import com.google.common.collect.SetMultimap;
    -031import org.jetbrains.annotations.NotNull;
    -032
    -033import java.util.ArrayList;
    -034import java.util.HashMap;
    -035import java.util.HashSet;
    -036import java.util.LinkedHashMap;
    -037import java.util.List;
    -038import java.util.Locale;
    -039import java.util.Map;
    -040import java.util.Set;
    -041import java.util.regex.Matcher;
    -042
    -043@SuppressWarnings("WeakerAccess")
    -044public class Locales {
    -045    // Locales for reference since Locale doesn't have as many, add our own here for ease of use.
    -046    public static final Locale ENGLISH = Locale.ENGLISH;
    -047    public static final Locale GERMAN = Locale.GERMAN;
    -048    public static final Locale FRENCH = Locale.FRENCH;
    -049    public static final Locale JAPANESE = Locale.JAPANESE;
    -050    public static final Locale ITALIAN = Locale.ITALIAN;
    -051    public static final Locale KOREAN = Locale.KOREAN;
    -052    public static final Locale CHINESE = Locale.CHINESE;
    -053    public static final Locale SIMPLIFIED_CHINESE = Locale.SIMPLIFIED_CHINESE;
    -054    public static final Locale TRADITIONAL_CHINESE = Locale.TRADITIONAL_CHINESE;
    -055    public static final Locale SPANISH = new Locale("es");
    -056    public static final Locale DUTCH = new Locale("nl");
    -057    public static final Locale DANISH = new Locale("da");
    -058    public static final Locale CZECH = new Locale("cs");
    -059    public static final Locale GREEK = new Locale("el");
    -060    public static final Locale LATIN = new Locale("la");
    -061    public static final Locale BULGARIAN = new Locale("bg");
    -062    public static final Locale AFRIKAANS = new Locale("af");
    -063    public static final Locale HINDI = new Locale("hi");
    -064    public static final Locale HEBREW = new Locale("he");
    -065    public static final Locale POLISH = new Locale("pl");
    -066    public static final Locale PORTUGUESE = new Locale("pt");
    -067    public static final Locale FINNISH = new Locale("fi");
    -068    public static final Locale SWEDISH = new Locale("sv");
    -069    public static final Locale RUSSIAN = new Locale("ru");
    -070    public static final Locale ROMANIAN = new Locale("ro");
    -071    public static final Locale VIETNAMESE = new Locale("vi");
    -072    public static final Locale THAI = new Locale("th");
    -073    public static final Locale TURKISH = new Locale("tr");
    -074    public static final Locale UKRANIAN = new Locale("uk");
    -075    public static final Locale ARABIC = new Locale("ar");
    -076    public static final Locale WELSH = new Locale("cy");
    -077    public static final Locale NORWEGIAN_BOKMAAL = new Locale("nb");
    -078    public static final Locale NORWEGIAN_NYNORSK = new Locale("nn");
    -079    public static final Locale HUNGARIAN = new Locale("hu");
    -080
    -081    private final CommandManager manager;
    -082    private final LocaleManager<CommandIssuer> localeManager;
    -083    private final Map<ClassLoader, SetMultimap<String, Locale>> loadedBundles = new HashMap<>();
    -084    private final List<ClassLoader> registeredClassLoaders = new ArrayList<>();
    -085
    -086    public Locales(CommandManager manager) {
    -087        this.manager = manager;
    -088        this.localeManager = LocaleManager.create(manager::getIssuerLocale);
    -089        this.addBundleClassLoader(this.getClass().getClassLoader());
    -090    }
    -091
    -092    public void loadLanguages() {
    -093        addMessageBundles("acf-core");
    -094    }
    -095
    -096    public Locale getDefaultLocale() {
    -097        return this.localeManager.getDefaultLocale();
    -098    }
    -099
    -100    public Locale setDefaultLocale(Locale locale) {
    -101        return this.localeManager.setDefaultLocale(locale);
    -102    }
    -103
    -104    /**
    -105     * Looks for all previously loaded bundles, and if any new Supported Languages have been added, load them.
    -106     */
    -107    public void loadMissingBundles() {
    -108        //noinspection unchecked
    -109        Set<Locale> supportedLanguages = manager.getSupportedLanguages();
    -110        for (Locale locale : supportedLanguages) {
    -111            for(SetMultimap<String, Locale> localeData: this.loadedBundles.values()) {
    -112                for (String bundleName : new HashSet<>(localeData.keys())) {
    -113                    addMessageBundle(bundleName, locale);
    -114                }
    -115            }
    -116
    -117        }
    -118    }
    -119
    -120    public void addMessageBundles(String... bundleNames) {
    -121        for (String bundleName : bundleNames) {
    -122            //noinspection unchecked
    -123            Set<Locale> supportedLanguages = manager.getSupportedLanguages();
    -124            for (Locale locale : supportedLanguages) {
    -125                addMessageBundle(bundleName, locale);
    -126            }
    -127        }
    -128    }
    -129
    -130    public boolean addMessageBundle(String bundleName, Locale locale) {
    -131        boolean found = false;
    -132        for(ClassLoader classLoader: this.registeredClassLoaders) {
    -133            if(this.addMessageBundle(classLoader, bundleName, locale)) {
    -134                found = true;
    -135            }
    -136        }
    -137
    -138        return found;
    -139    }
    -140
    -141    public boolean addMessageBundle(ClassLoader classLoader, String bundleName, Locale locale) {
    -142        SetMultimap<String, Locale> classLoadersLocales = this.loadedBundles.getOrDefault(classLoader, HashMultimap.create());
    -143        if(!classLoadersLocales.containsEntry(bundleName, locale)) {
    -144            if(this.localeManager.addMessageBundle(classLoader, bundleName, locale)) {
    -145                classLoadersLocales.put(bundleName, locale);
    -146                this.loadedBundles.put(classLoader, classLoadersLocales);
    -147                return true;
    -148            }
    -149        }
    -150
    -151        return false;
    -152    }
    -153
    -154    public void addMessageStrings(Locale locale, @NotNull Map<String, String> messages) {
    -155        Map<MessageKey, String> map = new HashMap<>(messages.size());
    -156        messages.forEach((key, value) -> map.put(MessageKey.of(key), value));
    -157        this.localeManager.addMessages(locale, map);
    -158    }
    -159
    -160    public void addMessages(Locale locale, @NotNull Map<? extends MessageKeyProvider, String> messages) {
    -161        Map<MessageKey, String> messagesMap = new LinkedHashMap<>();
    -162        for (Map.Entry<? extends MessageKeyProvider, String> entry : messages.entrySet()) {
    -163            messagesMap.put(entry.getKey().getMessageKey(), entry.getValue());
    -164        }
    -165
    -166        this.localeManager.addMessages(locale, messagesMap);
    -167    }
    -168
    -169    public String addMessage(Locale locale, MessageKeyProvider key, String message) {
    -170        return this.localeManager.addMessage(locale, key.getMessageKey(), message);
    -171    }
    -172
    -173    public String getMessage(CommandIssuer issuer, MessageKeyProvider key) {
    -174        final MessageKey msgKey = key.getMessageKey();
    -175        String message = this.localeManager.getMessage(issuer, msgKey);
    -176        if (message == null) {
    -177            manager.log(LogLevel.ERROR, "Missing Language Key: " + msgKey.getKey());
    -178            message = "<MISSING_LANGUAGE_KEY:" + msgKey.getKey() + ">";
    -179        }
    -180        return message;
    -181    }
    -182
    -183    public String getOptionalMessage(CommandIssuer issuer, MessageKey key) {
    -184        if (issuer == null) {
    -185            return this.localeManager.getTable(getDefaultLocale()).getMessage(key);
    -186        }
    -187        return this.localeManager.getMessage(issuer, key);
    -188    }
    -189
    -190    public String replaceI18NStrings(String message) {
    -191        if (message == null) {
    -192            return null;
    -193        }
    -194        Matcher matcher = ACFPatterns.I18N_STRING.matcher(message);
    -195        if (!matcher.find()) {
    -196            return message;
    -197        }
    -198
    -199        CommandIssuer issuer = CommandManager.getCurrentCommandIssuer();
    -200
    -201        matcher.reset();
    -202        StringBuffer sb = new StringBuffer(message.length());
    -203        while (matcher.find()) {
    -204            MessageKey key = MessageKey.of(matcher.group("key"));
    -205            matcher.appendReplacement(sb, Matcher.quoteReplacement(getMessage(issuer, key)));
    -206        }
    -207        matcher.appendTail(sb);
    -208        return sb.toString();
    -209    }
    -210
    -211    public boolean addBundleClassLoader(ClassLoader classLoader) {
    -212        return !this.registeredClassLoaders.contains(classLoader) && this.registeredClassLoaders.add(classLoader);
    -213
    -214    }
    -215}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.locales.LocaleManager;
    +027import co.aikar.locales.MessageKey;
    +028import co.aikar.locales.MessageKeyProvider;
    +029import com.google.common.collect.HashMultimap;
    +030import com.google.common.collect.SetMultimap;
    +031import org.jetbrains.annotations.NotNull;
    +032
    +033import java.util.ArrayList;
    +034import java.util.HashMap;
    +035import java.util.HashSet;
    +036import java.util.LinkedHashMap;
    +037import java.util.List;
    +038import java.util.Locale;
    +039import java.util.Map;
    +040import java.util.Set;
    +041import java.util.regex.Matcher;
    +042
    +043@SuppressWarnings("WeakerAccess")
    +044public class Locales {
    +045    // Locales for reference since Locale doesn't have as many, add our own here for ease of use.
    +046    public static final Locale ENGLISH = Locale.ENGLISH;
    +047    public static final Locale GERMAN = Locale.GERMAN;
    +048    public static final Locale FRENCH = Locale.FRENCH;
    +049    public static final Locale JAPANESE = Locale.JAPANESE;
    +050    public static final Locale ITALIAN = Locale.ITALIAN;
    +051    public static final Locale KOREAN = Locale.KOREAN;
    +052    public static final Locale CHINESE = Locale.CHINESE;
    +053    public static final Locale SIMPLIFIED_CHINESE = Locale.SIMPLIFIED_CHINESE;
    +054    public static final Locale TRADITIONAL_CHINESE = Locale.TRADITIONAL_CHINESE;
    +055    public static final Locale SPANISH = new Locale("es");
    +056    public static final Locale DUTCH = new Locale("nl");
    +057    public static final Locale DANISH = new Locale("da");
    +058    public static final Locale CZECH = new Locale("cs");
    +059    public static final Locale GREEK = new Locale("el");
    +060    public static final Locale LATIN = new Locale("la");
    +061    public static final Locale BULGARIAN = new Locale("bg");
    +062    public static final Locale AFRIKAANS = new Locale("af");
    +063    public static final Locale HINDI = new Locale("hi");
    +064    public static final Locale HEBREW = new Locale("he");
    +065    public static final Locale POLISH = new Locale("pl");
    +066    public static final Locale PORTUGUESE = new Locale("pt");
    +067    public static final Locale FINNISH = new Locale("fi");
    +068    public static final Locale SWEDISH = new Locale("sv");
    +069    public static final Locale RUSSIAN = new Locale("ru");
    +070    public static final Locale ROMANIAN = new Locale("ro");
    +071    public static final Locale VIETNAMESE = new Locale("vi");
    +072    public static final Locale THAI = new Locale("th");
    +073    public static final Locale TURKISH = new Locale("tr");
    +074    public static final Locale UKRANIAN = new Locale("uk");
    +075    public static final Locale ARABIC = new Locale("ar");
    +076    public static final Locale WELSH = new Locale("cy");
    +077    public static final Locale NORWEGIAN_BOKMAAL = new Locale("nb");
    +078    public static final Locale NORWEGIAN_NYNORSK = new Locale("nn");
    +079    public static final Locale HUNGARIAN = new Locale("hu");
    +080
    +081    private final CommandManager manager;
    +082    private final LocaleManager<CommandIssuer> localeManager;
    +083    private final Map<ClassLoader, SetMultimap<String, Locale>> loadedBundles = new HashMap<>();
    +084    private final List<ClassLoader> registeredClassLoaders = new ArrayList<>();
    +085
    +086    public Locales(CommandManager manager) {
    +087        this.manager = manager;
    +088        this.localeManager = LocaleManager.create(manager::getIssuerLocale);
    +089        this.addBundleClassLoader(this.getClass().getClassLoader());
    +090    }
    +091
    +092    public void loadLanguages() {
    +093        addMessageBundles("acf-core");
    +094    }
    +095
    +096    public Locale getDefaultLocale() {
    +097        return this.localeManager.getDefaultLocale();
    +098    }
    +099
    +100    public Locale setDefaultLocale(Locale locale) {
    +101        return this.localeManager.setDefaultLocale(locale);
    +102    }
    +103
    +104    /**
    +105     * Looks for all previously loaded bundles, and if any new Supported Languages have been added, load them.
    +106     */
    +107    public void loadMissingBundles() {
    +108        //noinspection unchecked
    +109        Set<Locale> supportedLanguages = manager.getSupportedLanguages();
    +110        for (Locale locale : supportedLanguages) {
    +111            for(SetMultimap<String, Locale> localeData: this.loadedBundles.values()) {
    +112                for (String bundleName : new HashSet<>(localeData.keys())) {
    +113                    addMessageBundle(bundleName, locale);
    +114                }
    +115            }
    +116
    +117        }
    +118    }
    +119
    +120    public void addMessageBundles(String... bundleNames) {
    +121        for (String bundleName : bundleNames) {
    +122            //noinspection unchecked
    +123            Set<Locale> supportedLanguages = manager.getSupportedLanguages();
    +124            for (Locale locale : supportedLanguages) {
    +125                addMessageBundle(bundleName, locale);
    +126            }
    +127        }
    +128    }
    +129
    +130    public boolean addMessageBundle(String bundleName, Locale locale) {
    +131        boolean found = false;
    +132        for(ClassLoader classLoader: this.registeredClassLoaders) {
    +133            if(this.addMessageBundle(classLoader, bundleName, locale)) {
    +134                found = true;
    +135            }
    +136        }
    +137
    +138        return found;
    +139    }
    +140
    +141    public boolean addMessageBundle(ClassLoader classLoader, String bundleName, Locale locale) {
    +142        SetMultimap<String, Locale> classLoadersLocales = this.loadedBundles.getOrDefault(classLoader, HashMultimap.create());
    +143        if(!classLoadersLocales.containsEntry(bundleName, locale)) {
    +144            if(this.localeManager.addMessageBundle(classLoader, bundleName, locale)) {
    +145                classLoadersLocales.put(bundleName, locale);
    +146                this.loadedBundles.put(classLoader, classLoadersLocales);
    +147                return true;
    +148            }
    +149        }
    +150
    +151        return false;
    +152    }
    +153
    +154    public void addMessageStrings(Locale locale, @NotNull Map<String, String> messages) {
    +155        Map<MessageKey, String> map = new HashMap<>(messages.size());
    +156        messages.forEach((key, value) -> map.put(MessageKey.of(key), value));
    +157        this.localeManager.addMessages(locale, map);
    +158    }
    +159
    +160    public void addMessages(Locale locale, @NotNull Map<? extends MessageKeyProvider, String> messages) {
    +161        Map<MessageKey, String> messagesMap = new LinkedHashMap<>();
    +162        for (Map.Entry<? extends MessageKeyProvider, String> entry : messages.entrySet()) {
    +163            messagesMap.put(entry.getKey().getMessageKey(), entry.getValue());
    +164        }
    +165
    +166        this.localeManager.addMessages(locale, messagesMap);
    +167    }
    +168
    +169    public String addMessage(Locale locale, MessageKeyProvider key, String message) {
    +170        return this.localeManager.addMessage(locale, key.getMessageKey(), message);
    +171    }
    +172
    +173    public String getMessage(CommandIssuer issuer, MessageKeyProvider key) {
    +174        final MessageKey msgKey = key.getMessageKey();
    +175        String message = this.localeManager.getMessage(issuer, msgKey);
    +176        if (message == null) {
    +177            manager.log(LogLevel.ERROR, "Missing Language Key: " + msgKey.getKey());
    +178            message = "<MISSING_LANGUAGE_KEY:" + msgKey.getKey() + ">";
    +179        }
    +180        return message;
    +181    }
    +182
    +183    public String getOptionalMessage(CommandIssuer issuer, MessageKey key) {
    +184        if (issuer == null) {
    +185            return this.localeManager.getTable(getDefaultLocale()).getMessage(key);
    +186        }
    +187        return this.localeManager.getMessage(issuer, key);
    +188    }
    +189
    +190    public String replaceI18NStrings(String message) {
    +191        if (message == null) {
    +192            return null;
    +193        }
    +194        Matcher matcher = ACFPatterns.I18N_STRING.matcher(message);
    +195        if (!matcher.find()) {
    +196            return message;
    +197        }
    +198
    +199        CommandIssuer issuer = CommandManager.getCurrentCommandIssuer();
    +200
    +201        matcher.reset();
    +202        StringBuffer sb = new StringBuffer(message.length());
    +203        while (matcher.find()) {
    +204            MessageKey key = MessageKey.of(matcher.group("key"));
    +205            matcher.appendReplacement(sb, Matcher.quoteReplacement(getMessage(issuer, key)));
    +206        }
    +207        matcher.appendTail(sb);
    +208        return sb.toString();
    +209    }
    +210
    +211    public boolean addBundleClassLoader(ClassLoader classLoader) {
    +212        return !this.registeredClassLoaders.contains(classLoader) && this.registeredClassLoaders.add(classLoader);
    +213
    +214    }
    +215}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/MessageFormatter.html b/docs/acf-core/src-html/co/aikar/commands/MessageFormatter.html
    index 1820dc0a..bb53edf4 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/MessageFormatter.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/MessageFormatter.html
    @@ -1,110 +1,114 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.ArrayList;
    -027import java.util.Arrays;
    -028import java.util.Collections;
    -029import java.util.List;
    -030import java.util.regex.Matcher;
    -031
    -032/**
    -033 * Handles formatting Messages and managing colors
    -034 * @param <FT> The platform specific color object
    -035 */
    -036public abstract class MessageFormatter <FT> {
    -037
    -038    private final List<FT> colors = new ArrayList<>();
    -039
    -040    @SafeVarargs
    -041    public MessageFormatter(FT... colors) {
    -042        this.colors.addAll(Arrays.asList(colors));
    -043
    -044    }
    -045    public FT setColor(int index, FT color) {
    -046        if (index > 0) {
    -047            index--;
    -048        } else {
    -049            index = 0;
    -050        }
    -051        if (this.colors.size() <= index) {
    -052            int needed = index - this.colors.size();
    -053            if (needed > 0) {
    -054                this.colors.addAll(Collections.nCopies(needed, null));
    -055            }
    -056            colors.add(color);
    -057            return null;
    -058        } else {
    -059            return colors.set(index, color);
    -060        }
    -061    }
    -062
    -063    public FT getColor(int index) {
    -064        if (index > 0) {
    -065            index--;
    -066        } else {
    -067            index = 0;
    -068        }
    -069        FT color = colors.get(index);
    -070        if (color == null) {
    -071            color = getDefaultColor();
    -072        }
    -073        return color;
    -074    }
    -075
    -076    public FT getDefaultColor() {
    -077        return getColor(1);
    -078    }
    -079
    -080    abstract String format(FT color, String message);
    -081
    -082    public String format(int index, String message) {
    -083        return format(getColor(index), message);
    -084    }
    -085
    -086    public String format(String message) {
    -087        String def = format(1, "");
    -088        Matcher matcher = ACFPatterns.FORMATTER.matcher(message);
    -089        StringBuffer sb = new StringBuffer(message.length());
    -090        while (matcher.find()) {
    -091            Integer color = ACFUtil.parseInt(matcher.group("color"), 1);
    -092            String msg = format(color, matcher.group("msg")) + def;
    -093            matcher.appendReplacement(sb, Matcher.quoteReplacement(msg));
    -094        }
    -095        matcher.appendTail(sb);
    -096        return def + sb.toString();
    -097    }
    -098}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.ArrayList;
    +027import java.util.Arrays;
    +028import java.util.Collections;
    +029import java.util.List;
    +030import java.util.regex.Matcher;
    +031
    +032/**
    +033 * Handles formatting Messages and managing colors
    +034 * @param <FT> The platform specific color object
    +035 */
    +036public abstract class MessageFormatter <FT> {
    +037
    +038    private final List<FT> colors = new ArrayList<>();
    +039
    +040    @SafeVarargs
    +041    public MessageFormatter(FT... colors) {
    +042        this.colors.addAll(Arrays.asList(colors));
    +043
    +044    }
    +045    public FT setColor(int index, FT color) {
    +046        if (index > 0) {
    +047            index--;
    +048        } else {
    +049            index = 0;
    +050        }
    +051        if (this.colors.size() <= index) {
    +052            int needed = index - this.colors.size();
    +053            if (needed > 0) {
    +054                this.colors.addAll(Collections.nCopies(needed, null));
    +055            }
    +056            colors.add(color);
    +057            return null;
    +058        } else {
    +059            return colors.set(index, color);
    +060        }
    +061    }
    +062
    +063    public FT getColor(int index) {
    +064        if (index > 0) {
    +065            index--;
    +066        } else {
    +067            index = 0;
    +068        }
    +069        FT color = colors.get(index);
    +070        if (color == null) {
    +071            color = getDefaultColor();
    +072        }
    +073        return color;
    +074    }
    +075
    +076    public FT getDefaultColor() {
    +077        return getColor(1);
    +078    }
    +079
    +080    abstract String format(FT color, String message);
    +081
    +082    public String format(int index, String message) {
    +083        return format(getColor(index), message);
    +084    }
    +085
    +086    public String format(String message) {
    +087        String def = format(1, "");
    +088        Matcher matcher = ACFPatterns.FORMATTER.matcher(message);
    +089        StringBuffer sb = new StringBuffer(message.length());
    +090        while (matcher.find()) {
    +091            Integer color = ACFUtil.parseInt(matcher.group("color"), 1);
    +092            String msg = format(color, matcher.group("msg")) + def;
    +093            matcher.appendReplacement(sb, Matcher.quoteReplacement(msg));
    +094        }
    +095        matcher.appendTail(sb);
    +096        return def + sb.toString();
    +097    }
    +098}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/MessageKeys.html b/docs/acf-core/src-html/co/aikar/commands/MessageKeys.html
    index 6e6f65df..20531754 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/MessageKeys.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/MessageKeys.html
    @@ -1,80 +1,84 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.locales.MessageKey;
    -027import co.aikar.locales.MessageKeyProvider;
    -028
    -029import java.util.Locale;
    -030
    -031/**
    -032 * Enum Name = MessageKey in lowercase prefixed with acf-core.
    -033 */
    -034@SuppressWarnings("WeakerAccess")
    -035public enum MessageKeys implements MessageKeyProvider {
    -036    PERMISSION_DENIED,
    -037    PERMISSION_DENIED_PARAMETER,
    -038    ERROR_GENERIC_LOGGED,
    -039    UNKNOWN_COMMAND,
    -040    INVALID_SYNTAX,
    -041    ERROR_PREFIX,
    -042    ERROR_PERFORMING_COMMAND,
    -043    INFO_MESSAGE,
    -044    PLEASE_SPECIFY_ONE_OF,
    -045    MUST_BE_A_NUMBER,
    -046    MUST_BE_MIN_LENGTH,
    -047    MUST_BE_MAX_LENGTH,
    -048    PLEASE_SPECIFY_AT_LEAST,
    -049    PLEASE_SPECIFY_AT_MOST,
    -050    NOT_ALLOWED_ON_CONSOLE,
    -051    COULD_NOT_FIND_PLAYER,
    -052    NO_COMMAND_MATCHED_SEARCH,
    -053    HELP_PAGE_INFORMATION,
    -054    HELP_NO_RESULTS,
    -055    HELP_HEADER,
    -056    HELP_FORMAT,
    -057    HELP_DETAILED_HEADER,
    -058    HELP_DETAILED_COMMAND_FORMAT,
    -059    HELP_DETAILED_PARAMETER_FORMAT,
    -060    HELP_SEARCH_HEADER,
    -061    ;
    -062
    -063    private final MessageKey key = MessageKey.of("acf-core." + this.name().toLowerCase(Locale.ENGLISH));
    -064
    -065    public MessageKey getMessageKey() {
    -066        return key;
    -067    }
    -068}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.locales.MessageKey;
    +027import co.aikar.locales.MessageKeyProvider;
    +028
    +029import java.util.Locale;
    +030
    +031/**
    +032 * Enum Name = MessageKey in lowercase prefixed with acf-core.
    +033 */
    +034@SuppressWarnings("WeakerAccess")
    +035public enum MessageKeys implements MessageKeyProvider {
    +036    PERMISSION_DENIED,
    +037    PERMISSION_DENIED_PARAMETER,
    +038    ERROR_GENERIC_LOGGED,
    +039    UNKNOWN_COMMAND,
    +040    INVALID_SYNTAX,
    +041    ERROR_PREFIX,
    +042    ERROR_PERFORMING_COMMAND,
    +043    INFO_MESSAGE,
    +044    PLEASE_SPECIFY_ONE_OF,
    +045    MUST_BE_A_NUMBER,
    +046    MUST_BE_MIN_LENGTH,
    +047    MUST_BE_MAX_LENGTH,
    +048    PLEASE_SPECIFY_AT_LEAST,
    +049    PLEASE_SPECIFY_AT_MOST,
    +050    NOT_ALLOWED_ON_CONSOLE,
    +051    COULD_NOT_FIND_PLAYER,
    +052    NO_COMMAND_MATCHED_SEARCH,
    +053    HELP_PAGE_INFORMATION,
    +054    HELP_NO_RESULTS,
    +055    HELP_HEADER,
    +056    HELP_FORMAT,
    +057    HELP_DETAILED_HEADER,
    +058    HELP_DETAILED_COMMAND_FORMAT,
    +059    HELP_DETAILED_PARAMETER_FORMAT,
    +060    HELP_SEARCH_HEADER,
    +061    ;
    +062
    +063    private final MessageKey key = MessageKey.of("acf-core." + this.name().toLowerCase(Locale.ENGLISH));
    +064
    +065    public MessageKey getMessageKey() {
    +066        return key;
    +067    }
    +068}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/MessageType.html b/docs/acf-core/src-html/co/aikar/commands/MessageType.html
    index 95fdec05..409dc693 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/MessageType.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/MessageType.html
    @@ -1,59 +1,63 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.concurrent.atomic.AtomicInteger;
    -027
    -028@SuppressWarnings("WeakerAccess")
    -029public class MessageType {
    -030    private static final AtomicInteger counter = new AtomicInteger(1);
    -031
    -032    public static final MessageType INFO = new MessageType();
    -033    public static final MessageType SYNTAX = new MessageType();
    -034    public static final MessageType ERROR = new MessageType();
    -035    public static final MessageType HELP = new MessageType();
    -036
    -037    private final int id = counter.getAndIncrement();
    -038
    -039    public int hashCode() {
    -040        return id;
    -041    }
    -042
    -043    @Override
    -044    public boolean equals(Object o) {
    -045        return (this == o);
    -046    }
    -047}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.concurrent.atomic.AtomicInteger;
    +027
    +028@SuppressWarnings("WeakerAccess")
    +029public class MessageType {
    +030    private static final AtomicInteger counter = new AtomicInteger(1);
    +031
    +032    public static final MessageType INFO = new MessageType();
    +033    public static final MessageType SYNTAX = new MessageType();
    +034    public static final MessageType ERROR = new MessageType();
    +035    public static final MessageType HELP = new MessageType();
    +036
    +037    private final int id = counter.getAndIncrement();
    +038
    +039    public int hashCode() {
    +040        return id;
    +041    }
    +042
    +043    @Override
    +044    public boolean equals(Object o) {
    +045        return (this == o);
    +046    }
    +047}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/RegisteredCommand.html b/docs/acf-core/src-html/co/aikar/commands/RegisteredCommand.html
    index 18c89cde..b97d8a29 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/RegisteredCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/RegisteredCommand.html
    @@ -1,393 +1,394 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.annotation.CommandAlias;
    -027import co.aikar.commands.annotation.CommandCompletion;
    -028import co.aikar.commands.annotation.CommandPermission;
    -029import co.aikar.commands.annotation.Conditions;
    -030import co.aikar.commands.annotation.Description;
    -031import co.aikar.commands.annotation.HelpSearchTags;
    -032import co.aikar.commands.annotation.Private;
    -033import co.aikar.commands.annotation.Syntax;
    -034import co.aikar.commands.contexts.ContextResolver;
    -035import org.jetbrains.annotations.Nullable;
    -036
    -037import java.lang.annotation.Annotation;
    -038import java.lang.reflect.InvocationTargetException;
    -039import java.lang.reflect.Method;
    -040import java.lang.reflect.Parameter;
    -041import java.util.ArrayList;
    -042import java.util.Arrays;
    -043import java.util.Collection;
    -044import java.util.HashSet;
    -045import java.util.LinkedHashMap;
    -046import java.util.List;
    -047import java.util.Locale;
    -048import java.util.Map;
    -049import java.util.Objects;
    -050import java.util.Set;
    -051import java.util.concurrent.CompletableFuture;
    -052import java.util.concurrent.CompletionException;
    -053import java.util.concurrent.ExecutionException;
    -054import java.util.stream.Collectors;
    -055
    -056@SuppressWarnings("WeakerAccess")
    -057public class RegisteredCommand<CEC extends CommandExecutionContext<CEC, ? extends CommandIssuer>> {
    -058    final BaseCommand scope;
    -059    final Method method;
    -060    final CommandParameter<CEC>[] parameters;
    -061    final CommandManager manager;
    -062    final List<String> registeredSubcommands = new ArrayList<>();
    -063
    -064    String command;
    -065    String prefSubCommand;
    -066    String syntaxText;
    -067    String helpText;
    -068    String permission;
    -069    String complete;
    -070    String conditions;
    -071    public String helpSearchTags;
    -072
    -073    boolean isPrivate;
    -074
    -075    final int requiredResolvers;
    -076    final int consumeInputResolvers;
    -077    final int doesNotConsumeInputResolvers;
    -078    final int optionalResolvers;
    -079
    -080    final Set<String> permissions = new HashSet<>();
    -081
    -082    RegisteredCommand(BaseCommand scope, String command, Method method, String prefSubCommand) {
    -083        this.scope = scope;
    -084        this.manager = this.scope.manager;
    -085        final Annotations annotations = this.manager.getAnnotations();
    -086
    -087        if (BaseCommand.isSpecialSubcommand(prefSubCommand)) {
    -088            prefSubCommand = "";
    -089            command = command.trim();
    -090        }
    -091        this.command = command + (!annotations.hasAnnotation(method, CommandAlias.class, false) && !prefSubCommand.isEmpty() ? prefSubCommand : "");
    -092        this.method = method;
    -093        this.prefSubCommand = prefSubCommand;
    -094
    -095        this.permission = annotations.getAnnotationValue(method, CommandPermission.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -096        this.complete = annotations.getAnnotationValue(method, CommandCompletion.class, Annotations.DEFAULT_EMPTY); // no replacements as it should be per-issuer
    -097        this.helpText = annotations.getAnnotationValue(method, Description.class, Annotations.REPLACEMENTS | Annotations.DEFAULT_EMPTY);
    -098        this.conditions = annotations.getAnnotationValue(method, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -099        this.helpSearchTags = annotations.getAnnotationValue(method, HelpSearchTags.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    -100        this.syntaxText = annotations.getAnnotationValue(method, Syntax.class, Annotations.REPLACEMENTS);
    -101
    -102        Parameter[] parameters = method.getParameters();
    -103        //noinspection unchecked
    -104        this.parameters = new CommandParameter[parameters.length];
    -105
    -106        this.isPrivate = annotations.hasAnnotation(method, Private.class) || annotations.getAnnotationFromClass(scope.getClass(), Private.class) != null;
    -107
    -108        int requiredResolvers = 0;
    -109        int consumeInputResolvers = 0;
    -110        int doesNotConsumeInputResolvers = 0;
    -111        int optionalResolvers = 0;
    -112
    -113        CommandParameter<CEC> previousParam = null;
    -114        for (int i = 0; i < parameters.length; i++) {
    -115            CommandParameter<CEC> parameter = this.parameters[i] = new CommandParameter<>(this, parameters[i], i, i == parameters.length - 1);
    -116            if (previousParam != null) {
    -117                previousParam.setNextParam(parameter);
    -118            }
    -119            previousParam = parameter;
    -120            if (!parameter.isCommandIssuer()) {
    -121                if (!parameter.requiresInput()) {
    -122                    optionalResolvers++;
    -123                } else {
    -124                    requiredResolvers++;
    -125                }
    -126                if (parameter.canConsumeInput()) {
    -127                    consumeInputResolvers++;
    -128                } else {
    -129                    doesNotConsumeInputResolvers++;
    -130                }
    -131            }
    -132        }
    -133
    -134        this.requiredResolvers = requiredResolvers;
    -135        this.consumeInputResolvers = consumeInputResolvers;
    -136        this.doesNotConsumeInputResolvers = doesNotConsumeInputResolvers;
    -137        this.optionalResolvers = optionalResolvers;
    -138        this.computePermissions();
    -139    }
    -140
    -141
    -142    void invoke(CommandIssuer sender, List<String> args, CommandOperationContext context) {
    -143        if (!scope.canExecute(sender, this)) {
    -144            return;
    -145        }
    -146        preCommand();
    -147        try {
    -148            this.manager.getCommandConditions().validateConditions(context);
    -149            Map<String, Object> passedArgs = resolveContexts(sender, args);
    -150            if (passedArgs == null) return;
    -151
    -152            Object obj = method.invoke(scope, passedArgs.values().toArray());
    -153            if (obj instanceof CompletableFuture) {
    -154                CompletableFuture<?> future = (CompletableFuture) obj;
    -155                future.exceptionally(t -> {
    -156                    handleException(sender, args, t);
    -157                    return null;
    -158                });
    -159            }
    -160        } catch (Exception e) {
    -161            handleException(sender, args, e);
    -162        } finally {
    -163            postCommand();
    -164        }
    -165    }
    -166
    -167    public void preCommand() {
    -168    }
    -169
    -170    public void postCommand() {
    -171    }
    -172
    -173    void handleException(CommandIssuer sender, List<String> args, Throwable e) {
    -174        while (e instanceof ExecutionException || e instanceof CompletionException) {
    -175            e = e.getCause();
    -176        }
    -177        if (e instanceof InvocationTargetException && e.getCause() instanceof InvalidCommandArgument) {
    -178            e = e.getCause();
    -179        }
    -180        if (e instanceof ShowCommandHelp) {
    -181            ShowCommandHelp showHelp = (ShowCommandHelp) e;
    -182            CommandHelp commandHelp = manager.generateCommandHelp();
    -183            if (showHelp.search) {
    -184                commandHelp.setSearch(showHelp.searchArgs == null ? args : showHelp.searchArgs);
    -185            }
    -186            commandHelp.showHelp(sender);
    -187        } else if (e instanceof InvalidCommandArgument) {
    -188            InvalidCommandArgument invalidCommandArg = (InvalidCommandArgument) e;
    -189            if (invalidCommandArg.key != null) {
    -190                sender.sendMessage(MessageType.ERROR, invalidCommandArg.key, invalidCommandArg.replacements);
    -191            } else if (e.getMessage() != null && !e.getMessage().isEmpty()) {
    -192                sender.sendMessage(MessageType.ERROR, MessageKeys.ERROR_PREFIX, "{message}", e.getMessage());
    -193            }
    -194            if (invalidCommandArg.showSyntax) {
    -195                scope.showSyntax(sender, this);
    -196            }
    -197        } else {
    -198            try {
    -199                if (!this.manager.handleUncaughtException(scope, this, sender, args, e)) {
    -200                    sender.sendMessage(MessageType.ERROR, MessageKeys.ERROR_PERFORMING_COMMAND);
    -201                }
    -202                boolean hasExceptionHandler = this.manager.defaultExceptionHandler != null || this.scope.getExceptionHandler() != null;
    -203                if (!hasExceptionHandler || this.manager.logUnhandledExceptions) {
    -204                    this.manager.log(LogLevel.ERROR, "Exception in command: " + command + " " + ACFUtil.join(args), e);
    -205                }
    -206            } catch (Exception e2) {
    -207                this.manager.log(LogLevel.ERROR, "Exception in handleException for command: " + command + " " + ACFUtil.join(args), e);
    -208                this.manager.log(LogLevel.ERROR, "Exception triggered by exception handler:", e2);
    -209            }
    -210        }
    -211    }
    -212
    -213    @Nullable
    -214    Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args) throws InvalidCommandArgument {
    -215        return resolveContexts(sender, args, null);
    -216    }
    -217
    -218    @Nullable
    -219    Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, String name) throws InvalidCommandArgument {
    -220        args = new ArrayList<>(args);
    -221        String[] origArgs = args.toArray(new String[args.size()]);
    -222        Map<String, Object> passedArgs = new LinkedHashMap<>();
    -223        int remainingRequired = requiredResolvers;
    -224        CommandOperationContext opContext = CommandManager.getCurrentCommandOperationContext();
    -225        for (int i = 0; i < parameters.length && (name == null || !passedArgs.containsKey(name)); i++) {
    -226            boolean isLast = i == parameters.length - 1;
    -227            boolean allowOptional = remainingRequired == 0;
    -228            final CommandParameter<CEC> parameter = parameters[i];
    -229            final String parameterName = parameter.getName();
    -230            final Class<?> type = parameter.getType();
    -231            //noinspection unchecked
    -232            final ContextResolver<?, CEC> resolver = parameter.getResolver();
    -233            //noinspection unchecked
    -234            CEC context = (CEC) this.manager.createCommandContext(this, parameter, sender, args, i, passedArgs);
    -235            boolean requiresInput = parameter.requiresInput();
    -236            if (requiresInput && remainingRequired > 0) {
    -237                remainingRequired--;
    -238            }
    -239
    -240            Set<String> parameterPermissions = parameter.getRequiredPermissions();
    -241            if (args.isEmpty() && !(isLast && type == String[].class)) {
    -242                if (allowOptional && parameter.getDefaultValue() != null) {
    -243                    args.add(parameter.getDefaultValue());
    -244                } else if (allowOptional && parameter.isOptional()) {
    -245                    Object value;
    -246                    if (!parameter.isOptionalResolver() || !this.manager.hasPermission(sender, parameterPermissions)) {
    -247                        value = null;
    -248                    } else {
    -249                        value = resolver.getContext(context);
    -250                    }
    -251
    -252                    if (value == null && parameter.getClass().isPrimitive()) {
    -253                        throw new IllegalStateException("Parameter " + parameter.getName() + " is primitive and does not support Optional.");
    -254                    }
    -255                    //noinspection unchecked
    -256                    this.manager.getCommandConditions().validateConditions(context, value);
    -257                    passedArgs.put(parameterName, value);
    -258                    continue;
    -259                } else if (requiresInput) {
    -260                    scope.showSyntax(sender, this);
    -261                    return null;
    -262                }
    -263            } else {
    -264                if (!this.manager.hasPermission(sender, parameterPermissions)) {
    -265                    sender.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED_PARAMETER, "{param}", parameterName);
    -266                    throw new InvalidCommandArgument(false);
    -267                }
    -268            }
    -269
    -270            if (parameter.getValues() != null) {
    -271                String arg = !args.isEmpty() ? args.get(0) : "";
    -272
    -273                Set<String> possible = new HashSet<>();
    -274                CommandCompletions commandCompletions = this.manager.getCommandCompletions();
    -275                for (String s : parameter.getValues()) {
    -276                    if ("*".equals(s) || "@completions".equals(s)) {
    -277                        s = commandCompletions.findDefaultCompletion(this, origArgs);
    -278                    }
    -279                    //noinspection unchecked
    -280                    List<String> check = commandCompletions.getCompletionValues(this, sender, s, origArgs, opContext.isAsync());
    -281                    if (!check.isEmpty()) {
    -282                        possible.addAll(check.stream().filter(Objects::nonNull).
    -283                                map(String::toLowerCase).collect(Collectors.toList()));
    -284                    } else {
    -285                        possible.add(s.toLowerCase(Locale.ENGLISH));
    -286                    }
    -287                }
    -288                if (!possible.contains(arg.toLowerCase(Locale.ENGLISH))) {
    -289                    throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF,
    -290                            "{valid}", ACFUtil.join(possible, ", "));
    -291                }
    -292            }
    -293
    -294            Object paramValue = resolver.getContext(context);
    -295
    -296            //noinspection unchecked
    -297            this.manager.getCommandConditions().validateConditions(context, paramValue);
    -298            passedArgs.put(parameterName, paramValue);
    -299        }
    -300        return passedArgs;
    -301    }
    -302
    -303    boolean hasPermission(CommandIssuer issuer) {
    -304        return this.manager.hasPermission(issuer, getRequiredPermissions());
    -305    }
    -306
    -307    /**
    -308     * @see #getRequiredPermissions()
    -309     * @deprecated
    -310     */
    -311    @Deprecated
    -312    public String getPermission() {
    -313        if (this.permission == null || this.permission.isEmpty()) {
    -314            return null;
    -315        }
    -316        return ACFPatterns.COMMA.split(this.permission)[0];
    -317    }
    -318
    -319    void computePermissions() {
    -320        this.permissions.clear();
    -321        this.permissions.addAll(this.scope.getRequiredPermissions());
    -322        if (this.permission != null && !this.permission.isEmpty()) {
    -323            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    -324        }
    -325    }
    -326
    -327    public Set<String> getRequiredPermissions() {
    -328        return this.permissions;
    -329    }
    -330
    -331    public boolean requiresPermission(String permission) {
    -332        return getRequiredPermissions().contains(permission);
    -333    }
    -334
    -335    public String getPrefSubCommand() {
    -336        return prefSubCommand;
    -337    }
    -338
    -339    public String getSyntaxText() {
    -340        return getSyntaxText(null);
    -341    }
    -342
    -343    public String getSyntaxText(CommandIssuer issuer) {
    -344        if (syntaxText != null) return syntaxText;
    -345        StringBuilder syntaxBuilder = new StringBuilder(64);
    -346        for (CommandParameter<?> parameter : parameters) {
    -347            String syntax = parameter.getSyntax(issuer);
    -348            if (syntax != null) {
    -349                if (syntaxBuilder.length() > 0) {
    -350                    syntaxBuilder.append(' ');
    -351                }
    -352                syntaxBuilder.append(syntax);
    -353            }
    -354        }
    -355        return syntaxBuilder.toString().trim();
    -356    }
    -357
    -358    public String getHelpText() {
    -359        return helpText != null ? helpText : "";
    -360    }
    -361
    -362    public boolean isPrivate() {
    -363        return isPrivate;
    -364    }
    -365
    -366    public String getCommand() {
    -367        return command;
    -368    }
    -369
    -370    public void addSubcommand(String cmd) {
    -371        this.registeredSubcommands.add(cmd);
    -372    }
    -373
    -374    public void addSubcommands(Collection<String> cmd) {
    -375        this.registeredSubcommands.addAll(cmd);
    -376    }
    -377
    -378    public <T extends Annotation> T getAnnotation(Class<T> annotation) {
    -379        return method.getAnnotation(annotation);
    -380    }
    -381}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.annotation.CommandAlias;
    +027import co.aikar.commands.annotation.CommandCompletion;
    +028import co.aikar.commands.annotation.CommandPermission;
    +029import co.aikar.commands.annotation.Conditions;
    +030import co.aikar.commands.annotation.Description;
    +031import co.aikar.commands.annotation.HelpSearchTags;
    +032import co.aikar.commands.annotation.Private;
    +033import co.aikar.commands.annotation.Syntax;
    +034import co.aikar.commands.contexts.ContextResolver;
    +035import org.jetbrains.annotations.Nullable;
    +036
    +037import java.lang.annotation.Annotation;
    +038import java.lang.reflect.InvocationTargetException;
    +039import java.lang.reflect.Method;
    +040import java.lang.reflect.Parameter;
    +041import java.util.ArrayList;
    +042import java.util.Arrays;
    +043import java.util.Collection;
    +044import java.util.HashSet;
    +045import java.util.LinkedHashMap;
    +046import java.util.List;
    +047import java.util.Locale;
    +048import java.util.Map;
    +049import java.util.Objects;
    +050import java.util.Set;
    +051import java.util.concurrent.CompletionException;
    +052import java.util.concurrent.CompletionStage;
    +053import java.util.concurrent.ExecutionException;
    +054import java.util.stream.Collectors;
    +055
    +056@SuppressWarnings("WeakerAccess")
    +057public class RegisteredCommand<CEC extends CommandExecutionContext<CEC, ? extends CommandIssuer>> {
    +058    final BaseCommand scope;
    +059    final Method method;
    +060    final CommandParameter<CEC>[] parameters;
    +061    final CommandManager manager;
    +062    final List<String> registeredSubcommands = new ArrayList<>();
    +063
    +064    String command;
    +065    String prefSubCommand;
    +066    String syntaxText;
    +067    String helpText;
    +068    String permission;
    +069    String complete;
    +070    String conditions;
    +071    public String helpSearchTags;
    +072
    +073    boolean isPrivate;
    +074
    +075    final int requiredResolvers;
    +076    final int consumeInputResolvers;
    +077    final int doesNotConsumeInputResolvers;
    +078    final int optionalResolvers;
    +079
    +080    final Set<String> permissions = new HashSet<>();
    +081
    +082    RegisteredCommand(BaseCommand scope, String command, Method method, String prefSubCommand) {
    +083        this.scope = scope;
    +084        this.manager = this.scope.manager;
    +085        final Annotations annotations = this.manager.getAnnotations();
    +086
    +087        if (BaseCommand.isSpecialSubcommand(prefSubCommand)) {
    +088            prefSubCommand = "";
    +089            command = command.trim();
    +090        }
    +091        this.command = command + (!annotations.hasAnnotation(method, CommandAlias.class, false) && !prefSubCommand.isEmpty() ? prefSubCommand : "");
    +092        this.method = method;
    +093        this.prefSubCommand = prefSubCommand;
    +094
    +095        this.permission = annotations.getAnnotationValue(method, CommandPermission.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +096        this.complete = annotations.getAnnotationValue(method, CommandCompletion.class, Annotations.DEFAULT_EMPTY); // no replacements as it should be per-issuer
    +097        this.helpText = annotations.getAnnotationValue(method, Description.class, Annotations.REPLACEMENTS | Annotations.DEFAULT_EMPTY);
    +098        this.conditions = annotations.getAnnotationValue(method, Conditions.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +099        this.helpSearchTags = annotations.getAnnotationValue(method, HelpSearchTags.class, Annotations.REPLACEMENTS | Annotations.NO_EMPTY);
    +100        this.syntaxText = annotations.getAnnotationValue(method, Syntax.class, Annotations.REPLACEMENTS);
    +101
    +102        Parameter[] parameters = method.getParameters();
    +103        //noinspection unchecked
    +104        this.parameters = new CommandParameter[parameters.length];
    +105
    +106        this.isPrivate = annotations.hasAnnotation(method, Private.class) || annotations.getAnnotationFromClass(scope.getClass(), Private.class) != null;
    +107
    +108        int requiredResolvers = 0;
    +109        int consumeInputResolvers = 0;
    +110        int doesNotConsumeInputResolvers = 0;
    +111        int optionalResolvers = 0;
    +112
    +113        CommandParameter<CEC> previousParam = null;
    +114        for (int i = 0; i < parameters.length; i++) {
    +115            CommandParameter<CEC> parameter = this.parameters[i] = new CommandParameter<>(this, parameters[i], i, i == parameters.length - 1);
    +116            if (previousParam != null) {
    +117                previousParam.setNextParam(parameter);
    +118            }
    +119            previousParam = parameter;
    +120            if (!parameter.isCommandIssuer()) {
    +121                if (!parameter.requiresInput()) {
    +122                    optionalResolvers++;
    +123                } else {
    +124                    requiredResolvers++;
    +125                }
    +126                if (parameter.canConsumeInput()) {
    +127                    consumeInputResolvers++;
    +128                } else {
    +129                    doesNotConsumeInputResolvers++;
    +130                }
    +131            }
    +132        }
    +133
    +134        this.requiredResolvers = requiredResolvers;
    +135        this.consumeInputResolvers = consumeInputResolvers;
    +136        this.doesNotConsumeInputResolvers = doesNotConsumeInputResolvers;
    +137        this.optionalResolvers = optionalResolvers;
    +138        this.computePermissions();
    +139    }
    +140
    +141
    +142    void invoke(CommandIssuer sender, List<String> args, CommandOperationContext context) {
    +143        if (!scope.canExecute(sender, this)) {
    +144            return;
    +145        }
    +146        preCommand();
    +147        try {
    +148            this.manager.getCommandConditions().validateConditions(context);
    +149            Map<String, Object> passedArgs = resolveContexts(sender, args);
    +150            if (passedArgs == null) return;
    +151
    +152            Object obj = method.invoke(scope, passedArgs.values().toArray());
    +153            if (obj instanceof CompletionStage<?>) {
    +154                CompletionStage<?> future = (CompletionStage<?>) obj;
    +155                future.exceptionally(t -> {
    +156                    handleException(sender, args, t);
    +157                    return null;
    +158                });
    +159            }
    +160        } catch (Exception e) {
    +161            handleException(sender, args, e);
    +162        } finally {
    +163            postCommand();
    +164        }
    +165    }
    +166
    +167    public void preCommand() {
    +168    }
    +169
    +170    public void postCommand() {
    +171    }
    +172
    +173    void handleException(CommandIssuer sender, List<String> args, Throwable e) {
    +174        while (e instanceof ExecutionException || e instanceof CompletionException || e instanceof InvocationTargetException) {
    +175            e = e.getCause();
    +176        }
    +177        if (e instanceof ShowCommandHelp) {
    +178            ShowCommandHelp showHelp = (ShowCommandHelp) e;
    +179            CommandHelp commandHelp = manager.generateCommandHelp();
    +180            if (showHelp.search) {
    +181                commandHelp.setSearch(showHelp.searchArgs == null ? args : showHelp.searchArgs);
    +182            }
    +183            commandHelp.showHelp(sender);
    +184        } else if (e instanceof InvalidCommandArgument) {
    +185            InvalidCommandArgument invalidCommandArg = (InvalidCommandArgument) e;
    +186            if (invalidCommandArg.key != null) {
    +187                sender.sendMessage(MessageType.ERROR, invalidCommandArg.key, invalidCommandArg.replacements);
    +188            } else if (e.getMessage() != null && !e.getMessage().isEmpty()) {
    +189                sender.sendMessage(MessageType.ERROR, MessageKeys.ERROR_PREFIX, "{message}", e.getMessage());
    +190            }
    +191            if (invalidCommandArg.showSyntax) {
    +192                scope.showSyntax(sender, this);
    +193            }
    +194        } else {
    +195            try {
    +196                if (!this.manager.handleUncaughtException(scope, this, sender, args, e)) {
    +197                    sender.sendMessage(MessageType.ERROR, MessageKeys.ERROR_PERFORMING_COMMAND);
    +198                }
    +199                boolean hasExceptionHandler = this.manager.defaultExceptionHandler != null || this.scope.getExceptionHandler() != null;
    +200                if (!hasExceptionHandler || this.manager.logUnhandledExceptions) {
    +201                    this.manager.log(LogLevel.ERROR, "Exception in command: " + command + " " + ACFUtil.join(args), e);
    +202                }
    +203            } catch (Exception e2) {
    +204                this.manager.log(LogLevel.ERROR, "Exception in handleException for command: " + command + " " + ACFUtil.join(args), e);
    +205                this.manager.log(LogLevel.ERROR, "Exception triggered by exception handler:", e2);
    +206            }
    +207        }
    +208    }
    +209
    +210    @Nullable
    +211    Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args) throws InvalidCommandArgument {
    +212        return resolveContexts(sender, args, null);
    +213    }
    +214
    +215    @Nullable
    +216    Map<String, Object> resolveContexts(CommandIssuer sender, List<String> args, String name) throws InvalidCommandArgument {
    +217        args = new ArrayList<>(args);
    +218        String[] origArgs = args.toArray(new String[args.size()]);
    +219        Map<String, Object> passedArgs = new LinkedHashMap<>();
    +220        int remainingRequired = requiredResolvers;
    +221        CommandOperationContext opContext = CommandManager.getCurrentCommandOperationContext();
    +222        for (int i = 0; i < parameters.length && (name == null || !passedArgs.containsKey(name)); i++) {
    +223            boolean isLast = i == parameters.length - 1;
    +224            boolean allowOptional = remainingRequired == 0;
    +225            final CommandParameter<CEC> parameter = parameters[i];
    +226            final String parameterName = parameter.getName();
    +227            final Class<?> type = parameter.getType();
    +228            //noinspection unchecked
    +229            final ContextResolver<?, CEC> resolver = parameter.getResolver();
    +230            //noinspection unchecked
    +231            CEC context = (CEC) this.manager.createCommandContext(this, parameter, sender, args, i, passedArgs);
    +232            boolean requiresInput = parameter.requiresInput();
    +233            if (requiresInput && remainingRequired > 0) {
    +234                remainingRequired--;
    +235            }
    +236
    +237            Set<String> parameterPermissions = parameter.getRequiredPermissions();
    +238            if (args.isEmpty() && !(isLast && type == String[].class)) {
    +239                if (allowOptional && parameter.getDefaultValue() != null) {
    +240                    args.add(parameter.getDefaultValue());
    +241                } else if (allowOptional && parameter.isOptional()) {
    +242                    Object value;
    +243                    if (!parameter.isOptionalResolver() || !this.manager.hasPermission(sender, parameterPermissions)) {
    +244                        value = null;
    +245                    } else {
    +246                        value = resolver.getContext(context);
    +247                    }
    +248
    +249                    if (value == null && parameter.getClass().isPrimitive()) {
    +250                        throw new IllegalStateException("Parameter " + parameter.getName() + " is primitive and does not support Optional.");
    +251                    }
    +252                    //noinspection unchecked
    +253                    this.manager.getCommandConditions().validateConditions(context, value);
    +254                    passedArgs.put(parameterName, value);
    +255                    continue;
    +256                } else if (requiresInput) {
    +257                    scope.showSyntax(sender, this);
    +258                    return null;
    +259                }
    +260            } else {
    +261                if (!this.manager.hasPermission(sender, parameterPermissions)) {
    +262                    sender.sendMessage(MessageType.ERROR, MessageKeys.PERMISSION_DENIED_PARAMETER, "{param}", parameterName);
    +263                    throw new InvalidCommandArgument(false);
    +264                }
    +265            }
    +266
    +267            if (parameter.getValues() != null) {
    +268                String arg = !args.isEmpty() ? args.get(0) : "";
    +269
    +270                Set<String> possible = new HashSet<>();
    +271                CommandCompletions commandCompletions = this.manager.getCommandCompletions();
    +272                for (String s : parameter.getValues()) {
    +273                    if ("*".equals(s) || "@completions".equals(s)) {
    +274                        s = commandCompletions.findDefaultCompletion(this, origArgs);
    +275                    }
    +276                    //noinspection unchecked
    +277                    List<String> check = commandCompletions.getCompletionValues(this, sender, s, origArgs, opContext.isAsync());
    +278                    if (!check.isEmpty()) {
    +279                        possible.addAll(check.stream().filter(Objects::nonNull).
    +280                                map(String::toLowerCase).collect(Collectors.toList()));
    +281                    } else {
    +282                        possible.add(s.toLowerCase(Locale.ENGLISH));
    +283                    }
    +284                }
    +285                if (!possible.contains(arg.toLowerCase(Locale.ENGLISH))) {
    +286                    throw new InvalidCommandArgument(MessageKeys.PLEASE_SPECIFY_ONE_OF,
    +287                            "{valid}", ACFUtil.join(possible, ", "));
    +288                }
    +289            }
    +290
    +291            Object paramValue = resolver.getContext(context);
    +292
    +293            //noinspection unchecked
    +294            this.manager.getCommandConditions().validateConditions(context, paramValue);
    +295            passedArgs.put(parameterName, paramValue);
    +296        }
    +297        return passedArgs;
    +298    }
    +299
    +300    boolean hasPermission(CommandIssuer issuer) {
    +301        return this.manager.hasPermission(issuer, getRequiredPermissions());
    +302    }
    +303
    +304    /**
    +305     * @see #getRequiredPermissions()
    +306     * @deprecated
    +307     */
    +308    @Deprecated
    +309    public String getPermission() {
    +310        if (this.permission == null || this.permission.isEmpty()) {
    +311            return null;
    +312        }
    +313        return ACFPatterns.COMMA.split(this.permission)[0];
    +314    }
    +315
    +316    void computePermissions() {
    +317        this.permissions.clear();
    +318        this.permissions.addAll(this.scope.getRequiredPermissions());
    +319        if (this.permission != null && !this.permission.isEmpty()) {
    +320            this.permissions.addAll(Arrays.asList(ACFPatterns.COMMA.split(this.permission)));
    +321        }
    +322    }
    +323
    +324    public Set<String> getRequiredPermissions() {
    +325        return this.permissions;
    +326    }
    +327
    +328    public boolean requiresPermission(String permission) {
    +329        return getRequiredPermissions().contains(permission);
    +330    }
    +331
    +332    public String getPrefSubCommand() {
    +333        return prefSubCommand;
    +334    }
    +335
    +336    public String getSyntaxText() {
    +337        return getSyntaxText(null);
    +338    }
    +339
    +340    public String getSyntaxText(CommandIssuer issuer) {
    +341        if (syntaxText != null) return syntaxText;
    +342        StringBuilder syntaxBuilder = new StringBuilder(64);
    +343        for (CommandParameter<?> parameter : parameters) {
    +344            String syntax = parameter.getSyntax(issuer);
    +345            if (syntax != null) {
    +346                if (syntaxBuilder.length() > 0) {
    +347                    syntaxBuilder.append(' ');
    +348                }
    +349                syntaxBuilder.append(syntax);
    +350            }
    +351        }
    +352        return syntaxBuilder.toString().trim();
    +353    }
    +354
    +355    public String getHelpText() {
    +356        return helpText != null ? helpText : "";
    +357    }
    +358
    +359    public boolean isPrivate() {
    +360        return isPrivate;
    +361    }
    +362
    +363    public String getCommand() {
    +364        return command;
    +365    }
    +366
    +367    public void addSubcommand(String cmd) {
    +368        this.registeredSubcommands.add(cmd);
    +369    }
    +370
    +371    public void addSubcommands(Collection<String> cmd) {
    +372        this.registeredSubcommands.addAll(cmd);
    +373    }
    +374
    +375    public <T extends Annotation> T getAnnotation(Class<T> annotation) {
    +376        return method.getAnnotation(annotation);
    +377    }
    +378}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/RootCommand.html b/docs/acf-core/src-html/co/aikar/commands/RootCommand.html
    index 49beee12..0365410d 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/RootCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/RootCommand.html
    @@ -1,178 +1,182 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import co.aikar.commands.CommandRouter.CommandRouteResult;
    -027import co.aikar.commands.CommandRouter.RouteSearch;
    -028import com.google.common.collect.SetMultimap;
    -029
    -030import java.util.ArrayList;
    -031import java.util.HashSet;
    -032import java.util.List;
    -033import java.util.Set;
    -034
    -035public interface RootCommand {
    -036    void addChild(BaseCommand command);
    -037
    -038    CommandManager getManager();
    -039
    -040    SetMultimap<String, RegisteredCommand> getSubCommands();
    -041
    -042    List<BaseCommand> getChildren();
    -043
    -044    String getCommandName();
    -045
    -046    default void addChildShared(List<BaseCommand> children, SetMultimap<String, RegisteredCommand> subCommands, BaseCommand command) {
    -047        command.subCommands.entries().forEach(e -> {
    -048            subCommands.put(e.getKey(), e.getValue());
    -049        });
    -050
    -051        children.add(command);
    -052    }
    -053
    -054    /**
    -055     * @return If this root command can be summarized to a single required permission node to use it, returns that value. If any RegisteredCommand is permission-less, or has multiple required permission nodes, null is returned.
    -056     */
    -057    default String getUniquePermission() {
    -058        Set<String> permissions = new HashSet<>();
    -059        for (BaseCommand child : getChildren()) {
    -060            for (RegisteredCommand<?> value : child.subCommands.values()) {
    -061                Set<String> requiredPermissions = value.getRequiredPermissions();
    -062                if (requiredPermissions.isEmpty()) {
    -063                    return null;
    -064                } else {
    -065                    permissions.addAll(requiredPermissions);
    -066                }
    -067            }
    -068        }
    -069        return permissions.size() == 1 ? permissions.iterator().next() : null;
    -070    }
    -071
    -072    default boolean hasAnyPermission(CommandIssuer issuer) {
    -073        List<BaseCommand> children = getChildren();
    -074        if (children.isEmpty()) {
    -075            return true;
    -076        }
    -077
    -078        for (BaseCommand child : children) {
    -079            if (!child.hasPermission(issuer)) {
    -080                continue;
    -081            }
    -082            for (RegisteredCommand value : child.getRegisteredCommands()) {
    -083                if (value.hasPermission(issuer)) {
    -084                    return true;
    -085                }
    -086            }
    -087        }
    -088        return false;
    -089    }
    -090
    -091    default BaseCommand execute(CommandIssuer sender, String commandLabel, String[] args) {
    -092        CommandRouter router = getManager().getRouter();
    -093        RouteSearch search = router.routeCommand(this, commandLabel, args, false);
    -094        BaseCommand defCommand = getDefCommand();
    -095        if (search != null) {
    -096            CommandRouteResult result = router.matchCommand(search, false);
    -097            if (result != null) {
    -098                BaseCommand scope = result.cmd.scope;
    -099                scope.execute(sender, result);
    -100                return scope;
    -101            }
    -102
    -103            RegisteredCommand firstElement = ACFUtil.getFirstElement(search.commands);
    -104            if (firstElement != null) {
    -105                defCommand = firstElement.scope;
    -106            }
    -107        }
    -108
    -109        defCommand.help(sender, args);
    -110        return defCommand;
    -111    }
    -112
    -113    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args) {
    -114        return getTabCompletions(sender, alias, args, false);
    -115    }
    -116
    -117    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args, boolean commandsOnly) {
    -118        return getTabCompletions(sender, alias, args, commandsOnly, false);
    -119    }
    -120
    -121    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args, boolean commandsOnly, boolean isAsync) {
    -122        Set<String> completions = new HashSet<>();
    -123        getChildren().forEach(child -> {
    -124            if (!commandsOnly) {
    -125                completions.addAll(child.tabComplete(sender, this, args, isAsync));
    -126            }
    -127            completions.addAll(child.getCommandsForCompletion(sender, args));
    -128        });
    -129        return new ArrayList<>(completions);
    -130    }
    -131
    -132
    -133    default RegisteredCommand getDefaultRegisteredCommand() {
    -134        BaseCommand defCommand = this.getDefCommand();
    -135        if (defCommand != null) {
    -136            return defCommand.getDefaultRegisteredCommand();
    -137        }
    -138        return null;
    -139    }
    -140
    -141    default BaseCommand getDefCommand() {
    -142        return null;
    -143    }
    -144
    -145
    -146    default String getDescription() {
    -147        final RegisteredCommand cmd = this.getDefaultRegisteredCommand();
    -148        if (cmd != null) {
    -149            return cmd.getHelpText();
    -150        }
    -151        BaseCommand defCommand = getDefCommand();
    -152        if (defCommand != null && defCommand.description != null) {
    -153            return defCommand.description;
    -154        }
    -155        return "";
    -156    }
    -157
    -158
    -159    default String getUsage() {
    -160        final RegisteredCommand cmd = this.getDefaultRegisteredCommand();
    -161        if (cmd != null) {
    -162            return cmd.syntaxText != null ? cmd.syntaxText : "";
    -163        }
    -164        return "";
    -165    }
    -166}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import co.aikar.commands.CommandRouter.CommandRouteResult;
    +027import co.aikar.commands.CommandRouter.RouteSearch;
    +028import com.google.common.collect.SetMultimap;
    +029
    +030import java.util.ArrayList;
    +031import java.util.HashSet;
    +032import java.util.List;
    +033import java.util.Set;
    +034
    +035public interface RootCommand {
    +036    void addChild(BaseCommand command);
    +037
    +038    CommandManager getManager();
    +039
    +040    SetMultimap<String, RegisteredCommand> getSubCommands();
    +041
    +042    List<BaseCommand> getChildren();
    +043
    +044    String getCommandName();
    +045
    +046    default void addChildShared(List<BaseCommand> children, SetMultimap<String, RegisteredCommand> subCommands, BaseCommand command) {
    +047        command.subCommands.entries().forEach(e -> {
    +048            subCommands.put(e.getKey(), e.getValue());
    +049        });
    +050
    +051        children.add(command);
    +052    }
    +053
    +054    /**
    +055     * @return If this root command can be summarized to a single required permission node to use it, returns that value. If any RegisteredCommand is permission-less, or has multiple required permission nodes, null is returned.
    +056     */
    +057    default String getUniquePermission() {
    +058        Set<String> permissions = new HashSet<>();
    +059        for (BaseCommand child : getChildren()) {
    +060            for (RegisteredCommand<?> value : child.subCommands.values()) {
    +061                Set<String> requiredPermissions = value.getRequiredPermissions();
    +062                if (requiredPermissions.isEmpty()) {
    +063                    return null;
    +064                } else {
    +065                    permissions.addAll(requiredPermissions);
    +066                }
    +067            }
    +068        }
    +069        return permissions.size() == 1 ? permissions.iterator().next() : null;
    +070    }
    +071
    +072    default boolean hasAnyPermission(CommandIssuer issuer) {
    +073        List<BaseCommand> children = getChildren();
    +074        if (children.isEmpty()) {
    +075            return true;
    +076        }
    +077
    +078        for (BaseCommand child : children) {
    +079            if (!child.hasPermission(issuer)) {
    +080                continue;
    +081            }
    +082            for (RegisteredCommand value : child.getRegisteredCommands()) {
    +083                if (value.hasPermission(issuer)) {
    +084                    return true;
    +085                }
    +086            }
    +087        }
    +088        return false;
    +089    }
    +090
    +091    default BaseCommand execute(CommandIssuer sender, String commandLabel, String[] args) {
    +092        CommandRouter router = getManager().getRouter();
    +093        RouteSearch search = router.routeCommand(this, commandLabel, args, false);
    +094        BaseCommand defCommand = getDefCommand();
    +095        if (search != null) {
    +096            CommandRouteResult result = router.matchCommand(search, false);
    +097            if (result != null) {
    +098                BaseCommand scope = result.cmd.scope;
    +099                scope.execute(sender, result);
    +100                return scope;
    +101            }
    +102
    +103            RegisteredCommand firstElement = ACFUtil.getFirstElement(search.commands);
    +104            if (firstElement != null) {
    +105                defCommand = firstElement.scope;
    +106            }
    +107        }
    +108
    +109        defCommand.help(sender, args);
    +110        return defCommand;
    +111    }
    +112
    +113    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args) {
    +114        return getTabCompletions(sender, alias, args, false);
    +115    }
    +116
    +117    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args, boolean commandsOnly) {
    +118        return getTabCompletions(sender, alias, args, commandsOnly, false);
    +119    }
    +120
    +121    default List<String> getTabCompletions(CommandIssuer sender, String alias, String[] args, boolean commandsOnly, boolean isAsync) {
    +122        Set<String> completions = new HashSet<>();
    +123        getChildren().forEach(child -> {
    +124            if (!commandsOnly) {
    +125                completions.addAll(child.tabComplete(sender, this, args, isAsync));
    +126            }
    +127            completions.addAll(child.getCommandsForCompletion(sender, args));
    +128        });
    +129        return new ArrayList<>(completions);
    +130    }
    +131
    +132
    +133    default RegisteredCommand getDefaultRegisteredCommand() {
    +134        BaseCommand defCommand = this.getDefCommand();
    +135        if (defCommand != null) {
    +136            return defCommand.getDefaultRegisteredCommand();
    +137        }
    +138        return null;
    +139    }
    +140
    +141    default BaseCommand getDefCommand() {
    +142        return null;
    +143    }
    +144
    +145
    +146    default String getDescription() {
    +147        final RegisteredCommand cmd = this.getDefaultRegisteredCommand();
    +148        if (cmd != null) {
    +149            return cmd.getHelpText();
    +150        }
    +151        BaseCommand defCommand = getDefCommand();
    +152        if (defCommand != null && defCommand.description != null) {
    +153            return defCommand.description;
    +154        }
    +155        return "";
    +156    }
    +157
    +158
    +159    default String getUsage() {
    +160        final RegisteredCommand cmd = this.getDefaultRegisteredCommand();
    +161        if (cmd != null) {
    +162            return cmd.syntaxText != null ? cmd.syntaxText : "";
    +163        }
    +164        return "";
    +165    }
    +166}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/ShowCommandHelp.html b/docs/acf-core/src-html/co/aikar/commands/ShowCommandHelp.html
    index 11f841db..a4b391fb 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/ShowCommandHelp.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/ShowCommandHelp.html
    @@ -1,57 +1,61 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.util.ArrayList;
    -027import java.util.List;
    -028
    -029public class ShowCommandHelp extends InvalidCommandArgument {
    -030    List<String> searchArgs = null;
    -031    boolean search = false;
    -032
    -033    public ShowCommandHelp() {
    -034
    -035    }
    -036
    -037    public ShowCommandHelp(boolean search) {
    -038        this.search = search;
    -039    }
    -040
    -041    public ShowCommandHelp(List<String> args) {
    -042        this(true);
    -043        this.searchArgs = new ArrayList<>(args);
    -044    }
    -045}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.util.ArrayList;
    +027import java.util.List;
    +028
    +029public class ShowCommandHelp extends InvalidCommandArgument {
    +030    List<String> searchArgs = null;
    +031    boolean search = false;
    +032
    +033    public ShowCommandHelp() {
    +034
    +035    }
    +036
    +037    public ShowCommandHelp(boolean search) {
    +038        this.search = search;
    +039    }
    +040
    +041    public ShowCommandHelp(List<String> args) {
    +042        this(true);
    +043        this.searchArgs = new ArrayList<>(args);
    +044    }
    +045}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/UnresolvedDependencyException.html b/docs/acf-core/src-html/co/aikar/commands/UnresolvedDependencyException.html
    index bd899060..856e8d8d 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/UnresolvedDependencyException.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/UnresolvedDependencyException.html
    @@ -1,46 +1,50 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026/**
    -027 * Thrown when a command mananger couldn't find a registered instance for a field that is marked with
    -028 * {@link co.aikar.commands.annotation.Dependency}
    -029 */
    -030public class UnresolvedDependencyException extends RuntimeException {
    -031    UnresolvedDependencyException(String message) {
    -032        super(message);
    -033    }
    -034}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026/**
    +027 * Thrown when a command mananger couldn't find a registered instance for a field that is marked with
    +028 * {@link co.aikar.commands.annotation.Dependency}
    +029 */
    +030public class UnresolvedDependencyException extends RuntimeException {
    +031    UnresolvedDependencyException(String message) {
    +032        super(message);
    +033    }
    +034}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/UnstableAPI.html b/docs/acf-core/src-html/co/aikar/commands/UnstableAPI.html
    index 6d56ffd2..6c0559fa 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/UnstableAPI.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/UnstableAPI.html
    @@ -1,43 +1,47 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands;
    -025
    -026import java.lang.annotation.Retention;
    -027import java.lang.annotation.RetentionPolicy;
    -028
    -029@Retention(RetentionPolicy.RUNTIME)
    -030@Deprecated
    -031public @interface UnstableAPI {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands;
    +025
    +026import java.lang.annotation.Retention;
    +027import java.lang.annotation.RetentionPolicy;
    +028
    +029@Retention(RetentionPolicy.RUNTIME)
    +030@Deprecated
    +031public @interface UnstableAPI {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/CatchAll.html b/docs/acf-core/src-html/co/aikar/commands/annotation/CatchAll.html
    index 32acbe9d..2ec5c083 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/CatchAll.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/CatchAll.html
    @@ -1,49 +1,53 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * @deprecated Use {@link CatchUnknown instead, which is more accurately named}
    -033 */
    -034@Deprecated
    -035@Retention(RetentionPolicy.RUNTIME)
    -036@Target({ElementType.METHOD})
    -037public @interface CatchAll {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * @deprecated Use {@link CatchUnknown instead, which is more accurately named}
    +033 */
    +034@Deprecated
    +035@Retention(RetentionPolicy.RUNTIME)
    +036@Target({ElementType.METHOD})
    +037public @interface CatchAll {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/CatchUnknown.html b/docs/acf-core/src-html/co/aikar/commands/annotation/CatchUnknown.html
    index ebb57b4c..574abf55 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/CatchUnknown.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/CatchUnknown.html
    @@ -1,55 +1,59 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Defines a method that should receive any unknown command for the related root command.
    -033 *
    -034 * For example, if a BaseCommand /foo has a method with this, and /foo someunknowncommand is used
    -035 *
    -036 * If a method is tagged with this annotation, it will catch unknown commands and let you react to them.
    -037 *
    -038 * Only one instance of this annotation can be used per root command.
    -039 */
    -040@Retention(RetentionPolicy.RUNTIME)
    -041@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    -042public @interface CatchUnknown {
    -043}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Defines a method that should receive any unknown command for the related root command.
    +033 *
    +034 * For example, if a BaseCommand /foo has a method with this, and /foo someunknowncommand is used
    +035 *
    +036 * If a method is tagged with this annotation, it will catch unknown commands and let you react to them.
    +037 *
    +038 * Only one instance of this annotation can be used per root command.
    +039 */
    +040@Retention(RetentionPolicy.RUNTIME)
    +041@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    +042public @interface CatchUnknown {
    +043}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandAlias.html b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandAlias.html
    index 2c8447ad..e7c3737b 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandAlias.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandAlias.html
    @@ -1,55 +1,59 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Allows to add a single or several command alias(es).
    -033 * In order to add more than one in a single go, use the syntax "alias|otheralias".
    -034 * You can register as many aliases as wanted in a single value.
    -035 *
    -036 * Used on a Class, defines the root command for all subcommands in the base command.
    -037 * Used on a method, defines a root command alias to that specific command
    -038 */
    -039@Retention(RetentionPolicy.RUNTIME)
    -040@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    -041public @interface CommandAlias {
    -042    String value();
    -043}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Allows to add a single or several command alias(es).
    +033 * In order to add more than one in a single go, use the syntax "alias|otheralias".
    +034 * You can register as many aliases as wanted in a single value.
    +035 *
    +036 * Used on a Class, defines the root command for all subcommands in the base command.
    +037 * Used on a method, defines a root command alias to that specific command
    +038 */
    +039@Retention(RetentionPolicy.RUNTIME)
    +040@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    +041public @interface CommandAlias {
    +042    String value();
    +043}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandCompletion.html b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandCompletion.html
    index 27dad98d..876537e8 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandCompletion.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandCompletion.html
    @@ -1,57 +1,61 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Many implementation platforms have a concept of "Tab Completions",
    -033 * where pressing tab will give suggestions on what you can input.
    -034 *
    -035 * This annotation specifies either static completion values,
    -036 * or special @codes that let you define Completion Handlers to dynamically
    -037 * populate completion values.
    -038 *
    -039 * @see {@link co.aikar.commands.CommandCompletions}
    -040 */
    -041@Retention(RetentionPolicy.RUNTIME)
    -042@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    -043public @interface CommandCompletion {
    -044    String value();
    -045}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Many implementation platforms have a concept of "Tab Completions",
    +033 * where pressing tab will give suggestions on what you can input.
    +034 *
    +035 * This annotation specifies either static completion values,
    +036 * or special @codes that let you define Completion Handlers to dynamically
    +037 * populate completion values.
    +038 *
    +039 * @see {@link co.aikar.commands.CommandCompletions}
    +040 */
    +041@Retention(RetentionPolicy.RUNTIME)
    +042@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    +043public @interface CommandCompletion {
    +044    String value();
    +045}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandPermission.html b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandPermission.html
    index a7d78f53..f501242c 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/CommandPermission.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/CommandPermission.html
    @@ -1,52 +1,56 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Sets the permission required to perform this command.
    -033 * <p>
    -034 * Permission format will vary based on implementation platform
    -035 */
    -036@Retention(RetentionPolicy.RUNTIME)
    -037@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -038public @interface CommandPermission {
    -039    String value();
    -040}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Sets the permission required to perform this command.
    +033 * <p>
    +034 * Permission format will vary based on implementation platform
    +035 */
    +036@Retention(RetentionPolicy.RUNTIME)
    +037@Target({ElementType.METHOD, ElementType.TYPE, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +038public @interface CommandPermission {
    +039    String value();
    +040}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Conditions.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Conditions.html
    index 9f4ee3ef..8dd46f49 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Conditions.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Conditions.html
    @@ -1,55 +1,59 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Specifies conditions that must be met in order to execute this command.
    -033 *
    -034 * If used on a method or a class, will be checked before parameter context is resolved
    -035 * If used on a parameter, will be checked after the context is resolved
    -036 *
    -037 * @see {@link co.aikar.commands.CommandConditions}
    -038 */
    -039@Retention(RetentionPolicy.RUNTIME)
    -040@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    -041public @interface Conditions {
    -042    String value();
    -043}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Specifies conditions that must be met in order to execute this command.
    +033 *
    +034 * If used on a method or a class, will be checked before parameter context is resolved
    +035 * If used on a parameter, will be checked after the context is resolved
    +036 *
    +037 * @see {@link co.aikar.commands.CommandConditions}
    +038 */
    +039@Retention(RetentionPolicy.RUNTIME)
    +040@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    +041public @interface Conditions {
    +042    String value();
    +043}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Default.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Default.html
    index 7e035600..6ef88bbb 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Default.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Default.html
    @@ -1,51 +1,55 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * If used on a method, sets default command handler for the root command of this group
    -033 * If used on a parameter, sets the value to be used for context resolution
    -034 */
    -035@Retention(RetentionPolicy.RUNTIME)
    -036@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -037public @interface Default {
    -038    String value() default "";
    -039}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * If used on a method, sets default command handler for the root command of this group
    +033 * If used on a parameter, sets the value to be used for context resolution
    +034 */
    +035@Retention(RetentionPolicy.RUNTIME)
    +036@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +037public @interface Default {
    +038    String value() default "";
    +039}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Dependency.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Dependency.html
    index faa25f21..8371c9bc 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Dependency.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Dependency.html
    @@ -1,55 +1,59 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Injects a dependency into the field this is attached to.
    -033 * Any time a new dependency is registered, this will be overwritten.
    -034 */
    -035@Retention(RetentionPolicy.RUNTIME)
    -036@Target(ElementType.FIELD)
    -037public @interface Dependency {
    -038    /**
    -039     * The key that should be used to lookup the instances, defaults to \"\"
    -040     * @return the key
    -041     */
    -042    String value() default "";
    -043}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Injects a dependency into the field this is attached to.
    +033 * Any time a new dependency is registered, this will be overwritten.
    +034 */
    +035@Retention(RetentionPolicy.RUNTIME)
    +036@Target(ElementType.FIELD)
    +037public @interface Dependency {
    +038    /**
    +039     * The key that should be used to lookup the instances, defaults to \"\"
    +040     * @return the key
    +041     */
    +042    String value() default "";
    +043}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Description.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Description.html
    index 350aefa6..516127c1 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Description.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Description.html
    @@ -1,51 +1,55 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Sets a description to the parameter or method this is attached to.
    -033 * This is used in the help menus.
    -034 */
    -035@Retention(RetentionPolicy.RUNTIME)
    -036@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    -037public @interface Description {
    -038    String value();
    -039}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Sets a description to the parameter or method this is attached to.
    +033 * This is used in the help menus.
    +034 */
    +035@Retention(RetentionPolicy.RUNTIME)
    +036@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    +037public @interface Description {
    +038    String value();
    +039}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Flags.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Flags.html
    index 57738608..c2c67214 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Flags.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Flags.html
    @@ -1,54 +1,58 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Provides configuration options for {@link co.aikar.commands.contexts.ContextResolver}'s to change how they resolve context.
    -033 *
    -034 * Example: Searching for a player, you might use @Flags("loose") to indicate a fuzzy match instead of an exact match.
    -035 *
    -036 * If you want to restrict if an issuer can use the command, please use {@link co.aikar.commands.CommandConditions.Condition} instead.
    -037 */
    -038@Retention(RetentionPolicy.RUNTIME)
    -039@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -040public @interface Flags {
    -041    String value();
    -042}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Provides configuration options for {@link co.aikar.commands.contexts.ContextResolver}'s to change how they resolve context.
    +033 *
    +034 * Example: Searching for a player, you might use @Flags("loose") to indicate a fuzzy match instead of an exact match.
    +035 *
    +036 * If you want to restrict if an issuer can use the command, please use {@link co.aikar.commands.CommandConditions.Condition} instead.
    +037 */
    +038@Retention(RetentionPolicy.RUNTIME)
    +039@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +040public @interface Flags {
    +041    String value();
    +042}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/HelpCommand.html b/docs/acf-core/src-html/co/aikar/commands/annotation/HelpCommand.html
    index 39818481..ed4daefe 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/HelpCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/HelpCommand.html
    @@ -1,57 +1,61 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * A Shortcut for specifying {@link CatchUnknown}, {@link Default} and {@link Subcommand} on a method.
    -033 * Subcommand carries the same value as this annotations value to define the list of subcommands to register for.
    -034 *
    -035 * a method marked with this annotation should also use a {@link co.aikar.commands.CommandHelp} context parameter to show help.
    -036 */
    -037@Retention(RetentionPolicy.RUNTIME)
    -038@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    -039public @interface HelpCommand {
    -040    /**
    -041     * The value to forward to the @Subcommand annotation. Lists which subcommands to register to trigger help
    -042     * @return
    -043     */
    -044    String value() default "help|?|-help|-h|-?";
    -045}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * A Shortcut for specifying {@link CatchUnknown}, {@link Default} and {@link Subcommand} on a method.
    +033 * Subcommand carries the same value as this annotations value to define the list of subcommands to register for.
    +034 *
    +035 * a method marked with this annotation should also use a {@link co.aikar.commands.CommandHelp} context parameter to show help.
    +036 */
    +037@Retention(RetentionPolicy.RUNTIME)
    +038@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    +039public @interface HelpCommand {
    +040    /**
    +041     * The value to forward to the @Subcommand annotation. Lists which subcommands to register to trigger help
    +042     * @return
    +043     */
    +044    String value() default "help|?|-help|-h|-?";
    +045}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/HelpSearchTags.html b/docs/acf-core/src-html/co/aikar/commands/annotation/HelpSearchTags.html
    index 1b94feb1..8dfb6df4 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/HelpSearchTags.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/HelpSearchTags.html
    @@ -1,53 +1,57 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Defines additional keywords to feed into the search help system.
    -033 *
    -034 * For example, if a specific word doesn't make sense to use in the command name or description, but should
    -035 * be used for help in discovering the correct command, then you can add it as a tag.
    -036 */
    -037@Retention(RetentionPolicy.RUNTIME)
    -038@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    -039public @interface HelpSearchTags {
    -040    String value();
    -041}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Defines additional keywords to feed into the search help system.
    +033 *
    +034 * For example, if a specific word doesn't make sense to use in the command name or description, but should
    +035 * be used for help in discovering the correct command, then you can add it as a tag.
    +036 */
    +037@Retention(RetentionPolicy.RUNTIME)
    +038@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    +039public @interface HelpSearchTags {
    +040    String value();
    +041}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Name.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Name.html
    index 9eff29e6..4805dd47 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Name.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Name.html
    @@ -1,47 +1,51 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2020 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031@Retention(RetentionPolicy.RUNTIME)
    -032@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -033public @interface Name {
    -034    String value();
    -035}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2020 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031@Retention(RetentionPolicy.RUNTIME)
    +032@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +033public @interface Name {
    +034    String value();
    +035}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Optional.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Optional.html
    index e91a1576..efd64693 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Optional.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Optional.html
    @@ -1,53 +1,57 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Marks the parameter this is attached to as optional.
    -033 * This will set the parameter as null if it was not provided.
    -034 * <p>
    -035 * In the case the language used is Kotlin, Ceylon or any other null-enforcing JVM language,
    -036 * you will need to allow for a nullable value.
    -037 */
    -038@Retention(RetentionPolicy.RUNTIME)
    -039@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -040public @interface Optional {
    -041}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Marks the parameter this is attached to as optional.
    +033 * This will set the parameter as null if it was not provided.
    +034 * <p>
    +035 * In the case the language used is Kotlin, Ceylon or any other null-enforcing JVM language,
    +036 * you will need to allow for a nullable value.
    +037 */
    +038@Retention(RetentionPolicy.RUNTIME)
    +039@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +040public @interface Optional {
    +041}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/PreCommand.html b/docs/acf-core/src-html/co/aikar/commands/annotation/PreCommand.html
    index 60d11bd6..a0243785 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/PreCommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/PreCommand.html
    @@ -1,49 +1,53 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026
    -027import java.lang.annotation.ElementType;
    -028import java.lang.annotation.Retention;
    -029import java.lang.annotation.RetentionPolicy;
    -030import java.lang.annotation.Target;
    -031
    -032/**
    -033 * This runs before any other command method each time it is invoked.
    -034 */
    -035@Retention(RetentionPolicy.RUNTIME)
    -036@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    -037public @interface PreCommand {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026
    +027import java.lang.annotation.ElementType;
    +028import java.lang.annotation.Retention;
    +029import java.lang.annotation.RetentionPolicy;
    +030import java.lang.annotation.Target;
    +031
    +032/**
    +033 * This runs before any other command method each time it is invoked.
    +034 */
    +035@Retention(RetentionPolicy.RUNTIME)
    +036@Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE})
    +037public @interface PreCommand {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Private.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Private.html
    index e3f33371..d7005e4d 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Private.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Private.html
    @@ -1,49 +1,53 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Marks a command to not be included in stuff like tab completion and help pages
    -033 */
    -034@Retention(RetentionPolicy.RUNTIME)
    -035@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    -036public @interface Private {
    -037}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Marks a command to not be included in stuff like tab completion and help pages
    +033 */
    +034@Retention(RetentionPolicy.RUNTIME)
    +035@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    +036public @interface Private {
    +037}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Single.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Single.html
    index c4721493..e6b90d5b 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Single.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Single.html
    @@ -1,48 +1,52 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Don't join remaining arguments. Used on String parameters, which normally would combine the remaining arguments
    -033 */
    -034@Retention(RetentionPolicy.RUNTIME)
    -035@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -036public @interface Single {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Don't join remaining arguments. Used on String parameters, which normally would combine the remaining arguments
    +033 */
    +034@Retention(RetentionPolicy.RUNTIME)
    +035@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +036public @interface Single {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Split.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Split.html
    index 58f489d5..824f3d40 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Split.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Split.html
    @@ -1,52 +1,56 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026
    -027import java.lang.annotation.ElementType;
    -028import java.lang.annotation.Retention;
    -029import java.lang.annotation.RetentionPolicy;
    -030import java.lang.annotation.Target;
    -031
    -032/**
    -033 * Joins arguments into a single piece of text with the specified separator.
    -034 * For array based parameters, defines the regex pattern to split on
    -035 */
    -036@Retention(RetentionPolicy.RUNTIME)
    -037@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -038public @interface Split {
    -039    String value() default ",";
    -040}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026
    +027import java.lang.annotation.ElementType;
    +028import java.lang.annotation.Retention;
    +029import java.lang.annotation.RetentionPolicy;
    +030import java.lang.annotation.Target;
    +031
    +032/**
    +033 * Joins arguments into a single piece of text with the specified separator.
    +034 * For array based parameters, defines the regex pattern to split on
    +035 */
    +036@Retention(RetentionPolicy.RUNTIME)
    +037@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +038public @interface Split {
    +039    String value() default ",";
    +040}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Subcommand.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Subcommand.html
    index 173b8445..ddcf2fba 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Subcommand.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Subcommand.html
    @@ -1,54 +1,58 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Defines the subcommand that can be used to execute this command.
    -033 * This is appended onto the root command for the command group,
    -034 * as well as any parent command groups subcommand base.
    -035 *
    -036 * Defines the part after root command like so: "/rootcommand {@link #value()}".
    -037 */
    -038@Retention(RetentionPolicy.RUNTIME)
    -039@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    -040public @interface Subcommand {
    -041    String value();
    -042}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Defines the subcommand that can be used to execute this command.
    +033 * This is appended onto the root command for the command group,
    +034 * as well as any parent command groups subcommand base.
    +035 *
    +036 * Defines the part after root command like so: "/rootcommand {@link #value()}".
    +037 */
    +038@Retention(RetentionPolicy.RUNTIME)
    +039@Target({ElementType.METHOD, ElementType.TYPE, ElementType.ANNOTATION_TYPE})
    +040public @interface Subcommand {
    +041    String value();
    +042}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Syntax.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Syntax.html
    index 9162b3e8..e8b1019c 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Syntax.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Syntax.html
    @@ -1,57 +1,61 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Specifies the syntax to be used when executing this command.
    -033 * It should not include any descriptions of the arguments nor when some are allowed and when they are not.
    -034 *
    -035 * Use of this annotation is not necessary. Syntax will be automatically generated for you.
    -036 * Use this annotation to override automatic syntax
    -037 *
    -038 * Use {@link Description} together with the help menu for that purpose.
    -039 **/
    -040@Retention(RetentionPolicy.RUNTIME)
    -041@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -042public @interface Syntax {
    -043    String value();
    -044}
    -045
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Specifies the syntax to be used when executing this command.
    +033 * It should not include any descriptions of the arguments nor when some are allowed and when they are not.
    +034 *
    +035 * Use of this annotation is not necessary. Syntax will be automatically generated for you.
    +036 * Use this annotation to override automatic syntax
    +037 *
    +038 * Use {@link Description} together with the help menu for that purpose.
    +039 **/
    +040@Retention(RetentionPolicy.RUNTIME)
    +041@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +042public @interface Syntax {
    +043    String value();
    +044}
    +045
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/UnknownHandler.html b/docs/acf-core/src-html/co/aikar/commands/annotation/UnknownHandler.html
    index aec89753..1ebc296c 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/UnknownHandler.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/UnknownHandler.html
    @@ -1,50 +1,54 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026
    -027import java.lang.annotation.ElementType;
    -028import java.lang.annotation.Retention;
    -029import java.lang.annotation.RetentionPolicy;
    -030import java.lang.annotation.Target;
    -031
    -032/**
    -033 * @deprecated Use {@link CatchUnknown instead, which is more accurately named}
    -034 */
    -035@Deprecated
    -036@Retention(RetentionPolicy.RUNTIME)
    -037@Target({ElementType.METHOD})
    -038public @interface UnknownHandler {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026
    +027import java.lang.annotation.ElementType;
    +028import java.lang.annotation.Retention;
    +029import java.lang.annotation.RetentionPolicy;
    +030import java.lang.annotation.Target;
    +031
    +032/**
    +033 * @deprecated Use {@link CatchUnknown instead, which is more accurately named}
    +034 */
    +035@Deprecated
    +036@Retention(RetentionPolicy.RUNTIME)
    +037@Target({ElementType.METHOD})
    +038public @interface UnknownHandler {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/annotation/Values.html b/docs/acf-core/src-html/co/aikar/commands/annotation/Values.html
    index 40775752..ff557199 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/annotation/Values.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/annotation/Values.html
    @@ -1,52 +1,56 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.annotation;
    -025
    -026import java.lang.annotation.ElementType;
    -027import java.lang.annotation.Retention;
    -028import java.lang.annotation.RetentionPolicy;
    -029import java.lang.annotation.Target;
    -030
    -031/**
    -032 * Specifies a list of values that the command input should be validated against, or else show an error.
    -033 *
    -034 * You may also use {@link CommandCompletion} handler codes here to feed dynamic values and avoid repetition.
    -035 */
    -036@Retention(RetentionPolicy.RUNTIME)
    -037@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    -038public @interface Values {
    -039    String value();
    -040}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.annotation;
    +025
    +026import java.lang.annotation.ElementType;
    +027import java.lang.annotation.Retention;
    +028import java.lang.annotation.RetentionPolicy;
    +029import java.lang.annotation.Target;
    +030
    +031/**
    +032 * Specifies a list of values that the command input should be validated against, or else show an error.
    +033 *
    +034 * You may also use {@link CommandCompletion} handler codes here to feed dynamic values and avoid repetition.
    +035 */
    +036@Retention(RetentionPolicy.RUNTIME)
    +037@Target({ElementType.PARAMETER, ElementType.ANNOTATION_TYPE})
    +038public @interface Values {
    +039    String value();
    +040}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html
    index c6af83cc..a46f9c05 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.Nestable.html
    @@ -1,1026 +1,1030 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Licensed to the Apache Software Foundation (ASF) under one or more
    -003 * contributor license agreements.  See the NOTICE file distributed with
    -004 * this work for additional information regarding copyright ownership.
    -005 * The ASF licenses this file to You under the Apache License, Version 2.0
    -006 * (the "License"); you may not use this file except in compliance with
    -007 * the License.  You may obtain a copy of the License at
    -008 *
    -009 *      http://www.apache.org/licenses/LICENSE-2.0
    -010 *
    -011 * Unless required by applicable law or agreed to in writing, software
    -012 * distributed under the License is distributed on an "AS IS" BASIS,
    -013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -014 * See the License for the specific language governing permissions and
    -015 * limitations under the License.
    -016 */
    -017package co.aikar.commands.apachecommonslang;
    -018
    -019import java.io.PrintStream;
    -020import java.io.PrintWriter;
    -021import java.io.StringWriter;
    -022import java.lang.reflect.Field;
    -023import java.lang.reflect.InvocationTargetException;
    -024import java.lang.reflect.Method;
    -025import java.sql.SQLException;
    -026import java.util.ArrayList;
    -027import java.util.Arrays;
    -028import java.util.List;
    -029import java.util.StringTokenizer;
    -030
    -031/**
    -032 * <p>Provides utilities for manipulating and examining
    -033 * <code>Throwable</code> objects.</p>
    -034 *
    -035 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    -036 * @author Dmitri Plotnikov
    -037 * @author Stephen Colebourne
    -038 * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
    -039 * @author Pete Gieser
    -040 * @since 1.0
    -041 * @version $Id$
    -042 */
    -043public class ApacheCommonsExceptionUtil {
    -044    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    -045
    -046    /**
    -047     * <p>Used when printing stack frames to denote the start of a
    -048     * wrapped exception.</p>
    -049     *
    -050     * <p>Package private for accessibility by test suite.</p>
    -051     */
    -052    static final String WRAPPED_MARKER = " [wrapped] ";
    -053
    -054    /**
    -055     * <p>The names of methods commonly used to access a wrapped exception.</p>
    -056     */
    -057    private static String[] CAUSE_METHOD_NAMES = {
    -058            "getCause",
    -059            "getNextException",
    -060            "getTargetException",
    -061            "getException",
    -062            "getSourceException",
    -063            "getRootCause",
    -064            "getCausedByException",
    -065            "getNested",
    -066            "getLinkedException",
    -067            "getNestedException",
    -068            "getLinkedCause",
    -069            "getThrowable",
    -070    };
    -071
    -072    /**
    -073     * <p>The Method object for Java 1.4 getCause.</p>
    -074     */
    -075    private static final Method THROWABLE_CAUSE_METHOD;
    -076
    -077    /**
    -078     * <p>The Method object for Java 1.4 initCause.</p>
    -079     */
    -080    private static final Method THROWABLE_INITCAUSE_METHOD;
    -081
    -082    static {
    -083        Method causeMethod;
    -084        try {
    -085            causeMethod = Throwable.class.getMethod("getCause", null);
    -086        } catch (Exception e) {
    -087            causeMethod = null;
    -088        }
    -089        THROWABLE_CAUSE_METHOD = causeMethod;
    -090        try {
    -091            causeMethod = Throwable.class.getMethod("initCause", Throwable.class);
    -092        } catch (Exception e) {
    -093            causeMethod = null;
    -094        }
    -095        THROWABLE_INITCAUSE_METHOD = causeMethod;
    -096    }
    -097
    -098    /**
    -099     * <p>
    -100     * Public constructor allows an instance of <code>ExceptionUtils</code> to be created, although that is not
    -101     * normally necessary.
    -102     * </p>
    -103     */
    -104    public ApacheCommonsExceptionUtil() {
    -105        super();
    -106    }
    -107
    -108    //-----------------------------------------------------------------------
    -109    /**
    -110     * <p>Adds to the list of method names used in the search for <code>Throwable</code>
    -111     * objects.</p>
    -112     *
    -113     * @param methodName  the methodName to add to the list, <code>null</code>
    -114     *  and empty strings are ignored
    -115     * @since 2.0
    -116     */
    -117    public static void addCauseMethodName(String methodName) {
    -118        if (methodName != null && !methodName.isEmpty() && !isCauseMethodName(methodName)) {
    -119            List list = getCauseMethodNameList();
    -120            if (list.add(methodName)) {
    -121                CAUSE_METHOD_NAMES = toArray(list);
    -122            }
    -123        }
    -124    }
    -125
    -126    /**
    -127     * <p>Removes from the list of method names used in the search for <code>Throwable</code>
    -128     * objects.</p>
    -129     *
    -130     * @param methodName  the methodName to remove from the list, <code>null</code>
    -131     *  and empty strings are ignored
    -132     * @since 2.1
    -133     */
    -134    public static void removeCauseMethodName(String methodName) {
    -135        if (methodName != null && !methodName.isEmpty()) {
    -136            List list = getCauseMethodNameList();
    -137            if (list.remove(methodName)) {
    -138                CAUSE_METHOD_NAMES = toArray(list);
    -139            }
    -140        }
    -141    }
    -142
    -143    /**
    -144     * <p>Sets the cause of a <code>Throwable</code> using introspection, allowing
    -145     * source code compatibility between pre-1.4 and post-1.4 Java releases.</p>
    -146     *
    -147     * <p>The typical use of this method is inside a constructor as in
    -148     * the following example:</p>
    -149     *
    -150     * <pre>
    -151     * import org.apache.commons.lang.exception.ExceptionUtils;
    -152     *
    -153     * public class MyException extends Exception {
    -154     *
    -155     *    public MyException(String msg) {
    -156     *       super(msg);
    -157     *    }
    -158     *
    -159     *    public MyException(String msg, Throwable cause) {
    -160     *       super(msg);
    -161     *       ExceptionUtils.setCause(this, cause);
    -162     *    }
    -163     * }
    -164     * </pre>
    -165     *
    -166     * @param target  the target <code>Throwable</code>
    -167     * @param cause  the <code>Throwable</code> to set in the target
    -168     * @return a <code>true</code> if the target has been modified
    -169     * @since 2.2
    -170     */
    -171    public static boolean setCause(Throwable target, Throwable cause) {
    -172        if (target == null) {
    -173            throw new IllegalArgumentException("target");
    -174        }
    -175        Object[] causeArgs = new Object[]{cause};
    -176        boolean modifiedTarget = false;
    -177        if (THROWABLE_INITCAUSE_METHOD != null) {
    -178            try {
    -179                THROWABLE_INITCAUSE_METHOD.invoke(target, causeArgs);
    -180                modifiedTarget = true;
    -181            } catch (IllegalAccessException ignored) {
    -182                // Exception ignored.
    -183            } catch (InvocationTargetException ignored) {
    -184                // Exception ignored.
    -185            }
    -186        }
    -187        try {
    -188            Method setCauseMethod = target.getClass().getMethod("setCause", Throwable.class);
    -189            setCauseMethod.invoke(target, causeArgs);
    -190            modifiedTarget = true;
    -191        } catch (NoSuchMethodException ignored) {
    -192            // Exception ignored.
    -193        } catch (IllegalAccessException ignored) {
    -194            // Exception ignored.
    -195        } catch (InvocationTargetException ignored) {
    -196            // Exception ignored.
    -197        }
    -198        return modifiedTarget;
    -199    }
    -200
    -201    /**
    -202     * Returns the given list as a <code>String[]</code>.
    -203     * @param list a list to transform.
    -204     * @return the given list as a <code>String[]</code>.
    -205     */
    -206    private static String[] toArray(List list) {
    -207        return (String[]) list.toArray(new String[list.size()]);
    -208    }
    -209
    -210    /**
    -211     * Returns {@link #CAUSE_METHOD_NAMES} as a List.
    -212     *
    -213     * @return {@link #CAUSE_METHOD_NAMES} as a List.
    -214     */
    -215    private static ArrayList getCauseMethodNameList() {
    -216        return new ArrayList(Arrays.asList(CAUSE_METHOD_NAMES));
    -217    }
    -218
    -219    /**
    -220     * <p>Tests if the list of method names used in the search for <code>Throwable</code>
    -221     * objects include the given name.</p>
    -222     *
    -223     * @param methodName  the methodName to search in the list.
    -224     * @return if the list of method names used in the search for <code>Throwable</code>
    -225     *  objects include the given name.
    -226     * @since 2.1
    -227     */
    -228    public static boolean isCauseMethodName(String methodName) {
    -229        return ApacheCommonsLangUtil.indexOf(CAUSE_METHOD_NAMES, methodName) >= 0;
    -230    }
    -231
    -232    //-----------------------------------------------------------------------
    -233    /**
    -234     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    -235     *
    -236     * <p>The method searches for methods with specific names that return a
    -237     * <code>Throwable</code> object. This will pick up most wrapping exceptions,
    -238     * including those from JDK 1.4, and
    -239     * The method names can be added to using {@link #addCauseMethodName(String)}.</p>
    -240     *
    -241     * <p>The default list searched for are:</p>
    -242     * <ul>
    -243     *  <li><code>getCause()</code></li>
    -244     *  <li><code>getNextException()</code></li>
    -245     *  <li><code>getTargetException()</code></li>
    -246     *  <li><code>getException()</code></li>
    -247     *  <li><code>getSourceException()</code></li>
    -248     *  <li><code>getRootCause()</code></li>
    -249     *  <li><code>getCausedByException()</code></li>
    -250     *  <li><code>getNested()</code></li>
    -251     * </ul>
    -252     *
    -253     * <p>In the absence of any such method, the object is inspected for a
    -254     * <code>detail</code> field assignable to a <code>Throwable</code>.</p>
    -255     *
    -256     * <p>If none of the above is found, returns <code>null</code>.</p>
    -257     *
    -258     * @param throwable  the throwable to introspect for a cause, may be null
    -259     * @return the cause of the <code>Throwable</code>,
    -260     *  <code>null</code> if none found or null throwable input
    -261     * @since 1.0
    -262     */
    -263    public static Throwable getCause(Throwable throwable) {
    -264        return getCause(throwable, CAUSE_METHOD_NAMES);
    -265    }
    -266
    -267    /**
    -268     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    -269     *
    -270     * <ol>
    -271     * <li>Try known exception types.</li>
    -272     * <li>Try the supplied array of method names.</li>
    -273     * <li>Try the field 'detail'.</li>
    -274     * </ol>
    -275     *
    -276     * <p>A <code>null</code> set of method names means use the default set.
    -277     * A <code>null</code> in the set of method names will be ignored.</p>
    -278     *
    -279     * @param throwable  the throwable to introspect for a cause, may be null
    -280     * @param methodNames  the method names, null treated as default set
    -281     * @return the cause of the <code>Throwable</code>,
    -282     *  <code>null</code> if none found or null throwable input
    -283     * @since 1.0
    -284     */
    -285    public static Throwable getCause(Throwable throwable, String[] methodNames) {
    -286        if (throwable == null) {
    -287            return null;
    -288        }
    -289        Throwable cause = getCauseUsingWellKnownTypes(throwable);
    -290        if (cause == null) {
    -291            if (methodNames == null) {
    -292                methodNames = CAUSE_METHOD_NAMES;
    -293            }
    -294            for (int i = 0; i < methodNames.length; i++) {
    -295                String methodName = methodNames[i];
    -296                if (methodName != null) {
    -297                    cause = getCauseUsingMethodName(throwable, methodName);
    -298                    if (cause != null) {
    -299                        break;
    -300                    }
    -301                }
    -302            }
    -303
    -304            if (cause == null) {
    -305                cause = getCauseUsingFieldName(throwable, "detail");
    -306            }
    -307        }
    -308        return cause;
    -309    }
    -310
    -311    /**
    -312     * <p>Introspects the <code>Throwable</code> to obtain the root cause.</p>
    -313     *
    -314     * <p>This method walks through the exception chain to the last element,
    -315     * "root" of the tree, using {@link #getCause(Throwable)}, and
    -316     * returns that exception.</p>
    -317     *
    -318     * <p>From version 2.2, this method handles recursive cause structures
    -319     * that might otherwise cause infinite loops. If the throwable parameter
    -320     * has a cause of itself, then null will be returned. If the throwable
    -321     * parameter cause chain loops, the last element in the chain before the
    -322     * loop is returned.</p>
    -323     *
    -324     * @param throwable  the throwable to get the root cause for, may be null
    -325     * @return the root cause of the <code>Throwable</code>,
    -326     *  <code>null</code> if none found or null throwable input
    -327     */
    -328    public static Throwable getRootCause(Throwable throwable) {
    -329        List list = getThrowableList(throwable);
    -330        return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
    -331    }
    -332
    -333    /**
    -334     * <p>Finds a <code>Throwable</code> for known types.</p>
    -335     *
    -336     * <p>Uses <code>instanceof</code> checks to examine the exception,
    -337     * looking for well known types which could contain chained or
    -338     * wrapped exceptions.</p>
    -339     *
    -340     * @param throwable  the exception to examine
    -341     * @return the wrapped exception, or <code>null</code> if not found
    -342     */
    -343    private static Throwable getCauseUsingWellKnownTypes(Throwable throwable) {
    -344        if (throwable instanceof Nestable) {
    -345            return throwable.getCause();
    -346        } else if (throwable instanceof SQLException) {
    -347            return ((SQLException) throwable).getNextException();
    -348        } else if (throwable instanceof InvocationTargetException) {
    -349            return ((InvocationTargetException) throwable).getTargetException();
    -350        } else {
    -351            return null;
    -352        }
    -353    }
    -354
    -355    /**
    -356     * <p>Finds a <code>Throwable</code> by method name.</p>
    -357     *
    -358     * @param throwable  the exception to examine
    -359     * @param methodName  the name of the method to find and invoke
    -360     * @return the wrapped exception, or <code>null</code> if not found
    -361     */
    -362    private static Throwable getCauseUsingMethodName(Throwable throwable, String methodName) {
    -363        Method method = null;
    -364        try {
    -365            method = throwable.getClass().getMethod(methodName, null);
    -366        } catch (NoSuchMethodException ignored) {
    -367            // exception ignored
    -368        } catch (SecurityException ignored) {
    -369            // exception ignored
    -370        }
    -371
    -372        if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    -373            try {
    -374                return (Throwable) method.invoke(throwable);
    -375            } catch (IllegalAccessException ignored) {
    -376                // exception ignored
    -377            } catch (IllegalArgumentException ignored) {
    -378                // exception ignored
    -379            } catch (InvocationTargetException ignored) {
    -380                // exception ignored
    -381            }
    -382        }
    -383        return null;
    -384    }
    -385
    -386    /**
    -387     * <p>Finds a <code>Throwable</code> by field name.</p>
    -388     *
    -389     * @param throwable  the exception to examine
    -390     * @param fieldName  the name of the attribute to examine
    -391     * @return the wrapped exception, or <code>null</code> if not found
    -392     */
    -393    private static Throwable getCauseUsingFieldName(Throwable throwable, String fieldName) {
    -394        Field field = null;
    -395        try {
    -396            field = throwable.getClass().getField(fieldName);
    -397        } catch (NoSuchFieldException ignored) {
    -398            // exception ignored
    -399        } catch (SecurityException ignored) {
    -400            // exception ignored
    -401        }
    -402
    -403        if (field != null && Throwable.class.isAssignableFrom(field.getType())) {
    -404            try {
    -405                return (Throwable) field.get(throwable);
    -406            } catch (IllegalAccessException ignored) {
    -407                // exception ignored
    -408            } catch (IllegalArgumentException ignored) {
    -409                // exception ignored
    -410            }
    -411        }
    -412        return null;
    -413    }
    -414
    -415    //-----------------------------------------------------------------------
    -416    /**
    -417     * <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
    -418     *
    -419     * <p>This is true for JDK 1.4 and above.</p>
    -420     *
    -421     * @return true if Throwable is nestable
    -422     * @since 2.0
    -423     */
    -424    public static boolean isThrowableNested() {
    -425        return THROWABLE_CAUSE_METHOD != null;
    -426    }
    -427
    -428    /**
    -429     * <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
    -430     *
    -431     * <p>This method does <b>not</b> check whether it actually does store a cause.<p>
    -432     *
    -433     * @param throwable  the <code>Throwable</code> to examine, may be null
    -434     * @return boolean <code>true</code> if nested otherwise <code>false</code>
    -435     * @since 2.0
    -436     */
    -437    public static boolean isNestedThrowable(Throwable throwable) {
    -438        if (throwable == null) {
    -439            return false;
    -440        }
    -441
    -442        if (throwable instanceof Nestable) {
    -443            return true;
    -444        } else if (throwable instanceof SQLException) {
    -445            return true;
    -446        } else if (throwable instanceof InvocationTargetException) {
    -447            return true;
    -448        } else if (isThrowableNested()) {
    -449            return true;
    -450        }
    -451
    -452        Class cls = throwable.getClass();
    -453        for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
    -454            try {
    -455                Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], null);
    -456                if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    -457                    return true;
    -458                }
    -459            } catch (NoSuchMethodException ignored) {
    -460                // exception ignored
    -461            } catch (SecurityException ignored) {
    -462                // exception ignored
    -463            }
    -464        }
    -465
    -466        try {
    -467            Field field = cls.getField("detail");
    -468            if (field != null) {
    -469                return true;
    -470            }
    -471        } catch (NoSuchFieldException ignored) {
    -472            // exception ignored
    -473        } catch (SecurityException ignored) {
    -474            // exception ignored
    -475        }
    -476
    -477        return false;
    -478    }
    -479
    -480    //-----------------------------------------------------------------------
    -481    /**
    -482     * <p>Counts the number of <code>Throwable</code> objects in the
    -483     * exception chain.</p>
    -484     *
    -485     * <p>A throwable without cause will return <code>1</code>.
    -486     * A throwable with one cause will return <code>2</code> and so on.
    -487     * A <code>null</code> throwable will return <code>0</code>.</p>
    -488     *
    -489     * <p>From version 2.2, this method handles recursive cause structures
    -490     * that might otherwise cause infinite loops. The cause chain is
    -491     * processed until the end is reached, or until the next item in the
    -492     * chain is already in the result set.</p>
    -493     *
    -494     * @param throwable  the throwable to inspect, may be null
    -495     * @return the count of throwables, zero if null input
    -496     */
    -497    public static int getThrowableCount(Throwable throwable) {
    -498        return getThrowableList(throwable).size();
    -499    }
    -500
    -501    /**
    -502     * <p>Returns the list of <code>Throwable</code> objects in the
    -503     * exception chain.</p>
    -504     *
    -505     * <p>A throwable without cause will return an array containing
    -506     * one element - the input throwable.
    -507     * A throwable with one cause will return an array containing
    -508     * two elements. - the input throwable and the cause throwable.
    -509     * A <code>null</code> throwable will return an array of size zero.</p>
    -510     *
    -511     * <p>From version 2.2, this method handles recursive cause structures
    -512     * that might otherwise cause infinite loops. The cause chain is
    -513     * processed until the end is reached, or until the next item in the
    -514     * chain is already in the result set.</p>
    -515     *
    -516     * @see #getThrowableList(Throwable)
    -517     * @param throwable  the throwable to inspect, may be null
    -518     * @return the array of throwables, never null
    -519     */
    -520    public static Throwable[] getThrowables(Throwable throwable) {
    -521        List list = getThrowableList(throwable);
    -522        return (Throwable[]) list.toArray(new Throwable[list.size()]);
    -523    }
    -524
    -525    /**
    -526     * <p>Returns the list of <code>Throwable</code> objects in the
    -527     * exception chain.</p>
    -528     *
    -529     * <p>A throwable without cause will return a list containing
    -530     * one element - the input throwable.
    -531     * A throwable with one cause will return a list containing
    -532     * two elements. - the input throwable and the cause throwable.
    -533     * A <code>null</code> throwable will return a list of size zero.</p>
    -534     *
    -535     * <p>This method handles recursive cause structures that might
    -536     * otherwise cause infinite loops. The cause chain is processed until
    -537     * the end is reached, or until the next item in the chain is already
    -538     * in the result set.</p>
    -539     *
    -540     * @param throwable  the throwable to inspect, may be null
    -541     * @return the list of throwables, never null
    -542     * @since Commons Lang 2.2
    -543     */
    -544    public static List getThrowableList(Throwable throwable) {
    -545        List list = new ArrayList();
    -546        while (throwable != null && list.contains(throwable) == false) {
    -547            list.add(throwable);
    -548            throwable = getCause(throwable);
    -549        }
    -550        return list;
    -551    }
    -552
    -553    //-----------------------------------------------------------------------
    -554    /**
    -555     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -556     * that matches the specified class (exactly) in the exception chain.
    -557     * Subclasses of the specified class do not match - see
    -558     * {@link #indexOfType(Throwable, Class)} for the opposite.</p>
    -559     *
    -560     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -561     * A <code>null</code> type returns <code>-1</code>.
    -562     * No match in the chain returns <code>-1</code>.</p>
    -563     *
    -564     * @param throwable  the throwable to inspect, may be null
    -565     * @param clazz  the class to search for, subclasses do not match, null returns -1
    -566     * @return the index into the throwable chain, -1 if no match or null input
    -567     */
    -568    public static int indexOfThrowable(Throwable throwable, Class clazz) {
    -569        return indexOf(throwable, clazz, 0, false);
    -570    }
    -571
    -572    /**
    -573     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -574     * that matches the specified type in the exception chain from
    -575     * a specified index.
    -576     * Subclasses of the specified class do not match - see
    -577     * {@link #indexOfType(Throwable, Class, int)} for the opposite.</p>
    -578     *
    -579     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -580     * A <code>null</code> type returns <code>-1</code>.
    -581     * No match in the chain returns <code>-1</code>.
    -582     * A negative start index is treated as zero.
    -583     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    -584     *
    -585     * @param throwable  the throwable to inspect, may be null
    -586     * @param clazz  the class to search for, subclasses do not match, null returns -1
    -587     * @param fromIndex  the (zero based) index of the starting position,
    -588     *  negative treated as zero, larger than chain size returns -1
    -589     * @return the index into the throwable chain, -1 if no match or null input
    -590     */
    -591    public static int indexOfThrowable(Throwable throwable, Class clazz, int fromIndex) {
    -592        return indexOf(throwable, clazz, fromIndex, false);
    -593    }
    -594
    -595    //-----------------------------------------------------------------------
    -596    /**
    -597     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -598     * that matches the specified class or subclass in the exception chain.
    -599     * Subclasses of the specified class do match - see
    -600     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    -601     *
    -602     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -603     * A <code>null</code> type returns <code>-1</code>.
    -604     * No match in the chain returns <code>-1</code>.</p>
    -605     *
    -606     * @param throwable  the throwable to inspect, may be null
    -607     * @param type  the type to search for, subclasses match, null returns -1
    -608     * @return the index into the throwable chain, -1 if no match or null input
    -609     * @since 2.1
    -610     */
    -611    public static int indexOfType(Throwable throwable, Class type) {
    -612        return indexOf(throwable, type, 0, true);
    -613    }
    -614
    -615    /**
    -616     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -617     * that matches the specified type in the exception chain from
    -618     * a specified index.
    -619     * Subclasses of the specified class do match - see
    -620     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    -621     *
    -622     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -623     * A <code>null</code> type returns <code>-1</code>.
    -624     * No match in the chain returns <code>-1</code>.
    -625     * A negative start index is treated as zero.
    -626     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    -627     *
    -628     * @param throwable  the throwable to inspect, may be null
    -629     * @param type  the type to search for, subclasses match, null returns -1
    -630     * @param fromIndex  the (zero based) index of the starting position,
    -631     *  negative treated as zero, larger than chain size returns -1
    -632     * @return the index into the throwable chain, -1 if no match or null input
    -633     * @since 2.1
    -634     */
    -635    public static int indexOfType(Throwable throwable, Class type, int fromIndex) {
    -636        return indexOf(throwable, type, fromIndex, true);
    -637    }
    -638
    -639    /**
    -640     * <p>Worker method for the <code>indexOfType</code> methods.</p>
    -641     *
    -642     * @param throwable  the throwable to inspect, may be null
    -643     * @param type  the type to search for, subclasses match, null returns -1
    -644     * @param fromIndex  the (zero based) index of the starting position,
    -645     *  negative treated as zero, larger than chain size returns -1
    -646     * @param subclass if <code>true</code>, compares with {@link Class#isAssignableFrom(Class)}, otherwise compares
    -647     * using references
    -648     * @return index of the <code>type</code> within throwables nested withing the specified <code>throwable</code>
    -649     */
    -650    private static int indexOf(Throwable throwable, Class type, int fromIndex, boolean subclass) {
    -651        if (throwable == null || type == null) {
    -652            return -1;
    -653        }
    -654        if (fromIndex < 0) {
    -655            fromIndex = 0;
    -656        }
    -657        Throwable[] throwables = getThrowables(throwable);
    -658        if (fromIndex >= throwables.length) {
    -659            return -1;
    -660        }
    -661        if (subclass) {
    -662            for (int i = fromIndex; i < throwables.length; i++) {
    -663                if (type.isAssignableFrom(throwables[i].getClass())) {
    -664                    return i;
    -665                }
    -666            }
    -667        } else {
    -668            for (int i = fromIndex; i < throwables.length; i++) {
    -669                if (type.equals(throwables[i].getClass())) {
    -670                    return i;
    -671                }
    -672            }
    -673        }
    -674        return -1;
    -675    }
    -676
    -677    /**
    -678     * <p>Removes common frames from the cause trace given the two stack traces.</p>
    -679     *
    -680     * @param causeFrames  stack trace of a cause throwable
    -681     * @param wrapperFrames  stack trace of a wrapper throwable
    -682     * @throws IllegalArgumentException if either argument is null
    -683     * @since 2.0
    -684     */
    -685    public static void removeCommonFrames(List causeFrames, List wrapperFrames) {
    -686        if (causeFrames == null || wrapperFrames == null) {
    -687            throw new IllegalArgumentException("The List must not be null");
    -688        }
    -689        int causeFrameIndex = causeFrames.size() - 1;
    -690        int wrapperFrameIndex = wrapperFrames.size() - 1;
    -691        while (causeFrameIndex >= 0 && wrapperFrameIndex >= 0) {
    -692            // Remove the frame from the cause trace if it is the same
    -693            // as in the wrapper trace
    -694            String causeFrame = (String) causeFrames.get(causeFrameIndex);
    -695            String wrapperFrame = (String) wrapperFrames.get(wrapperFrameIndex);
    -696            if (causeFrame.equals(wrapperFrame)) {
    -697                causeFrames.remove(causeFrameIndex);
    -698            }
    -699            causeFrameIndex--;
    -700            wrapperFrameIndex--;
    -701        }
    -702    }
    -703
    -704    //-----------------------------------------------------------------------
    -705    /**
    -706     * <p>A way to get the entire nested stack-trace of an throwable.</p>
    -707     *
    -708     * <p>The result of this method is highly dependent on the JDK version
    -709     * and whether the exceptions override printStackTrace or not.</p>
    -710     *
    -711     * @param throwable  the <code>Throwable</code> to be examined
    -712     * @return the nested stack trace, with the root cause first
    -713     * @since 2.0
    -714     */
    -715    public static String getFullStackTrace(Throwable throwable) {
    -716        StringWriter sw = new StringWriter();
    -717        PrintWriter pw = new PrintWriter(sw, true);
    -718        Throwable[] ts = getThrowables(throwable);
    -719        for (int i = 0; i < ts.length; i++) {
    -720            ts[i].printStackTrace(pw);
    -721            if (isNestedThrowable(ts[i])) {
    -722                break;
    -723            }
    -724        }
    -725        return sw.getBuffer().toString();
    -726    }
    -727
    -728    //-----------------------------------------------------------------------
    -729    /**
    -730     * <p>Gets the stack trace from a Throwable as a String.</p>
    -731     *
    -732     * <p>The result of this method vary by JDK version as this method
    -733     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    -734     * On JDK1.3 and earlier, the cause exception will not be shown
    -735     * unless the specified throwable alters printStackTrace.</p>
    -736     *
    -737     * @param throwable  the <code>Throwable</code> to be examined
    -738     * @return the stack trace as generated by the exception's
    -739     *  <code>printStackTrace(PrintWriter)</code> method
    -740     */
    -741    public static String getStackTrace(Throwable throwable) {
    -742        StringWriter sw = new StringWriter();
    -743        PrintWriter pw = new PrintWriter(sw, true);
    -744        throwable.printStackTrace(pw);
    -745        return sw.getBuffer().toString();
    -746    }
    -747
    -748    /**
    -749     * <p>Captures the stack trace associated with the specified
    -750     * <code>Throwable</code> object, decomposing it into a list of
    -751     * stack frames.</p>
    -752     *
    -753     * <p>The result of this method vary by JDK version as this method
    -754     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    -755     * On JDK1.3 and earlier, the cause exception will not be shown
    -756     * unless the specified throwable alters printStackTrace.</p>
    -757     *
    -758     * @param throwable  the <code>Throwable</code> to examine, may be null
    -759     * @return an array of strings describing each stack frame, never null
    -760     */
    -761//    public static String[] getStackFrames(Throwable throwable) {
    -762//        if (throwable == null) {
    -763//            return ArrayUtils.EMPTY_STRING_ARRAY;
    -764//        }
    -765//        return getStackFrames(getStackTrace(throwable));
    -766//    }
    -767
    -768    //-----------------------------------------------------------------------
    -769    /**
    -770     * <p>Returns an array where each element is a line from the argument.</p>
    -771     *
    -772     * <p>The end of line is determined by the value of {@link SystemUtils#LINE_SEPARATOR}.</p>
    -773     *
    -774     * <p>Functionality shared between the
    -775     * <code>getStackFrames(Throwable)</code> methods of this and the
    -776     * {@link org.apache.commons.lang.exception.NestableDelegate} classes.</p>
    -777     *
    -778     * @param stackTrace  a stack trace String
    -779     * @return an array where each element is a line from the argument
    -780     */
    -781//    static String[] getStackFrames(String stackTrace) {
    -782//        String linebreak = SystemUtils.LINE_SEPARATOR;
    -783//        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    -784//        List list = new ArrayList();
    -785//        while (frames.hasMoreTokens()) {
    -786//            list.add(frames.nextToken());
    -787//        }
    -788//        return toArray(list);
    -789//    }
    -790
    -791    /**
    -792     * <p>Produces a <code>List</code> of stack frames - the message
    -793     * is not included. Only the trace of the specified exception is
    -794     * returned, any caused by trace is stripped.</p>
    -795     *
    -796     * <p>This works in most cases - it will only fail if the exception
    -797     * message contains a line that starts with:
    -798     * <code>&quot;&nbsp;&nbsp;&nbsp;at&quot;.</code></p>
    -799     *
    -800     * @param t is any throwable
    -801     * @return List of stack frames
    -802     */
    -803    static List getStackFrameList(Throwable t) {
    -804        String stackTrace = getStackTrace(t);
    -805        String linebreak = LINE_SEPARATOR;
    -806        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    -807        List list = new ArrayList();
    -808        boolean traceStarted = false;
    -809        while (frames.hasMoreTokens()) {
    -810            String token = frames.nextToken();
    -811            // Determine if the line starts with <whitespace>at
    -812            int at = token.indexOf("at");
    -813            if (at != -1 && token.substring(0, at).trim().length() == 0) {
    -814                traceStarted = true;
    -815                list.add(token);
    -816            } else if (traceStarted) {
    -817                break;
    -818            }
    -819        }
    -820        return list;
    -821    }
    -822
    -823    //-----------------------------------------------------------------------
    -824    /**
    -825     * Gets a short message summarising the exception.
    -826     * <p>
    -827     * The message returned is of the form
    -828     * {ClassNameWithoutPackage}: {ThrowableMessage}
    -829     *
    -830     * @param th  the throwable to get a message for, null returns empty string
    -831     * @return the message, non-null
    -832     * @since Commons Lang 2.2
    -833     */
    -834//    public static String getMessage(Throwable th) {
    -835//        if (th == null) {
    -836//            return "";
    -837//        }
    -838//        String clsName = ClassUtils.getShortClassName(th, null);
    -839//        String msg = th.getMessage();
    -840//        return clsName + ": " + StringUtils.defaultString(msg);
    -841//    }
    -842
    -843    //-----------------------------------------------------------------------
    -844    /**
    -845     * Gets a short message summarising the root cause exception.
    -846     * <p>
    -847     * The message returned is of the form
    -848     * {ClassNameWithoutPackage}: {ThrowableMessage}
    -849     *
    -850     * @param th  the throwable to get a message for, null returns empty string
    -851     * @return the message, non-null
    -852     * @since Commons Lang 2.2
    -853     */
    -854//    public static String getRootCauseMessage(Throwable th) {
    -855//        Throwable root = ExceptionUtils.getRootCause(th);
    -856//        root = (root == null ? th : root);
    -857//        return getMessage(root);
    -858//    }
    -859
    -860    /**
    -861     * An interface to be implemented by {@link java.lang.Throwable}
    -862     * extensions which would like to be able to nest root exceptions
    -863     * inside themselves.
    -864     *
    -865     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    -866     * @author <a href="mailto:knielsen@apache.org">Kasper Nielsen</a>
    -867     * @author <a href="mailto:steven@caswell.name">Steven Caswell</a>
    -868     * @author Pete Gieser
    -869     * @since 1.0
    -870     * @version $Id$
    -871     */
    -872    public interface Nestable {
    -873
    -874        /**
    -875         * Returns the reference to the exception or error that caused the
    -876         * exception implementing the <code>Nestable</code> to be thrown.
    -877         *
    -878         * @return throwable that caused the original exception
    -879         */
    -880        Throwable getCause();
    -881
    -882        /**
    -883         * Returns the error message of this and any nested
    -884         * <code>Throwable</code>.
    -885         *
    -886         * @return the error message
    -887         */
    -888        String getMessage();
    -889
    -890        /**
    -891         * Returns the error message of the <code>Throwable</code> in the chain
    -892         * of <code>Throwable</code>s at the specified index, numbered from 0.
    -893         *
    -894         * @param index the index of the <code>Throwable</code> in the chain of
    -895         * <code>Throwable</code>s
    -896         * @return the error message, or null if the <code>Throwable</code> at the
    -897         * specified index in the chain does not contain a message
    -898         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    -899         * negative or not less than the count of <code>Throwable</code>s in the
    -900         * chain
    -901         */
    -902        String getMessage(int index);
    -903
    -904        /**
    -905         * Returns the error message of this and any nested <code>Throwable</code>s
    -906         * in an array of Strings, one element for each message. Any
    -907         * <code>Throwable</code> not containing a message is represented in the
    -908         * array by a null. This has the effect of cause the length of the returned
    -909         * array to be equal to the result of the {@link #getThrowableCount()}
    -910         * operation.
    -911         *
    -912         * @return the error messages
    -913         */
    -914        String[] getMessages();
    -915
    -916        /**
    -917         * Returns the <code>Throwable</code> in the chain of
    -918         * <code>Throwable</code>s at the specified index, numbered from 0.
    -919         *
    -920         * @param index the index, numbered from 0, of the <code>Throwable</code> in
    -921         * the chain of <code>Throwable</code>s
    -922         * @return the <code>Throwable</code>
    -923         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    -924         * negative or not less than the count of <code>Throwable</code>s in the
    -925         * chain
    -926         */
    -927        Throwable getThrowable(int index);
    -928
    -929        /**
    -930         * Returns the number of nested <code>Throwable</code>s represented by
    -931         * this <code>Nestable</code>, including this <code>Nestable</code>.
    -932         *
    -933         * @return the throwable count
    -934         */
    -935        int getThrowableCount();
    -936
    -937        /**
    -938         * Returns this <code>Nestable</code> and any nested <code>Throwable</code>s
    -939         * in an array of <code>Throwable</code>s, one element for each
    -940         * <code>Throwable</code>.
    -941         *
    -942         * @return the <code>Throwable</code>s
    -943         */
    -944        Throwable[] getThrowables();
    -945
    -946        /**
    -947         * Returns the index, numbered from 0, of the first occurrence of the
    -948         * specified type, or a subclass, in the chain of <code>Throwable</code>s.
    -949         * The method returns -1 if the specified type is not found in the chain.
    -950         * <p>
    -951         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    -952         * such that this method matches subclasses.
    -953         * If you want to NOT match subclasses, please use
    -954         * (which is avaiable in all versions of lang).
    -955         *
    -956         * @param type  the type to find, subclasses match, null returns -1
    -957         * @return index of the first occurrence of the type in the chain, or -1 if
    -958         * the type is not found
    -959         */
    -960        int indexOfThrowable(Class type);
    -961
    -962        /**
    -963         * Returns the index, numbered from 0, of the first <code>Throwable</code>
    -964         * that matches the specified type, or a subclass, in the chain of <code>Throwable</code>s
    -965         * with an index greater than or equal to the specified index.
    -966         * The method returns -1 if the specified type is not found in the chain.
    -967         * <p>
    -968         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    -969         * such that this method matches subclasses.
    -970         * If you want to NOT match subclasses, please use
    -971         * (which is avaiable in all versions of lang).
    -972         *
    -973         * @param type  the type to find, subclasses match, null returns -1
    -974         * @param fromIndex the index, numbered from 0, of the starting position in
    -975         * the chain to be searched
    -976         * @return index of the first occurrence of the type in the chain, or -1 if
    -977         * the type is not found
    -978         * @throws IndexOutOfBoundsException if the <code>fromIndex</code> argument
    -979         * is negative or not less than the count of <code>Throwable</code>s in the
    -980         * chain
    -981         */
    -982        int indexOfThrowable(Class type, int fromIndex);
    -983
    -984        /**
    -985         * Prints the stack trace of this exception to the specified print
    -986         * writer.  Includes information from the exception, if any,
    -987         * which caused this exception.
    -988         *
    -989         * @param out <code>PrintWriter</code> to use for output.
    -990         */
    -991        void printStackTrace(PrintWriter out);
    -992
    -993        /**
    -994         * Prints the stack trace of this exception to the specified print
    -995         * stream.  Includes information from the exception, if any,
    -996         * which caused this exception.
    -997         *
    -998         * @param out <code>PrintStream</code> to use for output.
    -999         */
    -1000        void printStackTrace(PrintStream out);
    -1001
    -1002        /**
    -1003         * Prints the stack trace for this exception only--root cause not
    -1004         * included--using the provided writer.  Used by
    -1005         * individual stack traces to a buffer.  The implementation of
    -1006         * this method should call
    -1007         * <code>super.printStackTrace(out);</code> in most cases.
    -1008         *
    -1009         * @param out The writer to use.
    -1010         */
    -1011        void printPartialStackTrace(PrintWriter out);
    -1012
    -1013    }
    -1014}
    +
    +
    001/*
    +002 * Licensed to the Apache Software Foundation (ASF) under one or more
    +003 * contributor license agreements.  See the NOTICE file distributed with
    +004 * this work for additional information regarding copyright ownership.
    +005 * The ASF licenses this file to You under the Apache License, Version 2.0
    +006 * (the "License"); you may not use this file except in compliance with
    +007 * the License.  You may obtain a copy of the License at
    +008 *
    +009 *      http://www.apache.org/licenses/LICENSE-2.0
    +010 *
    +011 * Unless required by applicable law or agreed to in writing, software
    +012 * distributed under the License is distributed on an "AS IS" BASIS,
    +013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +014 * See the License for the specific language governing permissions and
    +015 * limitations under the License.
    +016 */
    +017package co.aikar.commands.apachecommonslang;
    +018
    +019import java.io.PrintStream;
    +020import java.io.PrintWriter;
    +021import java.io.StringWriter;
    +022import java.lang.reflect.Field;
    +023import java.lang.reflect.InvocationTargetException;
    +024import java.lang.reflect.Method;
    +025import java.sql.SQLException;
    +026import java.util.ArrayList;
    +027import java.util.Arrays;
    +028import java.util.List;
    +029import java.util.StringTokenizer;
    +030
    +031/**
    +032 * <p>Provides utilities for manipulating and examining
    +033 * <code>Throwable</code> objects.</p>
    +034 *
    +035 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    +036 * @author Dmitri Plotnikov
    +037 * @author Stephen Colebourne
    +038 * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
    +039 * @author Pete Gieser
    +040 * @since 1.0
    +041 * @version $Id$
    +042 */
    +043public class ApacheCommonsExceptionUtil {
    +044    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    +045
    +046    /**
    +047     * <p>Used when printing stack frames to denote the start of a
    +048     * wrapped exception.</p>
    +049     *
    +050     * <p>Package private for accessibility by test suite.</p>
    +051     */
    +052    static final String WRAPPED_MARKER = " [wrapped] ";
    +053
    +054    /**
    +055     * <p>The names of methods commonly used to access a wrapped exception.</p>
    +056     */
    +057    private static String[] CAUSE_METHOD_NAMES = {
    +058            "getCause",
    +059            "getNextException",
    +060            "getTargetException",
    +061            "getException",
    +062            "getSourceException",
    +063            "getRootCause",
    +064            "getCausedByException",
    +065            "getNested",
    +066            "getLinkedException",
    +067            "getNestedException",
    +068            "getLinkedCause",
    +069            "getThrowable",
    +070    };
    +071
    +072    /**
    +073     * <p>The Method object for Java 1.4 getCause.</p>
    +074     */
    +075    private static final Method THROWABLE_CAUSE_METHOD;
    +076
    +077    /**
    +078     * <p>The Method object for Java 1.4 initCause.</p>
    +079     */
    +080    private static final Method THROWABLE_INITCAUSE_METHOD;
    +081
    +082    static {
    +083        Method causeMethod;
    +084        try {
    +085            causeMethod = Throwable.class.getMethod("getCause", null);
    +086        } catch (Exception e) {
    +087            causeMethod = null;
    +088        }
    +089        THROWABLE_CAUSE_METHOD = causeMethod;
    +090        try {
    +091            causeMethod = Throwable.class.getMethod("initCause", Throwable.class);
    +092        } catch (Exception e) {
    +093            causeMethod = null;
    +094        }
    +095        THROWABLE_INITCAUSE_METHOD = causeMethod;
    +096    }
    +097
    +098    /**
    +099     * <p>
    +100     * Public constructor allows an instance of <code>ExceptionUtils</code> to be created, although that is not
    +101     * normally necessary.
    +102     * </p>
    +103     */
    +104    public ApacheCommonsExceptionUtil() {
    +105        super();
    +106    }
    +107
    +108    //-----------------------------------------------------------------------
    +109    /**
    +110     * <p>Adds to the list of method names used in the search for <code>Throwable</code>
    +111     * objects.</p>
    +112     *
    +113     * @param methodName  the methodName to add to the list, <code>null</code>
    +114     *  and empty strings are ignored
    +115     * @since 2.0
    +116     */
    +117    public static void addCauseMethodName(String methodName) {
    +118        if (methodName != null && !methodName.isEmpty() && !isCauseMethodName(methodName)) {
    +119            List list = getCauseMethodNameList();
    +120            if (list.add(methodName)) {
    +121                CAUSE_METHOD_NAMES = toArray(list);
    +122            }
    +123        }
    +124    }
    +125
    +126    /**
    +127     * <p>Removes from the list of method names used in the search for <code>Throwable</code>
    +128     * objects.</p>
    +129     *
    +130     * @param methodName  the methodName to remove from the list, <code>null</code>
    +131     *  and empty strings are ignored
    +132     * @since 2.1
    +133     */
    +134    public static void removeCauseMethodName(String methodName) {
    +135        if (methodName != null && !methodName.isEmpty()) {
    +136            List list = getCauseMethodNameList();
    +137            if (list.remove(methodName)) {
    +138                CAUSE_METHOD_NAMES = toArray(list);
    +139            }
    +140        }
    +141    }
    +142
    +143    /**
    +144     * <p>Sets the cause of a <code>Throwable</code> using introspection, allowing
    +145     * source code compatibility between pre-1.4 and post-1.4 Java releases.</p>
    +146     *
    +147     * <p>The typical use of this method is inside a constructor as in
    +148     * the following example:</p>
    +149     *
    +150     * <pre>
    +151     * import org.apache.commons.lang.exception.ExceptionUtils;
    +152     *
    +153     * public class MyException extends Exception {
    +154     *
    +155     *    public MyException(String msg) {
    +156     *       super(msg);
    +157     *    }
    +158     *
    +159     *    public MyException(String msg, Throwable cause) {
    +160     *       super(msg);
    +161     *       ExceptionUtils.setCause(this, cause);
    +162     *    }
    +163     * }
    +164     * </pre>
    +165     *
    +166     * @param target  the target <code>Throwable</code>
    +167     * @param cause  the <code>Throwable</code> to set in the target
    +168     * @return a <code>true</code> if the target has been modified
    +169     * @since 2.2
    +170     */
    +171    public static boolean setCause(Throwable target, Throwable cause) {
    +172        if (target == null) {
    +173            throw new IllegalArgumentException("target");
    +174        }
    +175        Object[] causeArgs = new Object[]{cause};
    +176        boolean modifiedTarget = false;
    +177        if (THROWABLE_INITCAUSE_METHOD != null) {
    +178            try {
    +179                THROWABLE_INITCAUSE_METHOD.invoke(target, causeArgs);
    +180                modifiedTarget = true;
    +181            } catch (IllegalAccessException ignored) {
    +182                // Exception ignored.
    +183            } catch (InvocationTargetException ignored) {
    +184                // Exception ignored.
    +185            }
    +186        }
    +187        try {
    +188            Method setCauseMethod = target.getClass().getMethod("setCause", Throwable.class);
    +189            setCauseMethod.invoke(target, causeArgs);
    +190            modifiedTarget = true;
    +191        } catch (NoSuchMethodException ignored) {
    +192            // Exception ignored.
    +193        } catch (IllegalAccessException ignored) {
    +194            // Exception ignored.
    +195        } catch (InvocationTargetException ignored) {
    +196            // Exception ignored.
    +197        }
    +198        return modifiedTarget;
    +199    }
    +200
    +201    /**
    +202     * Returns the given list as a <code>String[]</code>.
    +203     * @param list a list to transform.
    +204     * @return the given list as a <code>String[]</code>.
    +205     */
    +206    private static String[] toArray(List list) {
    +207        return (String[]) list.toArray(new String[list.size()]);
    +208    }
    +209
    +210    /**
    +211     * Returns {@link #CAUSE_METHOD_NAMES} as a List.
    +212     *
    +213     * @return {@link #CAUSE_METHOD_NAMES} as a List.
    +214     */
    +215    private static ArrayList getCauseMethodNameList() {
    +216        return new ArrayList(Arrays.asList(CAUSE_METHOD_NAMES));
    +217    }
    +218
    +219    /**
    +220     * <p>Tests if the list of method names used in the search for <code>Throwable</code>
    +221     * objects include the given name.</p>
    +222     *
    +223     * @param methodName  the methodName to search in the list.
    +224     * @return if the list of method names used in the search for <code>Throwable</code>
    +225     *  objects include the given name.
    +226     * @since 2.1
    +227     */
    +228    public static boolean isCauseMethodName(String methodName) {
    +229        return ApacheCommonsLangUtil.indexOf(CAUSE_METHOD_NAMES, methodName) >= 0;
    +230    }
    +231
    +232    //-----------------------------------------------------------------------
    +233    /**
    +234     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    +235     *
    +236     * <p>The method searches for methods with specific names that return a
    +237     * <code>Throwable</code> object. This will pick up most wrapping exceptions,
    +238     * including those from JDK 1.4, and
    +239     * The method names can be added to using {@link #addCauseMethodName(String)}.</p>
    +240     *
    +241     * <p>The default list searched for are:</p>
    +242     * <ul>
    +243     *  <li><code>getCause()</code></li>
    +244     *  <li><code>getNextException()</code></li>
    +245     *  <li><code>getTargetException()</code></li>
    +246     *  <li><code>getException()</code></li>
    +247     *  <li><code>getSourceException()</code></li>
    +248     *  <li><code>getRootCause()</code></li>
    +249     *  <li><code>getCausedByException()</code></li>
    +250     *  <li><code>getNested()</code></li>
    +251     * </ul>
    +252     *
    +253     * <p>In the absence of any such method, the object is inspected for a
    +254     * <code>detail</code> field assignable to a <code>Throwable</code>.</p>
    +255     *
    +256     * <p>If none of the above is found, returns <code>null</code>.</p>
    +257     *
    +258     * @param throwable  the throwable to introspect for a cause, may be null
    +259     * @return the cause of the <code>Throwable</code>,
    +260     *  <code>null</code> if none found or null throwable input
    +261     * @since 1.0
    +262     */
    +263    public static Throwable getCause(Throwable throwable) {
    +264        return getCause(throwable, CAUSE_METHOD_NAMES);
    +265    }
    +266
    +267    /**
    +268     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    +269     *
    +270     * <ol>
    +271     * <li>Try known exception types.</li>
    +272     * <li>Try the supplied array of method names.</li>
    +273     * <li>Try the field 'detail'.</li>
    +274     * </ol>
    +275     *
    +276     * <p>A <code>null</code> set of method names means use the default set.
    +277     * A <code>null</code> in the set of method names will be ignored.</p>
    +278     *
    +279     * @param throwable  the throwable to introspect for a cause, may be null
    +280     * @param methodNames  the method names, null treated as default set
    +281     * @return the cause of the <code>Throwable</code>,
    +282     *  <code>null</code> if none found or null throwable input
    +283     * @since 1.0
    +284     */
    +285    public static Throwable getCause(Throwable throwable, String[] methodNames) {
    +286        if (throwable == null) {
    +287            return null;
    +288        }
    +289        Throwable cause = getCauseUsingWellKnownTypes(throwable);
    +290        if (cause == null) {
    +291            if (methodNames == null) {
    +292                methodNames = CAUSE_METHOD_NAMES;
    +293            }
    +294            for (int i = 0; i < methodNames.length; i++) {
    +295                String methodName = methodNames[i];
    +296                if (methodName != null) {
    +297                    cause = getCauseUsingMethodName(throwable, methodName);
    +298                    if (cause != null) {
    +299                        break;
    +300                    }
    +301                }
    +302            }
    +303
    +304            if (cause == null) {
    +305                cause = getCauseUsingFieldName(throwable, "detail");
    +306            }
    +307        }
    +308        return cause;
    +309    }
    +310
    +311    /**
    +312     * <p>Introspects the <code>Throwable</code> to obtain the root cause.</p>
    +313     *
    +314     * <p>This method walks through the exception chain to the last element,
    +315     * "root" of the tree, using {@link #getCause(Throwable)}, and
    +316     * returns that exception.</p>
    +317     *
    +318     * <p>From version 2.2, this method handles recursive cause structures
    +319     * that might otherwise cause infinite loops. If the throwable parameter
    +320     * has a cause of itself, then null will be returned. If the throwable
    +321     * parameter cause chain loops, the last element in the chain before the
    +322     * loop is returned.</p>
    +323     *
    +324     * @param throwable  the throwable to get the root cause for, may be null
    +325     * @return the root cause of the <code>Throwable</code>,
    +326     *  <code>null</code> if none found or null throwable input
    +327     */
    +328    public static Throwable getRootCause(Throwable throwable) {
    +329        List list = getThrowableList(throwable);
    +330        return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
    +331    }
    +332
    +333    /**
    +334     * <p>Finds a <code>Throwable</code> for known types.</p>
    +335     *
    +336     * <p>Uses <code>instanceof</code> checks to examine the exception,
    +337     * looking for well known types which could contain chained or
    +338     * wrapped exceptions.</p>
    +339     *
    +340     * @param throwable  the exception to examine
    +341     * @return the wrapped exception, or <code>null</code> if not found
    +342     */
    +343    private static Throwable getCauseUsingWellKnownTypes(Throwable throwable) {
    +344        if (throwable instanceof Nestable) {
    +345            return throwable.getCause();
    +346        } else if (throwable instanceof SQLException) {
    +347            return ((SQLException) throwable).getNextException();
    +348        } else if (throwable instanceof InvocationTargetException) {
    +349            return ((InvocationTargetException) throwable).getTargetException();
    +350        } else {
    +351            return null;
    +352        }
    +353    }
    +354
    +355    /**
    +356     * <p>Finds a <code>Throwable</code> by method name.</p>
    +357     *
    +358     * @param throwable  the exception to examine
    +359     * @param methodName  the name of the method to find and invoke
    +360     * @return the wrapped exception, or <code>null</code> if not found
    +361     */
    +362    private static Throwable getCauseUsingMethodName(Throwable throwable, String methodName) {
    +363        Method method = null;
    +364        try {
    +365            method = throwable.getClass().getMethod(methodName, null);
    +366        } catch (NoSuchMethodException ignored) {
    +367            // exception ignored
    +368        } catch (SecurityException ignored) {
    +369            // exception ignored
    +370        }
    +371
    +372        if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    +373            try {
    +374                return (Throwable) method.invoke(throwable);
    +375            } catch (IllegalAccessException ignored) {
    +376                // exception ignored
    +377            } catch (IllegalArgumentException ignored) {
    +378                // exception ignored
    +379            } catch (InvocationTargetException ignored) {
    +380                // exception ignored
    +381            }
    +382        }
    +383        return null;
    +384    }
    +385
    +386    /**
    +387     * <p>Finds a <code>Throwable</code> by field name.</p>
    +388     *
    +389     * @param throwable  the exception to examine
    +390     * @param fieldName  the name of the attribute to examine
    +391     * @return the wrapped exception, or <code>null</code> if not found
    +392     */
    +393    private static Throwable getCauseUsingFieldName(Throwable throwable, String fieldName) {
    +394        Field field = null;
    +395        try {
    +396            field = throwable.getClass().getField(fieldName);
    +397        } catch (NoSuchFieldException ignored) {
    +398            // exception ignored
    +399        } catch (SecurityException ignored) {
    +400            // exception ignored
    +401        }
    +402
    +403        if (field != null && Throwable.class.isAssignableFrom(field.getType())) {
    +404            try {
    +405                return (Throwable) field.get(throwable);
    +406            } catch (IllegalAccessException ignored) {
    +407                // exception ignored
    +408            } catch (IllegalArgumentException ignored) {
    +409                // exception ignored
    +410            }
    +411        }
    +412        return null;
    +413    }
    +414
    +415    //-----------------------------------------------------------------------
    +416    /**
    +417     * <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
    +418     *
    +419     * <p>This is true for JDK 1.4 and above.</p>
    +420     *
    +421     * @return true if Throwable is nestable
    +422     * @since 2.0
    +423     */
    +424    public static boolean isThrowableNested() {
    +425        return THROWABLE_CAUSE_METHOD != null;
    +426    }
    +427
    +428    /**
    +429     * <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
    +430     *
    +431     * <p>This method does <b>not</b> check whether it actually does store a cause.<p>
    +432     *
    +433     * @param throwable  the <code>Throwable</code> to examine, may be null
    +434     * @return boolean <code>true</code> if nested otherwise <code>false</code>
    +435     * @since 2.0
    +436     */
    +437    public static boolean isNestedThrowable(Throwable throwable) {
    +438        if (throwable == null) {
    +439            return false;
    +440        }
    +441
    +442        if (throwable instanceof Nestable) {
    +443            return true;
    +444        } else if (throwable instanceof SQLException) {
    +445            return true;
    +446        } else if (throwable instanceof InvocationTargetException) {
    +447            return true;
    +448        } else if (isThrowableNested()) {
    +449            return true;
    +450        }
    +451
    +452        Class cls = throwable.getClass();
    +453        for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
    +454            try {
    +455                Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], null);
    +456                if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    +457                    return true;
    +458                }
    +459            } catch (NoSuchMethodException ignored) {
    +460                // exception ignored
    +461            } catch (SecurityException ignored) {
    +462                // exception ignored
    +463            }
    +464        }
    +465
    +466        try {
    +467            Field field = cls.getField("detail");
    +468            if (field != null) {
    +469                return true;
    +470            }
    +471        } catch (NoSuchFieldException ignored) {
    +472            // exception ignored
    +473        } catch (SecurityException ignored) {
    +474            // exception ignored
    +475        }
    +476
    +477        return false;
    +478    }
    +479
    +480    //-----------------------------------------------------------------------
    +481    /**
    +482     * <p>Counts the number of <code>Throwable</code> objects in the
    +483     * exception chain.</p>
    +484     *
    +485     * <p>A throwable without cause will return <code>1</code>.
    +486     * A throwable with one cause will return <code>2</code> and so on.
    +487     * A <code>null</code> throwable will return <code>0</code>.</p>
    +488     *
    +489     * <p>From version 2.2, this method handles recursive cause structures
    +490     * that might otherwise cause infinite loops. The cause chain is
    +491     * processed until the end is reached, or until the next item in the
    +492     * chain is already in the result set.</p>
    +493     *
    +494     * @param throwable  the throwable to inspect, may be null
    +495     * @return the count of throwables, zero if null input
    +496     */
    +497    public static int getThrowableCount(Throwable throwable) {
    +498        return getThrowableList(throwable).size();
    +499    }
    +500
    +501    /**
    +502     * <p>Returns the list of <code>Throwable</code> objects in the
    +503     * exception chain.</p>
    +504     *
    +505     * <p>A throwable without cause will return an array containing
    +506     * one element - the input throwable.
    +507     * A throwable with one cause will return an array containing
    +508     * two elements. - the input throwable and the cause throwable.
    +509     * A <code>null</code> throwable will return an array of size zero.</p>
    +510     *
    +511     * <p>From version 2.2, this method handles recursive cause structures
    +512     * that might otherwise cause infinite loops. The cause chain is
    +513     * processed until the end is reached, or until the next item in the
    +514     * chain is already in the result set.</p>
    +515     *
    +516     * @see #getThrowableList(Throwable)
    +517     * @param throwable  the throwable to inspect, may be null
    +518     * @return the array of throwables, never null
    +519     */
    +520    public static Throwable[] getThrowables(Throwable throwable) {
    +521        List list = getThrowableList(throwable);
    +522        return (Throwable[]) list.toArray(new Throwable[list.size()]);
    +523    }
    +524
    +525    /**
    +526     * <p>Returns the list of <code>Throwable</code> objects in the
    +527     * exception chain.</p>
    +528     *
    +529     * <p>A throwable without cause will return a list containing
    +530     * one element - the input throwable.
    +531     * A throwable with one cause will return a list containing
    +532     * two elements. - the input throwable and the cause throwable.
    +533     * A <code>null</code> throwable will return a list of size zero.</p>
    +534     *
    +535     * <p>This method handles recursive cause structures that might
    +536     * otherwise cause infinite loops. The cause chain is processed until
    +537     * the end is reached, or until the next item in the chain is already
    +538     * in the result set.</p>
    +539     *
    +540     * @param throwable  the throwable to inspect, may be null
    +541     * @return the list of throwables, never null
    +542     * @since Commons Lang 2.2
    +543     */
    +544    public static List getThrowableList(Throwable throwable) {
    +545        List list = new ArrayList();
    +546        while (throwable != null && list.contains(throwable) == false) {
    +547            list.add(throwable);
    +548            throwable = getCause(throwable);
    +549        }
    +550        return list;
    +551    }
    +552
    +553    //-----------------------------------------------------------------------
    +554    /**
    +555     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +556     * that matches the specified class (exactly) in the exception chain.
    +557     * Subclasses of the specified class do not match - see
    +558     * {@link #indexOfType(Throwable, Class)} for the opposite.</p>
    +559     *
    +560     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +561     * A <code>null</code> type returns <code>-1</code>.
    +562     * No match in the chain returns <code>-1</code>.</p>
    +563     *
    +564     * @param throwable  the throwable to inspect, may be null
    +565     * @param clazz  the class to search for, subclasses do not match, null returns -1
    +566     * @return the index into the throwable chain, -1 if no match or null input
    +567     */
    +568    public static int indexOfThrowable(Throwable throwable, Class clazz) {
    +569        return indexOf(throwable, clazz, 0, false);
    +570    }
    +571
    +572    /**
    +573     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +574     * that matches the specified type in the exception chain from
    +575     * a specified index.
    +576     * Subclasses of the specified class do not match - see
    +577     * {@link #indexOfType(Throwable, Class, int)} for the opposite.</p>
    +578     *
    +579     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +580     * A <code>null</code> type returns <code>-1</code>.
    +581     * No match in the chain returns <code>-1</code>.
    +582     * A negative start index is treated as zero.
    +583     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    +584     *
    +585     * @param throwable  the throwable to inspect, may be null
    +586     * @param clazz  the class to search for, subclasses do not match, null returns -1
    +587     * @param fromIndex  the (zero based) index of the starting position,
    +588     *  negative treated as zero, larger than chain size returns -1
    +589     * @return the index into the throwable chain, -1 if no match or null input
    +590     */
    +591    public static int indexOfThrowable(Throwable throwable, Class clazz, int fromIndex) {
    +592        return indexOf(throwable, clazz, fromIndex, false);
    +593    }
    +594
    +595    //-----------------------------------------------------------------------
    +596    /**
    +597     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +598     * that matches the specified class or subclass in the exception chain.
    +599     * Subclasses of the specified class do match - see
    +600     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    +601     *
    +602     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +603     * A <code>null</code> type returns <code>-1</code>.
    +604     * No match in the chain returns <code>-1</code>.</p>
    +605     *
    +606     * @param throwable  the throwable to inspect, may be null
    +607     * @param type  the type to search for, subclasses match, null returns -1
    +608     * @return the index into the throwable chain, -1 if no match or null input
    +609     * @since 2.1
    +610     */
    +611    public static int indexOfType(Throwable throwable, Class type) {
    +612        return indexOf(throwable, type, 0, true);
    +613    }
    +614
    +615    /**
    +616     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +617     * that matches the specified type in the exception chain from
    +618     * a specified index.
    +619     * Subclasses of the specified class do match - see
    +620     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    +621     *
    +622     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +623     * A <code>null</code> type returns <code>-1</code>.
    +624     * No match in the chain returns <code>-1</code>.
    +625     * A negative start index is treated as zero.
    +626     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    +627     *
    +628     * @param throwable  the throwable to inspect, may be null
    +629     * @param type  the type to search for, subclasses match, null returns -1
    +630     * @param fromIndex  the (zero based) index of the starting position,
    +631     *  negative treated as zero, larger than chain size returns -1
    +632     * @return the index into the throwable chain, -1 if no match or null input
    +633     * @since 2.1
    +634     */
    +635    public static int indexOfType(Throwable throwable, Class type, int fromIndex) {
    +636        return indexOf(throwable, type, fromIndex, true);
    +637    }
    +638
    +639    /**
    +640     * <p>Worker method for the <code>indexOfType</code> methods.</p>
    +641     *
    +642     * @param throwable  the throwable to inspect, may be null
    +643     * @param type  the type to search for, subclasses match, null returns -1
    +644     * @param fromIndex  the (zero based) index of the starting position,
    +645     *  negative treated as zero, larger than chain size returns -1
    +646     * @param subclass if <code>true</code>, compares with {@link Class#isAssignableFrom(Class)}, otherwise compares
    +647     * using references
    +648     * @return index of the <code>type</code> within throwables nested withing the specified <code>throwable</code>
    +649     */
    +650    private static int indexOf(Throwable throwable, Class type, int fromIndex, boolean subclass) {
    +651        if (throwable == null || type == null) {
    +652            return -1;
    +653        }
    +654        if (fromIndex < 0) {
    +655            fromIndex = 0;
    +656        }
    +657        Throwable[] throwables = getThrowables(throwable);
    +658        if (fromIndex >= throwables.length) {
    +659            return -1;
    +660        }
    +661        if (subclass) {
    +662            for (int i = fromIndex; i < throwables.length; i++) {
    +663                if (type.isAssignableFrom(throwables[i].getClass())) {
    +664                    return i;
    +665                }
    +666            }
    +667        } else {
    +668            for (int i = fromIndex; i < throwables.length; i++) {
    +669                if (type.equals(throwables[i].getClass())) {
    +670                    return i;
    +671                }
    +672            }
    +673        }
    +674        return -1;
    +675    }
    +676
    +677    /**
    +678     * <p>Removes common frames from the cause trace given the two stack traces.</p>
    +679     *
    +680     * @param causeFrames  stack trace of a cause throwable
    +681     * @param wrapperFrames  stack trace of a wrapper throwable
    +682     * @throws IllegalArgumentException if either argument is null
    +683     * @since 2.0
    +684     */
    +685    public static void removeCommonFrames(List causeFrames, List wrapperFrames) {
    +686        if (causeFrames == null || wrapperFrames == null) {
    +687            throw new IllegalArgumentException("The List must not be null");
    +688        }
    +689        int causeFrameIndex = causeFrames.size() - 1;
    +690        int wrapperFrameIndex = wrapperFrames.size() - 1;
    +691        while (causeFrameIndex >= 0 && wrapperFrameIndex >= 0) {
    +692            // Remove the frame from the cause trace if it is the same
    +693            // as in the wrapper trace
    +694            String causeFrame = (String) causeFrames.get(causeFrameIndex);
    +695            String wrapperFrame = (String) wrapperFrames.get(wrapperFrameIndex);
    +696            if (causeFrame.equals(wrapperFrame)) {
    +697                causeFrames.remove(causeFrameIndex);
    +698            }
    +699            causeFrameIndex--;
    +700            wrapperFrameIndex--;
    +701        }
    +702    }
    +703
    +704    //-----------------------------------------------------------------------
    +705    /**
    +706     * <p>A way to get the entire nested stack-trace of an throwable.</p>
    +707     *
    +708     * <p>The result of this method is highly dependent on the JDK version
    +709     * and whether the exceptions override printStackTrace or not.</p>
    +710     *
    +711     * @param throwable  the <code>Throwable</code> to be examined
    +712     * @return the nested stack trace, with the root cause first
    +713     * @since 2.0
    +714     */
    +715    public static String getFullStackTrace(Throwable throwable) {
    +716        StringWriter sw = new StringWriter();
    +717        PrintWriter pw = new PrintWriter(sw, true);
    +718        Throwable[] ts = getThrowables(throwable);
    +719        for (int i = 0; i < ts.length; i++) {
    +720            ts[i].printStackTrace(pw);
    +721            if (isNestedThrowable(ts[i])) {
    +722                break;
    +723            }
    +724        }
    +725        return sw.getBuffer().toString();
    +726    }
    +727
    +728    //-----------------------------------------------------------------------
    +729    /**
    +730     * <p>Gets the stack trace from a Throwable as a String.</p>
    +731     *
    +732     * <p>The result of this method vary by JDK version as this method
    +733     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    +734     * On JDK1.3 and earlier, the cause exception will not be shown
    +735     * unless the specified throwable alters printStackTrace.</p>
    +736     *
    +737     * @param throwable  the <code>Throwable</code> to be examined
    +738     * @return the stack trace as generated by the exception's
    +739     *  <code>printStackTrace(PrintWriter)</code> method
    +740     */
    +741    public static String getStackTrace(Throwable throwable) {
    +742        StringWriter sw = new StringWriter();
    +743        PrintWriter pw = new PrintWriter(sw, true);
    +744        throwable.printStackTrace(pw);
    +745        return sw.getBuffer().toString();
    +746    }
    +747
    +748    /**
    +749     * <p>Captures the stack trace associated with the specified
    +750     * <code>Throwable</code> object, decomposing it into a list of
    +751     * stack frames.</p>
    +752     *
    +753     * <p>The result of this method vary by JDK version as this method
    +754     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    +755     * On JDK1.3 and earlier, the cause exception will not be shown
    +756     * unless the specified throwable alters printStackTrace.</p>
    +757     *
    +758     * @param throwable  the <code>Throwable</code> to examine, may be null
    +759     * @return an array of strings describing each stack frame, never null
    +760     */
    +761//    public static String[] getStackFrames(Throwable throwable) {
    +762//        if (throwable == null) {
    +763//            return ArrayUtils.EMPTY_STRING_ARRAY;
    +764//        }
    +765//        return getStackFrames(getStackTrace(throwable));
    +766//    }
    +767
    +768    //-----------------------------------------------------------------------
    +769    /**
    +770     * <p>Returns an array where each element is a line from the argument.</p>
    +771     *
    +772     * <p>The end of line is determined by the value of {@link SystemUtils#LINE_SEPARATOR}.</p>
    +773     *
    +774     * <p>Functionality shared between the
    +775     * <code>getStackFrames(Throwable)</code> methods of this and the
    +776     * {@link org.apache.commons.lang.exception.NestableDelegate} classes.</p>
    +777     *
    +778     * @param stackTrace  a stack trace String
    +779     * @return an array where each element is a line from the argument
    +780     */
    +781//    static String[] getStackFrames(String stackTrace) {
    +782//        String linebreak = SystemUtils.LINE_SEPARATOR;
    +783//        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    +784//        List list = new ArrayList();
    +785//        while (frames.hasMoreTokens()) {
    +786//            list.add(frames.nextToken());
    +787//        }
    +788//        return toArray(list);
    +789//    }
    +790
    +791    /**
    +792     * <p>Produces a <code>List</code> of stack frames - the message
    +793     * is not included. Only the trace of the specified exception is
    +794     * returned, any caused by trace is stripped.</p>
    +795     *
    +796     * <p>This works in most cases - it will only fail if the exception
    +797     * message contains a line that starts with:
    +798     * <code>&quot;&nbsp;&nbsp;&nbsp;at&quot;.</code></p>
    +799     *
    +800     * @param t is any throwable
    +801     * @return List of stack frames
    +802     */
    +803    static List getStackFrameList(Throwable t) {
    +804        String stackTrace = getStackTrace(t);
    +805        String linebreak = LINE_SEPARATOR;
    +806        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    +807        List list = new ArrayList();
    +808        boolean traceStarted = false;
    +809        while (frames.hasMoreTokens()) {
    +810            String token = frames.nextToken();
    +811            // Determine if the line starts with <whitespace>at
    +812            int at = token.indexOf("at");
    +813            if (at != -1 && token.substring(0, at).trim().length() == 0) {
    +814                traceStarted = true;
    +815                list.add(token);
    +816            } else if (traceStarted) {
    +817                break;
    +818            }
    +819        }
    +820        return list;
    +821    }
    +822
    +823    //-----------------------------------------------------------------------
    +824    /**
    +825     * Gets a short message summarising the exception.
    +826     * <p>
    +827     * The message returned is of the form
    +828     * {ClassNameWithoutPackage}: {ThrowableMessage}
    +829     *
    +830     * @param th  the throwable to get a message for, null returns empty string
    +831     * @return the message, non-null
    +832     * @since Commons Lang 2.2
    +833     */
    +834//    public static String getMessage(Throwable th) {
    +835//        if (th == null) {
    +836//            return "";
    +837//        }
    +838//        String clsName = ClassUtils.getShortClassName(th, null);
    +839//        String msg = th.getMessage();
    +840//        return clsName + ": " + StringUtils.defaultString(msg);
    +841//    }
    +842
    +843    //-----------------------------------------------------------------------
    +844    /**
    +845     * Gets a short message summarising the root cause exception.
    +846     * <p>
    +847     * The message returned is of the form
    +848     * {ClassNameWithoutPackage}: {ThrowableMessage}
    +849     *
    +850     * @param th  the throwable to get a message for, null returns empty string
    +851     * @return the message, non-null
    +852     * @since Commons Lang 2.2
    +853     */
    +854//    public static String getRootCauseMessage(Throwable th) {
    +855//        Throwable root = ExceptionUtils.getRootCause(th);
    +856//        root = (root == null ? th : root);
    +857//        return getMessage(root);
    +858//    }
    +859
    +860    /**
    +861     * An interface to be implemented by {@link java.lang.Throwable}
    +862     * extensions which would like to be able to nest root exceptions
    +863     * inside themselves.
    +864     *
    +865     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    +866     * @author <a href="mailto:knielsen@apache.org">Kasper Nielsen</a>
    +867     * @author <a href="mailto:steven@caswell.name">Steven Caswell</a>
    +868     * @author Pete Gieser
    +869     * @since 1.0
    +870     * @version $Id$
    +871     */
    +872    public interface Nestable {
    +873
    +874        /**
    +875         * Returns the reference to the exception or error that caused the
    +876         * exception implementing the <code>Nestable</code> to be thrown.
    +877         *
    +878         * @return throwable that caused the original exception
    +879         */
    +880        Throwable getCause();
    +881
    +882        /**
    +883         * Returns the error message of this and any nested
    +884         * <code>Throwable</code>.
    +885         *
    +886         * @return the error message
    +887         */
    +888        String getMessage();
    +889
    +890        /**
    +891         * Returns the error message of the <code>Throwable</code> in the chain
    +892         * of <code>Throwable</code>s at the specified index, numbered from 0.
    +893         *
    +894         * @param index the index of the <code>Throwable</code> in the chain of
    +895         * <code>Throwable</code>s
    +896         * @return the error message, or null if the <code>Throwable</code> at the
    +897         * specified index in the chain does not contain a message
    +898         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    +899         * negative or not less than the count of <code>Throwable</code>s in the
    +900         * chain
    +901         */
    +902        String getMessage(int index);
    +903
    +904        /**
    +905         * Returns the error message of this and any nested <code>Throwable</code>s
    +906         * in an array of Strings, one element for each message. Any
    +907         * <code>Throwable</code> not containing a message is represented in the
    +908         * array by a null. This has the effect of cause the length of the returned
    +909         * array to be equal to the result of the {@link #getThrowableCount()}
    +910         * operation.
    +911         *
    +912         * @return the error messages
    +913         */
    +914        String[] getMessages();
    +915
    +916        /**
    +917         * Returns the <code>Throwable</code> in the chain of
    +918         * <code>Throwable</code>s at the specified index, numbered from 0.
    +919         *
    +920         * @param index the index, numbered from 0, of the <code>Throwable</code> in
    +921         * the chain of <code>Throwable</code>s
    +922         * @return the <code>Throwable</code>
    +923         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    +924         * negative or not less than the count of <code>Throwable</code>s in the
    +925         * chain
    +926         */
    +927        Throwable getThrowable(int index);
    +928
    +929        /**
    +930         * Returns the number of nested <code>Throwable</code>s represented by
    +931         * this <code>Nestable</code>, including this <code>Nestable</code>.
    +932         *
    +933         * @return the throwable count
    +934         */
    +935        int getThrowableCount();
    +936
    +937        /**
    +938         * Returns this <code>Nestable</code> and any nested <code>Throwable</code>s
    +939         * in an array of <code>Throwable</code>s, one element for each
    +940         * <code>Throwable</code>.
    +941         *
    +942         * @return the <code>Throwable</code>s
    +943         */
    +944        Throwable[] getThrowables();
    +945
    +946        /**
    +947         * Returns the index, numbered from 0, of the first occurrence of the
    +948         * specified type, or a subclass, in the chain of <code>Throwable</code>s.
    +949         * The method returns -1 if the specified type is not found in the chain.
    +950         * <p>
    +951         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    +952         * such that this method matches subclasses.
    +953         * If you want to NOT match subclasses, please use
    +954         * (which is avaiable in all versions of lang).
    +955         *
    +956         * @param type  the type to find, subclasses match, null returns -1
    +957         * @return index of the first occurrence of the type in the chain, or -1 if
    +958         * the type is not found
    +959         */
    +960        int indexOfThrowable(Class type);
    +961
    +962        /**
    +963         * Returns the index, numbered from 0, of the first <code>Throwable</code>
    +964         * that matches the specified type, or a subclass, in the chain of <code>Throwable</code>s
    +965         * with an index greater than or equal to the specified index.
    +966         * The method returns -1 if the specified type is not found in the chain.
    +967         * <p>
    +968         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    +969         * such that this method matches subclasses.
    +970         * If you want to NOT match subclasses, please use
    +971         * (which is avaiable in all versions of lang).
    +972         *
    +973         * @param type  the type to find, subclasses match, null returns -1
    +974         * @param fromIndex the index, numbered from 0, of the starting position in
    +975         * the chain to be searched
    +976         * @return index of the first occurrence of the type in the chain, or -1 if
    +977         * the type is not found
    +978         * @throws IndexOutOfBoundsException if the <code>fromIndex</code> argument
    +979         * is negative or not less than the count of <code>Throwable</code>s in the
    +980         * chain
    +981         */
    +982        int indexOfThrowable(Class type, int fromIndex);
    +983
    +984        /**
    +985         * Prints the stack trace of this exception to the specified print
    +986         * writer.  Includes information from the exception, if any,
    +987         * which caused this exception.
    +988         *
    +989         * @param out <code>PrintWriter</code> to use for output.
    +990         */
    +991        void printStackTrace(PrintWriter out);
    +992
    +993        /**
    +994         * Prints the stack trace of this exception to the specified print
    +995         * stream.  Includes information from the exception, if any,
    +996         * which caused this exception.
    +997         *
    +998         * @param out <code>PrintStream</code> to use for output.
    +999         */
    +1000        void printStackTrace(PrintStream out);
    +1001
    +1002        /**
    +1003         * Prints the stack trace for this exception only--root cause not
    +1004         * included--using the provided writer.  Used by
    +1005         * individual stack traces to a buffer.  The implementation of
    +1006         * this method should call
    +1007         * <code>super.printStackTrace(out);</code> in most cases.
    +1008         *
    +1009         * @param out The writer to use.
    +1010         */
    +1011        void printPartialStackTrace(PrintWriter out);
    +1012
    +1013    }
    +1014}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html
    index c6af83cc..a9f41e91 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html
    @@ -1,1026 +1,1030 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Licensed to the Apache Software Foundation (ASF) under one or more
    -003 * contributor license agreements.  See the NOTICE file distributed with
    -004 * this work for additional information regarding copyright ownership.
    -005 * The ASF licenses this file to You under the Apache License, Version 2.0
    -006 * (the "License"); you may not use this file except in compliance with
    -007 * the License.  You may obtain a copy of the License at
    -008 *
    -009 *      http://www.apache.org/licenses/LICENSE-2.0
    -010 *
    -011 * Unless required by applicable law or agreed to in writing, software
    -012 * distributed under the License is distributed on an "AS IS" BASIS,
    -013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -014 * See the License for the specific language governing permissions and
    -015 * limitations under the License.
    -016 */
    -017package co.aikar.commands.apachecommonslang;
    -018
    -019import java.io.PrintStream;
    -020import java.io.PrintWriter;
    -021import java.io.StringWriter;
    -022import java.lang.reflect.Field;
    -023import java.lang.reflect.InvocationTargetException;
    -024import java.lang.reflect.Method;
    -025import java.sql.SQLException;
    -026import java.util.ArrayList;
    -027import java.util.Arrays;
    -028import java.util.List;
    -029import java.util.StringTokenizer;
    -030
    -031/**
    -032 * <p>Provides utilities for manipulating and examining
    -033 * <code>Throwable</code> objects.</p>
    -034 *
    -035 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    -036 * @author Dmitri Plotnikov
    -037 * @author Stephen Colebourne
    -038 * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
    -039 * @author Pete Gieser
    -040 * @since 1.0
    -041 * @version $Id$
    -042 */
    -043public class ApacheCommonsExceptionUtil {
    -044    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    -045
    -046    /**
    -047     * <p>Used when printing stack frames to denote the start of a
    -048     * wrapped exception.</p>
    -049     *
    -050     * <p>Package private for accessibility by test suite.</p>
    -051     */
    -052    static final String WRAPPED_MARKER = " [wrapped] ";
    -053
    -054    /**
    -055     * <p>The names of methods commonly used to access a wrapped exception.</p>
    -056     */
    -057    private static String[] CAUSE_METHOD_NAMES = {
    -058            "getCause",
    -059            "getNextException",
    -060            "getTargetException",
    -061            "getException",
    -062            "getSourceException",
    -063            "getRootCause",
    -064            "getCausedByException",
    -065            "getNested",
    -066            "getLinkedException",
    -067            "getNestedException",
    -068            "getLinkedCause",
    -069            "getThrowable",
    -070    };
    -071
    -072    /**
    -073     * <p>The Method object for Java 1.4 getCause.</p>
    -074     */
    -075    private static final Method THROWABLE_CAUSE_METHOD;
    -076
    -077    /**
    -078     * <p>The Method object for Java 1.4 initCause.</p>
    -079     */
    -080    private static final Method THROWABLE_INITCAUSE_METHOD;
    -081
    -082    static {
    -083        Method causeMethod;
    -084        try {
    -085            causeMethod = Throwable.class.getMethod("getCause", null);
    -086        } catch (Exception e) {
    -087            causeMethod = null;
    -088        }
    -089        THROWABLE_CAUSE_METHOD = causeMethod;
    -090        try {
    -091            causeMethod = Throwable.class.getMethod("initCause", Throwable.class);
    -092        } catch (Exception e) {
    -093            causeMethod = null;
    -094        }
    -095        THROWABLE_INITCAUSE_METHOD = causeMethod;
    -096    }
    -097
    -098    /**
    -099     * <p>
    -100     * Public constructor allows an instance of <code>ExceptionUtils</code> to be created, although that is not
    -101     * normally necessary.
    -102     * </p>
    -103     */
    -104    public ApacheCommonsExceptionUtil() {
    -105        super();
    -106    }
    -107
    -108    //-----------------------------------------------------------------------
    -109    /**
    -110     * <p>Adds to the list of method names used in the search for <code>Throwable</code>
    -111     * objects.</p>
    -112     *
    -113     * @param methodName  the methodName to add to the list, <code>null</code>
    -114     *  and empty strings are ignored
    -115     * @since 2.0
    -116     */
    -117    public static void addCauseMethodName(String methodName) {
    -118        if (methodName != null && !methodName.isEmpty() && !isCauseMethodName(methodName)) {
    -119            List list = getCauseMethodNameList();
    -120            if (list.add(methodName)) {
    -121                CAUSE_METHOD_NAMES = toArray(list);
    -122            }
    -123        }
    -124    }
    -125
    -126    /**
    -127     * <p>Removes from the list of method names used in the search for <code>Throwable</code>
    -128     * objects.</p>
    -129     *
    -130     * @param methodName  the methodName to remove from the list, <code>null</code>
    -131     *  and empty strings are ignored
    -132     * @since 2.1
    -133     */
    -134    public static void removeCauseMethodName(String methodName) {
    -135        if (methodName != null && !methodName.isEmpty()) {
    -136            List list = getCauseMethodNameList();
    -137            if (list.remove(methodName)) {
    -138                CAUSE_METHOD_NAMES = toArray(list);
    -139            }
    -140        }
    -141    }
    -142
    -143    /**
    -144     * <p>Sets the cause of a <code>Throwable</code> using introspection, allowing
    -145     * source code compatibility between pre-1.4 and post-1.4 Java releases.</p>
    -146     *
    -147     * <p>The typical use of this method is inside a constructor as in
    -148     * the following example:</p>
    -149     *
    -150     * <pre>
    -151     * import org.apache.commons.lang.exception.ExceptionUtils;
    -152     *
    -153     * public class MyException extends Exception {
    -154     *
    -155     *    public MyException(String msg) {
    -156     *       super(msg);
    -157     *    }
    -158     *
    -159     *    public MyException(String msg, Throwable cause) {
    -160     *       super(msg);
    -161     *       ExceptionUtils.setCause(this, cause);
    -162     *    }
    -163     * }
    -164     * </pre>
    -165     *
    -166     * @param target  the target <code>Throwable</code>
    -167     * @param cause  the <code>Throwable</code> to set in the target
    -168     * @return a <code>true</code> if the target has been modified
    -169     * @since 2.2
    -170     */
    -171    public static boolean setCause(Throwable target, Throwable cause) {
    -172        if (target == null) {
    -173            throw new IllegalArgumentException("target");
    -174        }
    -175        Object[] causeArgs = new Object[]{cause};
    -176        boolean modifiedTarget = false;
    -177        if (THROWABLE_INITCAUSE_METHOD != null) {
    -178            try {
    -179                THROWABLE_INITCAUSE_METHOD.invoke(target, causeArgs);
    -180                modifiedTarget = true;
    -181            } catch (IllegalAccessException ignored) {
    -182                // Exception ignored.
    -183            } catch (InvocationTargetException ignored) {
    -184                // Exception ignored.
    -185            }
    -186        }
    -187        try {
    -188            Method setCauseMethod = target.getClass().getMethod("setCause", Throwable.class);
    -189            setCauseMethod.invoke(target, causeArgs);
    -190            modifiedTarget = true;
    -191        } catch (NoSuchMethodException ignored) {
    -192            // Exception ignored.
    -193        } catch (IllegalAccessException ignored) {
    -194            // Exception ignored.
    -195        } catch (InvocationTargetException ignored) {
    -196            // Exception ignored.
    -197        }
    -198        return modifiedTarget;
    -199    }
    -200
    -201    /**
    -202     * Returns the given list as a <code>String[]</code>.
    -203     * @param list a list to transform.
    -204     * @return the given list as a <code>String[]</code>.
    -205     */
    -206    private static String[] toArray(List list) {
    -207        return (String[]) list.toArray(new String[list.size()]);
    -208    }
    -209
    -210    /**
    -211     * Returns {@link #CAUSE_METHOD_NAMES} as a List.
    -212     *
    -213     * @return {@link #CAUSE_METHOD_NAMES} as a List.
    -214     */
    -215    private static ArrayList getCauseMethodNameList() {
    -216        return new ArrayList(Arrays.asList(CAUSE_METHOD_NAMES));
    -217    }
    -218
    -219    /**
    -220     * <p>Tests if the list of method names used in the search for <code>Throwable</code>
    -221     * objects include the given name.</p>
    -222     *
    -223     * @param methodName  the methodName to search in the list.
    -224     * @return if the list of method names used in the search for <code>Throwable</code>
    -225     *  objects include the given name.
    -226     * @since 2.1
    -227     */
    -228    public static boolean isCauseMethodName(String methodName) {
    -229        return ApacheCommonsLangUtil.indexOf(CAUSE_METHOD_NAMES, methodName) >= 0;
    -230    }
    -231
    -232    //-----------------------------------------------------------------------
    -233    /**
    -234     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    -235     *
    -236     * <p>The method searches for methods with specific names that return a
    -237     * <code>Throwable</code> object. This will pick up most wrapping exceptions,
    -238     * including those from JDK 1.4, and
    -239     * The method names can be added to using {@link #addCauseMethodName(String)}.</p>
    -240     *
    -241     * <p>The default list searched for are:</p>
    -242     * <ul>
    -243     *  <li><code>getCause()</code></li>
    -244     *  <li><code>getNextException()</code></li>
    -245     *  <li><code>getTargetException()</code></li>
    -246     *  <li><code>getException()</code></li>
    -247     *  <li><code>getSourceException()</code></li>
    -248     *  <li><code>getRootCause()</code></li>
    -249     *  <li><code>getCausedByException()</code></li>
    -250     *  <li><code>getNested()</code></li>
    -251     * </ul>
    -252     *
    -253     * <p>In the absence of any such method, the object is inspected for a
    -254     * <code>detail</code> field assignable to a <code>Throwable</code>.</p>
    -255     *
    -256     * <p>If none of the above is found, returns <code>null</code>.</p>
    -257     *
    -258     * @param throwable  the throwable to introspect for a cause, may be null
    -259     * @return the cause of the <code>Throwable</code>,
    -260     *  <code>null</code> if none found or null throwable input
    -261     * @since 1.0
    -262     */
    -263    public static Throwable getCause(Throwable throwable) {
    -264        return getCause(throwable, CAUSE_METHOD_NAMES);
    -265    }
    -266
    -267    /**
    -268     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    -269     *
    -270     * <ol>
    -271     * <li>Try known exception types.</li>
    -272     * <li>Try the supplied array of method names.</li>
    -273     * <li>Try the field 'detail'.</li>
    -274     * </ol>
    -275     *
    -276     * <p>A <code>null</code> set of method names means use the default set.
    -277     * A <code>null</code> in the set of method names will be ignored.</p>
    -278     *
    -279     * @param throwable  the throwable to introspect for a cause, may be null
    -280     * @param methodNames  the method names, null treated as default set
    -281     * @return the cause of the <code>Throwable</code>,
    -282     *  <code>null</code> if none found or null throwable input
    -283     * @since 1.0
    -284     */
    -285    public static Throwable getCause(Throwable throwable, String[] methodNames) {
    -286        if (throwable == null) {
    -287            return null;
    -288        }
    -289        Throwable cause = getCauseUsingWellKnownTypes(throwable);
    -290        if (cause == null) {
    -291            if (methodNames == null) {
    -292                methodNames = CAUSE_METHOD_NAMES;
    -293            }
    -294            for (int i = 0; i < methodNames.length; i++) {
    -295                String methodName = methodNames[i];
    -296                if (methodName != null) {
    -297                    cause = getCauseUsingMethodName(throwable, methodName);
    -298                    if (cause != null) {
    -299                        break;
    -300                    }
    -301                }
    -302            }
    -303
    -304            if (cause == null) {
    -305                cause = getCauseUsingFieldName(throwable, "detail");
    -306            }
    -307        }
    -308        return cause;
    -309    }
    -310
    -311    /**
    -312     * <p>Introspects the <code>Throwable</code> to obtain the root cause.</p>
    -313     *
    -314     * <p>This method walks through the exception chain to the last element,
    -315     * "root" of the tree, using {@link #getCause(Throwable)}, and
    -316     * returns that exception.</p>
    -317     *
    -318     * <p>From version 2.2, this method handles recursive cause structures
    -319     * that might otherwise cause infinite loops. If the throwable parameter
    -320     * has a cause of itself, then null will be returned. If the throwable
    -321     * parameter cause chain loops, the last element in the chain before the
    -322     * loop is returned.</p>
    -323     *
    -324     * @param throwable  the throwable to get the root cause for, may be null
    -325     * @return the root cause of the <code>Throwable</code>,
    -326     *  <code>null</code> if none found or null throwable input
    -327     */
    -328    public static Throwable getRootCause(Throwable throwable) {
    -329        List list = getThrowableList(throwable);
    -330        return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
    -331    }
    -332
    -333    /**
    -334     * <p>Finds a <code>Throwable</code> for known types.</p>
    -335     *
    -336     * <p>Uses <code>instanceof</code> checks to examine the exception,
    -337     * looking for well known types which could contain chained or
    -338     * wrapped exceptions.</p>
    -339     *
    -340     * @param throwable  the exception to examine
    -341     * @return the wrapped exception, or <code>null</code> if not found
    -342     */
    -343    private static Throwable getCauseUsingWellKnownTypes(Throwable throwable) {
    -344        if (throwable instanceof Nestable) {
    -345            return throwable.getCause();
    -346        } else if (throwable instanceof SQLException) {
    -347            return ((SQLException) throwable).getNextException();
    -348        } else if (throwable instanceof InvocationTargetException) {
    -349            return ((InvocationTargetException) throwable).getTargetException();
    -350        } else {
    -351            return null;
    -352        }
    -353    }
    -354
    -355    /**
    -356     * <p>Finds a <code>Throwable</code> by method name.</p>
    -357     *
    -358     * @param throwable  the exception to examine
    -359     * @param methodName  the name of the method to find and invoke
    -360     * @return the wrapped exception, or <code>null</code> if not found
    -361     */
    -362    private static Throwable getCauseUsingMethodName(Throwable throwable, String methodName) {
    -363        Method method = null;
    -364        try {
    -365            method = throwable.getClass().getMethod(methodName, null);
    -366        } catch (NoSuchMethodException ignored) {
    -367            // exception ignored
    -368        } catch (SecurityException ignored) {
    -369            // exception ignored
    -370        }
    -371
    -372        if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    -373            try {
    -374                return (Throwable) method.invoke(throwable);
    -375            } catch (IllegalAccessException ignored) {
    -376                // exception ignored
    -377            } catch (IllegalArgumentException ignored) {
    -378                // exception ignored
    -379            } catch (InvocationTargetException ignored) {
    -380                // exception ignored
    -381            }
    -382        }
    -383        return null;
    -384    }
    -385
    -386    /**
    -387     * <p>Finds a <code>Throwable</code> by field name.</p>
    -388     *
    -389     * @param throwable  the exception to examine
    -390     * @param fieldName  the name of the attribute to examine
    -391     * @return the wrapped exception, or <code>null</code> if not found
    -392     */
    -393    private static Throwable getCauseUsingFieldName(Throwable throwable, String fieldName) {
    -394        Field field = null;
    -395        try {
    -396            field = throwable.getClass().getField(fieldName);
    -397        } catch (NoSuchFieldException ignored) {
    -398            // exception ignored
    -399        } catch (SecurityException ignored) {
    -400            // exception ignored
    -401        }
    -402
    -403        if (field != null && Throwable.class.isAssignableFrom(field.getType())) {
    -404            try {
    -405                return (Throwable) field.get(throwable);
    -406            } catch (IllegalAccessException ignored) {
    -407                // exception ignored
    -408            } catch (IllegalArgumentException ignored) {
    -409                // exception ignored
    -410            }
    -411        }
    -412        return null;
    -413    }
    -414
    -415    //-----------------------------------------------------------------------
    -416    /**
    -417     * <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
    -418     *
    -419     * <p>This is true for JDK 1.4 and above.</p>
    -420     *
    -421     * @return true if Throwable is nestable
    -422     * @since 2.0
    -423     */
    -424    public static boolean isThrowableNested() {
    -425        return THROWABLE_CAUSE_METHOD != null;
    -426    }
    -427
    -428    /**
    -429     * <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
    -430     *
    -431     * <p>This method does <b>not</b> check whether it actually does store a cause.<p>
    -432     *
    -433     * @param throwable  the <code>Throwable</code> to examine, may be null
    -434     * @return boolean <code>true</code> if nested otherwise <code>false</code>
    -435     * @since 2.0
    -436     */
    -437    public static boolean isNestedThrowable(Throwable throwable) {
    -438        if (throwable == null) {
    -439            return false;
    -440        }
    -441
    -442        if (throwable instanceof Nestable) {
    -443            return true;
    -444        } else if (throwable instanceof SQLException) {
    -445            return true;
    -446        } else if (throwable instanceof InvocationTargetException) {
    -447            return true;
    -448        } else if (isThrowableNested()) {
    -449            return true;
    -450        }
    -451
    -452        Class cls = throwable.getClass();
    -453        for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
    -454            try {
    -455                Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], null);
    -456                if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    -457                    return true;
    -458                }
    -459            } catch (NoSuchMethodException ignored) {
    -460                // exception ignored
    -461            } catch (SecurityException ignored) {
    -462                // exception ignored
    -463            }
    -464        }
    -465
    -466        try {
    -467            Field field = cls.getField("detail");
    -468            if (field != null) {
    -469                return true;
    -470            }
    -471        } catch (NoSuchFieldException ignored) {
    -472            // exception ignored
    -473        } catch (SecurityException ignored) {
    -474            // exception ignored
    -475        }
    -476
    -477        return false;
    -478    }
    -479
    -480    //-----------------------------------------------------------------------
    -481    /**
    -482     * <p>Counts the number of <code>Throwable</code> objects in the
    -483     * exception chain.</p>
    -484     *
    -485     * <p>A throwable without cause will return <code>1</code>.
    -486     * A throwable with one cause will return <code>2</code> and so on.
    -487     * A <code>null</code> throwable will return <code>0</code>.</p>
    -488     *
    -489     * <p>From version 2.2, this method handles recursive cause structures
    -490     * that might otherwise cause infinite loops. The cause chain is
    -491     * processed until the end is reached, or until the next item in the
    -492     * chain is already in the result set.</p>
    -493     *
    -494     * @param throwable  the throwable to inspect, may be null
    -495     * @return the count of throwables, zero if null input
    -496     */
    -497    public static int getThrowableCount(Throwable throwable) {
    -498        return getThrowableList(throwable).size();
    -499    }
    -500
    -501    /**
    -502     * <p>Returns the list of <code>Throwable</code> objects in the
    -503     * exception chain.</p>
    -504     *
    -505     * <p>A throwable without cause will return an array containing
    -506     * one element - the input throwable.
    -507     * A throwable with one cause will return an array containing
    -508     * two elements. - the input throwable and the cause throwable.
    -509     * A <code>null</code> throwable will return an array of size zero.</p>
    -510     *
    -511     * <p>From version 2.2, this method handles recursive cause structures
    -512     * that might otherwise cause infinite loops. The cause chain is
    -513     * processed until the end is reached, or until the next item in the
    -514     * chain is already in the result set.</p>
    -515     *
    -516     * @see #getThrowableList(Throwable)
    -517     * @param throwable  the throwable to inspect, may be null
    -518     * @return the array of throwables, never null
    -519     */
    -520    public static Throwable[] getThrowables(Throwable throwable) {
    -521        List list = getThrowableList(throwable);
    -522        return (Throwable[]) list.toArray(new Throwable[list.size()]);
    -523    }
    -524
    -525    /**
    -526     * <p>Returns the list of <code>Throwable</code> objects in the
    -527     * exception chain.</p>
    -528     *
    -529     * <p>A throwable without cause will return a list containing
    -530     * one element - the input throwable.
    -531     * A throwable with one cause will return a list containing
    -532     * two elements. - the input throwable and the cause throwable.
    -533     * A <code>null</code> throwable will return a list of size zero.</p>
    -534     *
    -535     * <p>This method handles recursive cause structures that might
    -536     * otherwise cause infinite loops. The cause chain is processed until
    -537     * the end is reached, or until the next item in the chain is already
    -538     * in the result set.</p>
    -539     *
    -540     * @param throwable  the throwable to inspect, may be null
    -541     * @return the list of throwables, never null
    -542     * @since Commons Lang 2.2
    -543     */
    -544    public static List getThrowableList(Throwable throwable) {
    -545        List list = new ArrayList();
    -546        while (throwable != null && list.contains(throwable) == false) {
    -547            list.add(throwable);
    -548            throwable = getCause(throwable);
    -549        }
    -550        return list;
    -551    }
    -552
    -553    //-----------------------------------------------------------------------
    -554    /**
    -555     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -556     * that matches the specified class (exactly) in the exception chain.
    -557     * Subclasses of the specified class do not match - see
    -558     * {@link #indexOfType(Throwable, Class)} for the opposite.</p>
    -559     *
    -560     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -561     * A <code>null</code> type returns <code>-1</code>.
    -562     * No match in the chain returns <code>-1</code>.</p>
    -563     *
    -564     * @param throwable  the throwable to inspect, may be null
    -565     * @param clazz  the class to search for, subclasses do not match, null returns -1
    -566     * @return the index into the throwable chain, -1 if no match or null input
    -567     */
    -568    public static int indexOfThrowable(Throwable throwable, Class clazz) {
    -569        return indexOf(throwable, clazz, 0, false);
    -570    }
    -571
    -572    /**
    -573     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -574     * that matches the specified type in the exception chain from
    -575     * a specified index.
    -576     * Subclasses of the specified class do not match - see
    -577     * {@link #indexOfType(Throwable, Class, int)} for the opposite.</p>
    -578     *
    -579     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -580     * A <code>null</code> type returns <code>-1</code>.
    -581     * No match in the chain returns <code>-1</code>.
    -582     * A negative start index is treated as zero.
    -583     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    -584     *
    -585     * @param throwable  the throwable to inspect, may be null
    -586     * @param clazz  the class to search for, subclasses do not match, null returns -1
    -587     * @param fromIndex  the (zero based) index of the starting position,
    -588     *  negative treated as zero, larger than chain size returns -1
    -589     * @return the index into the throwable chain, -1 if no match or null input
    -590     */
    -591    public static int indexOfThrowable(Throwable throwable, Class clazz, int fromIndex) {
    -592        return indexOf(throwable, clazz, fromIndex, false);
    -593    }
    -594
    -595    //-----------------------------------------------------------------------
    -596    /**
    -597     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -598     * that matches the specified class or subclass in the exception chain.
    -599     * Subclasses of the specified class do match - see
    -600     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    -601     *
    -602     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -603     * A <code>null</code> type returns <code>-1</code>.
    -604     * No match in the chain returns <code>-1</code>.</p>
    -605     *
    -606     * @param throwable  the throwable to inspect, may be null
    -607     * @param type  the type to search for, subclasses match, null returns -1
    -608     * @return the index into the throwable chain, -1 if no match or null input
    -609     * @since 2.1
    -610     */
    -611    public static int indexOfType(Throwable throwable, Class type) {
    -612        return indexOf(throwable, type, 0, true);
    -613    }
    -614
    -615    /**
    -616     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    -617     * that matches the specified type in the exception chain from
    -618     * a specified index.
    -619     * Subclasses of the specified class do match - see
    -620     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    -621     *
    -622     * <p>A <code>null</code> throwable returns <code>-1</code>.
    -623     * A <code>null</code> type returns <code>-1</code>.
    -624     * No match in the chain returns <code>-1</code>.
    -625     * A negative start index is treated as zero.
    -626     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    -627     *
    -628     * @param throwable  the throwable to inspect, may be null
    -629     * @param type  the type to search for, subclasses match, null returns -1
    -630     * @param fromIndex  the (zero based) index of the starting position,
    -631     *  negative treated as zero, larger than chain size returns -1
    -632     * @return the index into the throwable chain, -1 if no match or null input
    -633     * @since 2.1
    -634     */
    -635    public static int indexOfType(Throwable throwable, Class type, int fromIndex) {
    -636        return indexOf(throwable, type, fromIndex, true);
    -637    }
    -638
    -639    /**
    -640     * <p>Worker method for the <code>indexOfType</code> methods.</p>
    -641     *
    -642     * @param throwable  the throwable to inspect, may be null
    -643     * @param type  the type to search for, subclasses match, null returns -1
    -644     * @param fromIndex  the (zero based) index of the starting position,
    -645     *  negative treated as zero, larger than chain size returns -1
    -646     * @param subclass if <code>true</code>, compares with {@link Class#isAssignableFrom(Class)}, otherwise compares
    -647     * using references
    -648     * @return index of the <code>type</code> within throwables nested withing the specified <code>throwable</code>
    -649     */
    -650    private static int indexOf(Throwable throwable, Class type, int fromIndex, boolean subclass) {
    -651        if (throwable == null || type == null) {
    -652            return -1;
    -653        }
    -654        if (fromIndex < 0) {
    -655            fromIndex = 0;
    -656        }
    -657        Throwable[] throwables = getThrowables(throwable);
    -658        if (fromIndex >= throwables.length) {
    -659            return -1;
    -660        }
    -661        if (subclass) {
    -662            for (int i = fromIndex; i < throwables.length; i++) {
    -663                if (type.isAssignableFrom(throwables[i].getClass())) {
    -664                    return i;
    -665                }
    -666            }
    -667        } else {
    -668            for (int i = fromIndex; i < throwables.length; i++) {
    -669                if (type.equals(throwables[i].getClass())) {
    -670                    return i;
    -671                }
    -672            }
    -673        }
    -674        return -1;
    -675    }
    -676
    -677    /**
    -678     * <p>Removes common frames from the cause trace given the two stack traces.</p>
    -679     *
    -680     * @param causeFrames  stack trace of a cause throwable
    -681     * @param wrapperFrames  stack trace of a wrapper throwable
    -682     * @throws IllegalArgumentException if either argument is null
    -683     * @since 2.0
    -684     */
    -685    public static void removeCommonFrames(List causeFrames, List wrapperFrames) {
    -686        if (causeFrames == null || wrapperFrames == null) {
    -687            throw new IllegalArgumentException("The List must not be null");
    -688        }
    -689        int causeFrameIndex = causeFrames.size() - 1;
    -690        int wrapperFrameIndex = wrapperFrames.size() - 1;
    -691        while (causeFrameIndex >= 0 && wrapperFrameIndex >= 0) {
    -692            // Remove the frame from the cause trace if it is the same
    -693            // as in the wrapper trace
    -694            String causeFrame = (String) causeFrames.get(causeFrameIndex);
    -695            String wrapperFrame = (String) wrapperFrames.get(wrapperFrameIndex);
    -696            if (causeFrame.equals(wrapperFrame)) {
    -697                causeFrames.remove(causeFrameIndex);
    -698            }
    -699            causeFrameIndex--;
    -700            wrapperFrameIndex--;
    -701        }
    -702    }
    -703
    -704    //-----------------------------------------------------------------------
    -705    /**
    -706     * <p>A way to get the entire nested stack-trace of an throwable.</p>
    -707     *
    -708     * <p>The result of this method is highly dependent on the JDK version
    -709     * and whether the exceptions override printStackTrace or not.</p>
    -710     *
    -711     * @param throwable  the <code>Throwable</code> to be examined
    -712     * @return the nested stack trace, with the root cause first
    -713     * @since 2.0
    -714     */
    -715    public static String getFullStackTrace(Throwable throwable) {
    -716        StringWriter sw = new StringWriter();
    -717        PrintWriter pw = new PrintWriter(sw, true);
    -718        Throwable[] ts = getThrowables(throwable);
    -719        for (int i = 0; i < ts.length; i++) {
    -720            ts[i].printStackTrace(pw);
    -721            if (isNestedThrowable(ts[i])) {
    -722                break;
    -723            }
    -724        }
    -725        return sw.getBuffer().toString();
    -726    }
    -727
    -728    //-----------------------------------------------------------------------
    -729    /**
    -730     * <p>Gets the stack trace from a Throwable as a String.</p>
    -731     *
    -732     * <p>The result of this method vary by JDK version as this method
    -733     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    -734     * On JDK1.3 and earlier, the cause exception will not be shown
    -735     * unless the specified throwable alters printStackTrace.</p>
    -736     *
    -737     * @param throwable  the <code>Throwable</code> to be examined
    -738     * @return the stack trace as generated by the exception's
    -739     *  <code>printStackTrace(PrintWriter)</code> method
    -740     */
    -741    public static String getStackTrace(Throwable throwable) {
    -742        StringWriter sw = new StringWriter();
    -743        PrintWriter pw = new PrintWriter(sw, true);
    -744        throwable.printStackTrace(pw);
    -745        return sw.getBuffer().toString();
    -746    }
    -747
    -748    /**
    -749     * <p>Captures the stack trace associated with the specified
    -750     * <code>Throwable</code> object, decomposing it into a list of
    -751     * stack frames.</p>
    -752     *
    -753     * <p>The result of this method vary by JDK version as this method
    -754     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    -755     * On JDK1.3 and earlier, the cause exception will not be shown
    -756     * unless the specified throwable alters printStackTrace.</p>
    -757     *
    -758     * @param throwable  the <code>Throwable</code> to examine, may be null
    -759     * @return an array of strings describing each stack frame, never null
    -760     */
    -761//    public static String[] getStackFrames(Throwable throwable) {
    -762//        if (throwable == null) {
    -763//            return ArrayUtils.EMPTY_STRING_ARRAY;
    -764//        }
    -765//        return getStackFrames(getStackTrace(throwable));
    -766//    }
    -767
    -768    //-----------------------------------------------------------------------
    -769    /**
    -770     * <p>Returns an array where each element is a line from the argument.</p>
    -771     *
    -772     * <p>The end of line is determined by the value of {@link SystemUtils#LINE_SEPARATOR}.</p>
    -773     *
    -774     * <p>Functionality shared between the
    -775     * <code>getStackFrames(Throwable)</code> methods of this and the
    -776     * {@link org.apache.commons.lang.exception.NestableDelegate} classes.</p>
    -777     *
    -778     * @param stackTrace  a stack trace String
    -779     * @return an array where each element is a line from the argument
    -780     */
    -781//    static String[] getStackFrames(String stackTrace) {
    -782//        String linebreak = SystemUtils.LINE_SEPARATOR;
    -783//        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    -784//        List list = new ArrayList();
    -785//        while (frames.hasMoreTokens()) {
    -786//            list.add(frames.nextToken());
    -787//        }
    -788//        return toArray(list);
    -789//    }
    -790
    -791    /**
    -792     * <p>Produces a <code>List</code> of stack frames - the message
    -793     * is not included. Only the trace of the specified exception is
    -794     * returned, any caused by trace is stripped.</p>
    -795     *
    -796     * <p>This works in most cases - it will only fail if the exception
    -797     * message contains a line that starts with:
    -798     * <code>&quot;&nbsp;&nbsp;&nbsp;at&quot;.</code></p>
    -799     *
    -800     * @param t is any throwable
    -801     * @return List of stack frames
    -802     */
    -803    static List getStackFrameList(Throwable t) {
    -804        String stackTrace = getStackTrace(t);
    -805        String linebreak = LINE_SEPARATOR;
    -806        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    -807        List list = new ArrayList();
    -808        boolean traceStarted = false;
    -809        while (frames.hasMoreTokens()) {
    -810            String token = frames.nextToken();
    -811            // Determine if the line starts with <whitespace>at
    -812            int at = token.indexOf("at");
    -813            if (at != -1 && token.substring(0, at).trim().length() == 0) {
    -814                traceStarted = true;
    -815                list.add(token);
    -816            } else if (traceStarted) {
    -817                break;
    -818            }
    -819        }
    -820        return list;
    -821    }
    -822
    -823    //-----------------------------------------------------------------------
    -824    /**
    -825     * Gets a short message summarising the exception.
    -826     * <p>
    -827     * The message returned is of the form
    -828     * {ClassNameWithoutPackage}: {ThrowableMessage}
    -829     *
    -830     * @param th  the throwable to get a message for, null returns empty string
    -831     * @return the message, non-null
    -832     * @since Commons Lang 2.2
    -833     */
    -834//    public static String getMessage(Throwable th) {
    -835//        if (th == null) {
    -836//            return "";
    -837//        }
    -838//        String clsName = ClassUtils.getShortClassName(th, null);
    -839//        String msg = th.getMessage();
    -840//        return clsName + ": " + StringUtils.defaultString(msg);
    -841//    }
    -842
    -843    //-----------------------------------------------------------------------
    -844    /**
    -845     * Gets a short message summarising the root cause exception.
    -846     * <p>
    -847     * The message returned is of the form
    -848     * {ClassNameWithoutPackage}: {ThrowableMessage}
    -849     *
    -850     * @param th  the throwable to get a message for, null returns empty string
    -851     * @return the message, non-null
    -852     * @since Commons Lang 2.2
    -853     */
    -854//    public static String getRootCauseMessage(Throwable th) {
    -855//        Throwable root = ExceptionUtils.getRootCause(th);
    -856//        root = (root == null ? th : root);
    -857//        return getMessage(root);
    -858//    }
    -859
    -860    /**
    -861     * An interface to be implemented by {@link java.lang.Throwable}
    -862     * extensions which would like to be able to nest root exceptions
    -863     * inside themselves.
    -864     *
    -865     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    -866     * @author <a href="mailto:knielsen@apache.org">Kasper Nielsen</a>
    -867     * @author <a href="mailto:steven@caswell.name">Steven Caswell</a>
    -868     * @author Pete Gieser
    -869     * @since 1.0
    -870     * @version $Id$
    -871     */
    -872    public interface Nestable {
    -873
    -874        /**
    -875         * Returns the reference to the exception or error that caused the
    -876         * exception implementing the <code>Nestable</code> to be thrown.
    -877         *
    -878         * @return throwable that caused the original exception
    -879         */
    -880        Throwable getCause();
    -881
    -882        /**
    -883         * Returns the error message of this and any nested
    -884         * <code>Throwable</code>.
    -885         *
    -886         * @return the error message
    -887         */
    -888        String getMessage();
    -889
    -890        /**
    -891         * Returns the error message of the <code>Throwable</code> in the chain
    -892         * of <code>Throwable</code>s at the specified index, numbered from 0.
    -893         *
    -894         * @param index the index of the <code>Throwable</code> in the chain of
    -895         * <code>Throwable</code>s
    -896         * @return the error message, or null if the <code>Throwable</code> at the
    -897         * specified index in the chain does not contain a message
    -898         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    -899         * negative or not less than the count of <code>Throwable</code>s in the
    -900         * chain
    -901         */
    -902        String getMessage(int index);
    -903
    -904        /**
    -905         * Returns the error message of this and any nested <code>Throwable</code>s
    -906         * in an array of Strings, one element for each message. Any
    -907         * <code>Throwable</code> not containing a message is represented in the
    -908         * array by a null. This has the effect of cause the length of the returned
    -909         * array to be equal to the result of the {@link #getThrowableCount()}
    -910         * operation.
    -911         *
    -912         * @return the error messages
    -913         */
    -914        String[] getMessages();
    -915
    -916        /**
    -917         * Returns the <code>Throwable</code> in the chain of
    -918         * <code>Throwable</code>s at the specified index, numbered from 0.
    -919         *
    -920         * @param index the index, numbered from 0, of the <code>Throwable</code> in
    -921         * the chain of <code>Throwable</code>s
    -922         * @return the <code>Throwable</code>
    -923         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    -924         * negative or not less than the count of <code>Throwable</code>s in the
    -925         * chain
    -926         */
    -927        Throwable getThrowable(int index);
    -928
    -929        /**
    -930         * Returns the number of nested <code>Throwable</code>s represented by
    -931         * this <code>Nestable</code>, including this <code>Nestable</code>.
    -932         *
    -933         * @return the throwable count
    -934         */
    -935        int getThrowableCount();
    -936
    -937        /**
    -938         * Returns this <code>Nestable</code> and any nested <code>Throwable</code>s
    -939         * in an array of <code>Throwable</code>s, one element for each
    -940         * <code>Throwable</code>.
    -941         *
    -942         * @return the <code>Throwable</code>s
    -943         */
    -944        Throwable[] getThrowables();
    -945
    -946        /**
    -947         * Returns the index, numbered from 0, of the first occurrence of the
    -948         * specified type, or a subclass, in the chain of <code>Throwable</code>s.
    -949         * The method returns -1 if the specified type is not found in the chain.
    -950         * <p>
    -951         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    -952         * such that this method matches subclasses.
    -953         * If you want to NOT match subclasses, please use
    -954         * (which is avaiable in all versions of lang).
    -955         *
    -956         * @param type  the type to find, subclasses match, null returns -1
    -957         * @return index of the first occurrence of the type in the chain, or -1 if
    -958         * the type is not found
    -959         */
    -960        int indexOfThrowable(Class type);
    -961
    -962        /**
    -963         * Returns the index, numbered from 0, of the first <code>Throwable</code>
    -964         * that matches the specified type, or a subclass, in the chain of <code>Throwable</code>s
    -965         * with an index greater than or equal to the specified index.
    -966         * The method returns -1 if the specified type is not found in the chain.
    -967         * <p>
    -968         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    -969         * such that this method matches subclasses.
    -970         * If you want to NOT match subclasses, please use
    -971         * (which is avaiable in all versions of lang).
    -972         *
    -973         * @param type  the type to find, subclasses match, null returns -1
    -974         * @param fromIndex the index, numbered from 0, of the starting position in
    -975         * the chain to be searched
    -976         * @return index of the first occurrence of the type in the chain, or -1 if
    -977         * the type is not found
    -978         * @throws IndexOutOfBoundsException if the <code>fromIndex</code> argument
    -979         * is negative or not less than the count of <code>Throwable</code>s in the
    -980         * chain
    -981         */
    -982        int indexOfThrowable(Class type, int fromIndex);
    -983
    -984        /**
    -985         * Prints the stack trace of this exception to the specified print
    -986         * writer.  Includes information from the exception, if any,
    -987         * which caused this exception.
    -988         *
    -989         * @param out <code>PrintWriter</code> to use for output.
    -990         */
    -991        void printStackTrace(PrintWriter out);
    -992
    -993        /**
    -994         * Prints the stack trace of this exception to the specified print
    -995         * stream.  Includes information from the exception, if any,
    -996         * which caused this exception.
    -997         *
    -998         * @param out <code>PrintStream</code> to use for output.
    -999         */
    -1000        void printStackTrace(PrintStream out);
    -1001
    -1002        /**
    -1003         * Prints the stack trace for this exception only--root cause not
    -1004         * included--using the provided writer.  Used by
    -1005         * individual stack traces to a buffer.  The implementation of
    -1006         * this method should call
    -1007         * <code>super.printStackTrace(out);</code> in most cases.
    -1008         *
    -1009         * @param out The writer to use.
    -1010         */
    -1011        void printPartialStackTrace(PrintWriter out);
    -1012
    -1013    }
    -1014}
    +
    +
    001/*
    +002 * Licensed to the Apache Software Foundation (ASF) under one or more
    +003 * contributor license agreements.  See the NOTICE file distributed with
    +004 * this work for additional information regarding copyright ownership.
    +005 * The ASF licenses this file to You under the Apache License, Version 2.0
    +006 * (the "License"); you may not use this file except in compliance with
    +007 * the License.  You may obtain a copy of the License at
    +008 *
    +009 *      http://www.apache.org/licenses/LICENSE-2.0
    +010 *
    +011 * Unless required by applicable law or agreed to in writing, software
    +012 * distributed under the License is distributed on an "AS IS" BASIS,
    +013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +014 * See the License for the specific language governing permissions and
    +015 * limitations under the License.
    +016 */
    +017package co.aikar.commands.apachecommonslang;
    +018
    +019import java.io.PrintStream;
    +020import java.io.PrintWriter;
    +021import java.io.StringWriter;
    +022import java.lang.reflect.Field;
    +023import java.lang.reflect.InvocationTargetException;
    +024import java.lang.reflect.Method;
    +025import java.sql.SQLException;
    +026import java.util.ArrayList;
    +027import java.util.Arrays;
    +028import java.util.List;
    +029import java.util.StringTokenizer;
    +030
    +031/**
    +032 * <p>Provides utilities for manipulating and examining
    +033 * <code>Throwable</code> objects.</p>
    +034 *
    +035 * @author <a href="mailto:dlr@finemaltcoding.com">Daniel Rall</a>
    +036 * @author Dmitri Plotnikov
    +037 * @author Stephen Colebourne
    +038 * @author <a href="mailto:ggregory@seagullsw.com">Gary Gregory</a>
    +039 * @author Pete Gieser
    +040 * @since 1.0
    +041 * @version $Id$
    +042 */
    +043public class ApacheCommonsExceptionUtil {
    +044    private static final String LINE_SEPARATOR = System.getProperty("line.separator");
    +045
    +046    /**
    +047     * <p>Used when printing stack frames to denote the start of a
    +048     * wrapped exception.</p>
    +049     *
    +050     * <p>Package private for accessibility by test suite.</p>
    +051     */
    +052    static final String WRAPPED_MARKER = " [wrapped] ";
    +053
    +054    /**
    +055     * <p>The names of methods commonly used to access a wrapped exception.</p>
    +056     */
    +057    private static String[] CAUSE_METHOD_NAMES = {
    +058            "getCause",
    +059            "getNextException",
    +060            "getTargetException",
    +061            "getException",
    +062            "getSourceException",
    +063            "getRootCause",
    +064            "getCausedByException",
    +065            "getNested",
    +066            "getLinkedException",
    +067            "getNestedException",
    +068            "getLinkedCause",
    +069            "getThrowable",
    +070    };
    +071
    +072    /**
    +073     * <p>The Method object for Java 1.4 getCause.</p>
    +074     */
    +075    private static final Method THROWABLE_CAUSE_METHOD;
    +076
    +077    /**
    +078     * <p>The Method object for Java 1.4 initCause.</p>
    +079     */
    +080    private static final Method THROWABLE_INITCAUSE_METHOD;
    +081
    +082    static {
    +083        Method causeMethod;
    +084        try {
    +085            causeMethod = Throwable.class.getMethod("getCause", null);
    +086        } catch (Exception e) {
    +087            causeMethod = null;
    +088        }
    +089        THROWABLE_CAUSE_METHOD = causeMethod;
    +090        try {
    +091            causeMethod = Throwable.class.getMethod("initCause", Throwable.class);
    +092        } catch (Exception e) {
    +093            causeMethod = null;
    +094        }
    +095        THROWABLE_INITCAUSE_METHOD = causeMethod;
    +096    }
    +097
    +098    /**
    +099     * <p>
    +100     * Public constructor allows an instance of <code>ExceptionUtils</code> to be created, although that is not
    +101     * normally necessary.
    +102     * </p>
    +103     */
    +104    public ApacheCommonsExceptionUtil() {
    +105        super();
    +106    }
    +107
    +108    //-----------------------------------------------------------------------
    +109    /**
    +110     * <p>Adds to the list of method names used in the search for <code>Throwable</code>
    +111     * objects.</p>
    +112     *
    +113     * @param methodName  the methodName to add to the list, <code>null</code>
    +114     *  and empty strings are ignored
    +115     * @since 2.0
    +116     */
    +117    public static void addCauseMethodName(String methodName) {
    +118        if (methodName != null && !methodName.isEmpty() && !isCauseMethodName(methodName)) {
    +119            List list = getCauseMethodNameList();
    +120            if (list.add(methodName)) {
    +121                CAUSE_METHOD_NAMES = toArray(list);
    +122            }
    +123        }
    +124    }
    +125
    +126    /**
    +127     * <p>Removes from the list of method names used in the search for <code>Throwable</code>
    +128     * objects.</p>
    +129     *
    +130     * @param methodName  the methodName to remove from the list, <code>null</code>
    +131     *  and empty strings are ignored
    +132     * @since 2.1
    +133     */
    +134    public static void removeCauseMethodName(String methodName) {
    +135        if (methodName != null && !methodName.isEmpty()) {
    +136            List list = getCauseMethodNameList();
    +137            if (list.remove(methodName)) {
    +138                CAUSE_METHOD_NAMES = toArray(list);
    +139            }
    +140        }
    +141    }
    +142
    +143    /**
    +144     * <p>Sets the cause of a <code>Throwable</code> using introspection, allowing
    +145     * source code compatibility between pre-1.4 and post-1.4 Java releases.</p>
    +146     *
    +147     * <p>The typical use of this method is inside a constructor as in
    +148     * the following example:</p>
    +149     *
    +150     * <pre>
    +151     * import org.apache.commons.lang.exception.ExceptionUtils;
    +152     *
    +153     * public class MyException extends Exception {
    +154     *
    +155     *    public MyException(String msg) {
    +156     *       super(msg);
    +157     *    }
    +158     *
    +159     *    public MyException(String msg, Throwable cause) {
    +160     *       super(msg);
    +161     *       ExceptionUtils.setCause(this, cause);
    +162     *    }
    +163     * }
    +164     * </pre>
    +165     *
    +166     * @param target  the target <code>Throwable</code>
    +167     * @param cause  the <code>Throwable</code> to set in the target
    +168     * @return a <code>true</code> if the target has been modified
    +169     * @since 2.2
    +170     */
    +171    public static boolean setCause(Throwable target, Throwable cause) {
    +172        if (target == null) {
    +173            throw new IllegalArgumentException("target");
    +174        }
    +175        Object[] causeArgs = new Object[]{cause};
    +176        boolean modifiedTarget = false;
    +177        if (THROWABLE_INITCAUSE_METHOD != null) {
    +178            try {
    +179                THROWABLE_INITCAUSE_METHOD.invoke(target, causeArgs);
    +180                modifiedTarget = true;
    +181            } catch (IllegalAccessException ignored) {
    +182                // Exception ignored.
    +183            } catch (InvocationTargetException ignored) {
    +184                // Exception ignored.
    +185            }
    +186        }
    +187        try {
    +188            Method setCauseMethod = target.getClass().getMethod("setCause", Throwable.class);
    +189            setCauseMethod.invoke(target, causeArgs);
    +190            modifiedTarget = true;
    +191        } catch (NoSuchMethodException ignored) {
    +192            // Exception ignored.
    +193        } catch (IllegalAccessException ignored) {
    +194            // Exception ignored.
    +195        } catch (InvocationTargetException ignored) {
    +196            // Exception ignored.
    +197        }
    +198        return modifiedTarget;
    +199    }
    +200
    +201    /**
    +202     * Returns the given list as a <code>String[]</code>.
    +203     * @param list a list to transform.
    +204     * @return the given list as a <code>String[]</code>.
    +205     */
    +206    private static String[] toArray(List list) {
    +207        return (String[]) list.toArray(new String[list.size()]);
    +208    }
    +209
    +210    /**
    +211     * Returns {@link #CAUSE_METHOD_NAMES} as a List.
    +212     *
    +213     * @return {@link #CAUSE_METHOD_NAMES} as a List.
    +214     */
    +215    private static ArrayList getCauseMethodNameList() {
    +216        return new ArrayList(Arrays.asList(CAUSE_METHOD_NAMES));
    +217    }
    +218
    +219    /**
    +220     * <p>Tests if the list of method names used in the search for <code>Throwable</code>
    +221     * objects include the given name.</p>
    +222     *
    +223     * @param methodName  the methodName to search in the list.
    +224     * @return if the list of method names used in the search for <code>Throwable</code>
    +225     *  objects include the given name.
    +226     * @since 2.1
    +227     */
    +228    public static boolean isCauseMethodName(String methodName) {
    +229        return ApacheCommonsLangUtil.indexOf(CAUSE_METHOD_NAMES, methodName) >= 0;
    +230    }
    +231
    +232    //-----------------------------------------------------------------------
    +233    /**
    +234     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    +235     *
    +236     * <p>The method searches for methods with specific names that return a
    +237     * <code>Throwable</code> object. This will pick up most wrapping exceptions,
    +238     * including those from JDK 1.4, and
    +239     * The method names can be added to using {@link #addCauseMethodName(String)}.</p>
    +240     *
    +241     * <p>The default list searched for are:</p>
    +242     * <ul>
    +243     *  <li><code>getCause()</code></li>
    +244     *  <li><code>getNextException()</code></li>
    +245     *  <li><code>getTargetException()</code></li>
    +246     *  <li><code>getException()</code></li>
    +247     *  <li><code>getSourceException()</code></li>
    +248     *  <li><code>getRootCause()</code></li>
    +249     *  <li><code>getCausedByException()</code></li>
    +250     *  <li><code>getNested()</code></li>
    +251     * </ul>
    +252     *
    +253     * <p>In the absence of any such method, the object is inspected for a
    +254     * <code>detail</code> field assignable to a <code>Throwable</code>.</p>
    +255     *
    +256     * <p>If none of the above is found, returns <code>null</code>.</p>
    +257     *
    +258     * @param throwable  the throwable to introspect for a cause, may be null
    +259     * @return the cause of the <code>Throwable</code>,
    +260     *  <code>null</code> if none found or null throwable input
    +261     * @since 1.0
    +262     */
    +263    public static Throwable getCause(Throwable throwable) {
    +264        return getCause(throwable, CAUSE_METHOD_NAMES);
    +265    }
    +266
    +267    /**
    +268     * <p>Introspects the <code>Throwable</code> to obtain the cause.</p>
    +269     *
    +270     * <ol>
    +271     * <li>Try known exception types.</li>
    +272     * <li>Try the supplied array of method names.</li>
    +273     * <li>Try the field 'detail'.</li>
    +274     * </ol>
    +275     *
    +276     * <p>A <code>null</code> set of method names means use the default set.
    +277     * A <code>null</code> in the set of method names will be ignored.</p>
    +278     *
    +279     * @param throwable  the throwable to introspect for a cause, may be null
    +280     * @param methodNames  the method names, null treated as default set
    +281     * @return the cause of the <code>Throwable</code>,
    +282     *  <code>null</code> if none found or null throwable input
    +283     * @since 1.0
    +284     */
    +285    public static Throwable getCause(Throwable throwable, String[] methodNames) {
    +286        if (throwable == null) {
    +287            return null;
    +288        }
    +289        Throwable cause = getCauseUsingWellKnownTypes(throwable);
    +290        if (cause == null) {
    +291            if (methodNames == null) {
    +292                methodNames = CAUSE_METHOD_NAMES;
    +293            }
    +294            for (int i = 0; i < methodNames.length; i++) {
    +295                String methodName = methodNames[i];
    +296                if (methodName != null) {
    +297                    cause = getCauseUsingMethodName(throwable, methodName);
    +298                    if (cause != null) {
    +299                        break;
    +300                    }
    +301                }
    +302            }
    +303
    +304            if (cause == null) {
    +305                cause = getCauseUsingFieldName(throwable, "detail");
    +306            }
    +307        }
    +308        return cause;
    +309    }
    +310
    +311    /**
    +312     * <p>Introspects the <code>Throwable</code> to obtain the root cause.</p>
    +313     *
    +314     * <p>This method walks through the exception chain to the last element,
    +315     * "root" of the tree, using {@link #getCause(Throwable)}, and
    +316     * returns that exception.</p>
    +317     *
    +318     * <p>From version 2.2, this method handles recursive cause structures
    +319     * that might otherwise cause infinite loops. If the throwable parameter
    +320     * has a cause of itself, then null will be returned. If the throwable
    +321     * parameter cause chain loops, the last element in the chain before the
    +322     * loop is returned.</p>
    +323     *
    +324     * @param throwable  the throwable to get the root cause for, may be null
    +325     * @return the root cause of the <code>Throwable</code>,
    +326     *  <code>null</code> if none found or null throwable input
    +327     */
    +328    public static Throwable getRootCause(Throwable throwable) {
    +329        List list = getThrowableList(throwable);
    +330        return (list.size() < 2 ? null : (Throwable)list.get(list.size() - 1));
    +331    }
    +332
    +333    /**
    +334     * <p>Finds a <code>Throwable</code> for known types.</p>
    +335     *
    +336     * <p>Uses <code>instanceof</code> checks to examine the exception,
    +337     * looking for well known types which could contain chained or
    +338     * wrapped exceptions.</p>
    +339     *
    +340     * @param throwable  the exception to examine
    +341     * @return the wrapped exception, or <code>null</code> if not found
    +342     */
    +343    private static Throwable getCauseUsingWellKnownTypes(Throwable throwable) {
    +344        if (throwable instanceof Nestable) {
    +345            return throwable.getCause();
    +346        } else if (throwable instanceof SQLException) {
    +347            return ((SQLException) throwable).getNextException();
    +348        } else if (throwable instanceof InvocationTargetException) {
    +349            return ((InvocationTargetException) throwable).getTargetException();
    +350        } else {
    +351            return null;
    +352        }
    +353    }
    +354
    +355    /**
    +356     * <p>Finds a <code>Throwable</code> by method name.</p>
    +357     *
    +358     * @param throwable  the exception to examine
    +359     * @param methodName  the name of the method to find and invoke
    +360     * @return the wrapped exception, or <code>null</code> if not found
    +361     */
    +362    private static Throwable getCauseUsingMethodName(Throwable throwable, String methodName) {
    +363        Method method = null;
    +364        try {
    +365            method = throwable.getClass().getMethod(methodName, null);
    +366        } catch (NoSuchMethodException ignored) {
    +367            // exception ignored
    +368        } catch (SecurityException ignored) {
    +369            // exception ignored
    +370        }
    +371
    +372        if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    +373            try {
    +374                return (Throwable) method.invoke(throwable);
    +375            } catch (IllegalAccessException ignored) {
    +376                // exception ignored
    +377            } catch (IllegalArgumentException ignored) {
    +378                // exception ignored
    +379            } catch (InvocationTargetException ignored) {
    +380                // exception ignored
    +381            }
    +382        }
    +383        return null;
    +384    }
    +385
    +386    /**
    +387     * <p>Finds a <code>Throwable</code> by field name.</p>
    +388     *
    +389     * @param throwable  the exception to examine
    +390     * @param fieldName  the name of the attribute to examine
    +391     * @return the wrapped exception, or <code>null</code> if not found
    +392     */
    +393    private static Throwable getCauseUsingFieldName(Throwable throwable, String fieldName) {
    +394        Field field = null;
    +395        try {
    +396            field = throwable.getClass().getField(fieldName);
    +397        } catch (NoSuchFieldException ignored) {
    +398            // exception ignored
    +399        } catch (SecurityException ignored) {
    +400            // exception ignored
    +401        }
    +402
    +403        if (field != null && Throwable.class.isAssignableFrom(field.getType())) {
    +404            try {
    +405                return (Throwable) field.get(throwable);
    +406            } catch (IllegalAccessException ignored) {
    +407                // exception ignored
    +408            } catch (IllegalArgumentException ignored) {
    +409                // exception ignored
    +410            }
    +411        }
    +412        return null;
    +413    }
    +414
    +415    //-----------------------------------------------------------------------
    +416    /**
    +417     * <p>Checks if the Throwable class has a <code>getCause</code> method.</p>
    +418     *
    +419     * <p>This is true for JDK 1.4 and above.</p>
    +420     *
    +421     * @return true if Throwable is nestable
    +422     * @since 2.0
    +423     */
    +424    public static boolean isThrowableNested() {
    +425        return THROWABLE_CAUSE_METHOD != null;
    +426    }
    +427
    +428    /**
    +429     * <p>Checks whether this <code>Throwable</code> class can store a cause.</p>
    +430     *
    +431     * <p>This method does <b>not</b> check whether it actually does store a cause.<p>
    +432     *
    +433     * @param throwable  the <code>Throwable</code> to examine, may be null
    +434     * @return boolean <code>true</code> if nested otherwise <code>false</code>
    +435     * @since 2.0
    +436     */
    +437    public static boolean isNestedThrowable(Throwable throwable) {
    +438        if (throwable == null) {
    +439            return false;
    +440        }
    +441
    +442        if (throwable instanceof Nestable) {
    +443            return true;
    +444        } else if (throwable instanceof SQLException) {
    +445            return true;
    +446        } else if (throwable instanceof InvocationTargetException) {
    +447            return true;
    +448        } else if (isThrowableNested()) {
    +449            return true;
    +450        }
    +451
    +452        Class cls = throwable.getClass();
    +453        for (int i = 0, isize = CAUSE_METHOD_NAMES.length; i < isize; i++) {
    +454            try {
    +455                Method method = cls.getMethod(CAUSE_METHOD_NAMES[i], null);
    +456                if (method != null && Throwable.class.isAssignableFrom(method.getReturnType())) {
    +457                    return true;
    +458                }
    +459            } catch (NoSuchMethodException ignored) {
    +460                // exception ignored
    +461            } catch (SecurityException ignored) {
    +462                // exception ignored
    +463            }
    +464        }
    +465
    +466        try {
    +467            Field field = cls.getField("detail");
    +468            if (field != null) {
    +469                return true;
    +470            }
    +471        } catch (NoSuchFieldException ignored) {
    +472            // exception ignored
    +473        } catch (SecurityException ignored) {
    +474            // exception ignored
    +475        }
    +476
    +477        return false;
    +478    }
    +479
    +480    //-----------------------------------------------------------------------
    +481    /**
    +482     * <p>Counts the number of <code>Throwable</code> objects in the
    +483     * exception chain.</p>
    +484     *
    +485     * <p>A throwable without cause will return <code>1</code>.
    +486     * A throwable with one cause will return <code>2</code> and so on.
    +487     * A <code>null</code> throwable will return <code>0</code>.</p>
    +488     *
    +489     * <p>From version 2.2, this method handles recursive cause structures
    +490     * that might otherwise cause infinite loops. The cause chain is
    +491     * processed until the end is reached, or until the next item in the
    +492     * chain is already in the result set.</p>
    +493     *
    +494     * @param throwable  the throwable to inspect, may be null
    +495     * @return the count of throwables, zero if null input
    +496     */
    +497    public static int getThrowableCount(Throwable throwable) {
    +498        return getThrowableList(throwable).size();
    +499    }
    +500
    +501    /**
    +502     * <p>Returns the list of <code>Throwable</code> objects in the
    +503     * exception chain.</p>
    +504     *
    +505     * <p>A throwable without cause will return an array containing
    +506     * one element - the input throwable.
    +507     * A throwable with one cause will return an array containing
    +508     * two elements. - the input throwable and the cause throwable.
    +509     * A <code>null</code> throwable will return an array of size zero.</p>
    +510     *
    +511     * <p>From version 2.2, this method handles recursive cause structures
    +512     * that might otherwise cause infinite loops. The cause chain is
    +513     * processed until the end is reached, or until the next item in the
    +514     * chain is already in the result set.</p>
    +515     *
    +516     * @see #getThrowableList(Throwable)
    +517     * @param throwable  the throwable to inspect, may be null
    +518     * @return the array of throwables, never null
    +519     */
    +520    public static Throwable[] getThrowables(Throwable throwable) {
    +521        List list = getThrowableList(throwable);
    +522        return (Throwable[]) list.toArray(new Throwable[list.size()]);
    +523    }
    +524
    +525    /**
    +526     * <p>Returns the list of <code>Throwable</code> objects in the
    +527     * exception chain.</p>
    +528     *
    +529     * <p>A throwable without cause will return a list containing
    +530     * one element - the input throwable.
    +531     * A throwable with one cause will return a list containing
    +532     * two elements. - the input throwable and the cause throwable.
    +533     * A <code>null</code> throwable will return a list of size zero.</p>
    +534     *
    +535     * <p>This method handles recursive cause structures that might
    +536     * otherwise cause infinite loops. The cause chain is processed until
    +537     * the end is reached, or until the next item in the chain is already
    +538     * in the result set.</p>
    +539     *
    +540     * @param throwable  the throwable to inspect, may be null
    +541     * @return the list of throwables, never null
    +542     * @since Commons Lang 2.2
    +543     */
    +544    public static List getThrowableList(Throwable throwable) {
    +545        List list = new ArrayList();
    +546        while (throwable != null && list.contains(throwable) == false) {
    +547            list.add(throwable);
    +548            throwable = getCause(throwable);
    +549        }
    +550        return list;
    +551    }
    +552
    +553    //-----------------------------------------------------------------------
    +554    /**
    +555     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +556     * that matches the specified class (exactly) in the exception chain.
    +557     * Subclasses of the specified class do not match - see
    +558     * {@link #indexOfType(Throwable, Class)} for the opposite.</p>
    +559     *
    +560     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +561     * A <code>null</code> type returns <code>-1</code>.
    +562     * No match in the chain returns <code>-1</code>.</p>
    +563     *
    +564     * @param throwable  the throwable to inspect, may be null
    +565     * @param clazz  the class to search for, subclasses do not match, null returns -1
    +566     * @return the index into the throwable chain, -1 if no match or null input
    +567     */
    +568    public static int indexOfThrowable(Throwable throwable, Class clazz) {
    +569        return indexOf(throwable, clazz, 0, false);
    +570    }
    +571
    +572    /**
    +573     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +574     * that matches the specified type in the exception chain from
    +575     * a specified index.
    +576     * Subclasses of the specified class do not match - see
    +577     * {@link #indexOfType(Throwable, Class, int)} for the opposite.</p>
    +578     *
    +579     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +580     * A <code>null</code> type returns <code>-1</code>.
    +581     * No match in the chain returns <code>-1</code>.
    +582     * A negative start index is treated as zero.
    +583     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    +584     *
    +585     * @param throwable  the throwable to inspect, may be null
    +586     * @param clazz  the class to search for, subclasses do not match, null returns -1
    +587     * @param fromIndex  the (zero based) index of the starting position,
    +588     *  negative treated as zero, larger than chain size returns -1
    +589     * @return the index into the throwable chain, -1 if no match or null input
    +590     */
    +591    public static int indexOfThrowable(Throwable throwable, Class clazz, int fromIndex) {
    +592        return indexOf(throwable, clazz, fromIndex, false);
    +593    }
    +594
    +595    //-----------------------------------------------------------------------
    +596    /**
    +597     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +598     * that matches the specified class or subclass in the exception chain.
    +599     * Subclasses of the specified class do match - see
    +600     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    +601     *
    +602     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +603     * A <code>null</code> type returns <code>-1</code>.
    +604     * No match in the chain returns <code>-1</code>.</p>
    +605     *
    +606     * @param throwable  the throwable to inspect, may be null
    +607     * @param type  the type to search for, subclasses match, null returns -1
    +608     * @return the index into the throwable chain, -1 if no match or null input
    +609     * @since 2.1
    +610     */
    +611    public static int indexOfType(Throwable throwable, Class type) {
    +612        return indexOf(throwable, type, 0, true);
    +613    }
    +614
    +615    /**
    +616     * <p>Returns the (zero based) index of the first <code>Throwable</code>
    +617     * that matches the specified type in the exception chain from
    +618     * a specified index.
    +619     * Subclasses of the specified class do match - see
    +620     * {@link #indexOfThrowable(Throwable, Class)} for the opposite.</p>
    +621     *
    +622     * <p>A <code>null</code> throwable returns <code>-1</code>.
    +623     * A <code>null</code> type returns <code>-1</code>.
    +624     * No match in the chain returns <code>-1</code>.
    +625     * A negative start index is treated as zero.
    +626     * A start index greater than the number of throwables returns <code>-1</code>.</p>
    +627     *
    +628     * @param throwable  the throwable to inspect, may be null
    +629     * @param type  the type to search for, subclasses match, null returns -1
    +630     * @param fromIndex  the (zero based) index of the starting position,
    +631     *  negative treated as zero, larger than chain size returns -1
    +632     * @return the index into the throwable chain, -1 if no match or null input
    +633     * @since 2.1
    +634     */
    +635    public static int indexOfType(Throwable throwable, Class type, int fromIndex) {
    +636        return indexOf(throwable, type, fromIndex, true);
    +637    }
    +638
    +639    /**
    +640     * <p>Worker method for the <code>indexOfType</code> methods.</p>
    +641     *
    +642     * @param throwable  the throwable to inspect, may be null
    +643     * @param type  the type to search for, subclasses match, null returns -1
    +644     * @param fromIndex  the (zero based) index of the starting position,
    +645     *  negative treated as zero, larger than chain size returns -1
    +646     * @param subclass if <code>true</code>, compares with {@link Class#isAssignableFrom(Class)}, otherwise compares
    +647     * using references
    +648     * @return index of the <code>type</code> within throwables nested withing the specified <code>throwable</code>
    +649     */
    +650    private static int indexOf(Throwable throwable, Class type, int fromIndex, boolean subclass) {
    +651        if (throwable == null || type == null) {
    +652            return -1;
    +653        }
    +654        if (fromIndex < 0) {
    +655            fromIndex = 0;
    +656        }
    +657        Throwable[] throwables = getThrowables(throwable);
    +658        if (fromIndex >= throwables.length) {
    +659            return -1;
    +660        }
    +661        if (subclass) {
    +662            for (int i = fromIndex; i < throwables.length; i++) {
    +663                if (type.isAssignableFrom(throwables[i].getClass())) {
    +664                    return i;
    +665                }
    +666            }
    +667        } else {
    +668            for (int i = fromIndex; i < throwables.length; i++) {
    +669                if (type.equals(throwables[i].getClass())) {
    +670                    return i;
    +671                }
    +672            }
    +673        }
    +674        return -1;
    +675    }
    +676
    +677    /**
    +678     * <p>Removes common frames from the cause trace given the two stack traces.</p>
    +679     *
    +680     * @param causeFrames  stack trace of a cause throwable
    +681     * @param wrapperFrames  stack trace of a wrapper throwable
    +682     * @throws IllegalArgumentException if either argument is null
    +683     * @since 2.0
    +684     */
    +685    public static void removeCommonFrames(List causeFrames, List wrapperFrames) {
    +686        if (causeFrames == null || wrapperFrames == null) {
    +687            throw new IllegalArgumentException("The List must not be null");
    +688        }
    +689        int causeFrameIndex = causeFrames.size() - 1;
    +690        int wrapperFrameIndex = wrapperFrames.size() - 1;
    +691        while (causeFrameIndex >= 0 && wrapperFrameIndex >= 0) {
    +692            // Remove the frame from the cause trace if it is the same
    +693            // as in the wrapper trace
    +694            String causeFrame = (String) causeFrames.get(causeFrameIndex);
    +695            String wrapperFrame = (String) wrapperFrames.get(wrapperFrameIndex);
    +696            if (causeFrame.equals(wrapperFrame)) {
    +697                causeFrames.remove(causeFrameIndex);
    +698            }
    +699            causeFrameIndex--;
    +700            wrapperFrameIndex--;
    +701        }
    +702    }
    +703
    +704    //-----------------------------------------------------------------------
    +705    /**
    +706     * <p>A way to get the entire nested stack-trace of an throwable.</p>
    +707     *
    +708     * <p>The result of this method is highly dependent on the JDK version
    +709     * and whether the exceptions override printStackTrace or not.</p>
    +710     *
    +711     * @param throwable  the <code>Throwable</code> to be examined
    +712     * @return the nested stack trace, with the root cause first
    +713     * @since 2.0
    +714     */
    +715    public static String getFullStackTrace(Throwable throwable) {
    +716        StringWriter sw = new StringWriter();
    +717        PrintWriter pw = new PrintWriter(sw, true);
    +718        Throwable[] ts = getThrowables(throwable);
    +719        for (int i = 0; i < ts.length; i++) {
    +720            ts[i].printStackTrace(pw);
    +721            if (isNestedThrowable(ts[i])) {
    +722                break;
    +723            }
    +724        }
    +725        return sw.getBuffer().toString();
    +726    }
    +727
    +728    //-----------------------------------------------------------------------
    +729    /**
    +730     * <p>Gets the stack trace from a Throwable as a String.</p>
    +731     *
    +732     * <p>The result of this method vary by JDK version as this method
    +733     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    +734     * On JDK1.3 and earlier, the cause exception will not be shown
    +735     * unless the specified throwable alters printStackTrace.</p>
    +736     *
    +737     * @param throwable  the <code>Throwable</code> to be examined
    +738     * @return the stack trace as generated by the exception's
    +739     *  <code>printStackTrace(PrintWriter)</code> method
    +740     */
    +741    public static String getStackTrace(Throwable throwable) {
    +742        StringWriter sw = new StringWriter();
    +743        PrintWriter pw = new PrintWriter(sw, true);
    +744        throwable.printStackTrace(pw);
    +745        return sw.getBuffer().toString();
    +746    }
    +747
    +748    /**
    +749     * <p>Captures the stack trace associated with the specified
    +750     * <code>Throwable</code> object, decomposing it into a list of
    +751     * stack frames.</p>
    +752     *
    +753     * <p>The result of this method vary by JDK version as this method
    +754     * uses {@link Throwable#printStackTrace(java.io.PrintWriter)}.
    +755     * On JDK1.3 and earlier, the cause exception will not be shown
    +756     * unless the specified throwable alters printStackTrace.</p>
    +757     *
    +758     * @param throwable  the <code>Throwable</code> to examine, may be null
    +759     * @return an array of strings describing each stack frame, never null
    +760     */
    +761//    public static String[] getStackFrames(Throwable throwable) {
    +762//        if (throwable == null) {
    +763//            return ArrayUtils.EMPTY_STRING_ARRAY;
    +764//        }
    +765//        return getStackFrames(getStackTrace(throwable));
    +766//    }
    +767
    +768    //-----------------------------------------------------------------------
    +769    /**
    +770     * <p>Returns an array where each element is a line from the argument.</p>
    +771     *
    +772     * <p>The end of line is determined by the value of {@link SystemUtils#LINE_SEPARATOR}.</p>
    +773     *
    +774     * <p>Functionality shared between the
    +775     * <code>getStackFrames(Throwable)</code> methods of this and the
    +776     * {@link org.apache.commons.lang.exception.NestableDelegate} classes.</p>
    +777     *
    +778     * @param stackTrace  a stack trace String
    +779     * @return an array where each element is a line from the argument
    +780     */
    +781//    static String[] getStackFrames(String stackTrace) {
    +782//        String linebreak = SystemUtils.LINE_SEPARATOR;
    +783//        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    +784//        List list = new ArrayList();
    +785//        while (frames.hasMoreTokens()) {
    +786//            list.add(frames.nextToken());
    +787//        }
    +788//        return toArray(list);
    +789//    }
    +790
    +791    /**
    +792     * <p>Produces a <code>List</code> of stack frames - the message
    +793     * is not included. Only the trace of the specified exception is
    +794     * returned, any caused by trace is stripped.</p>
    +795     *
    +796     * <p>This works in most cases - it will only fail if the exception
    +797     * message contains a line that starts with:
    +798     * <code>&quot;&nbsp;&nbsp;&nbsp;at&quot;.</code></p>
    +799     *
    +800     * @param t is any throwable
    +801     * @return List of stack frames
    +802     */
    +803    static List getStackFrameList(Throwable t) {
    +804        String stackTrace = getStackTrace(t);
    +805        String linebreak = LINE_SEPARATOR;
    +806        StringTokenizer frames = new StringTokenizer(stackTrace, linebreak);
    +807        List list = new ArrayList();
    +808        boolean traceStarted = false;
    +809        while (frames.hasMoreTokens()) {
    +810            String token = frames.nextToken();
    +811            // Determine if the line starts with <whitespace>at
    +812            int at = token.indexOf("at");
    +813            if (at != -1 && token.substring(0, at).trim().length() == 0) {
    +814                traceStarted = true;
    +815                list.add(token);
    +816            } else if (traceStarted) {
    +817                break;
    +818            }
    +819        }
    +820        return list;
    +821    }
    +822
    +823    //-----------------------------------------------------------------------
    +824    /**
    +825     * Gets a short message summarising the exception.
    +826     * <p>
    +827     * The message returned is of the form
    +828     * {ClassNameWithoutPackage}: {ThrowableMessage}
    +829     *
    +830     * @param th  the throwable to get a message for, null returns empty string
    +831     * @return the message, non-null
    +832     * @since Commons Lang 2.2
    +833     */
    +834//    public static String getMessage(Throwable th) {
    +835//        if (th == null) {
    +836//            return "";
    +837//        }
    +838//        String clsName = ClassUtils.getShortClassName(th, null);
    +839//        String msg = th.getMessage();
    +840//        return clsName + ": " + StringUtils.defaultString(msg);
    +841//    }
    +842
    +843    //-----------------------------------------------------------------------
    +844    /**
    +845     * Gets a short message summarising the root cause exception.
    +846     * <p>
    +847     * The message returned is of the form
    +848     * {ClassNameWithoutPackage}: {ThrowableMessage}
    +849     *
    +850     * @param th  the throwable to get a message for, null returns empty string
    +851     * @return the message, non-null
    +852     * @since Commons Lang 2.2
    +853     */
    +854//    public static String getRootCauseMessage(Throwable th) {
    +855//        Throwable root = ExceptionUtils.getRootCause(th);
    +856//        root = (root == null ? th : root);
    +857//        return getMessage(root);
    +858//    }
    +859
    +860    /**
    +861     * An interface to be implemented by {@link java.lang.Throwable}
    +862     * extensions which would like to be able to nest root exceptions
    +863     * inside themselves.
    +864     *
    +865     * @author <a href="mailto:dlr@collab.net">Daniel Rall</a>
    +866     * @author <a href="mailto:knielsen@apache.org">Kasper Nielsen</a>
    +867     * @author <a href="mailto:steven@caswell.name">Steven Caswell</a>
    +868     * @author Pete Gieser
    +869     * @since 1.0
    +870     * @version $Id$
    +871     */
    +872    public interface Nestable {
    +873
    +874        /**
    +875         * Returns the reference to the exception or error that caused the
    +876         * exception implementing the <code>Nestable</code> to be thrown.
    +877         *
    +878         * @return throwable that caused the original exception
    +879         */
    +880        Throwable getCause();
    +881
    +882        /**
    +883         * Returns the error message of this and any nested
    +884         * <code>Throwable</code>.
    +885         *
    +886         * @return the error message
    +887         */
    +888        String getMessage();
    +889
    +890        /**
    +891         * Returns the error message of the <code>Throwable</code> in the chain
    +892         * of <code>Throwable</code>s at the specified index, numbered from 0.
    +893         *
    +894         * @param index the index of the <code>Throwable</code> in the chain of
    +895         * <code>Throwable</code>s
    +896         * @return the error message, or null if the <code>Throwable</code> at the
    +897         * specified index in the chain does not contain a message
    +898         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    +899         * negative or not less than the count of <code>Throwable</code>s in the
    +900         * chain
    +901         */
    +902        String getMessage(int index);
    +903
    +904        /**
    +905         * Returns the error message of this and any nested <code>Throwable</code>s
    +906         * in an array of Strings, one element for each message. Any
    +907         * <code>Throwable</code> not containing a message is represented in the
    +908         * array by a null. This has the effect of cause the length of the returned
    +909         * array to be equal to the result of the {@link #getThrowableCount()}
    +910         * operation.
    +911         *
    +912         * @return the error messages
    +913         */
    +914        String[] getMessages();
    +915
    +916        /**
    +917         * Returns the <code>Throwable</code> in the chain of
    +918         * <code>Throwable</code>s at the specified index, numbered from 0.
    +919         *
    +920         * @param index the index, numbered from 0, of the <code>Throwable</code> in
    +921         * the chain of <code>Throwable</code>s
    +922         * @return the <code>Throwable</code>
    +923         * @throws IndexOutOfBoundsException if the <code>index</code> argument is
    +924         * negative or not less than the count of <code>Throwable</code>s in the
    +925         * chain
    +926         */
    +927        Throwable getThrowable(int index);
    +928
    +929        /**
    +930         * Returns the number of nested <code>Throwable</code>s represented by
    +931         * this <code>Nestable</code>, including this <code>Nestable</code>.
    +932         *
    +933         * @return the throwable count
    +934         */
    +935        int getThrowableCount();
    +936
    +937        /**
    +938         * Returns this <code>Nestable</code> and any nested <code>Throwable</code>s
    +939         * in an array of <code>Throwable</code>s, one element for each
    +940         * <code>Throwable</code>.
    +941         *
    +942         * @return the <code>Throwable</code>s
    +943         */
    +944        Throwable[] getThrowables();
    +945
    +946        /**
    +947         * Returns the index, numbered from 0, of the first occurrence of the
    +948         * specified type, or a subclass, in the chain of <code>Throwable</code>s.
    +949         * The method returns -1 if the specified type is not found in the chain.
    +950         * <p>
    +951         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    +952         * such that this method matches subclasses.
    +953         * If you want to NOT match subclasses, please use
    +954         * (which is avaiable in all versions of lang).
    +955         *
    +956         * @param type  the type to find, subclasses match, null returns -1
    +957         * @return index of the first occurrence of the type in the chain, or -1 if
    +958         * the type is not found
    +959         */
    +960        int indexOfThrowable(Class type);
    +961
    +962        /**
    +963         * Returns the index, numbered from 0, of the first <code>Throwable</code>
    +964         * that matches the specified type, or a subclass, in the chain of <code>Throwable</code>s
    +965         * with an index greater than or equal to the specified index.
    +966         * The method returns -1 if the specified type is not found in the chain.
    +967         * <p>
    +968         * NOTE: From v2.1, we have clarified the <code>Nestable</code> interface
    +969         * such that this method matches subclasses.
    +970         * If you want to NOT match subclasses, please use
    +971         * (which is avaiable in all versions of lang).
    +972         *
    +973         * @param type  the type to find, subclasses match, null returns -1
    +974         * @param fromIndex the index, numbered from 0, of the starting position in
    +975         * the chain to be searched
    +976         * @return index of the first occurrence of the type in the chain, or -1 if
    +977         * the type is not found
    +978         * @throws IndexOutOfBoundsException if the <code>fromIndex</code> argument
    +979         * is negative or not less than the count of <code>Throwable</code>s in the
    +980         * chain
    +981         */
    +982        int indexOfThrowable(Class type, int fromIndex);
    +983
    +984        /**
    +985         * Prints the stack trace of this exception to the specified print
    +986         * writer.  Includes information from the exception, if any,
    +987         * which caused this exception.
    +988         *
    +989         * @param out <code>PrintWriter</code> to use for output.
    +990         */
    +991        void printStackTrace(PrintWriter out);
    +992
    +993        /**
    +994         * Prints the stack trace of this exception to the specified print
    +995         * stream.  Includes information from the exception, if any,
    +996         * which caused this exception.
    +997         *
    +998         * @param out <code>PrintStream</code> to use for output.
    +999         */
    +1000        void printStackTrace(PrintStream out);
    +1001
    +1002        /**
    +1003         * Prints the stack trace for this exception only--root cause not
    +1004         * included--using the provided writer.  Used by
    +1005         * individual stack traces to a buffer.  The implementation of
    +1006         * this method should call
    +1007         * <code>super.printStackTrace(out);</code> in most cases.
    +1008         *
    +1009         * @param out The writer to use.
    +1010         */
    +1011        void printPartialStackTrace(PrintWriter out);
    +1012
    +1013    }
    +1014}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html
    index 0a9f24ba..814d92d7 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html
    @@ -1,1412 +1,1416 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002* Licensed to the Apache Software Foundation (ASF) under one or more
    -003* contributor license agreements.  See the NOTICE file distributed with
    -004* this work for additional information regarding copyright ownership.
    -005* The ASF licenses this file to You under the Apache License, Version 2.0
    -006* (the "License"); you may not use this file except in compliance with
    -007* the License.  You may obtain a copy of the License at
    -008*
    -009*      http://www.apache.org/licenses/LICENSE-2.0
    -010*
    -011* Unless required by applicable law or agreed to in writing, software
    -012* distributed under the License is distributed on an "AS IS" BASIS,
    -013* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -014* See the License for the specific language governing permissions and
    -015* limitations under the License.
    -016*/
    -017
    -018package co.aikar.commands.apachecommonslang;
    -019
    -020import java.lang.reflect.Array;
    -021import java.util.Iterator;
    -022import java.util.Locale;
    -023
    -024/**
    -025 * Select methods copied from Apache Commons to avoid importing entire lib
    -026 * No changes to logic
    -027 */
    -028public class ApacheCommonsLangUtil {
    -029
    -030    /**
    -031     * The empty String {@code ""}.
    -032     * @since 2.0
    -033     */
    -034    public static final String EMPTY = "";
    -035    /**
    -036     * <p>Shallow clones an array returning a typecast result and handling
    -037     * {@code null}.
    -038     *
    -039     * <p>The objects in the array are not cloned, thus there is no special
    -040     * handling for multi-dimensional arrays.
    -041     *
    -042     * <p>This method returns {@code null} for a {@code null} input array.
    -043     *
    -044     * @param <T> the component type of the array
    -045     * @param array  the array to shallow clone, may be {@code null}
    -046     * @return the cloned array, {@code null} if {@code null} input
    -047     */
    -048    public static <T> T[] clone(final T[] array) {
    -049        if (array == null) {
    -050            return null;
    -051        }
    -052        return array.clone();
    -053    }
    -054
    -055    /**
    -056     * <p>Adds all the elements of the given arrays into a new array.
    -057     * <p>The new array contains all of the element of {@code array1} followed
    -058     * by all of the elements {@code array2}. When an array is returned, it is always
    -059     * a new array.
    -060     *
    -061     * <pre>
    -062     * ArrayUtils.addAll(null, null)     = null
    -063     * ArrayUtils.addAll(array1, null)   = cloned copy of array1
    -064     * ArrayUtils.addAll(null, array2)   = cloned copy of array2
    -065     * ArrayUtils.addAll([], [])         = []
    -066     * ArrayUtils.addAll([null], [null]) = [null, null]
    -067     * ArrayUtils.addAll(["a", "b", "c"], ["1", "2", "3"]) = ["a", "b", "c", "1", "2", "3"]
    -068     * </pre>
    -069     *
    -070     * @param <T> the component type of the array
    -071     * @param array1  the first array whose elements are added to the new array, may be {@code null}
    -072     * @param array2  the second array whose elements are added to the new array, may be {@code null}
    -073     * @return The new array, {@code null} if both arrays are {@code null}.
    -074     *      The type of the new array is the type of the first array,
    -075     *      unless the first array is null, in which case the type is the same as the second array.
    -076     * @since 2.1
    -077     * @throws IllegalArgumentException if the array types are incompatible
    -078     */
    -079    public static <T> T[] addAll(final T[] array1, final T... array2) {
    -080        if (array1 == null) {
    -081            return clone(array2);
    -082        } else if (array2 == null) {
    -083            return clone(array1);
    -084        }
    -085        final Class<?> type1 = array1.getClass().getComponentType();
    -086        @SuppressWarnings("unchecked") // OK, because array is of type T
    -087        final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length);
    -088        System.arraycopy(array1, 0, joinedArray, 0, array1.length);
    -089        try {
    -090            System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
    -091        } catch (final ArrayStoreException ase) {
    -092            // Check if problem was due to incompatible types
    -093            /*
    -094             * We do this here, rather than before the copy because:
    -095             * - it would be a wasted check most of the time
    -096             * - safer, in case check turns out to be too strict
    -097             */
    -098            final Class<?> type2 = array2.getClass().getComponentType();
    -099            if (!type1.isAssignableFrom(type2)) {
    -100                throw new IllegalArgumentException("Cannot store " + type2.getName() + " in an array of "
    -101                        + type1.getName(), ase);
    -102            }
    -103            throw ase; // No, so rethrow original
    -104        }
    -105        return joinedArray;
    -106    }
    -107
    -108    //-----------------------------------------------------------------------
    -109    /**
    -110     * <p>Converts all the whitespace separated words in a String into capitalized words,
    -111     * that is each word is made up of a titlecase character and then a series of
    -112     * lowercase characters.  </p>
    -113     *
    -114     * <p>Whitespace is defined by {@link Character#isWhitespace(char)}.
    -115     * A <code>null</code> input String returns <code>null</code>.
    -116     * Capitalization uses the Unicode title case, normally equivalent to
    -117     * upper case.</p>
    -118     *
    -119     * <pre>
    -120     * WordUtils.capitalizeFully(null)        = null
    -121     * WordUtils.capitalizeFully("")          = ""
    -122     * WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
    -123     * </pre>
    -124     *
    -125     * @param str  the String to capitalize, may be null
    -126     * @return capitalized String, <code>null</code> if null String input
    -127     */
    -128    public static String capitalizeFully(final String str) {
    -129        return capitalizeFully(str, null);
    -130    }
    -131
    -132    /**
    -133     * <p>Converts all the delimiter separated words in a String into capitalized words,
    -134     * that is each word is made up of a titlecase character and then a series of
    -135     * lowercase characters. </p>
    -136     *
    -137     * <p>The delimiters represent a set of characters understood to separate words.
    -138     * The first string character and the first non-delimiter character after a
    -139     * delimiter will be capitalized. </p>
    -140     *
    -141     * <p>A <code>null</code> input String returns <code>null</code>.
    -142     * Capitalization uses the Unicode title case, normally equivalent to
    -143     * upper case.</p>
    -144     *
    -145     * <pre>
    -146     * WordUtils.capitalizeFully(null, *)            = null
    -147     * WordUtils.capitalizeFully("", *)              = ""
    -148     * WordUtils.capitalizeFully(*, null)            = *
    -149     * WordUtils.capitalizeFully(*, new char[0])     = *
    -150     * WordUtils.capitalizeFully("i aM.fine", {'.'}) = "I am.Fine"
    -151     * </pre>
    -152     *
    -153     * @param str  the String to capitalize, may be null
    -154     * @param delimiters  set of characters to determine capitalization, null means whitespace
    -155     * @return capitalized String, <code>null</code> if null String input
    -156     * @since 2.1
    -157     */
    -158    public static String capitalizeFully(String str, final char... delimiters) {
    -159        final int delimLen = delimiters == null ? -1 : delimiters.length;
    -160        if (str == null || str.isEmpty() || delimLen == 0) {
    -161            return str;
    -162        }
    -163        str = str.toLowerCase(Locale.ENGLISH);
    -164        return capitalize(str, delimiters);
    -165    }
    -166
    -167    // Capitalizing
    -168    //-----------------------------------------------------------------------
    -169    /**
    -170     * <p>Capitalizes all the whitespace separated words in a String.
    -171     * Only the first character of each word is changed. To convert the
    -172     * rest of each word to lowercase at the same time,
    -173     * use {@link #capitalizeFully(String)}.</p>
    -174     *
    -175     * <p>Whitespace is defined by {@link Character#isWhitespace(char)}.
    -176     * A <code>null</code> input String returns <code>null</code>.
    -177     * Capitalization uses the Unicode title case, normally equivalent to
    -178     * upper case.</p>
    -179     *
    -180     * <pre>
    -181     * WordUtils.capitalize(null)        = null
    -182     * WordUtils.capitalize("")          = ""
    -183     * WordUtils.capitalize("i am FINE") = "I Am FINE"
    -184     * </pre>
    -185     *
    -186     * @param str  the String to capitalize, may be null
    -187     * @return capitalized String, <code>null</code> if null String input
    -188     * @see #capitalizeFully(String)
    -189     */
    -190    public static String capitalize(final String str) {
    -191        return capitalize(str, null);
    -192    }
    -193
    -194    /**
    -195     * <p>Capitalizes all the delimiter separated words in a String.
    -196     * Only the first character of each word is changed. To convert the
    -197     * rest of each word to lowercase at the same time,
    -198     * use {@link #capitalizeFully(String, char[])}.</p>
    -199     *
    -200     * <p>The delimiters represent a set of characters understood to separate words.
    -201     * The first string character and the first non-delimiter character after a
    -202     * delimiter will be capitalized. </p>
    -203     *
    -204     * <p>A <code>null</code> input String returns <code>null</code>.
    -205     * Capitalization uses the Unicode title case, normally equivalent to
    -206     * upper case.</p>
    -207     *
    -208     * <pre>
    -209     * WordUtils.capitalize(null, *)            = null
    -210     * WordUtils.capitalize("", *)              = ""
    -211     * WordUtils.capitalize(*, new char[0])     = *
    -212     * WordUtils.capitalize("i am fine", null)  = "I Am Fine"
    -213     * WordUtils.capitalize("i aM.fine", {'.'}) = "I aM.Fine"
    -214     * </pre>
    -215     *
    -216     * @param str  the String to capitalize, may be null
    -217     * @param delimiters  set of characters to determine capitalization, null means whitespace
    -218     * @return capitalized String, <code>null</code> if null String input
    -219     * @see #capitalizeFully(String)
    -220     * @since 2.1
    -221     */
    -222    public static String capitalize(final String str, final char... delimiters) {
    -223        final int delimLen = delimiters == null ? -1 : delimiters.length;
    -224        if (str == null || str.isEmpty() || delimLen == 0) {
    -225            return str;
    -226        }
    -227        final char[] buffer = str.toCharArray();
    -228        boolean capitalizeNext = true;
    -229        for (int i = 0; i < buffer.length; i++) {
    -230            final char ch = buffer[i];
    -231            if (isDelimiter(ch, delimiters)) {
    -232                capitalizeNext = true;
    -233            } else if (capitalizeNext) {
    -234                buffer[i] = Character.toTitleCase(ch);
    -235                capitalizeNext = false;
    -236            }
    -237        }
    -238        return new String(buffer);
    -239    }
    -240    //-----------------------------------------------------------------------
    -241    /**
    -242     * Is the character a delimiter.
    -243     *
    -244     * @param ch  the character to check
    -245     * @param delimiters  the delimiters
    -246     * @return true if it is a delimiter
    -247     */
    -248    public static boolean isDelimiter(final char ch, final char[] delimiters) {
    -249        if (delimiters == null) {
    -250            return Character.isWhitespace(ch);
    -251        }
    -252        for (final char delimiter : delimiters) {
    -253            if (ch == delimiter) {
    -254                return true;
    -255            }
    -256        }
    -257        return false;
    -258    }
    -259
    -260    // Joining
    -261    //-----------------------------------------------------------------------
    -262    /**
    -263     * <p>Joins the elements of the provided array into a single String
    -264     * containing the provided list of elements.</p>
    -265     *
    -266     * <p>No separator is added to the joined String.
    -267     * Null objects or empty strings within the array are represented by
    -268     * empty strings.</p>
    -269     *
    -270     * <pre>
    -271     * StringUtils.join(null)            = null
    -272     * StringUtils.join([])              = ""
    -273     * StringUtils.join([null])          = ""
    -274     * StringUtils.join(["a", "b", "c"]) = "abc"
    -275     * StringUtils.join([null, "", "a"]) = "a"
    -276     * </pre>
    -277     *
    -278     * @param <T> the specific type of values to join together
    -279     * @param elements  the values to join together, may be null
    -280     * @return the joined String, {@code null} if null array input
    -281     * @since 2.0
    -282     * @since 3.0 Changed signature to use varargs
    -283     */
    -284    @SafeVarargs
    -285    public static <T> String join(final T... elements) {
    -286        return join(elements, null);
    -287    }
    -288
    -289    /**
    -290     * <p>Joins the elements of the provided array into a single String
    -291     * containing the provided list of elements.</p>
    -292     *
    -293     * <p>No delimiter is added before or after the list.
    -294     * Null objects or empty strings within the array are represented by
    -295     * empty strings.</p>
    -296     *
    -297     * <pre>
    -298     * StringUtils.join(null, *)               = null
    -299     * StringUtils.join([], *)                 = ""
    -300     * StringUtils.join([null], *)             = ""
    -301     * StringUtils.join(["a", "b", "c"], ';')  = "a;b;c"
    -302     * StringUtils.join(["a", "b", "c"], null) = "abc"
    -303     * StringUtils.join([null, "", "a"], ';')  = ";;a"
    -304     * </pre>
    -305     *
    -306     * @param array  the array of values to join together, may be null
    -307     * @param separator  the separator character to use
    -308     * @return the joined String, {@code null} if null array input
    -309     * @since 2.0
    -310     */
    -311    public static String join(final Object[] array, final char separator) {
    -312        if (array == null) {
    -313            return null;
    -314        }
    -315        return join(array, separator, 0, array.length);
    -316    }
    -317
    -318    /**
    -319     * <p>
    -320     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -321     * </p>
    -322     *
    -323     * <p>
    -324     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -325     * by empty strings.
    -326     * </p>
    -327     *
    -328     * <pre>
    -329     * StringUtils.join(null, *)               = null
    -330     * StringUtils.join([], *)                 = ""
    -331     * StringUtils.join([null], *)             = ""
    -332     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -333     * StringUtils.join([1, 2, 3], null) = "123"
    -334     * </pre>
    -335     *
    -336     * @param array
    -337     *            the array of values to join together, may be null
    -338     * @param separator
    -339     *            the separator character to use
    -340     * @return the joined String, {@code null} if null array input
    -341     * @since 3.2
    -342     */
    -343    public static String join(final long[] array, final char separator) {
    -344        if (array == null) {
    -345            return null;
    -346        }
    -347        return join(array, separator, 0, array.length);
    -348    }
    -349
    -350    /**
    -351     * <p>
    -352     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -353     * </p>
    -354     *
    -355     * <p>
    -356     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -357     * by empty strings.
    -358     * </p>
    -359     *
    -360     * <pre>
    -361     * StringUtils.join(null, *)               = null
    -362     * StringUtils.join([], *)                 = ""
    -363     * StringUtils.join([null], *)             = ""
    -364     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -365     * StringUtils.join([1, 2, 3], null) = "123"
    -366     * </pre>
    -367     *
    -368     * @param array
    -369     *            the array of values to join together, may be null
    -370     * @param separator
    -371     *            the separator character to use
    -372     * @return the joined String, {@code null} if null array input
    -373     * @since 3.2
    -374     */
    -375    public static String join(final int[] array, final char separator) {
    -376        if (array == null) {
    -377            return null;
    -378        }
    -379        return join(array, separator, 0, array.length);
    -380    }
    -381
    -382    /**
    -383     * <p>
    -384     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -385     * </p>
    -386     *
    -387     * <p>
    -388     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -389     * by empty strings.
    -390     * </p>
    -391     *
    -392     * <pre>
    -393     * StringUtils.join(null, *)               = null
    -394     * StringUtils.join([], *)                 = ""
    -395     * StringUtils.join([null], *)             = ""
    -396     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -397     * StringUtils.join([1, 2, 3], null) = "123"
    -398     * </pre>
    -399     *
    -400     * @param array
    -401     *            the array of values to join together, may be null
    -402     * @param separator
    -403     *            the separator character to use
    -404     * @return the joined String, {@code null} if null array input
    -405     * @since 3.2
    -406     */
    -407    public static String join(final short[] array, final char separator) {
    -408        if (array == null) {
    -409            return null;
    -410        }
    -411        return join(array, separator, 0, array.length);
    -412    }
    -413
    -414    /**
    -415     * <p>
    -416     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -417     * </p>
    -418     *
    -419     * <p>
    -420     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -421     * by empty strings.
    -422     * </p>
    -423     *
    -424     * <pre>
    -425     * StringUtils.join(null, *)               = null
    -426     * StringUtils.join([], *)                 = ""
    -427     * StringUtils.join([null], *)             = ""
    -428     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -429     * StringUtils.join([1, 2, 3], null) = "123"
    -430     * </pre>
    -431     *
    -432     * @param array
    -433     *            the array of values to join together, may be null
    -434     * @param separator
    -435     *            the separator character to use
    -436     * @return the joined String, {@code null} if null array input
    -437     * @since 3.2
    -438     */
    -439    public static String join(final byte[] array, final char separator) {
    -440        if (array == null) {
    -441            return null;
    -442        }
    -443        return join(array, separator, 0, array.length);
    -444    }
    -445
    -446    /**
    -447     * <p>
    -448     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -449     * </p>
    -450     *
    -451     * <p>
    -452     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -453     * by empty strings.
    -454     * </p>
    -455     *
    -456     * <pre>
    -457     * StringUtils.join(null, *)               = null
    -458     * StringUtils.join([], *)                 = ""
    -459     * StringUtils.join([null], *)             = ""
    -460     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -461     * StringUtils.join([1, 2, 3], null) = "123"
    -462     * </pre>
    -463     *
    -464     * @param array
    -465     *            the array of values to join together, may be null
    -466     * @param separator
    -467     *            the separator character to use
    -468     * @return the joined String, {@code null} if null array input
    -469     * @since 3.2
    -470     */
    -471    public static String join(final char[] array, final char separator) {
    -472        if (array == null) {
    -473            return null;
    -474        }
    -475        return join(array, separator, 0, array.length);
    -476    }
    -477
    -478    /**
    -479     * <p>
    -480     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -481     * </p>
    -482     *
    -483     * <p>
    -484     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -485     * by empty strings.
    -486     * </p>
    -487     *
    -488     * <pre>
    -489     * StringUtils.join(null, *)               = null
    -490     * StringUtils.join([], *)                 = ""
    -491     * StringUtils.join([null], *)             = ""
    -492     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -493     * StringUtils.join([1, 2, 3], null) = "123"
    -494     * </pre>
    -495     *
    -496     * @param array
    -497     *            the array of values to join together, may be null
    -498     * @param separator
    -499     *            the separator character to use
    -500     * @return the joined String, {@code null} if null array input
    -501     * @since 3.2
    -502     */
    -503    public static String join(final float[] array, final char separator) {
    -504        if (array == null) {
    -505            return null;
    -506        }
    -507        return join(array, separator, 0, array.length);
    -508    }
    -509
    -510    /**
    -511     * <p>
    -512     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -513     * </p>
    -514     *
    -515     * <p>
    -516     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -517     * by empty strings.
    -518     * </p>
    -519     *
    -520     * <pre>
    -521     * StringUtils.join(null, *)               = null
    -522     * StringUtils.join([], *)                 = ""
    -523     * StringUtils.join([null], *)             = ""
    -524     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -525     * StringUtils.join([1, 2, 3], null) = "123"
    -526     * </pre>
    -527     *
    -528     * @param array
    -529     *            the array of values to join together, may be null
    -530     * @param separator
    -531     *            the separator character to use
    -532     * @return the joined String, {@code null} if null array input
    -533     * @since 3.2
    -534     */
    -535    public static String join(final double[] array, final char separator) {
    -536        if (array == null) {
    -537            return null;
    -538        }
    -539        return join(array, separator, 0, array.length);
    -540    }
    -541
    -542
    -543    /**
    -544     * <p>Joins the elements of the provided array into a single String
    -545     * containing the provided list of elements.</p>
    -546     *
    -547     * <p>No delimiter is added before or after the list.
    -548     * Null objects or empty strings within the array are represented by
    -549     * empty strings.</p>
    -550     *
    -551     * <pre>
    -552     * StringUtils.join(null, *)               = null
    -553     * StringUtils.join([], *)                 = ""
    -554     * StringUtils.join([null], *)             = ""
    -555     * StringUtils.join(["a", "b", "c"], ';')  = "a;b;c"
    -556     * StringUtils.join(["a", "b", "c"], null) = "abc"
    -557     * StringUtils.join([null, "", "a"], ';')  = ";;a"
    -558     * </pre>
    -559     *
    -560     * @param array  the array of values to join together, may be null
    -561     * @param separator  the separator character to use
    -562     * @param startIndex the first index to start joining from.  It is
    -563     * an error to pass in an end index past the end of the array
    -564     * @param endIndex the index to stop joining from (exclusive). It is
    -565     * an error to pass in an end index past the end of the array
    -566     * @return the joined String, {@code null} if null array input
    -567     * @since 2.0
    -568     */
    -569    public static String join(final Object[] array, final char separator, final int startIndex, final int endIndex) {
    -570        if (array == null) {
    -571            return null;
    -572        }
    -573        final int noOfItems = endIndex - startIndex;
    -574        if (noOfItems <= 0) {
    -575            return EMPTY;
    -576        }
    -577        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -578        for (int i = startIndex; i < endIndex; i++) {
    -579            if (i > startIndex) {
    -580                buf.append(separator);
    -581            }
    -582            if (array[i] != null) {
    -583                buf.append(array[i]);
    -584            }
    -585        }
    -586        return buf.toString();
    -587    }
    -588
    -589    /**
    -590     * <p>
    -591     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -592     * </p>
    -593     *
    -594     * <p>
    -595     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -596     * by empty strings.
    -597     * </p>
    -598     *
    -599     * <pre>
    -600     * StringUtils.join(null, *)               = null
    -601     * StringUtils.join([], *)                 = ""
    -602     * StringUtils.join([null], *)             = ""
    -603     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -604     * StringUtils.join([1, 2, 3], null) = "123"
    -605     * </pre>
    -606     *
    -607     * @param array
    -608     *            the array of values to join together, may be null
    -609     * @param separator
    -610     *            the separator character to use
    -611     * @param startIndex
    -612     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -613     *            array
    -614     * @param endIndex
    -615     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -616     *            the array
    -617     * @return the joined String, {@code null} if null array input
    -618     * @since 3.2
    -619     */
    -620    public static String join(final long[] array, final char separator, final int startIndex, final int endIndex) {
    -621        if (array == null) {
    -622            return null;
    -623        }
    -624        final int noOfItems = endIndex - startIndex;
    -625        if (noOfItems <= 0) {
    -626            return EMPTY;
    -627        }
    -628        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -629        for (int i = startIndex; i < endIndex; i++) {
    -630            if (i > startIndex) {
    -631                buf.append(separator);
    -632            }
    -633            buf.append(array[i]);
    -634        }
    -635        return buf.toString();
    -636    }
    -637
    -638    /**
    -639     * <p>
    -640     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -641     * </p>
    -642     *
    -643     * <p>
    -644     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -645     * by empty strings.
    -646     * </p>
    -647     *
    -648     * <pre>
    -649     * StringUtils.join(null, *)               = null
    -650     * StringUtils.join([], *)                 = ""
    -651     * StringUtils.join([null], *)             = ""
    -652     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -653     * StringUtils.join([1, 2, 3], null) = "123"
    -654     * </pre>
    -655     *
    -656     * @param array
    -657     *            the array of values to join together, may be null
    -658     * @param separator
    -659     *            the separator character to use
    -660     * @param startIndex
    -661     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -662     *            array
    -663     * @param endIndex
    -664     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -665     *            the array
    -666     * @return the joined String, {@code null} if null array input
    -667     * @since 3.2
    -668     */
    -669    public static String join(final int[] array, final char separator, final int startIndex, final int endIndex) {
    -670        if (array == null) {
    -671            return null;
    -672        }
    -673        final int noOfItems = endIndex - startIndex;
    -674        if (noOfItems <= 0) {
    -675            return EMPTY;
    -676        }
    -677        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -678        for (int i = startIndex; i < endIndex; i++) {
    -679            if (i > startIndex) {
    -680                buf.append(separator);
    -681            }
    -682            buf.append(array[i]);
    -683        }
    -684        return buf.toString();
    -685    }
    -686
    -687    /**
    -688     * <p>
    -689     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -690     * </p>
    -691     *
    -692     * <p>
    -693     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -694     * by empty strings.
    -695     * </p>
    -696     *
    -697     * <pre>
    -698     * StringUtils.join(null, *)               = null
    -699     * StringUtils.join([], *)                 = ""
    -700     * StringUtils.join([null], *)             = ""
    -701     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -702     * StringUtils.join([1, 2, 3], null) = "123"
    -703     * </pre>
    -704     *
    -705     * @param array
    -706     *            the array of values to join together, may be null
    -707     * @param separator
    -708     *            the separator character to use
    -709     * @param startIndex
    -710     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -711     *            array
    -712     * @param endIndex
    -713     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -714     *            the array
    -715     * @return the joined String, {@code null} if null array input
    -716     * @since 3.2
    -717     */
    -718    public static String join(final byte[] array, final char separator, final int startIndex, final int endIndex) {
    -719        if (array == null) {
    -720            return null;
    -721        }
    -722        final int noOfItems = endIndex - startIndex;
    -723        if (noOfItems <= 0) {
    -724            return EMPTY;
    -725        }
    -726        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -727        for (int i = startIndex; i < endIndex; i++) {
    -728            if (i > startIndex) {
    -729                buf.append(separator);
    -730            }
    -731            buf.append(array[i]);
    -732        }
    -733        return buf.toString();
    -734    }
    -735
    -736    /**
    -737     * <p>
    -738     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -739     * </p>
    -740     *
    -741     * <p>
    -742     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -743     * by empty strings.
    -744     * </p>
    -745     *
    -746     * <pre>
    -747     * StringUtils.join(null, *)               = null
    -748     * StringUtils.join([], *)                 = ""
    -749     * StringUtils.join([null], *)             = ""
    -750     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -751     * StringUtils.join([1, 2, 3], null) = "123"
    -752     * </pre>
    -753     *
    -754     * @param array
    -755     *            the array of values to join together, may be null
    -756     * @param separator
    -757     *            the separator character to use
    -758     * @param startIndex
    -759     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -760     *            array
    -761     * @param endIndex
    -762     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -763     *            the array
    -764     * @return the joined String, {@code null} if null array input
    -765     * @since 3.2
    -766     */
    -767    public static String join(final short[] array, final char separator, final int startIndex, final int endIndex) {
    -768        if (array == null) {
    -769            return null;
    -770        }
    -771        final int noOfItems = endIndex - startIndex;
    -772        if (noOfItems <= 0) {
    -773            return EMPTY;
    -774        }
    -775        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -776        for (int i = startIndex; i < endIndex; i++) {
    -777            if (i > startIndex) {
    -778                buf.append(separator);
    -779            }
    -780            buf.append(array[i]);
    -781        }
    -782        return buf.toString();
    -783    }
    -784
    -785    /**
    -786     * <p>
    -787     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -788     * </p>
    -789     *
    -790     * <p>
    -791     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -792     * by empty strings.
    -793     * </p>
    -794     *
    -795     * <pre>
    -796     * StringUtils.join(null, *)               = null
    -797     * StringUtils.join([], *)                 = ""
    -798     * StringUtils.join([null], *)             = ""
    -799     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -800     * StringUtils.join([1, 2, 3], null) = "123"
    -801     * </pre>
    -802     *
    -803     * @param array
    -804     *            the array of values to join together, may be null
    -805     * @param separator
    -806     *            the separator character to use
    -807     * @param startIndex
    -808     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -809     *            array
    -810     * @param endIndex
    -811     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -812     *            the array
    -813     * @return the joined String, {@code null} if null array input
    -814     * @since 3.2
    -815     */
    -816    public static String join(final char[] array, final char separator, final int startIndex, final int endIndex) {
    -817        if (array == null) {
    -818            return null;
    -819        }
    -820        final int noOfItems = endIndex - startIndex;
    -821        if (noOfItems <= 0) {
    -822            return EMPTY;
    -823        }
    -824        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -825        for (int i = startIndex; i < endIndex; i++) {
    -826            if (i > startIndex) {
    -827                buf.append(separator);
    -828            }
    -829            buf.append(array[i]);
    -830        }
    -831        return buf.toString();
    -832    }
    -833
    -834    /**
    -835     * <p>
    -836     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -837     * </p>
    -838     *
    -839     * <p>
    -840     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -841     * by empty strings.
    -842     * </p>
    -843     *
    -844     * <pre>
    -845     * StringUtils.join(null, *)               = null
    -846     * StringUtils.join([], *)                 = ""
    -847     * StringUtils.join([null], *)             = ""
    -848     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -849     * StringUtils.join([1, 2, 3], null) = "123"
    -850     * </pre>
    -851     *
    -852     * @param array
    -853     *            the array of values to join together, may be null
    -854     * @param separator
    -855     *            the separator character to use
    -856     * @param startIndex
    -857     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -858     *            array
    -859     * @param endIndex
    -860     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -861     *            the array
    -862     * @return the joined String, {@code null} if null array input
    -863     * @since 3.2
    -864     */
    -865    public static String join(final double[] array, final char separator, final int startIndex, final int endIndex) {
    -866        if (array == null) {
    -867            return null;
    -868        }
    -869        final int noOfItems = endIndex - startIndex;
    -870        if (noOfItems <= 0) {
    -871            return EMPTY;
    -872        }
    -873        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -874        for (int i = startIndex; i < endIndex; i++) {
    -875            if (i > startIndex) {
    -876                buf.append(separator);
    -877            }
    -878            buf.append(array[i]);
    -879        }
    -880        return buf.toString();
    -881    }
    -882
    -883    /**
    -884     * <p>
    -885     * Joins the elements of the provided array into a single String containing the provided list of elements.
    -886     * </p>
    -887     *
    -888     * <p>
    -889     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    -890     * by empty strings.
    -891     * </p>
    -892     *
    -893     * <pre>
    -894     * StringUtils.join(null, *)               = null
    -895     * StringUtils.join([], *)                 = ""
    -896     * StringUtils.join([null], *)             = ""
    -897     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    -898     * StringUtils.join([1, 2, 3], null) = "123"
    -899     * </pre>
    -900     *
    -901     * @param array
    -902     *            the array of values to join together, may be null
    -903     * @param separator
    -904     *            the separator character to use
    -905     * @param startIndex
    -906     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    -907     *            array
    -908     * @param endIndex
    -909     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    -910     *            the array
    -911     * @return the joined String, {@code null} if null array input
    -912     * @since 3.2
    -913     */
    -914    public static String join(final float[] array, final char separator, final int startIndex, final int endIndex) {
    -915        if (array == null) {
    -916            return null;
    -917        }
    -918        final int noOfItems = endIndex - startIndex;
    -919        if (noOfItems <= 0) {
    -920            return EMPTY;
    -921        }
    -922        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -923        for (int i = startIndex; i < endIndex; i++) {
    -924            if (i > startIndex) {
    -925                buf.append(separator);
    -926            }
    -927            buf.append(array[i]);
    -928        }
    -929        return buf.toString();
    -930    }
    -931
    -932
    -933    /**
    -934     * <p>Joins the elements of the provided array into a single String
    -935     * containing the provided list of elements.</p>
    -936     *
    -937     * <p>No delimiter is added before or after the list.
    -938     * A {@code null} separator is the same as an empty String ("").
    -939     * Null objects or empty strings within the array are represented by
    -940     * empty strings.</p>
    -941     *
    -942     * <pre>
    -943     * StringUtils.join(null, *)                = null
    -944     * StringUtils.join([], *)                  = ""
    -945     * StringUtils.join([null], *)              = ""
    -946     * StringUtils.join(["a", "b", "c"], "--")  = "a--b--c"
    -947     * StringUtils.join(["a", "b", "c"], null)  = "abc"
    -948     * StringUtils.join(["a", "b", "c"], "")    = "abc"
    -949     * StringUtils.join([null, "", "a"], ',')   = ",,a"
    -950     * </pre>
    -951     *
    -952     * @param array  the array of values to join together, may be null
    -953     * @param separator  the separator character to use, null treated as ""
    -954     * @return the joined String, {@code null} if null array input
    -955     */
    -956    public static String join(final Object[] array, final String separator) {
    -957        if (array == null) {
    -958            return null;
    -959        }
    -960        return join(array, separator, 0, array.length);
    -961    }
    -962
    -963    /**
    -964     * <p>Joins the elements of the provided array into a single String
    -965     * containing the provided list of elements.</p>
    -966     *
    -967     * <p>No delimiter is added before or after the list.
    -968     * A {@code null} separator is the same as an empty String ("").
    -969     * Null objects or empty strings within the array are represented by
    -970     * empty strings.</p>
    -971     *
    -972     * <pre>
    -973     * StringUtils.join(null, *, *, *)                = null
    -974     * StringUtils.join([], *, *, *)                  = ""
    -975     * StringUtils.join([null], *, *, *)              = ""
    -976     * StringUtils.join(["a", "b", "c"], "--", 0, 3)  = "a--b--c"
    -977     * StringUtils.join(["a", "b", "c"], "--", 1, 3)  = "b--c"
    -978     * StringUtils.join(["a", "b", "c"], "--", 2, 3)  = "c"
    -979     * StringUtils.join(["a", "b", "c"], "--", 2, 2)  = ""
    -980     * StringUtils.join(["a", "b", "c"], null, 0, 3)  = "abc"
    -981     * StringUtils.join(["a", "b", "c"], "", 0, 3)    = "abc"
    -982     * StringUtils.join([null, "", "a"], ',', 0, 3)   = ",,a"
    -983     * </pre>
    -984     *
    -985     * @param array  the array of values to join together, may be null
    -986     * @param separator  the separator character to use, null treated as ""
    -987     * @param startIndex the first index to start joining from.
    -988     * @param endIndex the index to stop joining from (exclusive).
    -989     * @return the joined String, {@code null} if null array input; or the empty string
    -990     * if {@code endIndex - startIndex <= 0}. The number of joined entries is given by
    -991     * {@code endIndex - startIndex}
    -992     * @throws ArrayIndexOutOfBoundsException ife<br>
    -993     * {@code startIndex < 0} or <br>
    -994     * {@code startIndex >= array.length()} or <br>
    -995     * {@code endIndex < 0} or <br>
    -996     * {@code endIndex > array.length()}
    -997     */
    -998    public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
    -999        if (array == null) {
    -1000            return null;
    -1001        }
    -1002        if (separator == null) {
    -1003            separator = EMPTY;
    -1004        }
    -1005
    -1006        // endIndex - startIndex > 0:   Len = NofStrings *(len(firstString) + len(separator))
    -1007        //           (Assuming that all Strings are roughly equally long)
    -1008        final int noOfItems = endIndex - startIndex;
    -1009        if (noOfItems <= 0) {
    -1010            return EMPTY;
    -1011        }
    -1012
    -1013        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    -1014
    -1015        for (int i = startIndex; i < endIndex; i++) {
    -1016            if (i > startIndex) {
    -1017                buf.append(separator);
    -1018            }
    -1019            if (array[i] != null) {
    -1020                buf.append(array[i]);
    -1021            }
    -1022        }
    -1023        return buf.toString();
    -1024    }
    -1025
    -1026    /**
    -1027     * <p>Joins the elements of the provided {@code Iterator} into
    -1028     * a single String containing the provided elements.</p>
    -1029     *
    -1030     * <p>No delimiter is added before or after the list. Null objects or empty
    -1031     * strings within the iteration are represented by empty strings.</p>
    -1032     *
    -1033     * <p>See the examples here: {@link #join(Object[],char)}. </p>
    -1034     *
    -1035     * @param iterator  the {@code Iterator} of values to join together, may be null
    -1036     * @param separator  the separator character to use
    -1037     * @return the joined String, {@code null} if null iterator input
    -1038     * @since 2.0
    -1039     */
    -1040    public static String join(final Iterator<?> iterator, final char separator) {
    -1041
    -1042        // handle null, zero and one elements before building a buffer
    -1043        if (iterator == null) {
    -1044            return null;
    -1045        }
    -1046        if (!iterator.hasNext()) {
    -1047            return EMPTY;
    -1048        }
    -1049        final Object first = iterator.next();
    -1050        if (!iterator.hasNext()) {
    -1051            final String result = first != null ? first.toString() : "";
    -1052            return result;
    -1053        }
    -1054
    -1055        // two or more elements
    -1056        final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
    -1057        if (first != null) {
    -1058            buf.append(first);
    -1059        }
    -1060
    -1061        while (iterator.hasNext()) {
    -1062            buf.append(separator);
    -1063            final Object obj = iterator.next();
    -1064            if (obj != null) {
    -1065                buf.append(obj);
    -1066            }
    -1067        }
    -1068
    -1069        return buf.toString();
    -1070    }
    -1071
    -1072    /**
    -1073     * <p>Joins the elements of the provided {@code Iterator} into
    -1074     * a single String containing the provided elements.</p>
    -1075     *
    -1076     * <p>No delimiter is added before or after the list.
    -1077     * A {@code null} separator is the same as an empty String ("").</p>
    -1078     *
    -1079     * <p>See the examples here: {@link #join(Object[],String)}. </p>
    -1080     *
    -1081     * @param iterator  the {@code Iterator} of values to join together, may be null
    -1082     * @param separator  the separator character to use, null treated as ""
    -1083     * @return the joined String, {@code null} if null iterator input
    -1084     */
    -1085    public static String join(final Iterator<?> iterator, final String separator) {
    -1086
    -1087        // handle null, zero and one elements before building a buffer
    -1088        if (iterator == null) {
    -1089            return null;
    -1090        }
    -1091        if (!iterator.hasNext()) {
    -1092            return EMPTY;
    -1093        }
    -1094        final Object first = iterator.next();
    -1095        if (!iterator.hasNext()) {
    -1096            final String result = first != null ? first.toString() : "";
    -1097            return result;
    -1098        }
    -1099
    -1100        // two or more elements
    -1101        final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
    -1102        if (first != null) {
    -1103            buf.append(first);
    -1104        }
    -1105
    -1106        while (iterator.hasNext()) {
    -1107            if (separator != null) {
    -1108                buf.append(separator);
    -1109            }
    -1110            final Object obj = iterator.next();
    -1111            if (obj != null) {
    -1112                buf.append(obj);
    -1113            }
    -1114        }
    -1115        return buf.toString();
    -1116    }
    -1117
    -1118    /**
    -1119     * <p>Joins the elements of the provided {@code Iterable} into
    -1120     * a single String containing the provided elements.</p>
    -1121     *
    -1122     * <p>No delimiter is added before or after the list. Null objects or empty
    -1123     * strings within the iteration are represented by empty strings.</p>
    -1124     *
    -1125     * <p>See the examples here: {@link #join(Object[],char)}. </p>
    -1126     *
    -1127     * @param iterable  the {@code Iterable} providing the values to join together, may be null
    -1128     * @param separator  the separator character to use
    -1129     * @return the joined String, {@code null} if null iterator input
    -1130     * @since 2.3
    -1131     */
    -1132    public static String join(final Iterable<?> iterable, final char separator) {
    -1133        if (iterable == null) {
    -1134            return null;
    -1135        }
    -1136        return join(iterable.iterator(), separator);
    -1137    }
    -1138
    -1139    /**
    -1140     * <p>Joins the elements of the provided {@code Iterable} into
    -1141     * a single String containing the provided elements.</p>
    -1142     *
    -1143     * <p>No delimiter is added before or after the list.
    -1144     * A {@code null} separator is the same as an empty String ("").</p>
    -1145     *
    -1146     * <p>See the examples here: {@link #join(Object[],String)}. </p>
    -1147     *
    -1148     * @param iterable  the {@code Iterable} providing the values to join together, may be null
    -1149     * @param separator  the separator character to use, null treated as ""
    -1150     * @return the joined String, {@code null} if null iterator input
    -1151     * @since 2.3
    -1152     */
    -1153    public static String join(final Iterable<?> iterable, final String separator) {
    -1154        if (iterable == null) {
    -1155            return null;
    -1156        }
    -1157        return join(iterable.iterator(), separator);
    -1158    }
    -1159
    -1160
    -1161    /**
    -1162     * <p>Checks if the CharSequence contains only Unicode digits.
    -1163     * A decimal point is not a Unicode digit and returns false.</p>
    -1164     *
    -1165     * <p>{@code null} will return {@code false}.
    -1166     * An empty CharSequence (length()=0) will return {@code false}.</p>
    -1167     *
    -1168     * <p>Note that the method does not allow for a leading sign, either positive or negative.
    -1169     * Also, if a String passes the numeric test, it may still generate a NumberFormatException
    -1170     * when parsed by Integer.parseInt or Long.parseLong, e.g. if the value is outside the range
    -1171     * for int or long respectively.</p>
    -1172     *
    -1173     * <pre>
    -1174     * StringUtils.isNumeric(null)   = false
    -1175     * StringUtils.isNumeric("")     = false
    -1176     * StringUtils.isNumeric("  ")   = false
    -1177     * StringUtils.isNumeric("123")  = true
    -1178     * StringUtils.isNumeric("\u0967\u0968\u0969")  = true
    -1179     * StringUtils.isNumeric("12 3") = false
    -1180     * StringUtils.isNumeric("ab2c") = false
    -1181     * StringUtils.isNumeric("12-3") = false
    -1182     * StringUtils.isNumeric("12.3") = false
    -1183     * StringUtils.isNumeric("-123") = false
    -1184     * StringUtils.isNumeric("+123") = false
    -1185     * </pre>
    -1186     *
    -1187     * @param cs  the CharSequence to check, may be null
    -1188     * @return {@code true} if only contains digits, and is non-null
    -1189     * @since 3.0 Changed signature from isNumeric(String) to isNumeric(CharSequence)
    -1190     * @since 3.0 Changed "" to return false and not true
    -1191     */
    -1192    public static boolean isNumeric(final CharSequence cs) {
    -1193        if (cs == null || cs.length() == 0) {
    -1194            return false;
    -1195        }
    -1196        final int sz = cs.length();
    -1197        for (int i = 0; i < sz; i++) {
    -1198            if (!Character.isDigit(cs.charAt(i))) {
    -1199                return false;
    -1200            }
    -1201        }
    -1202        return true;
    -1203    }
    -1204
    -1205
    -1206    // startsWith
    -1207    //-----------------------------------------------------------------------
    -1208
    -1209    /**
    -1210     * <p>Check if a CharSequence starts with a specified prefix.</p>
    -1211     *
    -1212     * <p>{@code null}s are handled without exceptions. Two {@code null}
    -1213     * references are considered to be equal. The comparison is case sensitive.</p>
    -1214     *
    -1215     * <pre>
    -1216     * StringUtils.startsWith(null, null)      = true
    -1217     * StringUtils.startsWith(null, "abc")     = false
    -1218     * StringUtils.startsWith("abcdef", null)  = false
    -1219     * StringUtils.startsWith("abcdef", "abc") = true
    -1220     * StringUtils.startsWith("ABCDEF", "abc") = false
    -1221     * </pre>
    -1222     *
    -1223     * @see java.lang.String#startsWith(String)
    -1224     * @param str  the CharSequence to check, may be null
    -1225     * @param prefix the prefix to find, may be null
    -1226     * @return {@code true} if the CharSequence starts with the prefix, case sensitive, or
    -1227     *  both {@code null}
    -1228     * @since 2.4
    -1229     * @since 3.0 Changed signature from startsWith(String, String) to startsWith(CharSequence, CharSequence)
    -1230     */
    -1231    public static boolean startsWith(final CharSequence str, final CharSequence prefix) {
    -1232        return startsWith(str, prefix, false);
    -1233    }
    -1234
    -1235    /**
    -1236     * <p>Case insensitive check if a CharSequence starts with a specified prefix.</p>
    -1237     *
    -1238     * <p>{@code null}s are handled without exceptions. Two {@code null}
    -1239     * references are considered to be equal. The comparison is case insensitive.</p>
    -1240     *
    -1241     * <pre>
    -1242     * StringUtils.startsWithIgnoreCase(null, null)      = true
    -1243     * StringUtils.startsWithIgnoreCase(null, "abc")     = false
    -1244     * StringUtils.startsWithIgnoreCase("abcdef", null)  = false
    -1245     * StringUtils.startsWithIgnoreCase("abcdef", "abc") = true
    -1246     * StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true
    -1247     * </pre>
    -1248     *
    -1249     * @see java.lang.String#startsWith(String)
    -1250     * @param str  the CharSequence to check, may be null
    -1251     * @param prefix the prefix to find, may be null
    -1252     * @return {@code true} if the CharSequence starts with the prefix, case insensitive, or
    -1253     *  both {@code null}
    -1254     * @since 2.4
    -1255     * @since 3.0 Changed signature from startsWithIgnoreCase(String, String) to startsWithIgnoreCase(CharSequence, CharSequence)
    -1256     */
    -1257    public static boolean startsWithIgnoreCase(final CharSequence str, final CharSequence prefix) {
    -1258        return startsWith(str, prefix, true);
    -1259    }
    -1260
    -1261    /**
    -1262     * <p>Check if a CharSequence starts with a specified prefix (optionally case insensitive).</p>
    -1263     *
    -1264     * @see java.lang.String#startsWith(String)
    -1265     * @param str  the CharSequence to check, may be null
    -1266     * @param prefix the prefix to find, may be null
    -1267     * @param ignoreCase indicates whether the compare should ignore case
    -1268     *  (case insensitive) or not.
    -1269     * @return {@code true} if the CharSequence starts with the prefix or
    -1270     *  both {@code null}
    -1271     */
    -1272    private static boolean startsWith(final CharSequence str, final CharSequence prefix, final boolean ignoreCase) {
    -1273        if (str == null || prefix == null) {
    -1274            return str == null && prefix == null;
    -1275        }
    -1276        if (prefix.length() > str.length()) {
    -1277            return false;
    -1278        }
    -1279        return regionMatches(str, ignoreCase, 0, prefix, 0, prefix.length());
    -1280    }
    -1281
    -1282    /**
    -1283     * Green implementation of regionMatches.
    -1284     *
    -1285     * @param cs the {@code CharSequence} to be processed
    -1286     * @param ignoreCase whether or not to be case insensitive
    -1287     * @param thisStart the index to start on the {@code cs} CharSequence
    -1288     * @param substring the {@code CharSequence} to be looked for
    -1289     * @param start the index to start on the {@code substring} CharSequence
    -1290     * @param length character length of the region
    -1291     * @return whether the region matched
    -1292     */
    -1293    static boolean regionMatches(final CharSequence cs, final boolean ignoreCase, final int thisStart,
    -1294                                 final CharSequence substring, final int start, final int length)    {
    -1295        if (cs instanceof String && substring instanceof String) {
    -1296            return ((String) cs).regionMatches(ignoreCase, thisStart, (String) substring, start, length);
    -1297        }
    -1298        int index1 = thisStart;
    -1299        int index2 = start;
    -1300        int tmpLen = length;
    -1301
    -1302        // Extract these first so we detect NPEs the same as the java.lang.String version
    -1303        final int srcLen = cs.length() - thisStart;
    -1304        final int otherLen = substring.length() - start;
    -1305
    -1306        // Check for invalid parameters
    -1307        if (thisStart < 0 || start < 0 || length < 0) {
    -1308            return false;
    -1309        }
    -1310
    -1311        // Check that the regions are long enough
    -1312        if (srcLen < length || otherLen < length) {
    -1313            return false;
    -1314        }
    -1315
    -1316        while (tmpLen-- > 0) {
    -1317            final char c1 = cs.charAt(index1++);
    -1318            final char c2 = substring.charAt(index2++);
    -1319
    -1320            if (c1 == c2) {
    -1321                continue;
    -1322            }
    -1323
    -1324            if (!ignoreCase) {
    -1325                return false;
    -1326            }
    -1327
    -1328            // The same check as in String.regionMatches():
    -1329            if (Character.toUpperCase(c1) != Character.toUpperCase(c2)
    -1330                    && Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
    -1331                return false;
    -1332            }
    -1333        }
    -1334
    -1335        return true;
    -1336    }
    -1337
    -1338    /**
    -1339     * The index value when an element is not found in a list or array: <code>-1</code>.
    -1340     * This value is returned by methods in this class and can also be used in comparisons with values returned by
    -1341     * various method from {@link java.util.List}.
    -1342     */
    -1343    public static final int INDEX_NOT_FOUND = -1;
    -1344
    -1345    // IndexOf search
    -1346    // ----------------------------------------------------------------------
    -1347
    -1348    // Object IndexOf
    -1349    //-----------------------------------------------------------------------
    -1350    /**
    -1351     * <p>Finds the index of the given object in the array.</p>
    -1352     *
    -1353     * <p>This method returns {@link #INDEX_NOT_FOUND} (<code>-1</code>) for a <code>null</code> input array.</p>
    -1354     *
    -1355     * @param array  the array to search through for the object, may be <code>null</code>
    -1356     * @param objectToFind  the object to find, may be <code>null</code>
    -1357     * @return the index of the object within the array,
    -1358     *  {@link #INDEX_NOT_FOUND} (<code>-1</code>) if not found or <code>null</code> array input
    -1359     */
    -1360    public static int indexOf(Object[] array, Object objectToFind) {
    -1361        return indexOf(array, objectToFind, 0);
    -1362    }
    -1363
    -1364    /**
    -1365     * <p>Finds the index of the given object in the array starting at the given index.</p>
    -1366     *
    -1367     * <p>This method returns {@link #INDEX_NOT_FOUND} (<code>-1</code>) for a <code>null</code> input array.</p>
    -1368     *
    -1369     * <p>A negative startIndex is treated as zero. A startIndex larger than the array
    -1370     * length will return {@link #INDEX_NOT_FOUND} (<code>-1</code>).</p>
    -1371     *
    -1372     * @param array  the array to search through for the object, may be <code>null</code>
    -1373     * @param objectToFind  the object to find, may be <code>null</code>
    -1374     * @param startIndex  the index to start searching at
    -1375     * @return the index of the object within the array starting at the index,
    -1376     *  {@link #INDEX_NOT_FOUND} (<code>-1</code>) if not found or <code>null</code> array input
    -1377     */
    -1378    public static int indexOf(Object[] array, Object objectToFind, int startIndex) {
    -1379        if (array == null) {
    -1380            return INDEX_NOT_FOUND;
    -1381        }
    -1382        if (startIndex < 0) {
    -1383            startIndex = 0;
    -1384        }
    -1385        if (objectToFind == null) {
    -1386            for (int i = startIndex; i < array.length; i++) {
    -1387                if (array[i] == null) {
    -1388                    return i;
    -1389                }
    -1390            }
    -1391        } else {
    -1392            for (int i = startIndex; i < array.length; i++) {
    -1393                if (objectToFind.equals(array[i])) {
    -1394                    return i;
    -1395                }
    -1396            }
    -1397        }
    -1398        return INDEX_NOT_FOUND;
    -1399    }
    -1400}
    +
    +
    001/*
    +002* Licensed to the Apache Software Foundation (ASF) under one or more
    +003* contributor license agreements.  See the NOTICE file distributed with
    +004* this work for additional information regarding copyright ownership.
    +005* The ASF licenses this file to You under the Apache License, Version 2.0
    +006* (the "License"); you may not use this file except in compliance with
    +007* the License.  You may obtain a copy of the License at
    +008*
    +009*      http://www.apache.org/licenses/LICENSE-2.0
    +010*
    +011* Unless required by applicable law or agreed to in writing, software
    +012* distributed under the License is distributed on an "AS IS" BASIS,
    +013* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +014* See the License for the specific language governing permissions and
    +015* limitations under the License.
    +016*/
    +017
    +018package co.aikar.commands.apachecommonslang;
    +019
    +020import java.lang.reflect.Array;
    +021import java.util.Iterator;
    +022import java.util.Locale;
    +023
    +024/**
    +025 * Select methods copied from Apache Commons to avoid importing entire lib
    +026 * No changes to logic
    +027 */
    +028public class ApacheCommonsLangUtil {
    +029
    +030    /**
    +031     * The empty String {@code ""}.
    +032     * @since 2.0
    +033     */
    +034    public static final String EMPTY = "";
    +035    /**
    +036     * <p>Shallow clones an array returning a typecast result and handling
    +037     * {@code null}.
    +038     *
    +039     * <p>The objects in the array are not cloned, thus there is no special
    +040     * handling for multi-dimensional arrays.
    +041     *
    +042     * <p>This method returns {@code null} for a {@code null} input array.
    +043     *
    +044     * @param <T> the component type of the array
    +045     * @param array  the array to shallow clone, may be {@code null}
    +046     * @return the cloned array, {@code null} if {@code null} input
    +047     */
    +048    public static <T> T[] clone(final T[] array) {
    +049        if (array == null) {
    +050            return null;
    +051        }
    +052        return array.clone();
    +053    }
    +054
    +055    /**
    +056     * <p>Adds all the elements of the given arrays into a new array.
    +057     * <p>The new array contains all of the element of {@code array1} followed
    +058     * by all of the elements {@code array2}. When an array is returned, it is always
    +059     * a new array.
    +060     *
    +061     * <pre>
    +062     * ArrayUtils.addAll(null, null)     = null
    +063     * ArrayUtils.addAll(array1, null)   = cloned copy of array1
    +064     * ArrayUtils.addAll(null, array2)   = cloned copy of array2
    +065     * ArrayUtils.addAll([], [])         = []
    +066     * ArrayUtils.addAll([null], [null]) = [null, null]
    +067     * ArrayUtils.addAll(["a", "b", "c"], ["1", "2", "3"]) = ["a", "b", "c", "1", "2", "3"]
    +068     * </pre>
    +069     *
    +070     * @param <T> the component type of the array
    +071     * @param array1  the first array whose elements are added to the new array, may be {@code null}
    +072     * @param array2  the second array whose elements are added to the new array, may be {@code null}
    +073     * @return The new array, {@code null} if both arrays are {@code null}.
    +074     *      The type of the new array is the type of the first array,
    +075     *      unless the first array is null, in which case the type is the same as the second array.
    +076     * @since 2.1
    +077     * @throws IllegalArgumentException if the array types are incompatible
    +078     */
    +079    public static <T> T[] addAll(final T[] array1, final T... array2) {
    +080        if (array1 == null) {
    +081            return clone(array2);
    +082        } else if (array2 == null) {
    +083            return clone(array1);
    +084        }
    +085        final Class<?> type1 = array1.getClass().getComponentType();
    +086        @SuppressWarnings("unchecked") // OK, because array is of type T
    +087        final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length);
    +088        System.arraycopy(array1, 0, joinedArray, 0, array1.length);
    +089        try {
    +090            System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
    +091        } catch (final ArrayStoreException ase) {
    +092            // Check if problem was due to incompatible types
    +093            /*
    +094             * We do this here, rather than before the copy because:
    +095             * - it would be a wasted check most of the time
    +096             * - safer, in case check turns out to be too strict
    +097             */
    +098            final Class<?> type2 = array2.getClass().getComponentType();
    +099            if (!type1.isAssignableFrom(type2)) {
    +100                throw new IllegalArgumentException("Cannot store " + type2.getName() + " in an array of "
    +101                        + type1.getName(), ase);
    +102            }
    +103            throw ase; // No, so rethrow original
    +104        }
    +105        return joinedArray;
    +106    }
    +107
    +108    //-----------------------------------------------------------------------
    +109    /**
    +110     * <p>Converts all the whitespace separated words in a String into capitalized words,
    +111     * that is each word is made up of a titlecase character and then a series of
    +112     * lowercase characters.  </p>
    +113     *
    +114     * <p>Whitespace is defined by {@link Character#isWhitespace(char)}.
    +115     * A <code>null</code> input String returns <code>null</code>.
    +116     * Capitalization uses the Unicode title case, normally equivalent to
    +117     * upper case.</p>
    +118     *
    +119     * <pre>
    +120     * WordUtils.capitalizeFully(null)        = null
    +121     * WordUtils.capitalizeFully("")          = ""
    +122     * WordUtils.capitalizeFully("i am FINE") = "I Am Fine"
    +123     * </pre>
    +124     *
    +125     * @param str  the String to capitalize, may be null
    +126     * @return capitalized String, <code>null</code> if null String input
    +127     */
    +128    public static String capitalizeFully(final String str) {
    +129        return capitalizeFully(str, null);
    +130    }
    +131
    +132    /**
    +133     * <p>Converts all the delimiter separated words in a String into capitalized words,
    +134     * that is each word is made up of a titlecase character and then a series of
    +135     * lowercase characters. </p>
    +136     *
    +137     * <p>The delimiters represent a set of characters understood to separate words.
    +138     * The first string character and the first non-delimiter character after a
    +139     * delimiter will be capitalized. </p>
    +140     *
    +141     * <p>A <code>null</code> input String returns <code>null</code>.
    +142     * Capitalization uses the Unicode title case, normally equivalent to
    +143     * upper case.</p>
    +144     *
    +145     * <pre>
    +146     * WordUtils.capitalizeFully(null, *)            = null
    +147     * WordUtils.capitalizeFully("", *)              = ""
    +148     * WordUtils.capitalizeFully(*, null)            = *
    +149     * WordUtils.capitalizeFully(*, new char[0])     = *
    +150     * WordUtils.capitalizeFully("i aM.fine", {'.'}) = "I am.Fine"
    +151     * </pre>
    +152     *
    +153     * @param str  the String to capitalize, may be null
    +154     * @param delimiters  set of characters to determine capitalization, null means whitespace
    +155     * @return capitalized String, <code>null</code> if null String input
    +156     * @since 2.1
    +157     */
    +158    public static String capitalizeFully(String str, final char... delimiters) {
    +159        final int delimLen = delimiters == null ? -1 : delimiters.length;
    +160        if (str == null || str.isEmpty() || delimLen == 0) {
    +161            return str;
    +162        }
    +163        str = str.toLowerCase(Locale.ENGLISH);
    +164        return capitalize(str, delimiters);
    +165    }
    +166
    +167    // Capitalizing
    +168    //-----------------------------------------------------------------------
    +169    /**
    +170     * <p>Capitalizes all the whitespace separated words in a String.
    +171     * Only the first character of each word is changed. To convert the
    +172     * rest of each word to lowercase at the same time,
    +173     * use {@link #capitalizeFully(String)}.</p>
    +174     *
    +175     * <p>Whitespace is defined by {@link Character#isWhitespace(char)}.
    +176     * A <code>null</code> input String returns <code>null</code>.
    +177     * Capitalization uses the Unicode title case, normally equivalent to
    +178     * upper case.</p>
    +179     *
    +180     * <pre>
    +181     * WordUtils.capitalize(null)        = null
    +182     * WordUtils.capitalize("")          = ""
    +183     * WordUtils.capitalize("i am FINE") = "I Am FINE"
    +184     * </pre>
    +185     *
    +186     * @param str  the String to capitalize, may be null
    +187     * @return capitalized String, <code>null</code> if null String input
    +188     * @see #capitalizeFully(String)
    +189     */
    +190    public static String capitalize(final String str) {
    +191        return capitalize(str, null);
    +192    }
    +193
    +194    /**
    +195     * <p>Capitalizes all the delimiter separated words in a String.
    +196     * Only the first character of each word is changed. To convert the
    +197     * rest of each word to lowercase at the same time,
    +198     * use {@link #capitalizeFully(String, char[])}.</p>
    +199     *
    +200     * <p>The delimiters represent a set of characters understood to separate words.
    +201     * The first string character and the first non-delimiter character after a
    +202     * delimiter will be capitalized. </p>
    +203     *
    +204     * <p>A <code>null</code> input String returns <code>null</code>.
    +205     * Capitalization uses the Unicode title case, normally equivalent to
    +206     * upper case.</p>
    +207     *
    +208     * <pre>
    +209     * WordUtils.capitalize(null, *)            = null
    +210     * WordUtils.capitalize("", *)              = ""
    +211     * WordUtils.capitalize(*, new char[0])     = *
    +212     * WordUtils.capitalize("i am fine", null)  = "I Am Fine"
    +213     * WordUtils.capitalize("i aM.fine", {'.'}) = "I aM.Fine"
    +214     * </pre>
    +215     *
    +216     * @param str  the String to capitalize, may be null
    +217     * @param delimiters  set of characters to determine capitalization, null means whitespace
    +218     * @return capitalized String, <code>null</code> if null String input
    +219     * @see #capitalizeFully(String)
    +220     * @since 2.1
    +221     */
    +222    public static String capitalize(final String str, final char... delimiters) {
    +223        final int delimLen = delimiters == null ? -1 : delimiters.length;
    +224        if (str == null || str.isEmpty() || delimLen == 0) {
    +225            return str;
    +226        }
    +227        final char[] buffer = str.toCharArray();
    +228        boolean capitalizeNext = true;
    +229        for (int i = 0; i < buffer.length; i++) {
    +230            final char ch = buffer[i];
    +231            if (isDelimiter(ch, delimiters)) {
    +232                capitalizeNext = true;
    +233            } else if (capitalizeNext) {
    +234                buffer[i] = Character.toTitleCase(ch);
    +235                capitalizeNext = false;
    +236            }
    +237        }
    +238        return new String(buffer);
    +239    }
    +240    //-----------------------------------------------------------------------
    +241    /**
    +242     * Is the character a delimiter.
    +243     *
    +244     * @param ch  the character to check
    +245     * @param delimiters  the delimiters
    +246     * @return true if it is a delimiter
    +247     */
    +248    public static boolean isDelimiter(final char ch, final char[] delimiters) {
    +249        if (delimiters == null) {
    +250            return Character.isWhitespace(ch);
    +251        }
    +252        for (final char delimiter : delimiters) {
    +253            if (ch == delimiter) {
    +254                return true;
    +255            }
    +256        }
    +257        return false;
    +258    }
    +259
    +260    // Joining
    +261    //-----------------------------------------------------------------------
    +262    /**
    +263     * <p>Joins the elements of the provided array into a single String
    +264     * containing the provided list of elements.</p>
    +265     *
    +266     * <p>No separator is added to the joined String.
    +267     * Null objects or empty strings within the array are represented by
    +268     * empty strings.</p>
    +269     *
    +270     * <pre>
    +271     * StringUtils.join(null)            = null
    +272     * StringUtils.join([])              = ""
    +273     * StringUtils.join([null])          = ""
    +274     * StringUtils.join(["a", "b", "c"]) = "abc"
    +275     * StringUtils.join([null, "", "a"]) = "a"
    +276     * </pre>
    +277     *
    +278     * @param <T> the specific type of values to join together
    +279     * @param elements  the values to join together, may be null
    +280     * @return the joined String, {@code null} if null array input
    +281     * @since 2.0
    +282     * @since 3.0 Changed signature to use varargs
    +283     */
    +284    @SafeVarargs
    +285    public static <T> String join(final T... elements) {
    +286        return join(elements, null);
    +287    }
    +288
    +289    /**
    +290     * <p>Joins the elements of the provided array into a single String
    +291     * containing the provided list of elements.</p>
    +292     *
    +293     * <p>No delimiter is added before or after the list.
    +294     * Null objects or empty strings within the array are represented by
    +295     * empty strings.</p>
    +296     *
    +297     * <pre>
    +298     * StringUtils.join(null, *)               = null
    +299     * StringUtils.join([], *)                 = ""
    +300     * StringUtils.join([null], *)             = ""
    +301     * StringUtils.join(["a", "b", "c"], ';')  = "a;b;c"
    +302     * StringUtils.join(["a", "b", "c"], null) = "abc"
    +303     * StringUtils.join([null, "", "a"], ';')  = ";;a"
    +304     * </pre>
    +305     *
    +306     * @param array  the array of values to join together, may be null
    +307     * @param separator  the separator character to use
    +308     * @return the joined String, {@code null} if null array input
    +309     * @since 2.0
    +310     */
    +311    public static String join(final Object[] array, final char separator) {
    +312        if (array == null) {
    +313            return null;
    +314        }
    +315        return join(array, separator, 0, array.length);
    +316    }
    +317
    +318    /**
    +319     * <p>
    +320     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +321     * </p>
    +322     *
    +323     * <p>
    +324     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +325     * by empty strings.
    +326     * </p>
    +327     *
    +328     * <pre>
    +329     * StringUtils.join(null, *)               = null
    +330     * StringUtils.join([], *)                 = ""
    +331     * StringUtils.join([null], *)             = ""
    +332     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +333     * StringUtils.join([1, 2, 3], null) = "123"
    +334     * </pre>
    +335     *
    +336     * @param array
    +337     *            the array of values to join together, may be null
    +338     * @param separator
    +339     *            the separator character to use
    +340     * @return the joined String, {@code null} if null array input
    +341     * @since 3.2
    +342     */
    +343    public static String join(final long[] array, final char separator) {
    +344        if (array == null) {
    +345            return null;
    +346        }
    +347        return join(array, separator, 0, array.length);
    +348    }
    +349
    +350    /**
    +351     * <p>
    +352     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +353     * </p>
    +354     *
    +355     * <p>
    +356     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +357     * by empty strings.
    +358     * </p>
    +359     *
    +360     * <pre>
    +361     * StringUtils.join(null, *)               = null
    +362     * StringUtils.join([], *)                 = ""
    +363     * StringUtils.join([null], *)             = ""
    +364     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +365     * StringUtils.join([1, 2, 3], null) = "123"
    +366     * </pre>
    +367     *
    +368     * @param array
    +369     *            the array of values to join together, may be null
    +370     * @param separator
    +371     *            the separator character to use
    +372     * @return the joined String, {@code null} if null array input
    +373     * @since 3.2
    +374     */
    +375    public static String join(final int[] array, final char separator) {
    +376        if (array == null) {
    +377            return null;
    +378        }
    +379        return join(array, separator, 0, array.length);
    +380    }
    +381
    +382    /**
    +383     * <p>
    +384     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +385     * </p>
    +386     *
    +387     * <p>
    +388     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +389     * by empty strings.
    +390     * </p>
    +391     *
    +392     * <pre>
    +393     * StringUtils.join(null, *)               = null
    +394     * StringUtils.join([], *)                 = ""
    +395     * StringUtils.join([null], *)             = ""
    +396     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +397     * StringUtils.join([1, 2, 3], null) = "123"
    +398     * </pre>
    +399     *
    +400     * @param array
    +401     *            the array of values to join together, may be null
    +402     * @param separator
    +403     *            the separator character to use
    +404     * @return the joined String, {@code null} if null array input
    +405     * @since 3.2
    +406     */
    +407    public static String join(final short[] array, final char separator) {
    +408        if (array == null) {
    +409            return null;
    +410        }
    +411        return join(array, separator, 0, array.length);
    +412    }
    +413
    +414    /**
    +415     * <p>
    +416     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +417     * </p>
    +418     *
    +419     * <p>
    +420     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +421     * by empty strings.
    +422     * </p>
    +423     *
    +424     * <pre>
    +425     * StringUtils.join(null, *)               = null
    +426     * StringUtils.join([], *)                 = ""
    +427     * StringUtils.join([null], *)             = ""
    +428     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +429     * StringUtils.join([1, 2, 3], null) = "123"
    +430     * </pre>
    +431     *
    +432     * @param array
    +433     *            the array of values to join together, may be null
    +434     * @param separator
    +435     *            the separator character to use
    +436     * @return the joined String, {@code null} if null array input
    +437     * @since 3.2
    +438     */
    +439    public static String join(final byte[] array, final char separator) {
    +440        if (array == null) {
    +441            return null;
    +442        }
    +443        return join(array, separator, 0, array.length);
    +444    }
    +445
    +446    /**
    +447     * <p>
    +448     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +449     * </p>
    +450     *
    +451     * <p>
    +452     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +453     * by empty strings.
    +454     * </p>
    +455     *
    +456     * <pre>
    +457     * StringUtils.join(null, *)               = null
    +458     * StringUtils.join([], *)                 = ""
    +459     * StringUtils.join([null], *)             = ""
    +460     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +461     * StringUtils.join([1, 2, 3], null) = "123"
    +462     * </pre>
    +463     *
    +464     * @param array
    +465     *            the array of values to join together, may be null
    +466     * @param separator
    +467     *            the separator character to use
    +468     * @return the joined String, {@code null} if null array input
    +469     * @since 3.2
    +470     */
    +471    public static String join(final char[] array, final char separator) {
    +472        if (array == null) {
    +473            return null;
    +474        }
    +475        return join(array, separator, 0, array.length);
    +476    }
    +477
    +478    /**
    +479     * <p>
    +480     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +481     * </p>
    +482     *
    +483     * <p>
    +484     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +485     * by empty strings.
    +486     * </p>
    +487     *
    +488     * <pre>
    +489     * StringUtils.join(null, *)               = null
    +490     * StringUtils.join([], *)                 = ""
    +491     * StringUtils.join([null], *)             = ""
    +492     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +493     * StringUtils.join([1, 2, 3], null) = "123"
    +494     * </pre>
    +495     *
    +496     * @param array
    +497     *            the array of values to join together, may be null
    +498     * @param separator
    +499     *            the separator character to use
    +500     * @return the joined String, {@code null} if null array input
    +501     * @since 3.2
    +502     */
    +503    public static String join(final float[] array, final char separator) {
    +504        if (array == null) {
    +505            return null;
    +506        }
    +507        return join(array, separator, 0, array.length);
    +508    }
    +509
    +510    /**
    +511     * <p>
    +512     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +513     * </p>
    +514     *
    +515     * <p>
    +516     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +517     * by empty strings.
    +518     * </p>
    +519     *
    +520     * <pre>
    +521     * StringUtils.join(null, *)               = null
    +522     * StringUtils.join([], *)                 = ""
    +523     * StringUtils.join([null], *)             = ""
    +524     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +525     * StringUtils.join([1, 2, 3], null) = "123"
    +526     * </pre>
    +527     *
    +528     * @param array
    +529     *            the array of values to join together, may be null
    +530     * @param separator
    +531     *            the separator character to use
    +532     * @return the joined String, {@code null} if null array input
    +533     * @since 3.2
    +534     */
    +535    public static String join(final double[] array, final char separator) {
    +536        if (array == null) {
    +537            return null;
    +538        }
    +539        return join(array, separator, 0, array.length);
    +540    }
    +541
    +542
    +543    /**
    +544     * <p>Joins the elements of the provided array into a single String
    +545     * containing the provided list of elements.</p>
    +546     *
    +547     * <p>No delimiter is added before or after the list.
    +548     * Null objects or empty strings within the array are represented by
    +549     * empty strings.</p>
    +550     *
    +551     * <pre>
    +552     * StringUtils.join(null, *)               = null
    +553     * StringUtils.join([], *)                 = ""
    +554     * StringUtils.join([null], *)             = ""
    +555     * StringUtils.join(["a", "b", "c"], ';')  = "a;b;c"
    +556     * StringUtils.join(["a", "b", "c"], null) = "abc"
    +557     * StringUtils.join([null, "", "a"], ';')  = ";;a"
    +558     * </pre>
    +559     *
    +560     * @param array  the array of values to join together, may be null
    +561     * @param separator  the separator character to use
    +562     * @param startIndex the first index to start joining from.  It is
    +563     * an error to pass in an end index past the end of the array
    +564     * @param endIndex the index to stop joining from (exclusive). It is
    +565     * an error to pass in an end index past the end of the array
    +566     * @return the joined String, {@code null} if null array input
    +567     * @since 2.0
    +568     */
    +569    public static String join(final Object[] array, final char separator, final int startIndex, final int endIndex) {
    +570        if (array == null) {
    +571            return null;
    +572        }
    +573        final int noOfItems = endIndex - startIndex;
    +574        if (noOfItems <= 0) {
    +575            return EMPTY;
    +576        }
    +577        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +578        for (int i = startIndex; i < endIndex; i++) {
    +579            if (i > startIndex) {
    +580                buf.append(separator);
    +581            }
    +582            if (array[i] != null) {
    +583                buf.append(array[i]);
    +584            }
    +585        }
    +586        return buf.toString();
    +587    }
    +588
    +589    /**
    +590     * <p>
    +591     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +592     * </p>
    +593     *
    +594     * <p>
    +595     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +596     * by empty strings.
    +597     * </p>
    +598     *
    +599     * <pre>
    +600     * StringUtils.join(null, *)               = null
    +601     * StringUtils.join([], *)                 = ""
    +602     * StringUtils.join([null], *)             = ""
    +603     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +604     * StringUtils.join([1, 2, 3], null) = "123"
    +605     * </pre>
    +606     *
    +607     * @param array
    +608     *            the array of values to join together, may be null
    +609     * @param separator
    +610     *            the separator character to use
    +611     * @param startIndex
    +612     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +613     *            array
    +614     * @param endIndex
    +615     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +616     *            the array
    +617     * @return the joined String, {@code null} if null array input
    +618     * @since 3.2
    +619     */
    +620    public static String join(final long[] array, final char separator, final int startIndex, final int endIndex) {
    +621        if (array == null) {
    +622            return null;
    +623        }
    +624        final int noOfItems = endIndex - startIndex;
    +625        if (noOfItems <= 0) {
    +626            return EMPTY;
    +627        }
    +628        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +629        for (int i = startIndex; i < endIndex; i++) {
    +630            if (i > startIndex) {
    +631                buf.append(separator);
    +632            }
    +633            buf.append(array[i]);
    +634        }
    +635        return buf.toString();
    +636    }
    +637
    +638    /**
    +639     * <p>
    +640     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +641     * </p>
    +642     *
    +643     * <p>
    +644     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +645     * by empty strings.
    +646     * </p>
    +647     *
    +648     * <pre>
    +649     * StringUtils.join(null, *)               = null
    +650     * StringUtils.join([], *)                 = ""
    +651     * StringUtils.join([null], *)             = ""
    +652     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +653     * StringUtils.join([1, 2, 3], null) = "123"
    +654     * </pre>
    +655     *
    +656     * @param array
    +657     *            the array of values to join together, may be null
    +658     * @param separator
    +659     *            the separator character to use
    +660     * @param startIndex
    +661     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +662     *            array
    +663     * @param endIndex
    +664     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +665     *            the array
    +666     * @return the joined String, {@code null} if null array input
    +667     * @since 3.2
    +668     */
    +669    public static String join(final int[] array, final char separator, final int startIndex, final int endIndex) {
    +670        if (array == null) {
    +671            return null;
    +672        }
    +673        final int noOfItems = endIndex - startIndex;
    +674        if (noOfItems <= 0) {
    +675            return EMPTY;
    +676        }
    +677        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +678        for (int i = startIndex; i < endIndex; i++) {
    +679            if (i > startIndex) {
    +680                buf.append(separator);
    +681            }
    +682            buf.append(array[i]);
    +683        }
    +684        return buf.toString();
    +685    }
    +686
    +687    /**
    +688     * <p>
    +689     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +690     * </p>
    +691     *
    +692     * <p>
    +693     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +694     * by empty strings.
    +695     * </p>
    +696     *
    +697     * <pre>
    +698     * StringUtils.join(null, *)               = null
    +699     * StringUtils.join([], *)                 = ""
    +700     * StringUtils.join([null], *)             = ""
    +701     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +702     * StringUtils.join([1, 2, 3], null) = "123"
    +703     * </pre>
    +704     *
    +705     * @param array
    +706     *            the array of values to join together, may be null
    +707     * @param separator
    +708     *            the separator character to use
    +709     * @param startIndex
    +710     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +711     *            array
    +712     * @param endIndex
    +713     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +714     *            the array
    +715     * @return the joined String, {@code null} if null array input
    +716     * @since 3.2
    +717     */
    +718    public static String join(final byte[] array, final char separator, final int startIndex, final int endIndex) {
    +719        if (array == null) {
    +720            return null;
    +721        }
    +722        final int noOfItems = endIndex - startIndex;
    +723        if (noOfItems <= 0) {
    +724            return EMPTY;
    +725        }
    +726        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +727        for (int i = startIndex; i < endIndex; i++) {
    +728            if (i > startIndex) {
    +729                buf.append(separator);
    +730            }
    +731            buf.append(array[i]);
    +732        }
    +733        return buf.toString();
    +734    }
    +735
    +736    /**
    +737     * <p>
    +738     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +739     * </p>
    +740     *
    +741     * <p>
    +742     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +743     * by empty strings.
    +744     * </p>
    +745     *
    +746     * <pre>
    +747     * StringUtils.join(null, *)               = null
    +748     * StringUtils.join([], *)                 = ""
    +749     * StringUtils.join([null], *)             = ""
    +750     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +751     * StringUtils.join([1, 2, 3], null) = "123"
    +752     * </pre>
    +753     *
    +754     * @param array
    +755     *            the array of values to join together, may be null
    +756     * @param separator
    +757     *            the separator character to use
    +758     * @param startIndex
    +759     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +760     *            array
    +761     * @param endIndex
    +762     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +763     *            the array
    +764     * @return the joined String, {@code null} if null array input
    +765     * @since 3.2
    +766     */
    +767    public static String join(final short[] array, final char separator, final int startIndex, final int endIndex) {
    +768        if (array == null) {
    +769            return null;
    +770        }
    +771        final int noOfItems = endIndex - startIndex;
    +772        if (noOfItems <= 0) {
    +773            return EMPTY;
    +774        }
    +775        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +776        for (int i = startIndex; i < endIndex; i++) {
    +777            if (i > startIndex) {
    +778                buf.append(separator);
    +779            }
    +780            buf.append(array[i]);
    +781        }
    +782        return buf.toString();
    +783    }
    +784
    +785    /**
    +786     * <p>
    +787     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +788     * </p>
    +789     *
    +790     * <p>
    +791     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +792     * by empty strings.
    +793     * </p>
    +794     *
    +795     * <pre>
    +796     * StringUtils.join(null, *)               = null
    +797     * StringUtils.join([], *)                 = ""
    +798     * StringUtils.join([null], *)             = ""
    +799     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +800     * StringUtils.join([1, 2, 3], null) = "123"
    +801     * </pre>
    +802     *
    +803     * @param array
    +804     *            the array of values to join together, may be null
    +805     * @param separator
    +806     *            the separator character to use
    +807     * @param startIndex
    +808     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +809     *            array
    +810     * @param endIndex
    +811     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +812     *            the array
    +813     * @return the joined String, {@code null} if null array input
    +814     * @since 3.2
    +815     */
    +816    public static String join(final char[] array, final char separator, final int startIndex, final int endIndex) {
    +817        if (array == null) {
    +818            return null;
    +819        }
    +820        final int noOfItems = endIndex - startIndex;
    +821        if (noOfItems <= 0) {
    +822            return EMPTY;
    +823        }
    +824        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +825        for (int i = startIndex; i < endIndex; i++) {
    +826            if (i > startIndex) {
    +827                buf.append(separator);
    +828            }
    +829            buf.append(array[i]);
    +830        }
    +831        return buf.toString();
    +832    }
    +833
    +834    /**
    +835     * <p>
    +836     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +837     * </p>
    +838     *
    +839     * <p>
    +840     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +841     * by empty strings.
    +842     * </p>
    +843     *
    +844     * <pre>
    +845     * StringUtils.join(null, *)               = null
    +846     * StringUtils.join([], *)                 = ""
    +847     * StringUtils.join([null], *)             = ""
    +848     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +849     * StringUtils.join([1, 2, 3], null) = "123"
    +850     * </pre>
    +851     *
    +852     * @param array
    +853     *            the array of values to join together, may be null
    +854     * @param separator
    +855     *            the separator character to use
    +856     * @param startIndex
    +857     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +858     *            array
    +859     * @param endIndex
    +860     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +861     *            the array
    +862     * @return the joined String, {@code null} if null array input
    +863     * @since 3.2
    +864     */
    +865    public static String join(final double[] array, final char separator, final int startIndex, final int endIndex) {
    +866        if (array == null) {
    +867            return null;
    +868        }
    +869        final int noOfItems = endIndex - startIndex;
    +870        if (noOfItems <= 0) {
    +871            return EMPTY;
    +872        }
    +873        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +874        for (int i = startIndex; i < endIndex; i++) {
    +875            if (i > startIndex) {
    +876                buf.append(separator);
    +877            }
    +878            buf.append(array[i]);
    +879        }
    +880        return buf.toString();
    +881    }
    +882
    +883    /**
    +884     * <p>
    +885     * Joins the elements of the provided array into a single String containing the provided list of elements.
    +886     * </p>
    +887     *
    +888     * <p>
    +889     * No delimiter is added before or after the list. Null objects or empty strings within the array are represented
    +890     * by empty strings.
    +891     * </p>
    +892     *
    +893     * <pre>
    +894     * StringUtils.join(null, *)               = null
    +895     * StringUtils.join([], *)                 = ""
    +896     * StringUtils.join([null], *)             = ""
    +897     * StringUtils.join([1, 2, 3], ';')  = "1;2;3"
    +898     * StringUtils.join([1, 2, 3], null) = "123"
    +899     * </pre>
    +900     *
    +901     * @param array
    +902     *            the array of values to join together, may be null
    +903     * @param separator
    +904     *            the separator character to use
    +905     * @param startIndex
    +906     *            the first index to start joining from. It is an error to pass in an end index past the end of the
    +907     *            array
    +908     * @param endIndex
    +909     *            the index to stop joining from (exclusive). It is an error to pass in an end index past the end of
    +910     *            the array
    +911     * @return the joined String, {@code null} if null array input
    +912     * @since 3.2
    +913     */
    +914    public static String join(final float[] array, final char separator, final int startIndex, final int endIndex) {
    +915        if (array == null) {
    +916            return null;
    +917        }
    +918        final int noOfItems = endIndex - startIndex;
    +919        if (noOfItems <= 0) {
    +920            return EMPTY;
    +921        }
    +922        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +923        for (int i = startIndex; i < endIndex; i++) {
    +924            if (i > startIndex) {
    +925                buf.append(separator);
    +926            }
    +927            buf.append(array[i]);
    +928        }
    +929        return buf.toString();
    +930    }
    +931
    +932
    +933    /**
    +934     * <p>Joins the elements of the provided array into a single String
    +935     * containing the provided list of elements.</p>
    +936     *
    +937     * <p>No delimiter is added before or after the list.
    +938     * A {@code null} separator is the same as an empty String ("").
    +939     * Null objects or empty strings within the array are represented by
    +940     * empty strings.</p>
    +941     *
    +942     * <pre>
    +943     * StringUtils.join(null, *)                = null
    +944     * StringUtils.join([], *)                  = ""
    +945     * StringUtils.join([null], *)              = ""
    +946     * StringUtils.join(["a", "b", "c"], "--")  = "a--b--c"
    +947     * StringUtils.join(["a", "b", "c"], null)  = "abc"
    +948     * StringUtils.join(["a", "b", "c"], "")    = "abc"
    +949     * StringUtils.join([null, "", "a"], ',')   = ",,a"
    +950     * </pre>
    +951     *
    +952     * @param array  the array of values to join together, may be null
    +953     * @param separator  the separator character to use, null treated as ""
    +954     * @return the joined String, {@code null} if null array input
    +955     */
    +956    public static String join(final Object[] array, final String separator) {
    +957        if (array == null) {
    +958            return null;
    +959        }
    +960        return join(array, separator, 0, array.length);
    +961    }
    +962
    +963    /**
    +964     * <p>Joins the elements of the provided array into a single String
    +965     * containing the provided list of elements.</p>
    +966     *
    +967     * <p>No delimiter is added before or after the list.
    +968     * A {@code null} separator is the same as an empty String ("").
    +969     * Null objects or empty strings within the array are represented by
    +970     * empty strings.</p>
    +971     *
    +972     * <pre>
    +973     * StringUtils.join(null, *, *, *)                = null
    +974     * StringUtils.join([], *, *, *)                  = ""
    +975     * StringUtils.join([null], *, *, *)              = ""
    +976     * StringUtils.join(["a", "b", "c"], "--", 0, 3)  = "a--b--c"
    +977     * StringUtils.join(["a", "b", "c"], "--", 1, 3)  = "b--c"
    +978     * StringUtils.join(["a", "b", "c"], "--", 2, 3)  = "c"
    +979     * StringUtils.join(["a", "b", "c"], "--", 2, 2)  = ""
    +980     * StringUtils.join(["a", "b", "c"], null, 0, 3)  = "abc"
    +981     * StringUtils.join(["a", "b", "c"], "", 0, 3)    = "abc"
    +982     * StringUtils.join([null, "", "a"], ',', 0, 3)   = ",,a"
    +983     * </pre>
    +984     *
    +985     * @param array  the array of values to join together, may be null
    +986     * @param separator  the separator character to use, null treated as ""
    +987     * @param startIndex the first index to start joining from.
    +988     * @param endIndex the index to stop joining from (exclusive).
    +989     * @return the joined String, {@code null} if null array input; or the empty string
    +990     * if {@code endIndex - startIndex <= 0}. The number of joined entries is given by
    +991     * {@code endIndex - startIndex}
    +992     * @throws ArrayIndexOutOfBoundsException ife<br>
    +993     * {@code startIndex < 0} or <br>
    +994     * {@code startIndex >= array.length()} or <br>
    +995     * {@code endIndex < 0} or <br>
    +996     * {@code endIndex > array.length()}
    +997     */
    +998    public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
    +999        if (array == null) {
    +1000            return null;
    +1001        }
    +1002        if (separator == null) {
    +1003            separator = EMPTY;
    +1004        }
    +1005
    +1006        // endIndex - startIndex > 0:   Len = NofStrings *(len(firstString) + len(separator))
    +1007        //           (Assuming that all Strings are roughly equally long)
    +1008        final int noOfItems = endIndex - startIndex;
    +1009        if (noOfItems <= 0) {
    +1010            return EMPTY;
    +1011        }
    +1012
    +1013        final StringBuilder buf = new StringBuilder(noOfItems * 16);
    +1014
    +1015        for (int i = startIndex; i < endIndex; i++) {
    +1016            if (i > startIndex) {
    +1017                buf.append(separator);
    +1018            }
    +1019            if (array[i] != null) {
    +1020                buf.append(array[i]);
    +1021            }
    +1022        }
    +1023        return buf.toString();
    +1024    }
    +1025
    +1026    /**
    +1027     * <p>Joins the elements of the provided {@code Iterator} into
    +1028     * a single String containing the provided elements.</p>
    +1029     *
    +1030     * <p>No delimiter is added before or after the list. Null objects or empty
    +1031     * strings within the iteration are represented by empty strings.</p>
    +1032     *
    +1033     * <p>See the examples here: {@link #join(Object[],char)}. </p>
    +1034     *
    +1035     * @param iterator  the {@code Iterator} of values to join together, may be null
    +1036     * @param separator  the separator character to use
    +1037     * @return the joined String, {@code null} if null iterator input
    +1038     * @since 2.0
    +1039     */
    +1040    public static String join(final Iterator<?> iterator, final char separator) {
    +1041
    +1042        // handle null, zero and one elements before building a buffer
    +1043        if (iterator == null) {
    +1044            return null;
    +1045        }
    +1046        if (!iterator.hasNext()) {
    +1047            return EMPTY;
    +1048        }
    +1049        final Object first = iterator.next();
    +1050        if (!iterator.hasNext()) {
    +1051            final String result = first != null ? first.toString() : "";
    +1052            return result;
    +1053        }
    +1054
    +1055        // two or more elements
    +1056        final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
    +1057        if (first != null) {
    +1058            buf.append(first);
    +1059        }
    +1060
    +1061        while (iterator.hasNext()) {
    +1062            buf.append(separator);
    +1063            final Object obj = iterator.next();
    +1064            if (obj != null) {
    +1065                buf.append(obj);
    +1066            }
    +1067        }
    +1068
    +1069        return buf.toString();
    +1070    }
    +1071
    +1072    /**
    +1073     * <p>Joins the elements of the provided {@code Iterator} into
    +1074     * a single String containing the provided elements.</p>
    +1075     *
    +1076     * <p>No delimiter is added before or after the list.
    +1077     * A {@code null} separator is the same as an empty String ("").</p>
    +1078     *
    +1079     * <p>See the examples here: {@link #join(Object[],String)}. </p>
    +1080     *
    +1081     * @param iterator  the {@code Iterator} of values to join together, may be null
    +1082     * @param separator  the separator character to use, null treated as ""
    +1083     * @return the joined String, {@code null} if null iterator input
    +1084     */
    +1085    public static String join(final Iterator<?> iterator, final String separator) {
    +1086
    +1087        // handle null, zero and one elements before building a buffer
    +1088        if (iterator == null) {
    +1089            return null;
    +1090        }
    +1091        if (!iterator.hasNext()) {
    +1092            return EMPTY;
    +1093        }
    +1094        final Object first = iterator.next();
    +1095        if (!iterator.hasNext()) {
    +1096            final String result = first != null ? first.toString() : "";
    +1097            return result;
    +1098        }
    +1099
    +1100        // two or more elements
    +1101        final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
    +1102        if (first != null) {
    +1103            buf.append(first);
    +1104        }
    +1105
    +1106        while (iterator.hasNext()) {
    +1107            if (separator != null) {
    +1108                buf.append(separator);
    +1109            }
    +1110            final Object obj = iterator.next();
    +1111            if (obj != null) {
    +1112                buf.append(obj);
    +1113            }
    +1114        }
    +1115        return buf.toString();
    +1116    }
    +1117
    +1118    /**
    +1119     * <p>Joins the elements of the provided {@code Iterable} into
    +1120     * a single String containing the provided elements.</p>
    +1121     *
    +1122     * <p>No delimiter is added before or after the list. Null objects or empty
    +1123     * strings within the iteration are represented by empty strings.</p>
    +1124     *
    +1125     * <p>See the examples here: {@link #join(Object[],char)}. </p>
    +1126     *
    +1127     * @param iterable  the {@code Iterable} providing the values to join together, may be null
    +1128     * @param separator  the separator character to use
    +1129     * @return the joined String, {@code null} if null iterator input
    +1130     * @since 2.3
    +1131     */
    +1132    public static String join(final Iterable<?> iterable, final char separator) {
    +1133        if (iterable == null) {
    +1134            return null;
    +1135        }
    +1136        return join(iterable.iterator(), separator);
    +1137    }
    +1138
    +1139    /**
    +1140     * <p>Joins the elements of the provided {@code Iterable} into
    +1141     * a single String containing the provided elements.</p>
    +1142     *
    +1143     * <p>No delimiter is added before or after the list.
    +1144     * A {@code null} separator is the same as an empty String ("").</p>
    +1145     *
    +1146     * <p>See the examples here: {@link #join(Object[],String)}. </p>
    +1147     *
    +1148     * @param iterable  the {@code Iterable} providing the values to join together, may be null
    +1149     * @param separator  the separator character to use, null treated as ""
    +1150     * @return the joined String, {@code null} if null iterator input
    +1151     * @since 2.3
    +1152     */
    +1153    public static String join(final Iterable<?> iterable, final String separator) {
    +1154        if (iterable == null) {
    +1155            return null;
    +1156        }
    +1157        return join(iterable.iterator(), separator);
    +1158    }
    +1159
    +1160
    +1161    /**
    +1162     * <p>Checks if the CharSequence contains only Unicode digits.
    +1163     * A decimal point is not a Unicode digit and returns false.</p>
    +1164     *
    +1165     * <p>{@code null} will return {@code false}.
    +1166     * An empty CharSequence (length()=0) will return {@code false}.</p>
    +1167     *
    +1168     * <p>Note that the method does not allow for a leading sign, either positive or negative.
    +1169     * Also, if a String passes the numeric test, it may still generate a NumberFormatException
    +1170     * when parsed by Integer.parseInt or Long.parseLong, e.g. if the value is outside the range
    +1171     * for int or long respectively.</p>
    +1172     *
    +1173     * <pre>
    +1174     * StringUtils.isNumeric(null)   = false
    +1175     * StringUtils.isNumeric("")     = false
    +1176     * StringUtils.isNumeric("  ")   = false
    +1177     * StringUtils.isNumeric("123")  = true
    +1178     * StringUtils.isNumeric("\u0967\u0968\u0969")  = true
    +1179     * StringUtils.isNumeric("12 3") = false
    +1180     * StringUtils.isNumeric("ab2c") = false
    +1181     * StringUtils.isNumeric("12-3") = false
    +1182     * StringUtils.isNumeric("12.3") = false
    +1183     * StringUtils.isNumeric("-123") = false
    +1184     * StringUtils.isNumeric("+123") = false
    +1185     * </pre>
    +1186     *
    +1187     * @param cs  the CharSequence to check, may be null
    +1188     * @return {@code true} if only contains digits, and is non-null
    +1189     * @since 3.0 Changed signature from isNumeric(String) to isNumeric(CharSequence)
    +1190     * @since 3.0 Changed "" to return false and not true
    +1191     */
    +1192    public static boolean isNumeric(final CharSequence cs) {
    +1193        if (cs == null || cs.length() == 0) {
    +1194            return false;
    +1195        }
    +1196        final int sz = cs.length();
    +1197        for (int i = 0; i < sz; i++) {
    +1198            if (!Character.isDigit(cs.charAt(i))) {
    +1199                return false;
    +1200            }
    +1201        }
    +1202        return true;
    +1203    }
    +1204
    +1205
    +1206    // startsWith
    +1207    //-----------------------------------------------------------------------
    +1208
    +1209    /**
    +1210     * <p>Check if a CharSequence starts with a specified prefix.</p>
    +1211     *
    +1212     * <p>{@code null}s are handled without exceptions. Two {@code null}
    +1213     * references are considered to be equal. The comparison is case sensitive.</p>
    +1214     *
    +1215     * <pre>
    +1216     * StringUtils.startsWith(null, null)      = true
    +1217     * StringUtils.startsWith(null, "abc")     = false
    +1218     * StringUtils.startsWith("abcdef", null)  = false
    +1219     * StringUtils.startsWith("abcdef", "abc") = true
    +1220     * StringUtils.startsWith("ABCDEF", "abc") = false
    +1221     * </pre>
    +1222     *
    +1223     * @see java.lang.String#startsWith(String)
    +1224     * @param str  the CharSequence to check, may be null
    +1225     * @param prefix the prefix to find, may be null
    +1226     * @return {@code true} if the CharSequence starts with the prefix, case sensitive, or
    +1227     *  both {@code null}
    +1228     * @since 2.4
    +1229     * @since 3.0 Changed signature from startsWith(String, String) to startsWith(CharSequence, CharSequence)
    +1230     */
    +1231    public static boolean startsWith(final CharSequence str, final CharSequence prefix) {
    +1232        return startsWith(str, prefix, false);
    +1233    }
    +1234
    +1235    /**
    +1236     * <p>Case insensitive check if a CharSequence starts with a specified prefix.</p>
    +1237     *
    +1238     * <p>{@code null}s are handled without exceptions. Two {@code null}
    +1239     * references are considered to be equal. The comparison is case insensitive.</p>
    +1240     *
    +1241     * <pre>
    +1242     * StringUtils.startsWithIgnoreCase(null, null)      = true
    +1243     * StringUtils.startsWithIgnoreCase(null, "abc")     = false
    +1244     * StringUtils.startsWithIgnoreCase("abcdef", null)  = false
    +1245     * StringUtils.startsWithIgnoreCase("abcdef", "abc") = true
    +1246     * StringUtils.startsWithIgnoreCase("ABCDEF", "abc") = true
    +1247     * </pre>
    +1248     *
    +1249     * @see java.lang.String#startsWith(String)
    +1250     * @param str  the CharSequence to check, may be null
    +1251     * @param prefix the prefix to find, may be null
    +1252     * @return {@code true} if the CharSequence starts with the prefix, case insensitive, or
    +1253     *  both {@code null}
    +1254     * @since 2.4
    +1255     * @since 3.0 Changed signature from startsWithIgnoreCase(String, String) to startsWithIgnoreCase(CharSequence, CharSequence)
    +1256     */
    +1257    public static boolean startsWithIgnoreCase(final CharSequence str, final CharSequence prefix) {
    +1258        return startsWith(str, prefix, true);
    +1259    }
    +1260
    +1261    /**
    +1262     * <p>Check if a CharSequence starts with a specified prefix (optionally case insensitive).</p>
    +1263     *
    +1264     * @see java.lang.String#startsWith(String)
    +1265     * @param str  the CharSequence to check, may be null
    +1266     * @param prefix the prefix to find, may be null
    +1267     * @param ignoreCase indicates whether the compare should ignore case
    +1268     *  (case insensitive) or not.
    +1269     * @return {@code true} if the CharSequence starts with the prefix or
    +1270     *  both {@code null}
    +1271     */
    +1272    private static boolean startsWith(final CharSequence str, final CharSequence prefix, final boolean ignoreCase) {
    +1273        if (str == null || prefix == null) {
    +1274            return str == null && prefix == null;
    +1275        }
    +1276        if (prefix.length() > str.length()) {
    +1277            return false;
    +1278        }
    +1279        return regionMatches(str, ignoreCase, 0, prefix, 0, prefix.length());
    +1280    }
    +1281
    +1282    /**
    +1283     * Green implementation of regionMatches.
    +1284     *
    +1285     * @param cs the {@code CharSequence} to be processed
    +1286     * @param ignoreCase whether or not to be case insensitive
    +1287     * @param thisStart the index to start on the {@code cs} CharSequence
    +1288     * @param substring the {@code CharSequence} to be looked for
    +1289     * @param start the index to start on the {@code substring} CharSequence
    +1290     * @param length character length of the region
    +1291     * @return whether the region matched
    +1292     */
    +1293    static boolean regionMatches(final CharSequence cs, final boolean ignoreCase, final int thisStart,
    +1294                                 final CharSequence substring, final int start, final int length)    {
    +1295        if (cs instanceof String && substring instanceof String) {
    +1296            return ((String) cs).regionMatches(ignoreCase, thisStart, (String) substring, start, length);
    +1297        }
    +1298        int index1 = thisStart;
    +1299        int index2 = start;
    +1300        int tmpLen = length;
    +1301
    +1302        // Extract these first so we detect NPEs the same as the java.lang.String version
    +1303        final int srcLen = cs.length() - thisStart;
    +1304        final int otherLen = substring.length() - start;
    +1305
    +1306        // Check for invalid parameters
    +1307        if (thisStart < 0 || start < 0 || length < 0) {
    +1308            return false;
    +1309        }
    +1310
    +1311        // Check that the regions are long enough
    +1312        if (srcLen < length || otherLen < length) {
    +1313            return false;
    +1314        }
    +1315
    +1316        while (tmpLen-- > 0) {
    +1317            final char c1 = cs.charAt(index1++);
    +1318            final char c2 = substring.charAt(index2++);
    +1319
    +1320            if (c1 == c2) {
    +1321                continue;
    +1322            }
    +1323
    +1324            if (!ignoreCase) {
    +1325                return false;
    +1326            }
    +1327
    +1328            // The same check as in String.regionMatches():
    +1329            if (Character.toUpperCase(c1) != Character.toUpperCase(c2)
    +1330                    && Character.toLowerCase(c1) != Character.toLowerCase(c2)) {
    +1331                return false;
    +1332            }
    +1333        }
    +1334
    +1335        return true;
    +1336    }
    +1337
    +1338    /**
    +1339     * The index value when an element is not found in a list or array: <code>-1</code>.
    +1340     * This value is returned by methods in this class and can also be used in comparisons with values returned by
    +1341     * various method from {@link java.util.List}.
    +1342     */
    +1343    public static final int INDEX_NOT_FOUND = -1;
    +1344
    +1345    // IndexOf search
    +1346    // ----------------------------------------------------------------------
    +1347
    +1348    // Object IndexOf
    +1349    //-----------------------------------------------------------------------
    +1350    /**
    +1351     * <p>Finds the index of the given object in the array.</p>
    +1352     *
    +1353     * <p>This method returns {@link #INDEX_NOT_FOUND} (<code>-1</code>) for a <code>null</code> input array.</p>
    +1354     *
    +1355     * @param array  the array to search through for the object, may be <code>null</code>
    +1356     * @param objectToFind  the object to find, may be <code>null</code>
    +1357     * @return the index of the object within the array,
    +1358     *  {@link #INDEX_NOT_FOUND} (<code>-1</code>) if not found or <code>null</code> array input
    +1359     */
    +1360    public static int indexOf(Object[] array, Object objectToFind) {
    +1361        return indexOf(array, objectToFind, 0);
    +1362    }
    +1363
    +1364    /**
    +1365     * <p>Finds the index of the given object in the array starting at the given index.</p>
    +1366     *
    +1367     * <p>This method returns {@link #INDEX_NOT_FOUND} (<code>-1</code>) for a <code>null</code> input array.</p>
    +1368     *
    +1369     * <p>A negative startIndex is treated as zero. A startIndex larger than the array
    +1370     * length will return {@link #INDEX_NOT_FOUND} (<code>-1</code>).</p>
    +1371     *
    +1372     * @param array  the array to search through for the object, may be <code>null</code>
    +1373     * @param objectToFind  the object to find, may be <code>null</code>
    +1374     * @param startIndex  the index to start searching at
    +1375     * @return the index of the object within the array starting at the index,
    +1376     *  {@link #INDEX_NOT_FOUND} (<code>-1</code>) if not found or <code>null</code> array input
    +1377     */
    +1378    public static int indexOf(Object[] array, Object objectToFind, int startIndex) {
    +1379        if (array == null) {
    +1380            return INDEX_NOT_FOUND;
    +1381        }
    +1382        if (startIndex < 0) {
    +1383            startIndex = 0;
    +1384        }
    +1385        if (objectToFind == null) {
    +1386            for (int i = startIndex; i < array.length; i++) {
    +1387                if (array[i] == null) {
    +1388                    return i;
    +1389                }
    +1390            }
    +1391        } else {
    +1392            for (int i = startIndex; i < array.length; i++) {
    +1393                if (objectToFind.equals(array[i])) {
    +1394                    return i;
    +1395                }
    +1396            }
    +1397        }
    +1398        return INDEX_NOT_FOUND;
    +1399    }
    +1400}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/contexts/ContextResolver.html b/docs/acf-core/src-html/co/aikar/commands/contexts/ContextResolver.html
    index 533eec34..b065e732 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/contexts/ContextResolver.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/contexts/ContextResolver.html
    @@ -1,64 +1,68 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.contexts;
    -025
    -026import co.aikar.commands.CommandExecutionContext;
    -027import co.aikar.commands.CommandIssuer;
    -028import co.aikar.commands.InvalidCommandArgument;
    -029
    -030/**
    -031 * This defines a context resolver, which parses {@link T} from {@link C}.
    -032 *
    -033 * @param <T>
    -034 *         The type to be parsed.
    -035 * @param <C>
    -036 *         The type of the context which the resolver would get its data from.
    -037 */
    -038@FunctionalInterface
    -039public interface ContextResolver <T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> {
    -040    /**
    -041     * Parses the context of type {@link C} into {@link T}, or throws an exception.
    -042     *
    -043     * @param c
    -044     *         The context to parse from.
    -045     *
    -046     * @return The parsed instance of the wanted type.
    -047     *
    -048     * @throws InvalidCommandArgument
    -049     *         In case the context contains any discrepancies, it will throw this exception.
    -050     */
    -051    T getContext(C c) throws InvalidCommandArgument;
    -052}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.contexts;
    +025
    +026import co.aikar.commands.CommandExecutionContext;
    +027import co.aikar.commands.CommandIssuer;
    +028import co.aikar.commands.InvalidCommandArgument;
    +029
    +030/**
    +031 * This defines a context resolver, which parses {@link T} from {@link C}.
    +032 *
    +033 * @param <T>
    +034 *         The type to be parsed.
    +035 * @param <C>
    +036 *         The type of the context which the resolver would get its data from.
    +037 */
    +038@FunctionalInterface
    +039public interface ContextResolver <T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> {
    +040    /**
    +041     * Parses the context of type {@link C} into {@link T}, or throws an exception.
    +042     *
    +043     * @param c
    +044     *         The context to parse from.
    +045     *
    +046     * @return The parsed instance of the wanted type.
    +047     *
    +048     * @throws InvalidCommandArgument
    +049     *         In case the context contains any discrepancies, it will throw this exception.
    +050     */
    +051    T getContext(C c) throws InvalidCommandArgument;
    +052}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerAwareContextResolver.html b/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerAwareContextResolver.html
    index dde04238..6c44f045 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerAwareContextResolver.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerAwareContextResolver.html
    @@ -1,42 +1,46 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.contexts;
    -025
    -026import co.aikar.commands.CommandExecutionContext;
    -027import co.aikar.commands.CommandIssuer;
    -028
    -029
    -030public interface IssuerAwareContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver<T, C> {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.contexts;
    +025
    +026import co.aikar.commands.CommandExecutionContext;
    +027import co.aikar.commands.CommandIssuer;
    +028
    +029
    +030public interface IssuerAwareContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver<T, C> {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerOnlyContextResolver.html b/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerOnlyContextResolver.html
    index 81c32ad2..8f06de96 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerOnlyContextResolver.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/contexts/IssuerOnlyContextResolver.html
    @@ -1,46 +1,50 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.contexts;
    -025
    -026import co.aikar.commands.CommandExecutionContext;
    -027import co.aikar.commands.CommandIssuer;
    -028
    -029/**
    -030 * A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    -031 * @param <T>
    -032 * @param <C>
    -033 */
    -034public interface IssuerOnlyContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver <T, C> {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.contexts;
    +025
    +026import co.aikar.commands.CommandExecutionContext;
    +027import co.aikar.commands.CommandIssuer;
    +028
    +029/**
    +030 * A context resolver that will never consume input, and only resolves using the context of the issuer of the command
    +031 * @param <T>
    +032 * @param <C>
    +033 */
    +034public interface IssuerOnlyContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver <T, C> {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/contexts/OptionalContextResolver.html b/docs/acf-core/src-html/co/aikar/commands/contexts/OptionalContextResolver.html
    index a486a73a..13198508 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/contexts/OptionalContextResolver.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/contexts/OptionalContextResolver.html
    @@ -1,49 +1,53 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.contexts;
    -025
    -026import co.aikar.commands.CommandExecutionContext;
    -027import co.aikar.commands.CommandIssuer;
    -028
    -029/**
    -030 * The same as {@link ContextResolver}, however it can accept a null context.
    -031 *
    -032 * If the parameter was marked optional, will still be called with an empty args list
    -033 *
    -034 * @param <T>
    -035 * @param <C>
    -036 */
    -037public interface OptionalContextResolver <T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver <T, C> {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.contexts;
    +025
    +026import co.aikar.commands.CommandExecutionContext;
    +027import co.aikar.commands.CommandIssuer;
    +028
    +029/**
    +030 * The same as {@link ContextResolver}, however it can accept a null context.
    +031 *
    +032 * If the parameter was marked optional, will still be called with an empty args list
    +033 *
    +034 * @param <T>
    +035 * @param <C>
    +036 */
    +037public interface OptionalContextResolver <T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends ContextResolver <T, C> {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/contexts/SenderAwareContextResolver.html b/docs/acf-core/src-html/co/aikar/commands/contexts/SenderAwareContextResolver.html
    index 46558e45..69a8eed5 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/contexts/SenderAwareContextResolver.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/contexts/SenderAwareContextResolver.html
    @@ -1,48 +1,52 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.contexts;
    -025
    -026import co.aikar.commands.CommandExecutionContext;
    -027import co.aikar.commands.CommandIssuer;
    -028
    -029/**
    -030 * Wrapper for IssuerAwareContextResolver
    -031 *
    -032 * @deprecated Please use {@link IssuerAwareContextResolver}
    -033 * @see IssuerAwareContextResolver
    -034 */
    -035@Deprecated
    -036public interface SenderAwareContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends IssuerAwareContextResolver <T, C> {}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2017 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.contexts;
    +025
    +026import co.aikar.commands.CommandExecutionContext;
    +027import co.aikar.commands.CommandIssuer;
    +028
    +029/**
    +030 * Wrapper for IssuerAwareContextResolver
    +031 *
    +032 * @deprecated Please use {@link IssuerAwareContextResolver}
    +033 * @see IssuerAwareContextResolver
    +034 */
    +035@Deprecated
    +036public interface SenderAwareContextResolver<T, C extends CommandExecutionContext<?, ? extends CommandIssuer>> extends IssuerAwareContextResolver <T, C> {}
     
     
     
    diff --git a/docs/acf-core/src-html/co/aikar/commands/processors/ConditionsProcessor.html b/docs/acf-core/src-html/co/aikar/commands/processors/ConditionsProcessor.html
    index 62c82fd1..0c986e3b 100644
    --- a/docs/acf-core/src-html/co/aikar/commands/processors/ConditionsProcessor.html
    +++ b/docs/acf-core/src-html/co/aikar/commands/processors/ConditionsProcessor.html
    @@ -1,55 +1,59 @@
     
     
     
    +
     Source code
    +
    +
    +
     
     
    -
    +
     
    -
    -
    001/*
    -002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    -003 *
    -004 *  Permission is hereby granted, free of charge, to any person obtaining
    -005 *  a copy of this software and associated documentation files (the
    -006 *  "Software"), to deal in the Software without restriction, including
    -007 *  without limitation the rights to use, copy, modify, merge, publish,
    -008 *  distribute, sublicense, and/or sell copies of the Software, and to
    -009 *  permit persons to whom the Software is furnished to do so, subject to
    -010 *  the following conditions:
    -011 *
    -012 *  The above copyright notice and this permission notice shall be
    -013 *  included in all copies or substantial portions of the Software.
    -014 *
    -015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    -016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    -017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    -018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    -019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    -020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    -021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    -022 */
    -023
    -024package co.aikar.commands.processors;
    -025
    -026import co.aikar.commands.AnnotationProcessor;
    -027import co.aikar.commands.CommandExecutionContext;
    -028import co.aikar.commands.CommandOperationContext;
    -029import co.aikar.commands.annotation.Conditions;
    -030
    -031@Deprecated /* @deprecated UNFINISHED */
    -032public class ConditionsProcessor implements AnnotationProcessor<Conditions> {
    -033
    -034    @Override
    -035    public void onPreComand(CommandOperationContext context) {
    -036
    -037    }
    -038
    -039    @Override
    -040    public void onPostContextResolution(CommandExecutionContext context, Object resolvedValue) {
    -041
    -042    }
    -043}
    +
    +
    001/*
    +002 * Copyright (c) 2016-2018 Daniel Ennis (Aikar) - MIT License
    +003 *
    +004 *  Permission is hereby granted, free of charge, to any person obtaining
    +005 *  a copy of this software and associated documentation files (the
    +006 *  "Software"), to deal in the Software without restriction, including
    +007 *  without limitation the rights to use, copy, modify, merge, publish,
    +008 *  distribute, sublicense, and/or sell copies of the Software, and to
    +009 *  permit persons to whom the Software is furnished to do so, subject to
    +010 *  the following conditions:
    +011 *
    +012 *  The above copyright notice and this permission notice shall be
    +013 *  included in all copies or substantial portions of the Software.
    +014 *
    +015 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +016 *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    +017 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +018 *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    +019 *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    +020 *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    +021 *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    +022 */
    +023
    +024package co.aikar.commands.processors;
    +025
    +026import co.aikar.commands.AnnotationProcessor;
    +027import co.aikar.commands.CommandExecutionContext;
    +028import co.aikar.commands.CommandOperationContext;
    +029import co.aikar.commands.annotation.Conditions;
    +030
    +031@Deprecated /* @deprecated UNFINISHED */
    +032public class ConditionsProcessor implements AnnotationProcessor<Conditions> {
    +033
    +034    @Override
    +035    public void onPreComand(CommandOperationContext context) {
    +036
    +037    }
    +038
    +039    @Override
    +040    public void onPostContextResolution(CommandExecutionContext context, Object resolvedValue) {
    +041
    +042    }
    +043}
     
     
     
    diff --git a/docs/acf-core/stylesheet.css b/docs/acf-core/stylesheet.css
    index fa246765..836c62da 100644
    --- a/docs/acf-core/stylesheet.css
    +++ b/docs/acf-core/stylesheet.css
    @@ -1,4 +1,4 @@
    -/* 
    +/*
      * Javadoc style sheet
      */
     
    @@ -40,13 +40,6 @@ a[href]:hover, a[href]:focus {
     a[name] {
         color:#353833;
     }
    -a[name]:before, a[name]:target, a[id]:before, a[id]:target {
    -    content:"";
    -    display:inline-block;
    -    position:relative;
    -    padding-top:129px;
    -    margin-top:-129px;
    -}
     pre {
         font-family:'DejaVu Sans Mono', monospace;
         font-size:14px;
    @@ -59,22 +52,24 @@ h2 {
     }
     h3 {
         font-size:16px;
    -    font-style:italic;
     }
     h4 {
    -    font-size:13px;
    +    font-size:15px;
     }
     h5 {
    -    font-size:12px;
    +    font-size:14px;
     }
     h6 {
    -    font-size:11px;
    +    font-size:13px;
     }
     ul {
         list-style-type:disc;
     }
     code, tt {
         font-family:'DejaVu Sans Mono', monospace;
    +}
    +:not(h1, h2, h3, h4, h5, h6) > code,
    +:not(h1, h2, h3, h4, h5, h6) > tt {
         font-size:14px;
         padding-top:4px;
         margin-top:8px;
    @@ -85,7 +80,7 @@ dt code {
         font-size:14px;
         padding-top:4px;
     }
    -table tr td dt code {
    +.summary-table dt code {
         font-family:'DejaVu Sans Mono', monospace;
         font-size:14px;
         vertical-align:top;
    @@ -94,7 +89,10 @@ table tr td dt code {
     sup {
         font-size:8px;
     }
    -
    +button {
    +    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
    +    font-size: 14px;
    +}
     /*
      * Styles for HTML generated by javadoc.
      *
    @@ -106,26 +104,19 @@ sup {
      */
     .clear {
         clear:both;
    -    height:0px;
    +    height:0;
         overflow:hidden;
     }
    -.aboutLanguage {
    +.about-language {
         float:right;
    -    padding:0px 21px;
    +    padding:0 21px 8px 8px;
         font-size:11px;
    -    z-index:200;
         margin-top:-9px;
    +    height:2.9em;
     }
    -.legalCopy {
    +.legal-copy {
         margin-left:.5em;
     }
    -.bar a, .bar a:link, .bar a:visited, .bar a:active {
    -    color:#FFFFFF;
    -    text-decoration:none;
    -}
    -.bar a:hover, .bar a:focus {
    -    color:#bb7a2a;
    -}
     .tab {
         background-color:#0066FF;
         color:#ffffff;
    @@ -136,152 +127,124 @@ sup {
     /*
      * Styles for navigation bar.
      */
    -.bar {
    -    background-color:#4D7A97;
    -    color:#FFFFFF;
    -    padding:.8em .5em .4em .8em;
    -    height:auto;/*height:1.8em;*/
    -    font-size:11px;
    -    margin:0;
    +@media screen {
    +    .flex-box {
    +        position:fixed;
    +        display:flex;
    +        flex-direction:column;
    +        height: 100%;
    +        width: 100%;
    +    }
    +    .flex-header {
    +        flex: 0 0 auto;
    +    }
    +    .flex-content {
    +        flex: 1 1 auto;
    +        overflow-y: auto;
    +    }
     }
    -.navPadding {
    -    padding-top: 107px;
    -}
    -.fixedNav {
    -    position:fixed;
    -    width:100%;
    -    z-index:999;
    -    background-color:#ffffff;
    -}
    -.topNav {
    +.top-nav {
         background-color:#4D7A97;
         color:#FFFFFF;
         float:left;
         padding:0;
         width:100%;
         clear:right;
    -    height:2.8em;
    -    padding-top:10px;
    -    overflow:hidden;
    -    font-size:12px; 
    -}
    -.bottomNav {
    -    margin-top:10px;
    -    background-color:#4D7A97;
    -    color:#FFFFFF;
    -    float:left;
    -    padding:0;
    -    width:100%;
    -    clear:right;
    -    height:2.8em;
    +    min-height:2.8em;
         padding-top:10px;
         overflow:hidden;
         font-size:12px;
     }
    -.subNav {
    +.sub-nav {
         background-color:#dee3e9;
         float:left;
         width:100%;
         overflow:hidden;
         font-size:12px;
     }
    -.subNav div {
    +.sub-nav div {
         clear:left;
         float:left;
         padding:0 0 5px 6px;
         text-transform:uppercase;
     }
    -ul.navList, ul.subNavList {
    +.sub-nav .nav-list {
    +    padding-top:5px;
    +}
    +ul.nav-list {
    +    display:block;
    +    margin:0 25px 0 0;
    +    padding:0;
    +}
    +ul.sub-nav-list {
         float:left;
         margin:0 25px 0 0;
         padding:0;
     }
    -ul.navList li{
    +ul.nav-list li {
         list-style:none;
         float:left;
         padding: 5px 6px;
         text-transform:uppercase;
     }
    -ul.navListSearch {
    +.sub-nav .nav-list-search {
         float:right;
         margin:0 0 0 0;
    -    padding:0;
    +    padding:5px 6px;
    +    clear:none;
     }
    -ul.navListSearch li {
    -    list-style:none;
    -    float:right;
    -    padding: 5px 6px;
    -    text-transform:uppercase;
    -}
    -ul.navListSearch li label {
    +.nav-list-search label {
         position:relative;
         right:-16px;
     }
    -ul.subNavList li {
    +ul.sub-nav-list li {
         list-style:none;
         float:left;
    +    padding-top:10px;
     }
    -.topNav a:link, .topNav a:active, .topNav a:visited, .bottomNav a:link, .bottomNav a:active, .bottomNav a:visited {
    +.top-nav a:link, .top-nav a:active, .top-nav a:visited {
         color:#FFFFFF;
         text-decoration:none;
         text-transform:uppercase;
     }
    -.topNav a:hover, .bottomNav a:hover {
    +.top-nav a:hover {
         text-decoration:none;
         color:#bb7a2a;
         text-transform:uppercase;
     }
    -.navBarCell1Rev {
    +.nav-bar-cell1-rev {
         background-color:#F8981D;
         color:#253441;
         margin: auto 5px;
     }
    -.skipNav {
    +.skip-nav {
         position:absolute;
         top:auto;
         left:-9999px;
         overflow:hidden;
     }
    +/*
    + * Hide navigation links and search box in print layout
    + */
    +@media print {
    +    ul.nav-list, div.sub-nav  {
    +        display:none;
    +    }
    +}
     /*
      * Styles for page header and footer.
      */
    -.header, .footer {
    -    clear:both;
    -    margin:0 20px;
    -    padding:5px 0 0 0;
    -}
    -.indexNav {
    -    position:relative;
    -    font-size:12px;
    -    background-color:#dee3e9;
    -}
    -.indexNav ul {
    -    margin-top:0;
    -    padding:5px;
    -}
    -.indexNav ul li {
    -    display:inline;
    -    list-style-type:none;
    -    padding-right:10px;
    -    text-transform:uppercase;
    -}
    -.indexNav h1 {
    -    font-size:13px;
    -}
     .title {
         color:#2c4557;
         margin:10px 0;
     }
    -.subTitle {
    +.sub-title {
         margin:5px 0 0 0;
     }
     .header ul {
         margin:0 0 15px 0;
         padding:0;
     }
    -.footer ul {
    -    margin:20px 0 5px 0;
    -}
     .header ul li, .footer ul li {
         list-style:none;
         font-size:13px;
    @@ -289,69 +252,49 @@ ul.subNavList li {
     /*
      * Styles for headings.
      */
    -div.details ul.blockList ul.blockList ul.blockList li.blockList h4, div.details ul.blockList ul.blockList ul.blockListLast li.blockList h4 {
    -    background-color:#dee3e9;
    -    border:1px solid #d0d9e0;
    -    margin:0 0 6px -8px;
    -    padding:7px 5px;
    -}
    -ul.blockList ul.blockList ul.blockList li.blockList h3 {
    -    background-color:#dee3e9;
    -    border:1px solid #d0d9e0;
    -    margin:0 0 6px -8px;
    -    padding:7px 5px;
    -}
    -ul.blockList ul.blockList li.blockList h3 {
    +body.class-declaration-page .summary h2,
    +body.class-declaration-page .details h2,
    +body.class-use-page  h2,
    +body.module-declaration-page  .block-list h2 {
    +    font-style: italic;
         padding:0;
         margin:15px 0;
     }
    -ul.blockList li.blockList h2 {
    -    padding:0px 0 20px 0;
    +body.class-declaration-page .summary h3,
    +body.class-declaration-page .details h3,
    +body.class-declaration-page .summary .inherited-list h2 {
    +    background-color:#dee3e9;
    +    border:1px solid #d0d9e0;
    +    margin:0 0 6px -8px;
    +    padding:7px 5px;
     }
     /*
      * Styles for page layout containers.
      */
    -.contentContainer, .sourceContainer, .classUseContainer, .serializedFormContainer, .constantValuesContainer,
    -.allClassesContainer, .allPackagesContainer {
    +main {
         clear:both;
         padding:10px 20px;
         position:relative;
     }
    -.indexContainer {
    -    margin:10px;
    -    position:relative;
    -    font-size:12px;
    -}
    -.indexContainer h2 {
    -    font-size:13px;
    -    padding:0 0 3px 0;
    -}
    -.indexContainer ul {
    -    margin:0;
    -    padding:0;
    -}
    -.indexContainer ul li {
    -    list-style:none;
    -    padding-top:2px;
    -}
    -.contentContainer .description dl dt, .contentContainer .details dl dt, .serializedFormContainer dl dt {
    +dl.notes > dt {
    +    font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif;
         font-size:12px;
         font-weight:bold;
         margin:10px 0 0 0;
         color:#4E4E4E;
     }
    -.contentContainer .description dl dd, .contentContainer .details dl dd, .serializedFormContainer dl dd {
    -    margin:5px 0 10px 0px;
    +dl.notes > dd {
    +    margin:5px 10px 10px 0;
         font-size:14px;
         font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
     }
    -.serializedFormContainer dl.nameValue dt {
    +dl.name-value > dt {
         margin-left:1px;
         font-size:1.1em;
         display:inline;
         font-weight:bold;
     }
    -.serializedFormContainer dl.nameValue dd {
    +dl.name-value > dd {
         margin:0 0 0 1px;
         font-size:1.1em;
         display:inline;
    @@ -366,70 +309,56 @@ ul.horizontal li {
         display:inline;
         font-size:0.9em;
     }
    -ul.inheritance {
    +div.inheritance {
         margin:0;
         padding:0;
     }
    -ul.inheritance li {
    -    display:inline;
    -    list-style:none;
    +div.inheritance div.inheritance {
    +    margin-left:2em;
     }
    -ul.inheritance li ul.inheritance {
    -    margin-left:15px;
    -    padding-left:15px;
    -    padding-top:1px;
    -}
    -ul.blockList, ul.blockListLast {
    +ul.block-list,
    +ul.details-list,
    +ul.member-list,
    +ul.summary-list {
         margin:10px 0 10px 0;
         padding:0;
     }
    -ul.blockList li.blockList, ul.blockListLast li.blockList {
    +ul.block-list > li,
    +ul.details-list > li,
    +ul.member-list > li,
    +ul.summary-list > li {
         list-style:none;
         margin-bottom:15px;
         line-height:1.4;
     }
    -ul.blockList ul.blockList li.blockList, ul.blockList ul.blockListLast li.blockList {
    -    padding:0px 20px 5px 10px;
    -    border:1px solid #ededed; 
    -    background-color:#f8f8f8;
    -}
    -ul.blockList ul.blockList ul.blockList li.blockList, ul.blockList ul.blockList ul.blockListLast li.blockList {
    -    padding:0 0 5px 8px;
    -    background-color:#ffffff;
    -    border:none;
    -}
    -ul.blockList ul.blockList ul.blockList ul.blockList li.blockList {
    -    margin-left:0;
    -    padding-left:0;
    -    padding-bottom:15px;
    -    border:none;
    -}
    -ul.blockList ul.blockList ul.blockList ul.blockList li.blockListLast {
    -    list-style:none;
    -    border-bottom:none;
    -    padding-bottom:0;
    -}
    -table tr td dl, table tr td dl dt, table tr td dl dd {
    +.summary-table dl, .summary-table dl dt, .summary-table dl dd {
         margin-top:0;
         margin-bottom:1px;
     }
    +ul.see-list, ul.see-list-long {
    +    padding-left: 0;
    +    list-style: none;
    +}
    +ul.see-list li {
    +    display: inline;
    +}
    +ul.see-list li:not(:last-child):after,
    +ul.see-list-long li:not(:last-child):after {
    +    content: ", ";
    +    white-space: pre-wrap;
    +}
     /*
      * Styles for tables.
      */
    -.overviewSummary, .memberSummary, .typeSummary, .useSummary, .constantsSummary, .deprecatedSummary,
    -.requiresSummary, .packagesSummary, .providesSummary, .usesSummary {
    +.summary-table, .details-table {
         width:100%;
         border-spacing:0;
    -    border-left:1px solid #EEE; 
    -    border-right:1px solid #EEE; 
    -    border-bottom:1px solid #EEE; 
    +    border-left:1px solid #EEE;
    +    border-right:1px solid #EEE;
    +    border-bottom:1px solid #EEE;
    +    padding:0;
     }
    -.overviewSummary, .memberSummary, .requiresSummary, .packagesSummary, .providesSummary, .usesSummary  {
    -    padding:0px;
    -}
    -.overviewSummary caption, .memberSummary caption, .typeSummary caption,
    -.useSummary caption, .constantsSummary caption, .deprecatedSummary caption,
    -.requiresSummary caption, .packagesSummary caption, .providesSummary caption, .usesSummary caption {
    +.caption {
         position:relative;
         text-align:left;
         background-repeat:no-repeat;
    @@ -437,38 +366,20 @@ table tr td dl, table tr td dl dt, table tr td dl dd {
         font-weight:bold;
         clear:none;
         overflow:hidden;
    -    padding:0px;
    +    padding:0;
         padding-top:10px;
         padding-left:1px;
    -    margin:0px;
    +    margin:0;
         white-space:pre;
     }
    -.overviewSummary caption a:link, .memberSummary caption a:link, .typeSummary caption a:link,
    -.constantsSummary caption a:link, .deprecatedSummary caption a:link,
    -.requiresSummary caption a:link, .packagesSummary caption a:link, .providesSummary caption a:link,
    -.usesSummary caption a:link,
    -.overviewSummary caption a:hover, .memberSummary caption a:hover, .typeSummary caption a:hover,
    -.constantsSummary caption a:hover, .deprecatedSummary caption a:hover,
    -.requiresSummary caption a:hover, .packagesSummary caption a:hover, .providesSummary caption a:hover,
    -.usesSummary caption a:hover,
    -.overviewSummary caption a:active, .memberSummary caption a:active, .typeSummary caption a:active,
    -.constantsSummary caption a:active, .deprecatedSummary caption a:active,
    -.requiresSummary caption a:active, .packagesSummary caption a:active, .providesSummary caption a:active,
    -.usesSummary caption a:active,
    -.overviewSummary caption a:visited, .memberSummary caption a:visited, .typeSummary caption a:visited,
    -.constantsSummary caption a:visited, .deprecatedSummary caption a:visited,
    -.requiresSummary caption a:visited, .packagesSummary caption a:visited, .providesSummary caption a:visited,
    -.usesSummary caption a:visited {
    -    color:#FFFFFF;
    -}
    -.useSummary caption a:link, .useSummary caption a:hover, .useSummary caption a:active,
    -.useSummary caption a:visited {
    +.caption a:link, .caption a:visited {
         color:#1f389c;
     }
    -.overviewSummary caption span, .memberSummary caption span, .typeSummary caption span,
    -.useSummary caption span, .constantsSummary caption span, .deprecatedSummary caption span,
    -.requiresSummary caption span, .packagesSummary caption span, .providesSummary caption span,
    -.usesSummary caption span {
    +.caption a:hover,
    +.caption a:active {
    +    color:#FFFFFF;
    +}
    +.caption span {
         white-space:nowrap;
         padding-top:5px;
         padding-left:12px;
    @@ -480,168 +391,150 @@ table tr td dl, table tr td dl dt, table tr td dl dd {
         border: none;
         height:16px;
     }
    -.memberSummary caption span.activeTableTab span, .packagesSummary caption span.activeTableTab span,
    -.overviewSummary caption span.activeTableTab span, .typeSummary caption span.activeTableTab span {
    -    white-space:nowrap;
    -    padding-top:5px;
    -    padding-left:12px;
    -    padding-right:12px;
    -    margin-right:3px;
    -    display:inline-block;
    -    float:left;
    -    background-color:#F8981D;
    -    height:16px;
    +div.table-tabs {
    +    padding:10px 0 0 1px;
    +    margin:0;
     }
    -.memberSummary caption span.tableTab span, .packagesSummary caption span.tableTab span,
    -.overviewSummary caption span.tableTab span, .typeSummary caption span.tableTab span {
    -    white-space:nowrap;
    -    padding-top:5px;
    -    padding-left:12px;
    -    padding-right:12px;
    -    margin-right:3px;
    -    display:inline-block;
    -    float:left;
    -    background-color:#4D7A97;
    -    height:16px;
    +div.table-tabs > button {
    +   border: none;
    +   cursor: pointer;
    +   padding: 5px 12px 7px 12px;
    +   font-weight: bold;
    +   margin-right: 3px;
     }
    -.memberSummary caption span.tableTab, .memberSummary caption span.activeTableTab,
    -.packagesSummary caption span.tableTab, .packagesSummary caption span.activeTableTab,
    -.overviewSummary caption span.tableTab, .overviewSummary caption span.activeTableTab,
    -.typeSummary caption span.tableTab, .typeSummary caption span.activeTableTab {
    -    padding-top:0px;
    -    padding-left:0px;
    -    padding-right:0px;
    -    background-image:none;
    -    float:none;
    -    display:inline;
    +div.table-tabs > button.active-table-tab {
    +   background: #F8981D;
    +   color: #253441;
     }
    -.overviewSummary .tabEnd, .memberSummary .tabEnd, .typeSummary .tabEnd,
    -.useSummary .tabEnd, .constantsSummary .tabEnd, .deprecatedSummary .tabEnd,
    -.requiresSummary .tabEnd, .packagesSummary .tabEnd, .providesSummary .tabEnd, .usesSummary .tabEnd {
    -    display:none;
    -    width:5px;
    -    position:relative;
    -    float:left;
    -    background-color:#F8981D;
    +div.table-tabs > button.table-tab {
    +   background: #4D7A97;
    +   color: #FFFFFF;
     }
    -.memberSummary .activeTableTab .tabEnd, .packagesSummary .activeTableTab .tabEnd,
    -.overviewSummary .activeTableTab .tabEnd, .typeSummary .activeTableTab .tabEnd {
    -    display:none;
    -    width:5px;
    -    margin-right:3px;
    -    position:relative; 
    -    float:left;
    -    background-color:#F8981D;
    +.two-column-summary {
    +    display: grid;
    +    grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
     }
    -.memberSummary .tableTab .tabEnd, .packagesSummary .tableTab .tabEnd,
    -.overviewSummary .tableTab .tabEnd, .typeSummary .tableTab .tabEnd {
    -    display:none;
    -    width:5px;
    -    margin-right:3px;
    -    position:relative;
    -    background-color:#4D7A97;
    -    float:left;
    +.three-column-summary {
    +    display: grid;
    +    grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto);
     }
    -.rowColor th, .altColor th {
    -    font-weight:normal;
    +.four-column-summary {
    +    display: grid;
    +    grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto);
     }
    -.overviewSummary td, .memberSummary td, .typeSummary td,
    -.useSummary td, .constantsSummary td, .deprecatedSummary td,
    -.requiresSummary td, .packagesSummary td, .providesSummary td, .usesSummary td {
    +@media screen and (max-width: 600px) {
    +    .two-column-summary {
    +        display: grid;
    +        grid-template-columns: 1fr;
    +    }
    +}
    +@media screen and (max-width: 800px) {
    +    .three-column-summary {
    +        display: grid;
    +        grid-template-columns: minmax(10%, max-content) minmax(25%, auto);
    +    }
    +    .three-column-summary .col-last {
    +        grid-column-end: span 2;
    +    }
    +}
    +@media screen and (max-width: 1000px) {
    +    .four-column-summary {
    +        display: grid;
    +        grid-template-columns: minmax(15%, max-content) minmax(15%, auto);
    +    }
    +}
    +.summary-table > div, .details-table > div {
         text-align:left;
    -    padding:0px 0px 12px 10px;
    +    padding: 8px 3px 3px 7px;
     }
    -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .useSummary th,
    -.constantsSummary th, .packagesSummary th, td.colFirst, td.colSecond, td.colLast, .useSummary td,
    -.constantsSummary td {
    +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name {
         vertical-align:top;
    -    padding-right:0px;
    +    padding-right:0;
         padding-top:8px;
         padding-bottom:3px;
     }
    -th.colFirst, th.colSecond, th.colLast, th.colConstructorName, th.colDeprecatedItemName, .constantsSummary th,
    -.packagesSummary th {
    +.table-header {
         background:#dee3e9;
    -    text-align:left;
    -    padding:8px 3px 3px 7px;
    +    font-weight: bold;
     }
    -td.colFirst, th.colFirst {
    +.col-first, .col-first {
         font-size:13px;
     }
    -td.colSecond, th.colSecond, td.colLast, th.colConstructorName, th.colDeprecatedItemName, th.colLast {
    +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last {
         font-size:13px;
     }
    -.constantsSummary th, .packagesSummary th {
    -    font-size:13px;
    -}
    -.providesSummary th.colFirst, .providesSummary th.colLast, .providesSummary td.colFirst,
    -.providesSummary td.colLast {
    -    white-space:normal;
    -    font-size:13px;
    -}
    -.overviewSummary td.colFirst, .overviewSummary th.colFirst,
    -.requiresSummary td.colFirst, .requiresSummary th.colFirst,
    -.packagesSummary td.colFirst, .packagesSummary td.colSecond, .packagesSummary th.colFirst, .packagesSummary th,
    -.usesSummary td.colFirst, .usesSummary th.colFirst,
    -.providesSummary td.colFirst, .providesSummary th.colFirst,
    -.memberSummary td.colFirst, .memberSummary th.colFirst,
    -.memberSummary td.colSecond, .memberSummary th.colSecond, .memberSummary th.colConstructorName,
    -.typeSummary td.colFirst, .typeSummary th.colFirst {
    +.col-first, .col-second, .col-constructor-name {
         vertical-align:top;
    +    overflow: auto;
     }
    -.packagesSummary th.colLast, .packagesSummary td.colLast {
    +.col-last {
         white-space:normal;
     }
    -td.colFirst a:link, td.colFirst a:visited,
    -td.colSecond a:link, td.colSecond a:visited,
    -th.colFirst a:link, th.colFirst a:visited,
    -th.colSecond a:link, th.colSecond a:visited,
    -th.colConstructorName a:link, th.colConstructorName a:visited,
    -th.colDeprecatedItemName a:link, th.colDeprecatedItemName a:visited, 
    -.constantValuesContainer td a:link, .constantValuesContainer td a:visited, 
    -.allClassesContainer td a:link, .allClassesContainer td a:visited, 
    -.allPackagesContainer td a:link, .allPackagesContainer td a:visited {
    +.col-first a:link, .col-first a:visited,
    +.col-second a:link, .col-second a:visited,
    +.col-first a:link, .col-first a:visited,
    +.col-second a:link, .col-second a:visited,
    +.col-constructor-name a:link, .col-constructor-name a:visited,
    +.col-summary-item-name a:link, .col-summary-item-name a:visited,
    +.constant-values-container a:link, .constant-values-container a:visited,
    +.all-classes-container a:link, .all-classes-container a:visited,
    +.all-packages-container a:link, .all-packages-container a:visited {
         font-weight:bold;
     }
    -.tableSubHeadingColor {
    +.table-sub-heading-color {
         background-color:#EEEEFF;
     }
    -.altColor, .altColor th {
    +.even-row-color, .even-row-color .table-header {
         background-color:#FFFFFF;
     }
    -.rowColor, .rowColor th {
    +.odd-row-color, .odd-row-color .table-header {
         background-color:#EEEEEF;
     }
     /*
      * Styles for contents.
      */
    -.description pre {
    -    margin-top:0;
    -}
    -.deprecatedContent {
    +.deprecated-content {
         margin:0;
         padding:10px 0;
     }
    -.docSummary {
    -    padding:0;
    -}
    -ul.blockList ul.blockList ul.blockList li.blockList h3 {
    -    font-style:normal;
    -}
     div.block {
         font-size:14px;
         font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
     }
    -td.colLast div {
    -    padding-top:0px;
    +.col-last div {
    +    padding-top:0;
     }
    -td.colLast a {
    +.col-last a {
         padding-bottom:3px;
     }
    +.module-signature,
    +.package-signature,
    +.type-signature,
    +.member-signature {
    +    font-family:'DejaVu Sans Mono', monospace;
    +    font-size:14px;
    +    margin:14px 0;
    +    white-space: pre-wrap;
    +}
    +.module-signature,
    +.package-signature,
    +.type-signature {
    +    margin-top: 0;
    +}
    +.member-signature .type-parameters-long,
    +.member-signature .parameters,
    +.member-signature .exceptions {
    +    display: inline-block;
    +    vertical-align: top;
    +    white-space: pre;
    +}
    +.member-signature .type-parameters {
    +    white-space: normal;
    +}
     /*
      * Styles for formatting effect.
      */
    -.sourceLineNo {
    +.source-line-no {
         color:green;
         padding:0 30px 0 0;
     }
    @@ -652,19 +545,18 @@ h1.hidden {
     }
     .block {
         display:block;
    -    margin:3px 10px 2px 0px;
    +    margin:0 10px 5px 0;
         color:#474747;
     }
    -.deprecatedLabel, .descfrmTypeLabel, .implementationLabel, .memberNameLabel, .memberNameLink,
    -.moduleLabelInPackage, .moduleLabelInType, .overrideSpecifyLabel, .packageLabelInType,
    -.packageHierarchyLabel, .paramLabel, .returnLabel, .seeLabel, .simpleTagLabel,
    -.throwsLabel, .typeNameLabel, .typeNameLink, .searchTagLink {
    +.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link,
    +.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type,
    +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label {
         font-weight:bold;
     }
    -.deprecationComment, .emphasizedPhrase, .interfaceName {
    +.deprecation-comment, .help-footnote, .preview-comment {
         font-style:italic;
     }
    -.deprecationBlock {
    +.deprecation-block {
         font-size:14px;
         font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
         border-style:solid;
    @@ -675,68 +567,20 @@ h1.hidden {
         margin-right:10px;
         display:inline-block;
     }
    -div.block div.deprecationComment, div.block div.block span.emphasizedPhrase,
    -div.block div.block span.interfaceName {
    +.preview-block {
    +    font-size:14px;
    +    font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif;
    +    border-style:solid;
    +    border-width:thin;
    +    border-radius:10px;
    +    padding:10px;
    +    margin-bottom:10px;
    +    margin-right:10px;
    +    display:inline-block;
    +}
    +div.block div.deprecation-comment {
         font-style:normal;
     }
    -div.contentContainer ul.blockList li.blockList h2 {
    -    padding-bottom:0px;
    -}
    -/*
    - * Styles for IFRAME.
    - */
    -.mainContainer {
    -    margin:0 auto; 
    -    padding:0; 
    -    height:100%; 
    -    width:100%; 
    -    position:fixed; 
    -    top:0; 
    -    left:0;
    -}
    -.leftContainer {
    -    height:100%;
    -    position:fixed;
    -    width:320px;
    -}
    -.leftTop {
    -    position:relative;
    -    float:left;
    -    width:315px;
    -    top:0;
    -    left:0;
    -    height:30%;
    -    border-right:6px solid #ccc;
    -    border-bottom:6px solid #ccc;
    -}
    -.leftBottom {
    -    position:relative;
    -    float:left;
    -    width:315px;
    -    bottom:0;
    -    left:0;
    -    height:70%;
    -    border-right:6px solid #ccc;
    -    border-top:1px solid #000;
    -}
    -.rightContainer {
    -    position:absolute;
    -    left:320px;
    -    top:0;
    -    bottom:0;
    -    height:100%;
    -    right:0;
    -    border-left:1px solid #000;
    -}
    -.rightIframe {
    -    margin:0;
    -    padding:0;
    -    height:100%;
    -    right:30px;
    -    width:100%;
    -    overflow:visible;
    -    margin-bottom:30px;
    -}
     /*
      * Styles specific to HTML5 elements.
      */
    @@ -753,7 +597,7 @@ main, nav, header, footer, section {
         background-color:#4D7A97;
         color:#FFFFFF;
     }
    -.resultItem {
    +.result-item {
         font-size:13px;
     }
     .ui-autocomplete {
    @@ -773,10 +617,10 @@ ul.ui-autocomplete  li {
         clear:both;
         width:100%;
     }
    -.resultHighlight {
    +.result-highlight {
         font-weight:bold;
     }
    -#search {
    +#search-input {
         background-image:url('resources/glass.png');
         background-size:13px;
         background-repeat:no-repeat;
    @@ -784,8 +628,9 @@ ul.ui-autocomplete  li {
         padding-left:20px;
         position:relative;
         right:-18px;
    +    width:400px;
     }
    -#reset {
    +#reset-button {
         background-color: rgb(255,255,255);
         background-image:url('resources/x.png');
         background-position:center;
    @@ -793,7 +638,7 @@ ul.ui-autocomplete  li {
         background-size:12px;
         border:0 none;
         width:16px;
    -    height:17px;
    +    height:16px;
         position:relative;
         left:-4px;
         top:-4px;
    @@ -802,28 +647,85 @@ ul.ui-autocomplete  li {
     .watermark {
         color:#545454;
     }
    -.searchTagDescResult {
    +.search-tag-desc-result {
         font-style:italic;
         font-size:11px;
     }
    -.searchTagHolderResult {
    +.search-tag-holder-result {
         font-style:italic;
         font-size:12px;
     }
    -.searchTagResult:before, .searchTagResult:target {
    -    color:red;
    +.search-tag-result:target {
    +    background-color:yellow;
     }
    -.moduleGraph span {
    +.module-graph span {
         display:none;
         position:absolute;
     }
    -.moduleGraph:hover span {
    +.module-graph:hover span {
         display:block;
         margin: -100px 0 0 100px;
         z-index: 1;
     }
    -.methodSignature {
    -    white-space:normal;
    +.inherited-list {
    +    margin: 10px 0 10px 0;
    +}
    +section.class-description {
    +    line-height: 1.4;
    +}
    +.summary section[class$="-summary"], .details section[class$="-details"],
    +.class-uses .detail, .serialized-class-details {
    +    padding: 0px 20px 5px 10px;
    +    border: 1px solid #ededed;
    +    background-color: #f8f8f8;
    +}
    +.inherited-list, section[class$="-details"] .detail {
    +    padding:0 0 5px 8px;
    +    background-color:#ffffff;
    +    border:none;
    +}
    +.vertical-separator {
    +    padding: 0 5px;
    +}
    +ul.help-section-list {
    +    margin: 0;
    +}
    +ul.help-subtoc > li {
    +  display: inline-block;
    +  padding-right: 5px;
    +  font-size: smaller;
    +}
    +ul.help-subtoc > li::before {
    +  content: "\2022" ;
    +  padding-right:2px;
    +}
    +span.help-note {
    +    font-style: italic;
    +}
    +/*
    + * Indicator icon for external links.
    + */
    +main a[href*="://"]::after {
    +    content:"";
    +    display:inline-block;
    +    background-image:url('data:image/svg+xml; utf8, \
    +      \
    +        \
    +      ');
    +    background-size:100% 100%;
    +    width:7px;
    +    height:7px;
    +    margin-left:2px;
    +    margin-bottom:4px;
    +}
    +main a[href*="://"]:hover::after,
    +main a[href*="://"]:focus::after {
    +    background-image:url('data:image/svg+xml; utf8, \
    +      \
    +        \
    +      ');
     }
     
     /*
    @@ -904,3 +806,60 @@ table.striped > tbody > tr > th, table.striped > tbody > tr > td {
     table.striped > tbody > tr > th {
         font-weight: normal;
     }
    +/**
    + * Tweak font sizes and paddings for small screens.
    + */
    +@media screen and (max-width: 1050px) {
    +    #search-input {
    +        width: 300px;
    +    }
    +}
    +@media screen and (max-width: 800px) {
    +    #search-input {
    +        width: 200px;
    +    }
    +    .top-nav,
    +    .bottom-nav {
    +        font-size: 11px;
    +        padding-top: 6px;
    +    }
    +    .sub-nav {
    +        font-size: 11px;
    +    }
    +    .about-language {
    +        padding-right: 16px;
    +    }
    +    ul.nav-list li,
    +    .sub-nav .nav-list-search {
    +        padding: 6px;
    +    }
    +    ul.sub-nav-list li {
    +        padding-top: 5px;
    +    }
    +    main {
    +        padding: 10px;
    +    }
    +    .summary section[class$="-summary"], .details section[class$="-details"],
    +    .class-uses .detail, .serialized-class-details {
    +        padding: 0 8px 5px 8px;
    +    }
    +    body {
    +        -webkit-text-size-adjust: none;
    +    }
    +}
    +@media screen and (max-width: 500px) {
    +    #search-input {
    +        width: 150px;
    +    }
    +    .top-nav,
    +    .bottom-nav {
    +        font-size: 10px;
    +    }
    +    .sub-nav {
    +        font-size: 10px;
    +    }
    +    .about-language {
    +        font-size: 10px;
    +        padding-right: 12px;
    +    }
    +}
    diff --git a/docs/acf-core/tag-search-index.js b/docs/acf-core/tag-search-index.js
    new file mode 100644
    index 00000000..bf10aaf6
    --- /dev/null
    +++ b/docs/acf-core/tag-search-index.js
    @@ -0,0 +1 @@
    +tagSearchIndex = [{"l":"Constant Field Values","h":"","u":"constant-values.html"},{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults();
    \ No newline at end of file
    diff --git a/docs/acf-core/type-search-index.js b/docs/acf-core/type-search-index.js
    index 48e34e98..4925ef82 100644
    --- a/docs/acf-core/type-search-index.js
    +++ b/docs/acf-core/type-search-index.js
    @@ -1 +1 @@
    -typeSearchIndex = [{"p":"co.aikar.commands","l":"ACFUtil"},{"l":"All Classes","url":"allclasses-index.html"},{"p":"co.aikar.commands","l":"AnnotationProcessor"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsExceptionUtil"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsLangUtil"},{"p":"co.aikar.commands","l":"CommandCompletions.AsyncCommandCompletionHandler"},{"p":"co.aikar.commands","l":"BaseCommand"},{"p":"co.aikar.commands.annotation","l":"CatchAll"},{"p":"co.aikar.commands.annotation","l":"CatchUnknown"},{"p":"co.aikar.commands.annotation","l":"CommandAlias"},{"p":"co.aikar.commands.annotation","l":"CommandCompletion"},{"p":"co.aikar.commands","l":"CommandCompletionContext"},{"p":"co.aikar.commands","l":"CommandCompletions.CommandCompletionHandler"},{"p":"co.aikar.commands","l":"CommandCompletions"},{"p":"co.aikar.commands","l":"CommandConditions"},{"p":"co.aikar.commands","l":"CommandContexts"},{"p":"co.aikar.commands","l":"CommandExecutionContext"},{"p":"co.aikar.commands","l":"CommandHelp"},{"p":"co.aikar.commands","l":"CommandHelpFormatter"},{"p":"co.aikar.commands","l":"CommandIssuer"},{"p":"co.aikar.commands","l":"CommandManager"},{"p":"co.aikar.commands","l":"CommandOperationContext"},{"p":"co.aikar.commands","l":"CommandParameter"},{"p":"co.aikar.commands.annotation","l":"CommandPermission"},{"p":"co.aikar.commands","l":"CommandReplacements"},{"p":"co.aikar.commands","l":"CommandConditions.Condition"},{"p":"co.aikar.commands","l":"ConditionContext"},{"p":"co.aikar.commands","l":"ConditionFailedException"},{"p":"co.aikar.commands.annotation","l":"Conditions"},{"p":"co.aikar.commands.processors","l":"ConditionsProcessor"},{"p":"co.aikar.commands.contexts","l":"ContextResolver"},{"p":"co.aikar.commands.annotation","l":"Default"},{"p":"co.aikar.commands.annotation","l":"Dependency"},{"p":"co.aikar.commands.annotation","l":"Description"},{"p":"co.aikar.commands","l":"ExceptionHandler"},{"p":"co.aikar.commands.annotation","l":"Flags"},{"p":"co.aikar.commands","l":"ForwardingCommand"},{"p":"co.aikar.commands.annotation","l":"HelpCommand"},{"p":"co.aikar.commands","l":"HelpEntry"},{"p":"co.aikar.commands.annotation","l":"HelpSearchTags"},{"p":"co.aikar.commands","l":"InvalidCommandArgument"},{"p":"co.aikar.commands","l":"InvalidCommandContextException"},{"p":"co.aikar.commands.contexts","l":"IssuerAwareContextResolver"},{"p":"co.aikar.commands","l":"IssuerLocaleChangedCallback"},{"p":"co.aikar.commands.contexts","l":"IssuerOnlyContextResolver"},{"p":"co.aikar.commands","l":"Locales"},{"p":"co.aikar.commands","l":"MessageFormatter"},{"p":"co.aikar.commands","l":"MessageKeys"},{"p":"co.aikar.commands","l":"MessageType"},{"p":"co.aikar.commands.annotation","l":"Name"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsExceptionUtil.Nestable"},{"p":"co.aikar.commands.annotation","l":"Optional"},{"p":"co.aikar.commands.contexts","l":"OptionalContextResolver"},{"p":"co.aikar.commands","l":"CommandConditions.ParameterCondition"},{"p":"co.aikar.commands.annotation","l":"PreCommand"},{"p":"co.aikar.commands.annotation","l":"Private"},{"p":"co.aikar.commands","l":"RegisteredCommand"},{"p":"co.aikar.commands","l":"RootCommand"},{"p":"co.aikar.commands.contexts","l":"SenderAwareContextResolver"},{"p":"co.aikar.commands","l":"ShowCommandHelp"},{"p":"co.aikar.commands.annotation","l":"Single"},{"p":"co.aikar.commands.annotation","l":"Split"},{"p":"co.aikar.commands.annotation","l":"Subcommand"},{"p":"co.aikar.commands","l":"CommandCompletions.SyncCompletionRequired"},{"p":"co.aikar.commands.annotation","l":"Syntax"},{"p":"co.aikar.commands.annotation","l":"UnknownHandler"},{"p":"co.aikar.commands","l":"UnresolvedDependencyException"},{"p":"co.aikar.commands","l":"UnstableAPI"},{"p":"co.aikar.commands.annotation","l":"Values"}]
    \ No newline at end of file
    +typeSearchIndex = [{"p":"co.aikar.commands","l":"ACFUtil"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"co.aikar.commands","l":"AnnotationProcessor"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsExceptionUtil"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsLangUtil"},{"p":"co.aikar.commands","l":"CommandCompletions.AsyncCommandCompletionHandler"},{"p":"co.aikar.commands","l":"BaseCommand"},{"p":"co.aikar.commands.annotation","l":"CatchAll"},{"p":"co.aikar.commands.annotation","l":"CatchUnknown"},{"p":"co.aikar.commands.annotation","l":"CommandAlias"},{"p":"co.aikar.commands.annotation","l":"CommandCompletion"},{"p":"co.aikar.commands","l":"CommandCompletionContext"},{"p":"co.aikar.commands","l":"CommandCompletions.CommandCompletionHandler"},{"p":"co.aikar.commands","l":"CommandCompletions"},{"p":"co.aikar.commands","l":"CommandConditions"},{"p":"co.aikar.commands","l":"CommandContexts"},{"p":"co.aikar.commands","l":"CommandExecutionContext"},{"p":"co.aikar.commands","l":"CommandHelp"},{"p":"co.aikar.commands","l":"CommandHelpFormatter"},{"p":"co.aikar.commands","l":"CommandIssuer"},{"p":"co.aikar.commands","l":"CommandManager"},{"p":"co.aikar.commands","l":"CommandOperationContext"},{"p":"co.aikar.commands","l":"CommandParameter"},{"p":"co.aikar.commands.annotation","l":"CommandPermission"},{"p":"co.aikar.commands","l":"CommandReplacements"},{"p":"co.aikar.commands","l":"CommandConditions.Condition"},{"p":"co.aikar.commands","l":"ConditionContext"},{"p":"co.aikar.commands","l":"ConditionFailedException"},{"p":"co.aikar.commands.annotation","l":"Conditions"},{"p":"co.aikar.commands.processors","l":"ConditionsProcessor"},{"p":"co.aikar.commands.contexts","l":"ContextResolver"},{"p":"co.aikar.commands.annotation","l":"Default"},{"p":"co.aikar.commands.annotation","l":"Dependency"},{"p":"co.aikar.commands.annotation","l":"Description"},{"p":"co.aikar.commands","l":"ExceptionHandler"},{"p":"co.aikar.commands.annotation","l":"Flags"},{"p":"co.aikar.commands","l":"ForwardingCommand"},{"p":"co.aikar.commands.annotation","l":"HelpCommand"},{"p":"co.aikar.commands","l":"HelpEntry"},{"p":"co.aikar.commands.annotation","l":"HelpSearchTags"},{"p":"co.aikar.commands","l":"InvalidCommandArgument"},{"p":"co.aikar.commands","l":"InvalidCommandContextException"},{"p":"co.aikar.commands.contexts","l":"IssuerAwareContextResolver"},{"p":"co.aikar.commands","l":"IssuerLocaleChangedCallback"},{"p":"co.aikar.commands.contexts","l":"IssuerOnlyContextResolver"},{"p":"co.aikar.commands","l":"Locales"},{"p":"co.aikar.commands","l":"MessageFormatter"},{"p":"co.aikar.commands","l":"MessageKeys"},{"p":"co.aikar.commands","l":"MessageType"},{"p":"co.aikar.commands.annotation","l":"Name"},{"p":"co.aikar.commands.apachecommonslang","l":"ApacheCommonsExceptionUtil.Nestable"},{"p":"co.aikar.commands.annotation","l":"Optional"},{"p":"co.aikar.commands.contexts","l":"OptionalContextResolver"},{"p":"co.aikar.commands","l":"CommandConditions.ParameterCondition"},{"p":"co.aikar.commands.annotation","l":"PreCommand"},{"p":"co.aikar.commands.annotation","l":"Private"},{"p":"co.aikar.commands","l":"RegisteredCommand"},{"p":"co.aikar.commands","l":"RootCommand"},{"p":"co.aikar.commands.contexts","l":"SenderAwareContextResolver"},{"p":"co.aikar.commands","l":"ShowCommandHelp"},{"p":"co.aikar.commands.annotation","l":"Single"},{"p":"co.aikar.commands.annotation","l":"Split"},{"p":"co.aikar.commands.annotation","l":"Subcommand"},{"p":"co.aikar.commands","l":"CommandCompletions.SyncCompletionRequired"},{"p":"co.aikar.commands.annotation","l":"Syntax"},{"p":"co.aikar.commands.annotation","l":"UnknownHandler"},{"p":"co.aikar.commands","l":"UnresolvedDependencyException"},{"p":"co.aikar.commands","l":"UnstableAPI"},{"p":"co.aikar.commands.annotation","l":"Values"}];updateSearchResults();
    \ No newline at end of file
    diff --git a/docs/acf-jda/allclasses-index.html b/docs/acf-jda/allclasses-index.html
    index 3e459a0a..1af5d3e8 100644
    --- a/docs/acf-jda/allclasses-index.html
    +++ b/docs/acf-jda/allclasses-index.html
    @@ -1,249 +1,119 @@
     
    -
     
     
    -
    -All Classes (ACF (JDA) 0.5.0-SNAPSHOT API)
    +
    +All Classes and Interfaces (ACF (JDA) 0.5.1-SNAPSHOT API)
    +
     
    +
    +
     
    -
    +
    +
     
    -
    -
    -
    -
    -
    -
    +
    +
     
    -
    -
     
    -
    +
    + +
    -

    All Classes

    +

    All Classes and Interfaces

    -
    - +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/allpackages-index.html b/docs/acf-jda/allpackages-index.html index 99c179f3..4dc9daaa 100644 --- a/docs/acf-jda/allpackages-index.html +++ b/docs/acf-jda/allpackages-index.html @@ -1,169 +1,69 @@ - - -All Packages (ACF (JDA) 0.5.0-SNAPSHOT API) + +All Packages (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    All Packages

    -
    - +
    Package Summary
    +
    +
    Package
    +
    Description
    + +
     
    + +
     
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/CommandConfig.html b/docs/acf-jda/co/aikar/commands/CommandConfig.html index 8f9be486..1211eddf 100644 --- a/docs/acf-jda/co/aikar/commands/CommandConfig.html +++ b/docs/acf-jda/co/aikar/commands/CommandConfig.html @@ -1,277 +1,150 @@ - - -CommandConfig (ACF (JDA) 0.5.0-SNAPSHOT API) + +CommandConfig (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandConfig

    + +

    Interface CommandConfig

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/CommandConfigProvider.html b/docs/acf-jda/co/aikar/commands/CommandConfigProvider.html index 23d29f5b..0f9f1bef 100644 --- a/docs/acf-jda/co/aikar/commands/CommandConfigProvider.html +++ b/docs/acf-jda/co/aikar/commands/CommandConfigProvider.html @@ -1,257 +1,135 @@ - - -CommandConfigProvider (ACF (JDA) 0.5.0-SNAPSHOT API) + +CommandConfigProvider (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandConfigProvider

    + +

    Interface CommandConfigProvider

    -
    -
    - -
    -
    -
      -
    • +
      public interface CommandConfigProvider
      + +
      +
        -
        - +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        + +
        provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
        +
         
        +
        +
        +
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            provide

            -
            CommandConfig provide​(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
            -
          • -
          +
        • +
          +

          Method Details

          +
            +
          • +
            +

            provide

            +
            CommandConfig provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/CommandPermissionResolver.html b/docs/acf-jda/co/aikar/commands/CommandPermissionResolver.html index 3c9e650e..9ccb3562 100644 --- a/docs/acf-jda/co/aikar/commands/CommandPermissionResolver.html +++ b/docs/acf-jda/co/aikar/commands/CommandPermissionResolver.html @@ -1,257 +1,135 @@ - - -CommandPermissionResolver (ACF (JDA) 0.5.0-SNAPSHOT API) + +CommandPermissionResolver (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Interface CommandPermissionResolver

    + +

    Interface CommandPermissionResolver

    -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandCompletions.html b/docs/acf-jda/co/aikar/commands/JDACommandCompletions.html index d19c46b1..794f0f42 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandCompletions.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandCompletions.html @@ -1,360 +1,196 @@ - - -JDACommandCompletions (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandCompletions (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandCompletions

    + +

    Class JDACommandCompletions

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>>
      • -
      • -
          -
        • co.aikar.commands.JDACommandCompletions
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>> +
      co.aikar.commands.JDACommandCompletions
      +
      +
      +

      -
      public class JDACommandCompletions
      -extends co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>>
      -
    • -
    -
    -
    -
      -
    • +
      public class JDACommandCompletions +extends co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>>
      + +
      +
        -
        -
          -
        • - - -

          Nested Class Summary

          -
            -
          • - - -

            Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

            -co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
          • -
          -
        • -
        +
      • +
        +

        Nested Class Summary

        +
        +

        Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

        +co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
        +
      • -
        -
          -
        • - - -

          Constructor Summary

          - - - - - - - - - - -
          Constructors 
          ConstructorDescription
          JDACommandCompletions​(co.aikar.commands.CommandManager manager) 
          -
        • -
        -
        - -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          co.aikar.commands.CommandCompletions.CommandCompletionHandlerregisterAsyncCompletion​(String id, - co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler) 
          co.aikar.commands.CommandCompletions.CommandCompletionHandlerregisterCompletion​(String id, - co.aikar.commands.CommandCompletions.CommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler) 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandCompletions

            -registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, setDefaultCompletion
          • -
          - -
        • -
        -
        - -
      +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      +
      JDACommandCompletions(co.aikar.commands.CommandManager manager)
      +
       
      -
      -
        -
      • - -
        -
      • -
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      co.aikar.commands.CommandCompletions.CommandCompletionHandler
      +
      registerAsyncCompletion(String id, + co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
      +
       
      +
      co.aikar.commands.CommandCompletions.CommandCompletionHandler
      +
      registerCompletion(String id, + co.aikar.commands.CommandCompletions.CommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
      +
       
      +
      +
      +
      +
      +

      Methods inherited from class co.aikar.commands.CommandCompletions

      +registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, setDefaultCompletion
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
    +
    +
      + +
    • +
      +

      Constructor Details

      +
        +
      • +
        +

        JDACommandCompletions

        +
        public JDACommandCompletions(co.aikar.commands.CommandManager manager)
        +
        +
      • +
      +
      +
    • -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          registerCompletion

          -
          public co.aikar.commands.CommandCompletions.CommandCompletionHandler registerCompletion​(String id,
          -                                                                                        co.aikar.commands.CommandCompletions.CommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
          -
          -
          Overrides:
          +
        • +
          +

          Method Details

          +
            +
          • +
            +

            registerCompletion

            +
            public co.aikar.commands.CommandCompletions.CommandCompletionHandler registerCompletion(String id, + co.aikar.commands.CommandCompletions.CommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
            +
            +
            Overrides:
            registerCompletion in class co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>>
            +
          • -
          - - - -
            -
          • -

            registerAsyncCompletion

            -
            public co.aikar.commands.CommandCompletions.CommandCompletionHandler registerAsyncCompletion​(String id,
            -                                                                                             co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
            -
            -
            Overrides:
            +
          • +
            +

            registerAsyncCompletion

            +
            public co.aikar.commands.CommandCompletions.CommandCompletionHandler registerAsyncCompletion(String id, + co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<co.aikar.commands.CommandCompletionContext<?>> handler)
            +
            +
            Overrides:
            registerAsyncCompletion in class co.aikar.commands.CommandCompletions<co.aikar.commands.CommandCompletionContext<?>>
            -
          • -
          +
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandConfig.html b/docs/acf-jda/co/aikar/commands/JDACommandConfig.html index 140503ce..b093dd7c 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandConfig.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandConfig.html @@ -1,365 +1,204 @@ - - -JDACommandConfig (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandConfig (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandConfig

    + +

    Class JDACommandConfig

    -
    - -
    - -
    -
    - + +
    +
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandContexts.html b/docs/acf-jda/co/aikar/commands/JDACommandContexts.html index 877b675b..0af454d1 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandContexts.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandContexts.html @@ -1,296 +1,144 @@ - - -JDACommandContexts (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandContexts (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandContexts

    + +

    Class JDACommandContexts

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandEvent.html b/docs/acf-jda/co/aikar/commands/JDACommandEvent.html index 82b375ae..edb01072 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandEvent.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandEvent.html @@ -1,456 +1,268 @@ - - -JDACommandEvent (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandEvent (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandEvent

    + +

    Class JDACommandEvent

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.JDACommandEvent
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.CommandIssuer

      -
      public class JDACommandEvent
      -extends Object
      -implements co.aikar.commands.CommandIssuer
      -
    • -
    -
    -
    - - -
    -
      -
    • - - -

      Method Detail

      - - - -
        -
      • -

        getEvent

        -
        public net.dv8tion.jda.api.events.message.MessageReceivedEvent getEvent()
        +
        +
          + +
        • +
          +

          Constructor Details

          + - - - -
            -
          • -

            getIssuer

            -
            public net.dv8tion.jda.api.events.message.MessageReceivedEvent getIssuer()
            -
            -
            Specified by:
            +
          +
        • + +
        • +
          +

          Method Details

          +
            +
          • +
            +

            getEvent

            +
            public net.dv8tion.jda.api.events.message.MessageReceivedEvent getEvent()
            +
            +
          • +
          • +
            +

            getIssuer

            +
            public net.dv8tion.jda.api.events.message.MessageReceivedEvent getIssuer()
            +
            +
            Specified by:
            getIssuer in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            getManager

            -
            public co.aikar.commands.CommandManager getManager()
            -
            -
            Specified by:
            +
          • +
            +

            getManager

            +
            public co.aikar.commands.CommandManager getManager()
            +
            +
            Specified by:
            getManager in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            isPlayer

            -
            public boolean isPlayer()
            -
            -
            Specified by:
            +
          • +
            +

            isPlayer

            +
            public boolean isPlayer()
            +
            +
            Specified by:
            isPlayer in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            getUniqueId

            -
            @NotNull
            -public @NotNull UUID getUniqueId()
            -
            -
            Specified by:
            +
          • +
            +

            getUniqueId

            +
            @NotNull +public @NotNull UUID getUniqueId()
            +
            +
            Specified by:
            getUniqueId in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            hasPermission

            -
            public boolean hasPermission​(String permission)
            -
            -
            Specified by:
            +
          • +
            +

            hasPermission

            +
            public boolean hasPermission(String permission)
            +
            +
            Specified by:
            hasPermission in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            sendMessageInternal

            -
            public void sendMessageInternal​(String message)
            -
            -
            Specified by:
            +
          • +
            +

            sendMessageInternal

            +
            public void sendMessageInternal(String message)
            +
            +
            Specified by:
            sendMessageInternal in interface co.aikar.commands.CommandIssuer
            +
          • -
          - - - -
            -
          • -

            sendMessage

            -
            public void sendMessage​(net.dv8tion.jda.api.entities.Message message)
            +
          • +
            +

            sendMessage

            +
            public void sendMessage(net.dv8tion.jda.api.entities.Message message)
            +
          • -
          - - - -
            -
          • -

            sendMessage

            -
            public void sendMessage​(net.dv8tion.jda.api.entities.MessageEmbed message)
            -
          • -
          +
        • +
          +

          sendMessage

          +
          public void sendMessage(net.dv8tion.jda.api.entities.MessageEmbed message)
          +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandExecutionContext.html b/docs/acf-jda/co/aikar/commands/JDACommandExecutionContext.html index f0bb9e01..8a50ce3a 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandExecutionContext.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandExecutionContext.html @@ -1,250 +1,113 @@ - - -JDACommandExecutionContext (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandExecutionContext (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandExecutionContext

    + +

    Class JDACommandExecutionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class JDACommandExecutionContext +extends co.aikar.commands.CommandExecutionContext<JDACommandExecutionContext,JDACommandEvent>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandExecutionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandExecutionContext

        +issuer
        +
      • -
        -
          -
        • - - -

          Method Summary

          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandExecutionContext

            -canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +

        Methods inherited from class co.aikar.commands.CommandExecutionContext

        +canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandManager.html b/docs/acf-jda/co/aikar/commands/JDACommandManager.html index c98416dc..35182f73 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandManager.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandManager.html @@ -1,834 +1,526 @@ - - -JDACommandManager (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandManager (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandManager

    + +

    Class JDACommandManager

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDACommandPermissionResolver.html b/docs/acf-jda/co/aikar/commands/JDACommandPermissionResolver.html index 2b83c553..d7e9fcd8 100644 --- a/docs/acf-jda/co/aikar/commands/JDACommandPermissionResolver.html +++ b/docs/acf-jda/co/aikar/commands/JDACommandPermissionResolver.html @@ -1,318 +1,174 @@ - - -JDACommandPermissionResolver (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDACommandPermissionResolver (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDACommandPermissionResolver

    + +

    Class JDACommandPermissionResolver

    -
    - -
    - -
    -
    - +
    + -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDAConditionContext.html b/docs/acf-jda/co/aikar/commands/JDAConditionContext.html index 14e5f96f..4a64005e 100644 --- a/docs/acf-jda/co/aikar/commands/JDAConditionContext.html +++ b/docs/acf-jda/co/aikar/commands/JDAConditionContext.html @@ -1,233 +1,104 @@ - - -JDAConditionContext (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDAConditionContext (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDAConditionContext

    + +

    Class JDAConditionContext

    -
    - -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDAListener.html b/docs/acf-jda/co/aikar/commands/JDAListener.html index 1c7ba66d..60859262 100644 --- a/docs/acf-jda/co/aikar/commands/JDAListener.html +++ b/docs/acf-jda/co/aikar/commands/JDAListener.html @@ -1,303 +1,160 @@ - - -JDAListener (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDAListener (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDAListener

    + +

    Class JDAListener

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • net.dv8tion.jda.api.hooks.ListenerAdapter
      • -
      • -
          -
        • co.aikar.commands.JDAListener
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • -
      +
      java.lang.Object +
      net.dv8tion.jda.api.hooks.ListenerAdapter +
      co.aikar.commands.JDAListener
      +
      +
      +
      +
      All Implemented Interfaces:
      net.dv8tion.jda.api.hooks.EventListener

      -
      public class JDAListener
      -extends net.dv8tion.jda.api.hooks.ListenerAdapter
      -
    • -
    -
    -
    -
      -
    • +
      public class JDAListener +extends net.dv8tion.jda.api.hooks.ListenerAdapter
      + +
      +
        -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          voidonMessageReceived​(net.dv8tion.jda.api.events.message.MessageReceivedEvent event) 
          voidonReady​(net.dv8tion.jda.api.events.ReadyEvent event) 
          -
            -
          • - - -

            Methods inherited from class net.dv8tion.jda.api.hooks.ListenerAdapter

            -onCategoryCreate, onCategoryDelete, onCategoryUpdateName, onCategoryUpdatePermissions, onCategoryUpdatePosition, onDisconnect, onEmoteAdded, onEmoteRemoved, onEmoteUpdateName, onEmoteUpdateRoles, onEvent, onException, onGatewayPing, onGenericCategory, onGenericCategoryUpdate, onGenericEmote, onGenericEmoteUpdate, onGenericEvent, onGenericGuild, onGenericGuildInvite, onGenericGuildMember, onGenericGuildMemberUpdate, onGenericGuildMessage, onGenericGuildMessageReaction, onGenericGuildUpdate, onGenericGuildVoice, onGenericMessage, onGenericMessageReaction, onGenericPermissionOverride, onGenericPrivateMessage, onGenericPrivateMessageReaction, onGenericRole, onGenericRoleUpdate, onGenericSelfUpdate, onGenericStoreChannel, onGenericStoreChannelUpdate, onGenericTextChannel, onGenericTextChannelUpdate, onGenericUpdate, onGenericUser, onGenericUserPresence, onGenericVoiceChannel, onGenericVoiceChannelUpdate, onGuildAvailable, onGuildBan, onGuildInviteCreate, onGuildInviteDelete, onGuildJoin, onGuildLeave, onGuildMemberJoin, onGuildMemberLeave, onGuildMemberRemove, onGuildMemberRoleAdd, onGuildMemberRoleRemove, onGuildMemberUpdateBoostTime, onGuildMemberUpdateNickname, onGuildMessageDelete, onGuildMessageEmbed, onGuildMessageReactionAdd, onGuildMessageReactionRemove, onGuildMessageReactionRemoveAll, onGuildMessageReactionRemoveEmote, onGuildMessageReceived, onGuildMessageUpdate, onGuildReady, onGuildUnavailable, onGuildUnban, onGuildUpdateAfkChannel, onGuildUpdateAfkTimeout, onGuildUpdateBanner, onGuildUpdateBoostCount, onGuildUpdateBoostTier, onGuildUpdateDescription, onGuildUpdateExplicitContentLevel, onGuildUpdateFeatures, onGuildUpdateIcon, onGuildUpdateMaxMembers, onGuildUpdateMaxPresences, onGuildUpdateMFALevel, onGuildUpdateName, onGuildUpdateNotificationLevel, onGuildUpdateOwner, onGuildUpdateRegion, onGuildUpdateSplash, onGuildUpdateSystemChannel, onGuildUpdateVanityCode, onGuildUpdateVerificationLevel, onGuildVoiceDeafen, onGuildVoiceGuildDeafen, onGuildVoiceGuildMute, onGuildVoiceJoin, onGuildVoiceLeave, onGuildVoiceMove, onGuildVoiceMute, onGuildVoiceSelfDeafen, onGuildVoiceSelfMute, onGuildVoiceStream, onGuildVoiceSuppress, onGuildVoiceUpdate, onHttpRequest, onMessageBulkDelete, onMessageDelete, onMessageEmbed, onMessageReactionAdd, onMessageReactionRemove, onMessageReactionRemoveAll, onMessageReactionRemoveEmote, onMessageUpdate, onPermissionOverrideCreate, onPermissionOverrideDelete, onPermissionOverrideUpdate, onPrivateChannelCreate, onPrivateChannelDelete, onPrivateMessageDelete, onPrivateMessageEmbed, onPrivateMessageReactionAdd, onPrivateMessageReactionRemove, onPrivateMessageReceived, onPrivateMessageUpdate, onRawGateway, onReconnect, onResume, onRoleCreate, onRoleDelete, onRoleUpdateColor, onRoleUpdateHoisted, onRoleUpdateMentionable, onRoleUpdateName, onRoleUpdatePermissions, onRoleUpdatePosition, onSelfUpdateAvatar, onSelfUpdateEmail, onSelfUpdateMFA, onSelfUpdateName, onSelfUpdateVerified, onShutdown, onStatusChange, onStoreChannelCreate, onStoreChannelDelete, onStoreChannelUpdateName, onStoreChannelUpdatePermissions, onStoreChannelUpdatePosition, onTextChannelCreate, onTextChannelDelete, onTextChannelUpdateName, onTextChannelUpdateNSFW, onTextChannelUpdateParent, onTextChannelUpdatePermissions, onTextChannelUpdatePosition, onTextChannelUpdateSlowmode, onTextChannelUpdateTopic, onUnavailableGuildJoined, onUnavailableGuildLeave, onUserActivityEnd, onUserActivityStart, onUserTyping, onUserUpdateActivityOrder, onUserUpdateAvatar, onUserUpdateDiscriminator, onUserUpdateFlags, onUserUpdateName, onUserUpdateOnlineStatus, onVoiceChannelCreate, onVoiceChannelDelete, onVoiceChannelUpdateBitrate, onVoiceChannelUpdateName, onVoiceChannelUpdateParent, onVoiceChannelUpdatePermissions, onVoiceChannelUpdatePosition, onVoiceChannelUpdateUserLimit
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        void
        +
        onMessageReceived(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
        +
         
        +
        void
        +
        onReady(net.dv8tion.jda.api.events.ReadyEvent event)
        +
         
        +
        +
        +
        +
        +

        Methods inherited from class net.dv8tion.jda.api.hooks.ListenerAdapter

        +onApplicationCommandCreate, onApplicationCommandDelete, onApplicationCommandUpdate, onButtonClick, onCategoryCreate, onCategoryDelete, onCategoryUpdateName, onCategoryUpdatePermissions, onCategoryUpdatePosition, onDisconnect, onEmoteAdded, onEmoteRemoved, onEmoteUpdateName, onEmoteUpdateRoles, onEvent, onException, onGatewayPing, onGenericApplicationCommand, onGenericCategory, onGenericCategoryUpdate, onGenericComponentInteractionCreate, onGenericEmote, onGenericEmoteUpdate, onGenericEvent, onGenericGuild, onGenericGuildInvite, onGenericGuildMember, onGenericGuildMemberUpdate, onGenericGuildMessage, onGenericGuildMessageReaction, onGenericGuildUpdate, onGenericGuildVoice, onGenericInteractionCreate, onGenericMessage, onGenericMessageReaction, onGenericPermissionOverride, onGenericPrivateMessage, onGenericPrivateMessageReaction, onGenericRole, onGenericRoleUpdate, onGenericSelfUpdate, onGenericStageInstance, onGenericStageInstanceUpdate, onGenericStoreChannel, onGenericStoreChannelUpdate, onGenericTextChannel, onGenericTextChannelUpdate, onGenericUpdate, onGenericUser, onGenericUserPresence, onGenericVoiceChannel, onGenericVoiceChannelUpdate, onGuildAvailable, onGuildBan, onGuildInviteCreate, onGuildInviteDelete, onGuildJoin, onGuildLeave, onGuildMemberJoin, onGuildMemberLeave, onGuildMemberRemove, onGuildMemberRoleAdd, onGuildMemberRoleRemove, onGuildMemberUpdate, onGuildMemberUpdateAvatar, onGuildMemberUpdateBoostTime, onGuildMemberUpdateNickname, onGuildMemberUpdatePending, onGuildMessageDelete, onGuildMessageEmbed, onGuildMessageReactionAdd, onGuildMessageReactionRemove, onGuildMessageReactionRemoveAll, onGuildMessageReactionRemoveEmote, onGuildMessageReceived, onGuildMessageUpdate, onGuildReady, onGuildTimeout, onGuildUnavailable, onGuildUnban, onGuildUpdateAfkChannel, onGuildUpdateAfkTimeout, onGuildUpdateBanner, onGuildUpdateBoostCount, onGuildUpdateBoostTier, onGuildUpdateCommunityUpdatesChannel, onGuildUpdateDescription, onGuildUpdateExplicitContentLevel, onGuildUpdateFeatures, onGuildUpdateIcon, onGuildUpdateLocale, onGuildUpdateMaxMembers, onGuildUpdateMaxPresences, onGuildUpdateMFALevel, onGuildUpdateName, onGuildUpdateNotificationLevel, onGuildUpdateNSFWLevel, onGuildUpdateOwner, onGuildUpdateRegion, onGuildUpdateRulesChannel, onGuildUpdateSplash, onGuildUpdateSystemChannel, onGuildUpdateVanityCode, onGuildUpdateVerificationLevel, onGuildVoiceDeafen, onGuildVoiceGuildDeafen, onGuildVoiceGuildMute, onGuildVoiceJoin, onGuildVoiceLeave, onGuildVoiceMove, onGuildVoiceMute, onGuildVoiceRequestToSpeak, onGuildVoiceSelfDeafen, onGuildVoiceSelfMute, onGuildVoiceStream, onGuildVoiceSuppress, onGuildVoiceUpdate, onGuildVoiceVideo, onHttpRequest, onMessageBulkDelete, onMessageDelete, onMessageEmbed, onMessageReactionAdd, onMessageReactionRemove, onMessageReactionRemoveAll, onMessageReactionRemoveEmote, onMessageUpdate, onPermissionOverrideCreate, onPermissionOverrideDelete, onPermissionOverrideUpdate, onPrivateChannelCreate, onPrivateChannelDelete, onPrivateMessageDelete, onPrivateMessageEmbed, onPrivateMessageReactionAdd, onPrivateMessageReactionRemove, onPrivateMessageReceived, onPrivateMessageUpdate, onRawGateway, onReconnect, onReconnected, onResume, onResumed, onRoleCreate, onRoleDelete, onRoleUpdateColor, onRoleUpdateHoisted, onRoleUpdateIcon, onRoleUpdateMentionable, onRoleUpdateName, onRoleUpdatePermissions, onRoleUpdatePosition, onSelectionMenu, onSelfUpdateAvatar, onSelfUpdateMFA, onSelfUpdateName, onSelfUpdateVerified, onShutdown, onSlashCommand, onStageInstanceCreate, onStageInstanceDelete, onStageInstanceUpdatePrivacyLevel, onStageInstanceUpdateTopic, onStatusChange, onStoreChannelCreate, onStoreChannelDelete, onStoreChannelUpdateName, onStoreChannelUpdatePermissions, onStoreChannelUpdatePosition, onTextChannelCreate, onTextChannelDelete, onTextChannelUpdateName, onTextChannelUpdateNews, onTextChannelUpdateNSFW, onTextChannelUpdateParent, onTextChannelUpdatePermissions, onTextChannelUpdatePosition, onTextChannelUpdateSlowmode, onTextChannelUpdateTopic, onUnavailableGuildJoined, onUnavailableGuildLeave, onUserActivityEnd, onUserActivityStart, onUserTyping, onUserUpdateActivities, onUserUpdateActivityOrder, onUserUpdateAvatar, onUserUpdateDiscriminator, onUserUpdateFlags, onUserUpdateName, onUserUpdateOnlineStatus, onVoiceChannelCreate, onVoiceChannelDelete, onVoiceChannelUpdateBitrate, onVoiceChannelUpdateName, onVoiceChannelUpdateParent, onVoiceChannelUpdatePermissions, onVoiceChannelUpdatePosition, onVoiceChannelUpdateRegion, onVoiceChannelUpdateUserLimit
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            onMessageReceived

            -
            public void onMessageReceived​(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
            -
            -
            Overrides:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              onMessageReceived

              +
              public void onMessageReceived(net.dv8tion.jda.api.events.message.MessageReceivedEvent event)
              +
              +
              Overrides:
              onMessageReceived in class net.dv8tion.jda.api.hooks.ListenerAdapter
              +
            • -
            - - - -
              -
            • -

              onReady

              -
              public void onReady​(net.dv8tion.jda.api.events.ReadyEvent event)
              -
              -
              Overrides:
              +
            • +
              +

              onReady

              +
              public void onReady(net.dv8tion.jda.api.events.ReadyEvent event)
              +
              +
              Overrides:
              onReady in class net.dv8tion.jda.api.hooks.ListenerAdapter
              -
            • -
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDALocales.html b/docs/acf-jda/co/aikar/commands/JDALocales.html index 972df2d5..41bcd5fa 100644 --- a/docs/acf-jda/co/aikar/commands/JDALocales.html +++ b/docs/acf-jda/co/aikar/commands/JDALocales.html @@ -1,296 +1,144 @@ - - -JDALocales (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDALocales (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDALocales

    + +

    Class JDALocales

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.Locales
      • -
      • -
          -
        • co.aikar.commands.JDALocales
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.Locales +
      co.aikar.commands.JDALocales
      +
      +
      +

      -
      public class JDALocales
      -extends co.aikar.commands.Locales
      -
    • -
    -
    -
    -
      -
    • +
      public class JDALocales +extends co.aikar.commands.Locales
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.Locales

            -AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.Locales

        +AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
        +
      • -
        -
          -
        • - - -

          Constructor Summary

          - - - - - - - - - - -
          Constructors 
          ConstructorDescription
          JDALocales​(co.aikar.commands.CommandManager manager) 
          -
        • -
        +
      • +
        +

        Constructor Summary

        +
        Constructors
        +
        +
        Constructor
        +
        Description
        +
        JDALocales(co.aikar.commands.CommandManager manager)
        +
         
        +
        +
      • -
        -
          -
        • - - -

          Method Summary

          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.Locales

            -addBundleClassLoader, addMessage, addMessageBundle, addMessageBundle, addMessageBundles, addMessages, addMessageStrings, getDefaultLocale, getMessage, getOptionalMessage, loadLanguages, loadMissingBundles, replaceI18NStrings, setDefaultLocale
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +

        Methods inherited from class co.aikar.commands.Locales

        +addBundleClassLoader, addMessage, addMessageBundle, addMessageBundle, addMessageBundles, addMessages, addMessageStrings, getDefaultLocale, getMessage, getOptionalMessage, loadLanguages, loadMissingBundles, replaceI18NStrings, setDefaultLocale
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            JDALocales

            -
            public JDALocales​(co.aikar.commands.CommandManager manager)
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            JDALocales

            +
            public JDALocales(co.aikar.commands.CommandManager manager)
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDAMessageFormatter.html b/docs/acf-jda/co/aikar/commands/JDAMessageFormatter.html index 4ec6d4ae..d47290ad 100644 --- a/docs/acf-jda/co/aikar/commands/JDAMessageFormatter.html +++ b/docs/acf-jda/co/aikar/commands/JDAMessageFormatter.html @@ -1,279 +1,135 @@ - - -JDAMessageFormatter (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDAMessageFormatter (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDAMessageFormatter

    + +

    Class JDAMessageFormatter

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.MessageFormatter<String>
      • -
      • -
          -
        • co.aikar.commands.JDAMessageFormatter
        • -
        -
      • -
      -
    • -
    -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDAOptions.html b/docs/acf-jda/co/aikar/commands/JDAOptions.html index b26e7130..dc257ab7 100644 --- a/docs/acf-jda/co/aikar/commands/JDAOptions.html +++ b/docs/acf-jda/co/aikar/commands/JDAOptions.html @@ -1,350 +1,191 @@ - - -JDAOptions (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDAOptions (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDAOptions

    + +

    Class JDAOptions

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/JDARootCommand.html b/docs/acf-jda/co/aikar/commands/JDARootCommand.html index 8dd741c2..855aa2cd 100644 --- a/docs/acf-jda/co/aikar/commands/JDARootCommand.html +++ b/docs/acf-jda/co/aikar/commands/JDARootCommand.html @@ -1,371 +1,211 @@ - - -JDARootCommand (ACF (JDA) 0.5.0-SNAPSHOT API) + +JDARootCommand (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class JDARootCommand

    + +

    Class JDARootCommand

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.JDARootCommand
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.RootCommand

      -
      public class JDARootCommand
      -extends Object
      -implements co.aikar.commands.RootCommand
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            addChild

            -
            public void addChild​(co.aikar.commands.BaseCommand command)
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              addChild

              +
              public void addChild(co.aikar.commands.BaseCommand command)
              +
              +
              Specified by:
              addChild in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getSubCommands

              -
              public com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand> getSubCommands()
              -
              -
              Specified by:
              +
            • +
              +

              getSubCommands

              +
              public com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand> getSubCommands()
              +
              +
              Specified by:
              getSubCommands in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getChildren

              -
              public List<co.aikar.commands.BaseCommand> getChildren()
              -
              -
              Specified by:
              +
            • +
              +

              getChildren

              +
              public List<co.aikar.commands.BaseCommand> getChildren()
              +
              +
              Specified by:
              getChildren in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getCommandName

              -
              public String getCommandName()
              -
              -
              Specified by:
              +
            • +
              +

              getCommandName

              + +
              +
              Specified by:
              getCommandName in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getDefCommand

              -
              public co.aikar.commands.BaseCommand getDefCommand()
              -
              -
              Specified by:
              +
            • +
              +

              getDefCommand

              +
              public co.aikar.commands.BaseCommand getDefCommand()
              +
              +
              Specified by:
              getDefCommand in interface co.aikar.commands.RootCommand
              -
            • -
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/Author.html b/docs/acf-jda/co/aikar/commands/annotation/Author.html index 0445250c..d1da37c9 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/Author.html +++ b/docs/acf-jda/co/aikar/commands/annotation/Author.html @@ -1,192 +1,87 @@ - - -Author (ACF (JDA) 0.5.0-SNAPSHOT API) + +Author (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type Author

    + +

    Annotation Type Author

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/CrossGuild.html b/docs/acf-jda/co/aikar/commands/annotation/CrossGuild.html index 163a42e4..10be89b8 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/CrossGuild.html +++ b/docs/acf-jda/co/aikar/commands/annotation/CrossGuild.html @@ -1,193 +1,88 @@ - - -CrossGuild (ACF (JDA) 0.5.0-SNAPSHOT API) + +CrossGuild (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type CrossGuild

    + +

    Annotation Type CrossGuild

    -
    -
    -
      -
    • +

      -
      @Target(PARAMETER)
      -@Retention(RUNTIME)
      -public @interface CrossGuild
      +
      The CrossGuild annotation is to define whether the parameter should be guild-specific or global.

      If a supported parameter is marked with the CrossGuild annotation, the parameter will be filled from a global perspective (i.e., all of the guilds the bot is connected to). Otherwise, the parameter will be filled from command input.

      -
    • -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/SelfUser.html b/docs/acf-jda/co/aikar/commands/annotation/SelfUser.html index e0ae2f9d..d25097e4 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/SelfUser.html +++ b/docs/acf-jda/co/aikar/commands/annotation/SelfUser.html @@ -1,189 +1,84 @@ - - -SelfUser (ACF (JDA) 0.5.0-SNAPSHOT API) + +SelfUser (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Annotation Type SelfUser

    + +

    Annotation Type SelfUser

    -
    -
    - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/class-use/Author.html b/docs/acf-jda/co/aikar/commands/annotation/class-use/Author.html index 71bd3264..7f77eb15 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/class-use/Author.html +++ b/docs/acf-jda/co/aikar/commands/annotation/class-use/Author.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.annotation.Author (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.Author (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.Author

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.Author

    -
    No usage of co.aikar.commands.annotation.Author
    -
    +No usage of co.aikar.commands.annotation.Author
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/class-use/CrossGuild.html b/docs/acf-jda/co/aikar/commands/annotation/class-use/CrossGuild.html index 69503ae9..e961f463 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/class-use/CrossGuild.html +++ b/docs/acf-jda/co/aikar/commands/annotation/class-use/CrossGuild.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.annotation.CrossGuild (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.CrossGuild (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.CrossGuild

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.CrossGuild

    -
    No usage of co.aikar.commands.annotation.CrossGuild
    -
    +No usage of co.aikar.commands.annotation.CrossGuild
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/class-use/SelfUser.html b/docs/acf-jda/co/aikar/commands/annotation/class-use/SelfUser.html index 00be1090..692b9bfb 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/class-use/SelfUser.html +++ b/docs/acf-jda/co/aikar/commands/annotation/class-use/SelfUser.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.annotation.SelfUser (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Annotation Type co.aikar.commands.annotation.SelfUser (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.annotation.SelfUser

    +

    Uses of Annotation Type
    co.aikar.commands.annotation.SelfUser

    -
    No usage of co.aikar.commands.annotation.SelfUser
    -
    +No usage of co.aikar.commands.annotation.SelfUser
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/package-summary.html b/docs/acf-jda/co/aikar/commands/annotation/package-summary.html index 7cd60170..a8233ef0 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/package-summary.html +++ b/docs/acf-jda/co/aikar/commands/annotation/package-summary.html @@ -1,181 +1,108 @@ - - -co.aikar.commands.annotation (ACF (JDA) 0.5.0-SNAPSHOT API) + +co.aikar.commands.annotation (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.annotation

    +

    Package co.aikar.commands.annotation

    -
    -
      -
    • - - - - - - - - - - - - - - - - - - - - -
      Annotation Types Summary 
      Annotation TypeDescription
      Author +
      +
      package co.aikar.commands.annotation
      +
      +
        +
      • + +
      • +
      • +
        +
        Annotation Types
        +
        +
        Class
        +
        Description
        + +
        The Author annotation is to define whether the parameter should be the author object from the event or parsed from the user's input.
        -
      CrossGuild + + +
      The CrossGuild annotation is to define whether the parameter should be guild-specific or global.
      -
      SelfUser + + +
      The SelfUser annotation is to define whether the parameter should be represented by JDA's user object or if it should be parsed from command input.
      -
      +
    +
    +
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/package-tree.html b/docs/acf-jda/co/aikar/commands/annotation/package-tree.html index 9e6c95c1..7060268c 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/package-tree.html +++ b/docs/acf-jda/co/aikar/commands/annotation/package-tree.html @@ -1,160 +1,72 @@ - - -co.aikar.commands.annotation Class Hierarchy (ACF (JDA) 0.5.0-SNAPSHOT API) + +co.aikar.commands.annotation Class Hierarchy (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.annotation

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Annotation Type Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/annotation/package-use.html b/docs/acf-jda/co/aikar/commands/annotation/package-use.html index 23daadd5..a1c111ad 100644 --- a/docs/acf-jda/co/aikar/commands/annotation/package-use.html +++ b/docs/acf-jda/co/aikar/commands/annotation/package-use.html @@ -1,147 +1,60 @@ - - -Uses of Package co.aikar.commands.annotation (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.annotation (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.annotation

    -
    No usage of co.aikar.commands.annotation
    -
    +No usage of co.aikar.commands.annotation
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/CommandConfig.html b/docs/acf-jda/co/aikar/commands/class-use/CommandConfig.html index 1fe67fa3..73f16953 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/CommandConfig.html +++ b/docs/acf-jda/co/aikar/commands/class-use/CommandConfig.html @@ -1,236 +1,112 @@ - - -Uses of Interface co.aikar.commands.CommandConfig (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandConfig (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandConfig

    +

    Uses of Interface
    co.aikar.commands.CommandConfig

    +
    +
    Packages that use CommandConfig
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/CommandConfigProvider.html b/docs/acf-jda/co/aikar/commands/class-use/CommandConfigProvider.html index f87ec837..1ec45e78 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/CommandConfigProvider.html +++ b/docs/acf-jda/co/aikar/commands/class-use/CommandConfigProvider.html @@ -1,241 +1,115 @@ - - -Uses of Interface co.aikar.commands.CommandConfigProvider (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandConfigProvider (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandConfigProvider

    +

    Uses of Interface
    co.aikar.commands.CommandConfigProvider

    +
    +
    Packages that use CommandConfigProvider
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/CommandPermissionResolver.html b/docs/acf-jda/co/aikar/commands/class-use/CommandPermissionResolver.html index 3b4eaf88..7fdb7dae 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/CommandPermissionResolver.html +++ b/docs/acf-jda/co/aikar/commands/class-use/CommandPermissionResolver.html @@ -1,226 +1,106 @@ - - -Uses of Interface co.aikar.commands.CommandPermissionResolver (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Interface co.aikar.commands.CommandPermissionResolver (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Interface
    co.aikar.commands.CommandPermissionResolver

    +

    Uses of Interface
    co.aikar.commands.CommandPermissionResolver

    +
    +
    Packages that use CommandPermissionResolver
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandCompletions.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandCompletions.html index 0a7d2c9f..e94eed80 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandCompletions.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandCompletions.html @@ -1,191 +1,85 @@ - - -Uses of Class co.aikar.commands.JDACommandCompletions (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandCompletions (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandCompletions

    +

    Uses of Class
    co.aikar.commands.JDACommandCompletions

    +
    +
    Packages that use JDACommandCompletions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandConfig.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandConfig.html index 93be74e0..40006876 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandConfig.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandConfig.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDACommandConfig (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandConfig (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandConfig

    +

    Uses of Class
    co.aikar.commands.JDACommandConfig

    -
    No usage of co.aikar.commands.JDACommandConfig
    -
    +No usage of co.aikar.commands.JDACommandConfig
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandContexts.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandContexts.html index 93bc348f..4496c975 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandContexts.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandContexts.html @@ -1,191 +1,85 @@ - - -Uses of Class co.aikar.commands.JDACommandContexts (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandContexts (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandContexts

    +

    Uses of Class
    co.aikar.commands.JDACommandContexts

    +
    +
    Packages that use JDACommandContexts
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandEvent.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandEvent.html index 1e9f4599..42b3626c 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandEvent.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandEvent.html @@ -1,215 +1,101 @@ - - -Uses of Class co.aikar.commands.JDACommandEvent (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandEvent (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandEvent

    +

    Uses of Class
    co.aikar.commands.JDACommandEvent

    +
    +
    Packages that use JDACommandEvent
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandExecutionContext.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandExecutionContext.html index 9028ca7a..c7cc2dfd 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandExecutionContext.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandExecutionContext.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDACommandExecutionContext (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandExecutionContext (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.JDACommandExecutionContext

    -
    No usage of co.aikar.commands.JDACommandExecutionContext
    -
    +No usage of co.aikar.commands.JDACommandExecutionContext
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandManager.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandManager.html index 14b0366e..5b4a4ae9 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandManager.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandManager.html @@ -1,233 +1,114 @@ - - -Uses of Class co.aikar.commands.JDACommandManager (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandManager (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandManager

    +

    Uses of Class
    co.aikar.commands.JDACommandManager

    +
    +
    Packages that use JDACommandManager
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDACommandPermissionResolver.html b/docs/acf-jda/co/aikar/commands/class-use/JDACommandPermissionResolver.html index 19f73baa..3df4570a 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDACommandPermissionResolver.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDACommandPermissionResolver.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDACommandPermissionResolver (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDACommandPermissionResolver (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDACommandPermissionResolver

    +

    Uses of Class
    co.aikar.commands.JDACommandPermissionResolver

    -
    No usage of co.aikar.commands.JDACommandPermissionResolver
    -
    +No usage of co.aikar.commands.JDACommandPermissionResolver
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDAConditionContext.html b/docs/acf-jda/co/aikar/commands/class-use/JDAConditionContext.html index cfeae7c9..feab3321 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDAConditionContext.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDAConditionContext.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDAConditionContext (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDAConditionContext (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDAConditionContext

    +

    Uses of Class
    co.aikar.commands.JDAConditionContext

    -
    No usage of co.aikar.commands.JDAConditionContext
    -
    +No usage of co.aikar.commands.JDAConditionContext
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDAListener.html b/docs/acf-jda/co/aikar/commands/class-use/JDAListener.html index e73c51eb..f1355bce 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDAListener.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDAListener.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDAListener (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDAListener (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDAListener

    +

    Uses of Class
    co.aikar.commands.JDAListener

    -
    No usage of co.aikar.commands.JDAListener
    -
    +No usage of co.aikar.commands.JDAListener
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDALocales.html b/docs/acf-jda/co/aikar/commands/class-use/JDALocales.html index 9ba0ba3b..a330ce3f 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDALocales.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDALocales.html @@ -1,191 +1,85 @@ - - -Uses of Class co.aikar.commands.JDALocales (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDALocales (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDALocales

    +

    Uses of Class
    co.aikar.commands.JDALocales

    +
    +
    Packages that use JDALocales
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDAMessageFormatter.html b/docs/acf-jda/co/aikar/commands/class-use/JDAMessageFormatter.html index acb7ae4b..d2cf9410 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDAMessageFormatter.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDAMessageFormatter.html @@ -1,147 +1,60 @@ - - -Uses of Class co.aikar.commands.JDAMessageFormatter (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDAMessageFormatter (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDAMessageFormatter

    +

    Uses of Class
    co.aikar.commands.JDAMessageFormatter

    -
    No usage of co.aikar.commands.JDAMessageFormatter
    -
    +No usage of co.aikar.commands.JDAMessageFormatter
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDAOptions.html b/docs/acf-jda/co/aikar/commands/class-use/JDAOptions.html index b53a72ea..1a5314a8 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDAOptions.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDAOptions.html @@ -1,220 +1,104 @@ - - -Uses of Class co.aikar.commands.JDAOptions (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDAOptions (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDAOptions

    +

    Uses of Class
    co.aikar.commands.JDAOptions

    +
    +
    Packages that use JDAOptions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/class-use/JDARootCommand.html b/docs/acf-jda/co/aikar/commands/class-use/JDARootCommand.html index 020f44bb..926981c7 100644 --- a/docs/acf-jda/co/aikar/commands/class-use/JDARootCommand.html +++ b/docs/acf-jda/co/aikar/commands/class-use/JDARootCommand.html @@ -1,191 +1,85 @@ - - -Uses of Class co.aikar.commands.JDARootCommand (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.JDARootCommand (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.JDARootCommand

    +

    Uses of Class
    co.aikar.commands.JDARootCommand

    +
    +
    Packages that use JDARootCommand
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/package-summary.html b/docs/acf-jda/co/aikar/commands/package-summary.html index fd8a9847..f5fe72e3 100644 --- a/docs/acf-jda/co/aikar/commands/package-summary.html +++ b/docs/acf-jda/co/aikar/commands/package-summary.html @@ -1,236 +1,132 @@ - - -co.aikar.commands (ACF (JDA) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/package-tree.html b/docs/acf-jda/co/aikar/commands/package-tree.html index df5ec876..cac8e222 100644 --- a/docs/acf-jda/co/aikar/commands/package-tree.html +++ b/docs/acf-jda/co/aikar/commands/package-tree.html @@ -1,217 +1,129 @@ - - -co.aikar.commands Class Hierarchy (ACF (JDA) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Interface Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/co/aikar/commands/package-use.html b/docs/acf-jda/co/aikar/commands/package-use.html index 6fd6e2d9..aa12590d 100644 --- a/docs/acf-jda/co/aikar/commands/package-use.html +++ b/docs/acf-jda/co/aikar/commands/package-use.html @@ -1,218 +1,100 @@ - - -Uses of Package co.aikar.commands (ACF (JDA) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/index-all.html b/docs/acf-jda/index-all.html index 5745217e..c120c90c 100644 --- a/docs/acf-jda/index-all.html +++ b/docs/acf-jda/index-all.html @@ -1,410 +1,288 @@ - - -Index (ACF (JDA) 0.5.0-SNAPSHOT API) + +Index (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A C D G H I J L O P R S U 
    All Classes All Packages - - -

    A

    -
    -
    addChild(BaseCommand) - Method in class co.aikar.commands.JDARootCommand
    +
    +

    Index

    +
    +A C D G H I J L O P R S U 
    All Classes and Interfaces|All Packages +

    A

    +
    +
    addChild(BaseCommand) - Method in class co.aikar.commands.JDARootCommand
     
    -
    Author - Annotation Type in co.aikar.commands.annotation
    +
    Author - Annotation Type in co.aikar.commands.annotation
    The Author annotation is to define whether the parameter should be the author object from the event or parsed from the user's input.
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    co.aikar.commands.annotation - package co.aikar.commands.annotation
     
    -
    CommandConfig - Interface in co.aikar.commands
    +
    CommandConfig - Interface in co.aikar.commands
     
    -
    CommandConfigProvider - Interface in co.aikar.commands
    +
    CommandConfigProvider - Interface in co.aikar.commands
     
    -
    CommandPermissionResolver - Interface in co.aikar.commands
    +
    CommandPermissionResolver - Interface in co.aikar.commands
     
    -
    commandPrefixes - Variable in class co.aikar.commands.JDACommandConfig
    +
    commandPrefixes - Variable in class co.aikar.commands.JDACommandConfig
     
    -
    commands - Variable in class co.aikar.commands.JDACommandManager
    +
    commands - Variable in class co.aikar.commands.JDACommandManager
     
    -
    completions - Variable in class co.aikar.commands.JDACommandManager
    +
    completions - Variable in class co.aikar.commands.JDACommandManager
     
    -
    configProvider(CommandConfigProvider) - Method in class co.aikar.commands.JDAOptions
    +
    configProvider(CommandConfigProvider) - Method in class co.aikar.commands.JDAOptions
     
    -
    contexts - Variable in class co.aikar.commands.JDACommandManager
    +
    contexts - Variable in class co.aikar.commands.JDACommandManager
     
    -
    create(JDA) - Method in class co.aikar.commands.JDAOptions
    +
    create(JDA) - Method in class co.aikar.commands.JDAOptions
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.JDACommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.JDACommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.JDACommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.JDACommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.JDACommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.JDACommandManager
     
    -
    CrossGuild - Annotation Type in co.aikar.commands.annotation
    +
    CrossGuild - Annotation Type in co.aikar.commands.annotation
    The CrossGuild annotation is to define whether the parameter should be guild-specific or global.
    - - - -

    D

    -
    -
    defaultConfig(CommandConfig) - Method in class co.aikar.commands.JDAOptions
    +

    D

    +
    +
    defaultConfig(CommandConfig) - Method in class co.aikar.commands.JDAOptions
     
    - - - -

    G

    -
    -
    getBotOwnerId() - Method in class co.aikar.commands.JDACommandManager
    +

    G

    +
    +
    getBotOwnerId() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getChildren() - Method in class co.aikar.commands.JDARootCommand
    +
    getChildren() - Method in class co.aikar.commands.JDARootCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.JDACommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.JDACommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.JDACommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.JDACommandManager
     
    -
    getCommandName() - Method in class co.aikar.commands.JDARootCommand
    +
    getCommandName() - Method in class co.aikar.commands.JDARootCommand
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.JDACommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.JDACommandManager
     
    -
    getCommandPrefixes() - Method in interface co.aikar.commands.CommandConfig
    +
    getCommandPrefixes() - Method in interface co.aikar.commands.CommandConfig
     
    -
    getCommandPrefixes() - Method in class co.aikar.commands.JDACommandConfig
    +
    getCommandPrefixes() - Method in class co.aikar.commands.JDACommandConfig
     
    -
    getConfigProvider() - Method in class co.aikar.commands.JDACommandManager
    +
    getConfigProvider() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getDefaultConfig() - Method in class co.aikar.commands.JDACommandManager
    +
    getDefaultConfig() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getDefCommand() - Method in class co.aikar.commands.JDARootCommand
    +
    getDefCommand() - Method in class co.aikar.commands.JDARootCommand
     
    -
    getEvent() - Method in class co.aikar.commands.JDACommandEvent
    +
    getEvent() - Method in class co.aikar.commands.JDACommandEvent
     
    -
    getIssuer() - Method in class co.aikar.commands.JDACommandEvent
    +
    getIssuer() - Method in class co.aikar.commands.JDACommandEvent
     
    -
    getJDA() - Method in class co.aikar.commands.JDACommandManager
    +
    getJDA() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getLocales() - Method in class co.aikar.commands.JDACommandManager
    +
    getLocales() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getLogger() - Method in class co.aikar.commands.JDACommandManager
    +
    getLogger() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getManager() - Method in class co.aikar.commands.JDACommandEvent
    +
    getManager() - Method in class co.aikar.commands.JDACommandEvent
     
    -
    getManager() - Method in class co.aikar.commands.JDARootCommand
    +
    getManager() - Method in class co.aikar.commands.JDARootCommand
     
    -
    getPermissionResolver() - Method in class co.aikar.commands.JDACommandManager
    +
    getPermissionResolver() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.JDACommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.JDACommandManager
     
    -
    getSubCommands() - Method in class co.aikar.commands.JDARootCommand
    +
    getSubCommands() - Method in class co.aikar.commands.JDARootCommand
     
    -
    getUniqueId() - Method in class co.aikar.commands.JDACommandEvent
    +
    getUniqueId() - Method in class co.aikar.commands.JDACommandEvent
     
    - - - -

    H

    -
    -
    hasPermission(JDACommandManager, JDACommandEvent, String) - Method in interface co.aikar.commands.CommandPermissionResolver
    +

    H

    +
    +
    hasPermission(JDACommandManager, JDACommandEvent, String) - Method in interface co.aikar.commands.CommandPermissionResolver
     
    -
    hasPermission(JDACommandManager, JDACommandEvent, String) - Method in class co.aikar.commands.JDACommandPermissionResolver
    +
    hasPermission(JDACommandManager, JDACommandEvent, String) - Method in class co.aikar.commands.JDACommandPermissionResolver
     
    -
    hasPermission(String) - Method in class co.aikar.commands.JDACommandEvent
    +
    hasPermission(String) - Method in class co.aikar.commands.JDACommandEvent
     
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.JDACommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.JDACommandManager
     
    - - - -

    I

    -
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.JDACommandManager
    +

    I

    +
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.JDACommandManager
     
    -
    isPlayer() - Method in class co.aikar.commands.JDACommandEvent
    +
    isPlayer() - Method in class co.aikar.commands.JDACommandEvent
     
    - - - -

    J

    -
    -
    JDACommandCompletions - Class in co.aikar.commands
    +

    J

    +
    +
    JDACommandCompletions - Class in co.aikar.commands
     
    -
    JDACommandCompletions(CommandManager) - Constructor for class co.aikar.commands.JDACommandCompletions
    +
    JDACommandCompletions(CommandManager) - Constructor for class co.aikar.commands.JDACommandCompletions
     
    -
    JDACommandConfig - Class in co.aikar.commands
    +
    JDACommandConfig - Class in co.aikar.commands
     
    -
    JDACommandConfig() - Constructor for class co.aikar.commands.JDACommandConfig
    +
    JDACommandConfig() - Constructor for class co.aikar.commands.JDACommandConfig
     
    -
    JDACommandContexts - Class in co.aikar.commands
    +
    JDACommandContexts - Class in co.aikar.commands
     
    -
    JDACommandContexts(JDACommandManager) - Constructor for class co.aikar.commands.JDACommandContexts
    +
    JDACommandContexts(JDACommandManager) - Constructor for class co.aikar.commands.JDACommandContexts
     
    -
    JDACommandEvent - Class in co.aikar.commands
    +
    JDACommandEvent - Class in co.aikar.commands
     
    -
    JDACommandEvent(JDACommandManager, MessageReceivedEvent) - Constructor for class co.aikar.commands.JDACommandEvent
    +
    JDACommandEvent(JDACommandManager, MessageReceivedEvent) - Constructor for class co.aikar.commands.JDACommandEvent
     
    -
    JDACommandExecutionContext - Class in co.aikar.commands
    +
    JDACommandExecutionContext - Class in co.aikar.commands
     
    -
    JDACommandManager - Class in co.aikar.commands
    +
    JDACommandManager - Class in co.aikar.commands
     
    -
    JDACommandManager(JDA) - Constructor for class co.aikar.commands.JDACommandManager
    +
    JDACommandManager(JDA) - Constructor for class co.aikar.commands.JDACommandManager
     
    -
    JDACommandManager(JDA, JDAOptions) - Constructor for class co.aikar.commands.JDACommandManager
    +
    JDACommandManager(JDA, JDAOptions) - Constructor for class co.aikar.commands.JDACommandManager
     
    -
    JDACommandPermissionResolver - Class in co.aikar.commands
    +
    JDACommandPermissionResolver - Class in co.aikar.commands
     
    -
    JDACommandPermissionResolver() - Constructor for class co.aikar.commands.JDACommandPermissionResolver
    +
    JDACommandPermissionResolver() - Constructor for class co.aikar.commands.JDACommandPermissionResolver
     
    -
    JDAConditionContext - Class in co.aikar.commands
    +
    JDAConditionContext - Class in co.aikar.commands
     
    -
    JDAListener - Class in co.aikar.commands
    +
    JDAListener - Class in co.aikar.commands
     
    -
    JDALocales - Class in co.aikar.commands
    +
    JDALocales - Class in co.aikar.commands
     
    -
    JDALocales(CommandManager) - Constructor for class co.aikar.commands.JDALocales
    +
    JDALocales(CommandManager) - Constructor for class co.aikar.commands.JDALocales
     
    -
    JDAMessageFormatter - Class in co.aikar.commands
    +
    JDAMessageFormatter - Class in co.aikar.commands
     
    -
    JDAMessageFormatter() - Constructor for class co.aikar.commands.JDAMessageFormatter
    +
    JDAMessageFormatter() - Constructor for class co.aikar.commands.JDAMessageFormatter
     
    -
    JDAOptions - Class in co.aikar.commands
    +
    JDAOptions - Class in co.aikar.commands
     
    -
    JDAOptions() - Constructor for class co.aikar.commands.JDAOptions
    +
    JDAOptions() - Constructor for class co.aikar.commands.JDAOptions
     
    -
    JDARootCommand - Class in co.aikar.commands
    +
    JDARootCommand - Class in co.aikar.commands
     
    - - - -

    L

    -
    -
    locales - Variable in class co.aikar.commands.JDACommandManager
    +

    L

    +
    +
    locales - Variable in class co.aikar.commands.JDACommandManager
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.JDACommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.JDACommandManager
     
    - - - -

    O

    -
    -
    onMessageReceived(MessageReceivedEvent) - Method in class co.aikar.commands.JDAListener
    +

    O

    +
    +
    onMessageReceived(MessageReceivedEvent) - Method in class co.aikar.commands.JDAListener
     
    -
    onReady(ReadyEvent) - Method in class co.aikar.commands.JDAListener
    +
    onReady(ReadyEvent) - Method in class co.aikar.commands.JDAListener
     
    -
    options() - Static method in class co.aikar.commands.JDACommandManager
    +
    options() - Static method in class co.aikar.commands.JDACommandManager
     
    - - - -

    P

    -
    -
    permissionResolver(CommandPermissionResolver) - Method in class co.aikar.commands.JDAOptions
    +

    P

    +
    +
    permissionResolver(CommandPermissionResolver) - Method in class co.aikar.commands.JDAOptions
     
    -
    provide(MessageReceivedEvent) - Method in interface co.aikar.commands.CommandConfig
    +
    provide(MessageReceivedEvent) - Method in interface co.aikar.commands.CommandConfig
     
    -
    provide(MessageReceivedEvent) - Method in interface co.aikar.commands.CommandConfigProvider
    +
    provide(MessageReceivedEvent) - Method in interface co.aikar.commands.CommandConfigProvider
     
    - - - -

    R

    -
    -
    registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler<CommandCompletionContext<?>>) - Method in class co.aikar.commands.JDACommandCompletions
    +

    R

    +
    +
    registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler<CommandCompletionContext<?>>) - Method in class co.aikar.commands.JDACommandCompletions
     
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.JDACommandManager
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.JDACommandManager
     
    -
    registerCompletion(String, CommandCompletions.CommandCompletionHandler<CommandCompletionContext<?>>) - Method in class co.aikar.commands.JDACommandCompletions
    +
    registerCompletion(String, CommandCompletions.CommandCompletionHandler<CommandCompletionContext<?>>) - Method in class co.aikar.commands.JDACommandCompletions
     
    - - - -

    S

    -
    -
    SelfUser - Annotation Type in co.aikar.commands.annotation
    +

    S

    +
    +
    SelfUser - Annotation Type in co.aikar.commands.annotation
    The SelfUser annotation is to define whether the parameter should be represented by JDA's user object or if it should be parsed from command input.
    -
    sendMessage(Message) - Method in class co.aikar.commands.JDACommandEvent
    +
    sendMessage(Message) - Method in class co.aikar.commands.JDACommandEvent
     
    -
    sendMessage(MessageEmbed) - Method in class co.aikar.commands.JDACommandEvent
    +
    sendMessage(MessageEmbed) - Method in class co.aikar.commands.JDACommandEvent
     
    -
    sendMessageInternal(String) - Method in class co.aikar.commands.JDACommandEvent
    +
    sendMessageInternal(String) - Method in class co.aikar.commands.JDACommandEvent
     
    -
    setConfigProvider(CommandConfigProvider) - Method in class co.aikar.commands.JDACommandManager
    +
    setConfigProvider(CommandConfigProvider) - Method in class co.aikar.commands.JDACommandManager
     
    -
    setDefaultConfig(CommandConfig) - Method in class co.aikar.commands.JDACommandManager
    +
    setDefaultConfig(CommandConfig) - Method in class co.aikar.commands.JDACommandManager
     
    -
    setLogger(Logger) - Method in class co.aikar.commands.JDACommandManager
    +
    setLogger(Logger) - Method in class co.aikar.commands.JDACommandManager
     
    -
    setPermissionResolver(CommandPermissionResolver) - Method in class co.aikar.commands.JDACommandManager
    +
    setPermissionResolver(CommandPermissionResolver) - Method in class co.aikar.commands.JDACommandManager
     
    - - - -

    U

    -
    -
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.JDACommandManager
    +

    U

    +
    +
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.JDACommandManager
     
    -A C D G H I J L O P R S U 
    All Classes All Packages
    -
    +A C D G H I J L O P R S U 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/index.html b/docs/acf-jda/index.html index 9155288a..80c67703 100644 --- a/docs/acf-jda/index.html +++ b/docs/acf-jda/index.html @@ -1,165 +1,71 @@ - - -Overview (ACF (JDA) 0.5.0-SNAPSHOT API) + +Overview (ACF (JDA) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (JDA) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.annotation 
    +
    +

    ACF (JDA) 0.5.1-SNAPSHOT API

    +
    +
    +
    Packages
    +
    +
    Package
    +
    Description
    + +
     
    + +
     
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-jda/jquery-ui.overrides.css b/docs/acf-jda/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-jda/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-jda/legal/COPYRIGHT b/docs/acf-jda/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-jda/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-jda/legal/LICENSE b/docs/acf-jda/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-jda/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-jda/legal/jquery.md b/docs/acf-jda/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-jda/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-jda/legal/jqueryUI.md b/docs/acf-jda/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-jda/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-jda/member-search-index.js b/docs/acf-jda/member-search-index.js index 26d1dc34..3330d98c 100644 --- a/docs/acf-jda/member-search-index.js +++ b/docs/acf-jda/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands","c":"JDARootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"commandPrefixes"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"commands"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"completions"},{"p":"co.aikar.commands","c":"JDAOptions","l":"configProvider(CommandConfigProvider)","url":"configProvider(co.aikar.commands.CommandConfigProvider)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"JDAOptions","l":"create(JDA)","url":"create(net.dv8tion.jda.api.JDA)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","url":"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":"JDACommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","url":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"createRootCommand(String)","url":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"JDAOptions","l":"defaultConfig(CommandConfig)","url":"defaultConfig(co.aikar.commands.CommandConfig)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getBotOwnerId()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandIssuer(Object)","url":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandPrefix(CommandIssuer)","url":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandConfig","l":"getCommandPrefixes()"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"getCommandPrefixes()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getConfigProvider()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getDefaultConfig()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getEvent()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getIssuer()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getJDA()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getLogger()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getManager()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getPermissionResolver()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"CommandPermissionResolver","l":"hasPermission(JDACommandManager, JDACommandEvent, String)","url":"hasPermission(co.aikar.commands.JDACommandManager,co.aikar.commands.JDACommandEvent,java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandPermissionResolver","l":"hasPermission(JDACommandManager, JDACommandEvent, String)","url":"hasPermission(co.aikar.commands.JDACommandManager,co.aikar.commands.JDACommandEvent,java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"hasPermission(String)","url":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"isPlayer()"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"JDACommandCompletions(CommandManager)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"JDACommandConfig()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDACommandContexts","l":"JDACommandContexts(JDACommandManager)","url":"%3Cinit%3E(co.aikar.commands.JDACommandManager)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"JDACommandEvent(JDACommandManager, MessageReceivedEvent)","url":"%3Cinit%3E(co.aikar.commands.JDACommandManager,net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"JDACommandManager(JDA, JDAOptions)","url":"%3Cinit%3E(net.dv8tion.jda.api.JDA,co.aikar.commands.JDAOptions)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"JDACommandManager(JDA)","url":"%3Cinit%3E(net.dv8tion.jda.api.JDA)"},{"p":"co.aikar.commands","c":"JDACommandPermissionResolver","l":"JDACommandPermissionResolver()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDALocales","l":"JDALocales(CommandManager)","url":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"JDAMessageFormatter","l":"JDAMessageFormatter()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDAOptions","l":"JDAOptions()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"locales"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"JDAListener","l":"onMessageReceived(MessageReceivedEvent)","url":"onMessageReceived(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDAListener","l":"onReady(ReadyEvent)","url":"onReady(net.dv8tion.jda.api.events.ReadyEvent)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"options()"},{"p":"co.aikar.commands","c":"JDAOptions","l":"permissionResolver(CommandPermissionResolver)","url":"permissionResolver(co.aikar.commands.CommandPermissionResolver)"},{"p":"co.aikar.commands","c":"CommandConfig","l":"provide(MessageReceivedEvent)","url":"provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"CommandConfigProvider","l":"provide(MessageReceivedEvent)","url":"provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler>)","url":"registerAsyncCompletion(java.lang.String,co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"registerCompletion(String, CommandCompletions.CommandCompletionHandler>)","url":"registerCompletion(java.lang.String,co.aikar.commands.CommandCompletions.CommandCompletionHandler)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessage(Message)","url":"sendMessage(net.dv8tion.jda.api.entities.Message)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessage(MessageEmbed)","url":"sendMessage(net.dv8tion.jda.api.entities.MessageEmbed)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setConfigProvider(CommandConfigProvider)","url":"setConfigProvider(co.aikar.commands.CommandConfigProvider)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setDefaultConfig(CommandConfig)","url":"setDefaultConfig(co.aikar.commands.CommandConfig)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setLogger(Logger)","url":"setLogger(java.util.logging.Logger)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setPermissionResolver(CommandPermissionResolver)","url":"setPermissionResolver(co.aikar.commands.CommandPermissionResolver)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"unregisterCommand(BaseCommand)","url":"unregisterCommand(co.aikar.commands.BaseCommand)"}] \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands","c":"JDARootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"commandPrefixes"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"commands"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"completions"},{"p":"co.aikar.commands","c":"JDAOptions","l":"configProvider(CommandConfigProvider)","u":"configProvider(co.aikar.commands.CommandConfigProvider)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"JDAOptions","l":"create(JDA)","u":"create(net.dv8tion.jda.api.JDA)"},{"p":"co.aikar.commands","c":"JDACommandManager","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":"JDACommandManager","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":"JDACommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"JDAOptions","l":"defaultConfig(CommandConfig)","u":"defaultConfig(co.aikar.commands.CommandConfig)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getBotOwnerId()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"CommandConfig","l":"getCommandPrefixes()"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"getCommandPrefixes()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getConfigProvider()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getDefaultConfig()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getEvent()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getIssuer()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getJDA()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getLogger()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getManager()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getPermissionResolver()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"JDARootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"CommandPermissionResolver","l":"hasPermission(JDACommandManager, JDACommandEvent, String)","u":"hasPermission(co.aikar.commands.JDACommandManager,co.aikar.commands.JDACommandEvent,java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandPermissionResolver","l":"hasPermission(JDACommandManager, JDACommandEvent, String)","u":"hasPermission(co.aikar.commands.JDACommandManager,co.aikar.commands.JDACommandEvent,java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"isPlayer()"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"JDACommandCompletions(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"JDACommandConfig","l":"JDACommandConfig()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDACommandContexts","l":"JDACommandContexts(JDACommandManager)","u":"%3Cinit%3E(co.aikar.commands.JDACommandManager)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"JDACommandEvent(JDACommandManager, MessageReceivedEvent)","u":"%3Cinit%3E(co.aikar.commands.JDACommandManager,net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"JDACommandManager(JDA)","u":"%3Cinit%3E(net.dv8tion.jda.api.JDA)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"JDACommandManager(JDA, JDAOptions)","u":"%3Cinit%3E(net.dv8tion.jda.api.JDA,co.aikar.commands.JDAOptions)"},{"p":"co.aikar.commands","c":"JDACommandPermissionResolver","l":"JDACommandPermissionResolver()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDALocales","l":"JDALocales(CommandManager)","u":"%3Cinit%3E(co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"JDAMessageFormatter","l":"JDAMessageFormatter()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDAOptions","l":"JDAOptions()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"locales"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"JDAListener","l":"onMessageReceived(MessageReceivedEvent)","u":"onMessageReceived(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDAListener","l":"onReady(ReadyEvent)","u":"onReady(net.dv8tion.jda.api.events.ReadyEvent)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"options()"},{"p":"co.aikar.commands","c":"JDAOptions","l":"permissionResolver(CommandPermissionResolver)","u":"permissionResolver(co.aikar.commands.CommandPermissionResolver)"},{"p":"co.aikar.commands","c":"CommandConfig","l":"provide(MessageReceivedEvent)","u":"provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"CommandConfigProvider","l":"provide(MessageReceivedEvent)","u":"provide(net.dv8tion.jda.api.events.message.MessageReceivedEvent)"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler>)","u":"registerAsyncCompletion(java.lang.String,co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"JDACommandCompletions","l":"registerCompletion(String, CommandCompletions.CommandCompletionHandler>)","u":"registerCompletion(java.lang.String,co.aikar.commands.CommandCompletions.CommandCompletionHandler)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessage(Message)","u":"sendMessage(net.dv8tion.jda.api.entities.Message)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessage(MessageEmbed)","u":"sendMessage(net.dv8tion.jda.api.entities.MessageEmbed)"},{"p":"co.aikar.commands","c":"JDACommandEvent","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setConfigProvider(CommandConfigProvider)","u":"setConfigProvider(co.aikar.commands.CommandConfigProvider)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setDefaultConfig(CommandConfig)","u":"setDefaultConfig(co.aikar.commands.CommandConfig)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setLogger(Logger)","u":"setLogger(java.util.logging.Logger)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"setPermissionResolver(CommandPermissionResolver)","u":"setPermissionResolver(co.aikar.commands.CommandPermissionResolver)"},{"p":"co.aikar.commands","c":"JDACommandManager","l":"unregisterCommand(BaseCommand)","u":"unregisterCommand(co.aikar.commands.BaseCommand)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-jda/module-search-index.js b/docs/acf-jda/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-jda/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-jda/overview-summary.html b/docs/acf-jda/overview-summary.html index 70e55106..fcc44838 100644 --- a/docs/acf-jda/overview-summary.html +++ b/docs/acf-jda/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (JDA) 0.5.0-SNAPSHOT API + +ACF (JDA) 0.5.1-SNAPSHOT API + + + + + - - - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-paper/index-all.html b/docs/acf-paper/index-all.html index 23e91c80..d5e32d1f 100644 --- a/docs/acf-paper/index-all.html +++ b/docs/acf-paper/index-all.html @@ -1,206 +1,110 @@ - - -Index (ACF (Paper) 0.5.0-SNAPSHOT API) + +Index (ACF (Paper) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    C E G O P 
    All Classes All Packages - - -

    C

    -
    +
    +

    Index

    +
    +C E G O P 
    All Classes and Interfaces|All Packages +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    - - - -

    E

    -
    -
    enableUnstableAPI(String) - Method in class co.aikar.commands.PaperCommandManager
    +

    E

    +
    +
    enableUnstableAPI(String) - Method in class co.aikar.commands.PaperCommandManager
     
    - - - -

    G

    -
    -
    getCommandCompletions() - Method in class co.aikar.commands.PaperCommandManager
    +

    G

    +
    +
    getCommandCompletions() - Method in class co.aikar.commands.PaperCommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.PaperCommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.PaperCommandManager
     
    - - - -

    O

    -
    -
    onCommandRegister(CommandRegisteredEvent<BukkitBrigadierCommandSource>) - Method in class co.aikar.commands.PaperBrigadierManager
    +

    O

    +
    +
    onCommandRegister(CommandRegisteredEvent<BukkitBrigadierCommandSource>) - Method in class co.aikar.commands.PaperBrigadierManager
    -
    Deprecated.
    +
    Deprecated.
     
    - - - -

    P

    -
    -
    PaperBrigadierManager - Class in co.aikar.commands
    +

    P

    +
    +
    PaperBrigadierManager - Class in co.aikar.commands
    -
    Deprecated. -
    Unstable API
    +
    Deprecated. +
    Unstable API
    -
    PaperBrigadierManager(Plugin, PaperCommandManager) - Constructor for class co.aikar.commands.PaperBrigadierManager
    +
    PaperBrigadierManager(Plugin, PaperCommandManager) - Constructor for class co.aikar.commands.PaperBrigadierManager
    -
    Deprecated.
    +
    Deprecated.
     
    -
    PaperCommandCompletions - Class in co.aikar.commands
    +
    PaperCommandCompletions - Class in co.aikar.commands
     
    -
    PaperCommandCompletions(PaperCommandManager) - Constructor for class co.aikar.commands.PaperCommandCompletions
    +
    PaperCommandCompletions(PaperCommandManager) - Constructor for class co.aikar.commands.PaperCommandCompletions
     
    -
    PaperCommandContexts - Class in co.aikar.commands
    +
    PaperCommandContexts - Class in co.aikar.commands
     
    -
    PaperCommandContexts(PaperCommandManager) - Constructor for class co.aikar.commands.PaperCommandContexts
    +
    PaperCommandContexts(PaperCommandManager) - Constructor for class co.aikar.commands.PaperCommandContexts
     
    -
    PaperCommandManager - Class in co.aikar.commands
    +
    PaperCommandManager - Class in co.aikar.commands
     
    -
    PaperCommandManager(Plugin) - Constructor for class co.aikar.commands.PaperCommandManager
    +
    PaperCommandManager(Plugin) - Constructor for class co.aikar.commands.PaperCommandManager
     
    -C E G O P 
    All Classes All Packages
    -
    +C E G O P 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-paper/index.html b/docs/acf-paper/index.html index 90e60988..a85daf0c 100644 --- a/docs/acf-paper/index.html +++ b/docs/acf-paper/index.html @@ -1,18 +1,20 @@ - - -ACF (Paper) 0.5.0-SNAPSHOT API + +ACF (Paper) 0.5.1-SNAPSHOT API + + + + + - - - +
    -
    -
    + +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletionContext.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletionContext.html index 8c99b494..aa9be8e4 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletionContext.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletionContext.html @@ -1,308 +1,158 @@ - - -SpongeCommandCompletionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandCompletionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandCompletionContext

    + +

    Class SpongeCommandCompletionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class SpongeCommandCompletionContext +extends co.aikar.commands.CommandCompletionContext<SpongeCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandCompletionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandCompletionContext

        +issuer
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        org.spongepowered.api.entity.living.player.Player
        + +
         
        +
        org.spongepowered.api.command.CommandSource
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.CommandCompletionContext

        +getConfig, getConfig, getConfig, getConfigs, getContextValue, getContextValue, getContextValueByName, getInput, getIssuer, hasConfig, isAsync
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSource

            -
            public org.spongepowered.api.command.CommandSource getSource()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSource

              +
              public org.spongepowered.api.command.CommandSource getSource()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.spongepowered.api.entity.living.player.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public org.spongepowered.api.entity.living.player.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletions.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletions.html index 7c4b85d0..b07b5f8e 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletions.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandCompletions.html @@ -1,296 +1,145 @@ - - -SpongeCommandCompletions (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandCompletions (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandCompletions

    + +

    Class SpongeCommandCompletions

    -
    - -
    - -
    -
    -
      -
    • +
      public class SpongeCommandCompletions +extends co.aikar.commands.CommandCompletions<SpongeCommandCompletionContext>
      + +
      +
        -
        -
          -
        • - - -

          Nested Class Summary

          -
            -
          • - - -

            Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

            -co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
          • -
          -
        • -
        +
      • +
        +

        Nested Class Summary

        +
        +

        Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

        +co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
        +
      • -
        - +
      • +
        +

        Constructor Summary

        +
        Constructors
        +
        +
        Constructor
        +
        Description
        + +
         
        +
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +

        Methods inherited from class co.aikar.commands.CommandCompletions

        +registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, setDefaultCompletion
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandContexts.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandContexts.html index 91b540ee..d1aebd22 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandContexts.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandContexts.html @@ -1,296 +1,145 @@ - - -SpongeCommandContexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandContexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandContexts

    + +

    Class SpongeCommandContexts

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandExecutionContext.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandExecutionContext.html index 519ddd98..a061046e 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandExecutionContext.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandExecutionContext.html @@ -1,308 +1,158 @@ - - -SpongeCommandExecutionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandExecutionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandExecutionContext

    + +

    Class SpongeCommandExecutionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class SpongeCommandExecutionContext +extends co.aikar.commands.CommandExecutionContext<SpongeCommandExecutionContext,SpongeCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandExecutionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandExecutionContext

        +issuer
        +
      • -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          org.spongepowered.api.entity.living.player.PlayergetPlayer() 
          org.spongepowered.api.command.CommandSourcegetSource() 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandExecutionContext

            -canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        org.spongepowered.api.entity.living.player.Player
        + +
         
        +
        org.spongepowered.api.command.CommandSource
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.CommandExecutionContext

        +canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSource

            -
            public org.spongepowered.api.command.CommandSource getSource()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSource

              +
              public org.spongepowered.api.command.CommandSource getSource()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.spongepowered.api.entity.living.player.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public org.spongepowered.api.entity.living.player.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandIssuer.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandIssuer.html index 1fcd5106..dc1f994f 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandIssuer.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandIssuer.html @@ -1,422 +1,248 @@ - - -SpongeCommandIssuer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandIssuer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandIssuer

    + +

    Class SpongeCommandIssuer

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.SpongeCommandIssuer
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.CommandIssuer

      -
      public class SpongeCommandIssuer
      -extends Object
      -implements co.aikar.commands.CommandIssuer
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            isPlayer

            -
            public boolean isPlayer()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              isPlayer

              +
              public boolean isPlayer()
              +
              +
              Specified by:
              isPlayer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getIssuer

              -
              public org.spongepowered.api.command.CommandSource getIssuer()
              -
              -
              Specified by:
              +
            • +
              +

              getIssuer

              +
              public org.spongepowered.api.command.CommandSource getIssuer()
              +
              +
              Specified by:
              getIssuer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getUniqueId

              -
              @NotNull
              -public @NotNull UUID getUniqueId()
              -
              -
              Specified by:
              +
            • +
              +

              getUniqueId

              +
              @NotNull +public @NotNull UUID getUniqueId()
              +
              +
              Specified by:
              getUniqueId in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.spongepowered.api.entity.living.player.Player getPlayer()
              +
            • +
              +

              getPlayer

              +
              public org.spongepowered.api.entity.living.player.Player getPlayer()
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              sendMessageInternal

              -
              public void sendMessageInternal​(String message)
              -
              -
              Specified by:
              +
            • +
              +

              sendMessageInternal

              +
              public void sendMessageInternal(String message)
              +
              +
              Specified by:
              sendMessageInternal in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              hasPermission

              -
              public boolean hasPermission​(String permission)
              -
              -
              Specified by:
              +
            • +
              +

              hasPermission

              +
              public boolean hasPermission(String permission)
              +
              +
              Specified by:
              hasPermission in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - - - - - - +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html index 93812d34..ebb08877 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandManager.html @@ -1,736 +1,469 @@ - - -SpongeCommandManager (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandManager (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandManager

    + +

    Class SpongeCommandManager

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeCommandOperationContext.html b/docs/acf-sponge/co/aikar/commands/SpongeCommandOperationContext.html index 7a9b79c0..b3c1bd47 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeCommandOperationContext.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeCommandOperationContext.html @@ -1,291 +1,149 @@ - - -SpongeCommandOperationContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeCommandOperationContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeCommandOperationContext

    + +

    Class SpongeCommandOperationContext

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.CommandOperationContext
      • -
      • -
          -
        • co.aikar.commands.SpongeCommandOperationContext
        • -
        -
      • -
      -
    • -
    -
    - -
    -
    -
      -
    • +
      public class SpongeCommandOperationContext +extends co.aikar.commands.CommandOperationContext
      + +
      +
        -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          org.spongepowered.api.command.CommandResultgetResult() 
          voidsetResult​(org.spongepowered.api.command.CommandResult result) 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandOperationContext

            -getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getCommand, getCommandIssuer, getCommandLabel, getCommandManager, getRegisteredCommand, hasAnnotation, isAsync, setRegisteredCommand
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        org.spongepowered.api.command.CommandResult
        + +
         
        +
        void
        +
        setResult(org.spongepowered.api.command.CommandResult result)
        +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.CommandOperationContext

        +getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getCommand, getCommandIssuer, getCommandLabel, getCommandManager, getRegisteredCommand, hasAnnotation, isAsync, setRegisteredCommand
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getResult

            -
            public org.spongepowered.api.command.CommandResult getResult()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getResult

              +
              public org.spongepowered.api.command.CommandResult getResult()
              +
            • -
            - - - -
              -
            • -

              setResult

              -
              public void setResult​(org.spongepowered.api.command.CommandResult result)
              -
            • -
            +
          • +
            +

            setResult

            +
            public void setResult(org.spongepowered.api.command.CommandResult result)
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeConditionContext.html b/docs/acf-sponge/co/aikar/commands/SpongeConditionContext.html index cee02cac..3a7fed6e 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeConditionContext.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeConditionContext.html @@ -1,291 +1,149 @@ - - -SpongeConditionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeConditionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeConditionContext

    + +

    Class SpongeConditionContext

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSource

            -
            public org.spongepowered.api.command.CommandSource getSource()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSource

              +
              public org.spongepowered.api.command.CommandSource getSource()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public org.spongepowered.api.entity.living.player.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public org.spongepowered.api.entity.living.player.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeLocales.html b/docs/acf-sponge/co/aikar/commands/SpongeLocales.html index 9fdd000a..a2c96195 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeLocales.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeLocales.html @@ -1,338 +1,180 @@ - - -SpongeLocales (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeLocales (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeLocales

    + +

    Class SpongeLocales

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.Locales
      • -
      • -
          -
        • co.aikar.commands.SpongeLocales
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.Locales +
      co.aikar.commands.SpongeLocales
      +
      +
      +

      -
      public class SpongeLocales
      -extends co.aikar.commands.Locales
      -
    • -
    -
    -
    -
      -
    • +
      public class SpongeLocales +extends co.aikar.commands.Locales
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.Locales

            -AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.Locales

        +AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
        +
      • -
        - -
        - -
        - -
        - -
      +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      + +
       
      -
      - + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      + +
       
      +
      +
      +
      +
      +

      Methods inherited from class co.aikar.commands.Locales

      +addBundleClassLoader, addMessage, addMessageBundle, addMessageBundle, addMessageBundles, addMessages, addMessageStrings, getDefaultLocale, getMessage, getOptionalMessage, loadMissingBundles, replaceI18NStrings, setDefaultLocale
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
    +
    +
      + +
    • +
      +

      Constructor Details

      + +
      +
    • -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          loadLanguages

          -
          public void loadLanguages()
          -
          -
          Overrides:
          +
        • +
          +

          Method Details

          +
            +
          • +
            +

            loadLanguages

            +
            public void loadLanguages()
            +
            +
            Overrides:
            loadLanguages in class co.aikar.commands.Locales
            -
          • -
          +
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeMessageFormatter.html b/docs/acf-sponge/co/aikar/commands/SpongeMessageFormatter.html index 436c70fd..6559f0a3 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeMessageFormatter.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeMessageFormatter.html @@ -1,319 +1,169 @@ - - -SpongeMessageFormatter (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeMessageFormatter (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeMessageFormatter

    + +

    Class SpongeMessageFormatter

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.MessageFormatter<org.spongepowered.api.text.format.TextColor>
      • -
      • -
          -
        • co.aikar.commands.SpongeMessageFormatter
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.MessageFormatter<org.spongepowered.api.text.format.TextColor> +
      co.aikar.commands.SpongeMessageFormatter
      +
      +
      +

      -
      public class SpongeMessageFormatter
      -extends co.aikar.commands.MessageFormatter<org.spongepowered.api.text.format.TextColor>
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            SpongeMessageFormatter

            -
            public SpongeMessageFormatter​(org.spongepowered.api.text.format.TextColor... colors)
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            SpongeMessageFormatter

            +
            public SpongeMessageFormatter(org.spongepowered.api.text.format.TextColor... colors)
            +
          +
        • -
          -
            -
          • - - -

            Method Detail

            - - - -
              -
            • -

              format

              -
              public String format​(org.spongepowered.api.text.format.TextColor color,
              -                     String message)
              -
            • -
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              format

              +
              public String format(org.spongepowered.api.text.format.TextColor color, + String message)
              +
          -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeRegisteredCommand.html b/docs/acf-sponge/co/aikar/commands/SpongeRegisteredCommand.html index 0d933c63..30e2cbe2 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeRegisteredCommand.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeRegisteredCommand.html @@ -1,316 +1,166 @@ - - -SpongeRegisteredCommand (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeRegisteredCommand (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeRegisteredCommand

    + +

    Class SpongeRegisteredCommand

    -
    - -
    - -
    -
    -
      -
    • +
      public class SpongeRegisteredCommand +extends co.aikar.commands.RegisteredCommand<SpongeCommandExecutionContext>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.RegisteredCommand

            -helpSearchTags
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.RegisteredCommand

        +helpSearchTags
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        void
        + +
         
        +
        void
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.RegisteredCommand

        +addSubcommand, addSubcommands, getAnnotation, getCommand, getHelpText, getPermission, getPrefSubCommand, getRequiredPermissions, getSyntaxText, getSyntaxText, isPrivate, requiresPermission
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/SpongeRootCommand.html b/docs/acf-sponge/co/aikar/commands/SpongeRootCommand.html index 6b7c5700..a0c3a783 100644 --- a/docs/acf-sponge/co/aikar/commands/SpongeRootCommand.html +++ b/docs/acf-sponge/co/aikar/commands/SpongeRootCommand.html @@ -1,500 +1,311 @@ - - -SpongeRootCommand (ACF (Sponge) 0.5.0-SNAPSHOT API) + +SpongeRootCommand (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class SpongeRootCommand

    + +

    Class SpongeRootCommand

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.SpongeRootCommand
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.RootCommand, org.spongepowered.api.command.CommandCallable

      -
      public class SpongeRootCommand
      -extends Object
      -implements org.spongepowered.api.command.CommandCallable, co.aikar.commands.RootCommand
      -
    • -
    -
    -
    -
      -
    • +
      public class SpongeRootCommand +extends Object +implements org.spongepowered.api.command.CommandCallable, co.aikar.commands.RootCommand
      + +
      +
        -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          voidaddChild​(co.aikar.commands.BaseCommand command) 
          List<co.aikar.commands.BaseCommand>getChildren() 
          StringgetCommandName() 
          co.aikar.commands.BaseCommandgetDefCommand() 
          Optional<org.spongepowered.api.text.Text>getHelp​(@NotNull org.spongepowered.api.command.CommandSource source) 
          co.aikar.commands.CommandManagergetManager() 
          Optional<org.spongepowered.api.text.Text>getShortDescription​(@NotNull org.spongepowered.api.command.CommandSource source) 
          com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand>getSubCommands() 
          List<String>getSuggestions​(@NotNull org.spongepowered.api.command.CommandSource source, - @NotNull String arguments, - org.spongepowered.api.world.Location<org.spongepowered.api.world.World> location) 
          org.spongepowered.api.text.TextgetUsage​(@NotNull org.spongepowered.api.command.CommandSource source) 
          org.spongepowered.api.command.CommandResultprocess​(@NotNull org.spongepowered.api.command.CommandSource source, - @NotNull String arguments) 
          booleantestPermission​(@NotNull org.spongepowered.api.command.CommandSource source) 
          - -
            -
          • - - -

            Methods inherited from interface co.aikar.commands.RootCommand

            -addChildShared, execute, getDefaultRegisteredCommand, getDescription, getTabCompletions, getTabCompletions, getTabCompletions, getUniquePermission, getUsage, hasAnyPermission
          • -
          -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        void
        +
        addChild(co.aikar.commands.BaseCommand command)
        +
         
        +
        List<co.aikar.commands.BaseCommand>
        + +
         
        + + +
         
        +
        co.aikar.commands.BaseCommand
        + +
         
        +
        Optional<org.spongepowered.api.text.Text>
        +
        getHelp(@NotNull org.spongepowered.api.command.CommandSource source)
        +
         
        +
        co.aikar.commands.CommandManager
        + +
         
        +
        Optional<org.spongepowered.api.text.Text>
        +
        getShortDescription(@NotNull org.spongepowered.api.command.CommandSource source)
        +
         
        +
        com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand>
        + +
         
        + +
        getSuggestions(@NotNull org.spongepowered.api.command.CommandSource source, + @NotNull String arguments, + org.spongepowered.api.world.Location<org.spongepowered.api.world.World> location)
        +
         
        +
        org.spongepowered.api.text.Text
        +
        getUsage(@NotNull org.spongepowered.api.command.CommandSource source)
        +
         
        +
        org.spongepowered.api.command.CommandResult
        +
        process(@NotNull org.spongepowered.api.command.CommandSource source, + @NotNull String arguments)
        +
         
        +
        boolean
        +
        testPermission(@NotNull org.spongepowered.api.command.CommandSource source)
        +
         
        +
        +
        +
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
        +
        +

        Methods inherited from interface co.aikar.commands.RootCommand

        +addChildShared, execute, getDefaultRegisteredCommand, getDescription, getTabCompletions, getTabCompletions, getTabCompletions, getUniquePermission, getUsage, hasAnyPermission
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getCommandName

            -
            public String getCommandName()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getCommandName

              + +
              +
              Specified by:
              getCommandName in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              process

              -
              public org.spongepowered.api.command.CommandResult process​(@NotNull
              -                                                           @NotNull org.spongepowered.api.command.CommandSource source,
              -                                                           @NotNull
              -                                                           @NotNull String arguments)
              -                                                    throws org.spongepowered.api.command.CommandException
              -
              -
              Specified by:
              +
            • +
              +

              process

              +
              public org.spongepowered.api.command.CommandResult process(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source, + @NotNull + @NotNull String arguments) + throws org.spongepowered.api.command.CommandException
              +
              +
              Specified by:
              process in interface org.spongepowered.api.command.CommandCallable
              -
              Throws:
              +
              Throws:
              org.spongepowered.api.command.CommandException
              +
            • -
            - - - -
              -
            • -

              getSuggestions

              -
              public List<StringgetSuggestions​(@NotNull
              -                                   @NotNull org.spongepowered.api.command.CommandSource source,
              -                                   @NotNull
              -                                   @NotNull String arguments,
              -                                   @Nullable
              -                                   org.spongepowered.api.world.Location<org.spongepowered.api.world.World> location)
              -                            throws org.spongepowered.api.command.CommandException
              -
              -
              Specified by:
              +
            • +
              +

              getSuggestions

              +
              public List<String> getSuggestions(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source, + @NotNull + @NotNull String arguments, + @Nullable + org.spongepowered.api.world.Location<org.spongepowered.api.world.World> location) + throws org.spongepowered.api.command.CommandException
              +
              +
              Specified by:
              getSuggestions in interface org.spongepowered.api.command.CommandCallable
              -
              Throws:
              +
              Throws:
              org.spongepowered.api.command.CommandException
              +
            • -
            - - - -
              -
            • -

              testPermission

              -
              public boolean testPermission​(@NotNull
              -                              @NotNull org.spongepowered.api.command.CommandSource source)
              -
              -
              Specified by:
              +
            • +
              +

              testPermission

              +
              public boolean testPermission(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source)
              +
              +
              Specified by:
              testPermission in interface org.spongepowered.api.command.CommandCallable
              +
            • -
            - - - -
              -
            • -

              getShortDescription

              -
              public Optional<org.spongepowered.api.text.Text> getShortDescription​(@NotNull
              -                                                                     @NotNull org.spongepowered.api.command.CommandSource source)
              -
              -
              Specified by:
              +
            • +
              +

              getShortDescription

              +
              public Optional<org.spongepowered.api.text.Text> getShortDescription(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source)
              +
              +
              Specified by:
              getShortDescription in interface org.spongepowered.api.command.CommandCallable
              +
            • -
            - - - -
              -
            • -

              getHelp

              -
              public Optional<org.spongepowered.api.text.Text> getHelp​(@NotNull
              -                                                         @NotNull org.spongepowered.api.command.CommandSource source)
              -
              -
              Specified by:
              +
            • +
              +

              getHelp

              +
              public Optional<org.spongepowered.api.text.Text> getHelp(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source)
              +
              +
              Specified by:
              getHelp in interface org.spongepowered.api.command.CommandCallable
              +
            • -
            - - - -
              -
            • -

              getUsage

              -
              public org.spongepowered.api.text.Text getUsage​(@NotNull
              -                                                @NotNull org.spongepowered.api.command.CommandSource source)
              -
              -
              Specified by:
              +
            • +
              +

              getUsage

              +
              public org.spongepowered.api.text.Text getUsage(@NotNull + @NotNull org.spongepowered.api.command.CommandSource source)
              +
              +
              Specified by:
              getUsage in interface org.spongepowered.api.command.CommandCallable
              +
            • -
            - - - -
              -
            • -

              addChild

              -
              public void addChild​(co.aikar.commands.BaseCommand command)
              -
              -
              Specified by:
              +
            • +
              +

              addChild

              +
              public void addChild(co.aikar.commands.BaseCommand command)
              +
              +
              Specified by:
              addChild in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getDefCommand

              -
              public co.aikar.commands.BaseCommand getDefCommand()
              -
              -
              Specified by:
              +
            • +
              +

              getDefCommand

              +
              public co.aikar.commands.BaseCommand getDefCommand()
              +
              +
              Specified by:
              getDefCommand in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getSubCommands

              -
              public com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand> getSubCommands()
              -
              -
              Specified by:
              +
            • +
              +

              getSubCommands

              +
              public com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand> getSubCommands()
              +
              +
              Specified by:
              getSubCommands in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getChildren

              -
              public List<co.aikar.commands.BaseCommand> getChildren()
              -
              -
              Specified by:
              +
            • +
              +

              getChildren

              +
              public List<co.aikar.commands.BaseCommand> getChildren()
              +
              +
              Specified by:
              getChildren in interface co.aikar.commands.RootCommand
              -
            • -
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeListener.html b/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeListener.html index 4f8d6505..eb0d11de 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeListener.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeListener.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFSpongeListener (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFSpongeListener (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFSpongeListener

    +

    Uses of Class
    co.aikar.commands.ACFSpongeListener

    -
    No usage of co.aikar.commands.ACFSpongeListener
    -
    +No usage of co.aikar.commands.ACFSpongeListener
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeUtil.html b/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeUtil.html index 95b02797..45cb7b18 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeUtil.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/ACFSpongeUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFSpongeUtil (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFSpongeUtil (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFSpongeUtil

    +

    Uses of Class
    co.aikar.commands.ACFSpongeUtil

    -
    No usage of co.aikar.commands.ACFSpongeUtil
    -
    +No usage of co.aikar.commands.ACFSpongeUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/MinecraftMessageKeys.html b/docs/acf-sponge/co/aikar/commands/class-use/MinecraftMessageKeys.html index 4e28b304..f802c15f 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/MinecraftMessageKeys.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/MinecraftMessageKeys.html @@ -1,201 +1,94 @@ - - -Uses of Class co.aikar.commands.MinecraftMessageKeys (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Enum co.aikar.commands.MinecraftMessageKeys (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MinecraftMessageKeys

    +

    Uses of Enum
    co.aikar.commands.MinecraftMessageKeys

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletionContext.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletionContext.html index 6fed478d..4941581f 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletionContext.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletionContext.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.SpongeCommandCompletionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandCompletionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandCompletionContext

    +

    Uses of Class
    co.aikar.commands.SpongeCommandCompletionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletions.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletions.html index 80b28625..4874b18c 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletions.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandCompletions.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.SpongeCommandCompletions (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandCompletions (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandCompletions

    +

    Uses of Class
    co.aikar.commands.SpongeCommandCompletions

    +
    +
    Packages that use SpongeCommandCompletions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandContexts.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandContexts.html index 0cebb319..810cda41 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandContexts.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandContexts.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.SpongeCommandContexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandContexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandContexts

    +

    Uses of Class
    co.aikar.commands.SpongeCommandContexts

    +
    +
    Packages that use SpongeCommandContexts
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandExecutionContext.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandExecutionContext.html index 6ba8ab6c..91bfb4b1 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandExecutionContext.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandExecutionContext.html @@ -1,211 +1,100 @@ - - -Uses of Class co.aikar.commands.SpongeCommandExecutionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandExecutionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.SpongeCommandExecutionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandIssuer.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandIssuer.html index dc6c697c..2273498a 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandIssuer.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandIssuer.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.SpongeCommandIssuer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandIssuer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandIssuer

    +

    Uses of Class
    co.aikar.commands.SpongeCommandIssuer

    +
    +
    Packages that use SpongeCommandIssuer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandManager.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandManager.html index 29b1789c..152c70ac 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandManager.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandManager.html @@ -1,201 +1,95 @@ - - -Uses of Class co.aikar.commands.SpongeCommandManager (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandManager (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandManager

    +

    Uses of Class
    co.aikar.commands.SpongeCommandManager

    +
    +
    Packages that use SpongeCommandManager
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandOperationContext.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandOperationContext.html index b12fcbee..cf9ec51f 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandOperationContext.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeCommandOperationContext.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.SpongeCommandOperationContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeCommandOperationContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeCommandOperationContext

    +

    Uses of Class
    co.aikar.commands.SpongeCommandOperationContext

    -
    No usage of co.aikar.commands.SpongeCommandOperationContext
    -
    +No usage of co.aikar.commands.SpongeCommandOperationContext
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeConditionContext.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeConditionContext.html index 4147052a..1a537d2c 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeConditionContext.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeConditionContext.html @@ -1,192 +1,87 @@ - - -Uses of Class co.aikar.commands.SpongeConditionContext (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeConditionContext (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeConditionContext

    +

    Uses of Class
    co.aikar.commands.SpongeConditionContext

    +
    +
    Packages that use SpongeConditionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeLocales.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeLocales.html index ed49a145..3fb09200 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeLocales.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeLocales.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.SpongeLocales (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeLocales (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeLocales

    +

    Uses of Class
    co.aikar.commands.SpongeLocales

    +
    +
    Packages that use SpongeLocales
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeMessageFormatter.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeMessageFormatter.html index 8bdcec2d..66d56557 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeMessageFormatter.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeMessageFormatter.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.SpongeMessageFormatter (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeMessageFormatter (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeMessageFormatter

    +

    Uses of Class
    co.aikar.commands.SpongeMessageFormatter

    -
    No usage of co.aikar.commands.SpongeMessageFormatter
    -
    +No usage of co.aikar.commands.SpongeMessageFormatter
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeRegisteredCommand.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeRegisteredCommand.html index ce075341..2c860b92 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeRegisteredCommand.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeRegisteredCommand.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.SpongeRegisteredCommand (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeRegisteredCommand (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeRegisteredCommand

    +

    Uses of Class
    co.aikar.commands.SpongeRegisteredCommand

    -
    No usage of co.aikar.commands.SpongeRegisteredCommand
    -
    +No usage of co.aikar.commands.SpongeRegisteredCommand
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/class-use/SpongeRootCommand.html b/docs/acf-sponge/co/aikar/commands/class-use/SpongeRootCommand.html index 2d31682a..9929c93e 100644 --- a/docs/acf-sponge/co/aikar/commands/class-use/SpongeRootCommand.html +++ b/docs/acf-sponge/co/aikar/commands/class-use/SpongeRootCommand.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.SpongeRootCommand (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.SpongeRootCommand (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.SpongeRootCommand

    +

    Uses of Class
    co.aikar.commands.SpongeRootCommand

    +
    +
    Packages that use SpongeRootCommand
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/CommandResultSupplier.html b/docs/acf-sponge/co/aikar/commands/contexts/CommandResultSupplier.html index 9c39c113..28e06b95 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/CommandResultSupplier.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/CommandResultSupplier.html @@ -1,321 +1,174 @@ - - -CommandResultSupplier (ACF (Sponge) 0.5.0-SNAPSHOT API) + +CommandResultSupplier (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class CommandResultSupplier

    + +

    Class CommandResultSupplier

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.contexts.CommandResultSupplier
      +
      +
      +
      All Implemented Interfaces:
      -
      Consumer<org.spongepowered.api.command.CommandResult>
      +
      Consumer<org.spongepowered.api.command.CommandResult>

      -
      public class CommandResultSupplier
      -extends Object
      -implements Consumer<org.spongepowered.api.command.CommandResult>
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - - +
        • +
          +

          Constructor Details

          +
          +
        • -
          -
            -
          • - - -

            Method Detail

            - - - -
              -
            • -

              accept

              -
              public void accept​(org.spongepowered.api.command.CommandResult commandResult)
              -
              -
              Specified by:
              -
              accept in interface Consumer<org.spongepowered.api.command.CommandResult>
              +
            • +
              +

              Method Details

              +
                +
              • +
                +

                accept

                +
                public void accept(org.spongepowered.api.command.CommandResult commandResult)
                +
                +
                Specified by:
                +
                accept in interface Consumer<org.spongepowered.api.command.CommandResult>
                -
              • -
              +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/OnlinePlayer.html b/docs/acf-sponge/co/aikar/commands/contexts/OnlinePlayer.html index c25b05a2..13932b23 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/OnlinePlayer.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/OnlinePlayer.html @@ -1,303 +1,152 @@ - - -OnlinePlayer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            OnlinePlayer

            -
            public OnlinePlayer​(org.spongepowered.api.entity.living.player.Player player)
            -
            Deprecated.
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            OnlinePlayer

            +
            public OnlinePlayer(org.spongepowered.api.entity.living.player.Player player)
            +
            Deprecated.
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/class-use/CommandResultSupplier.html b/docs/acf-sponge/co/aikar/commands/contexts/class-use/CommandResultSupplier.html index 532e7611..2efc56e6 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/class-use/CommandResultSupplier.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/class-use/CommandResultSupplier.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.contexts.CommandResultSupplier (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.contexts.CommandResultSupplier (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.contexts.CommandResultSupplier

    +

    Uses of Class
    co.aikar.commands.contexts.CommandResultSupplier

    -
    No usage of co.aikar.commands.contexts.CommandResultSupplier
    -
    +No usage of co.aikar.commands.contexts.CommandResultSupplier
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/class-use/OnlinePlayer.html b/docs/acf-sponge/co/aikar/commands/contexts/class-use/OnlinePlayer.html index 69ec8936..a4eb692a 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/class-use/OnlinePlayer.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    -
    No usage of co.aikar.commands.contexts.OnlinePlayer
    -
    +No usage of co.aikar.commands.contexts.OnlinePlayer
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/package-summary.html b/docs/acf-sponge/co/aikar/commands/contexts/package-summary.html index 975b6da9..18198860 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/package-summary.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.contexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.contexts

    +

    Package co.aikar.commands.contexts

    +
    +
    +
    package co.aikar.commands.contexts
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/package-tree.html b/docs/acf-sponge/co/aikar/commands/contexts/package-tree.html index 24698ae7..1d9e351d 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/package-tree.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/package-tree.html @@ -1,167 +1,80 @@ - - -co.aikar.commands.contexts Class Hierarchy (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts Class Hierarchy (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/contexts/package-use.html b/docs/acf-sponge/co/aikar/commands/contexts/package-use.html index 6ba9a778..a4a1df36 100644 --- a/docs/acf-sponge/co/aikar/commands/contexts/package-use.html +++ b/docs/acf-sponge/co/aikar/commands/contexts/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.contexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.contexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.contexts

    -
    No usage of co.aikar.commands.contexts
    -
    +No usage of co.aikar.commands.contexts
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/package-summary.html b/docs/acf-sponge/co/aikar/commands/package-summary.html index b77baca8..1f15f3d8 100644 --- a/docs/acf-sponge/co/aikar/commands/package-summary.html +++ b/docs/acf-sponge/co/aikar/commands/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/package-tree.html b/docs/acf-sponge/co/aikar/commands/package-tree.html index b525645d..b4db7da8 100644 --- a/docs/acf-sponge/co/aikar/commands/package-tree.html +++ b/docs/acf-sponge/co/aikar/commands/package-tree.html @@ -1,229 +1,142 @@ - - -co.aikar.commands Class Hierarchy (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Enum Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/package-use.html b/docs/acf-sponge/co/aikar/commands/package-use.html index 34fa1858..73762141 100644 --- a/docs/acf-sponge/co/aikar/commands/package-use.html +++ b/docs/acf-sponge/co/aikar/commands/package-use.html @@ -1,218 +1,101 @@ - - -Uses of Package co.aikar.commands (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/sponge/contexts/OnlinePlayer.html b/docs/acf-sponge/co/aikar/commands/sponge/contexts/OnlinePlayer.html index 860d2430..f671f719 100644 --- a/docs/acf-sponge/co/aikar/commands/sponge/contexts/OnlinePlayer.html +++ b/docs/acf-sponge/co/aikar/commands/sponge/contexts/OnlinePlayer.html @@ -1,405 +1,234 @@ - - -OnlinePlayer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Field Detail

          - - - -
            -
          • -

            player

            -
            public final org.spongepowered.api.entity.living.player.Player player
            -
          • -
          +
        • +
          +

          Field Details

          +
            +
          • +
            +

            player

            +
            public final org.spongepowered.api.entity.living.player.Player player
            +
          +
        • -
          - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/sponge/contexts/class-use/OnlinePlayer.html b/docs/acf-sponge/co/aikar/commands/sponge/contexts/class-use/OnlinePlayer.html index b7b593df..8b573f98 100644 --- a/docs/acf-sponge/co/aikar/commands/sponge/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-sponge/co/aikar/commands/sponge/contexts/class-use/OnlinePlayer.html @@ -1,195 +1,90 @@ - - -Uses of Class co.aikar.commands.sponge.contexts.OnlinePlayer (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.sponge.contexts.OnlinePlayer (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.sponge.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.sponge.contexts.OnlinePlayer

    +
    +
    Packages that use OnlinePlayer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-summary.html b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-summary.html index f53acf65..ab0018f6 100644 --- a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-summary.html +++ b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.sponge.contexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands.sponge.contexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.sponge.contexts

    +

    Package co.aikar.commands.sponge.contexts

    +
    +
    +
    package co.aikar.commands.sponge.contexts
    +
    +
      +
    • +
      +
      Classes
      +
      +
      Class
      +
      Description
      + +
       
      +
      -
      -
        -
      • - - - - - - - - - - - - -
        Class Summary 
        ClassDescription
        OnlinePlayer 
      -
      +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-tree.html b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-tree.html index 2307d7ba..67f8384b 100644 --- a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-tree.html +++ b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-tree.html @@ -1,162 +1,75 @@ - - -co.aikar.commands.sponge.contexts Class Hierarchy (ACF (Sponge) 0.5.0-SNAPSHOT API) + +co.aikar.commands.sponge.contexts Class Hierarchy (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.sponge.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-use.html b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-use.html index 299eb235..27b45b49 100644 --- a/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-use.html +++ b/docs/acf-sponge/co/aikar/commands/sponge/contexts/package-use.html @@ -1,182 +1,83 @@ - - -Uses of Package co.aikar.commands.sponge.contexts (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.sponge.contexts (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.sponge.contexts

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/deprecated-list.html b/docs/acf-sponge/deprecated-list.html index 65423ba4..5b832174 100644 --- a/docs/acf-sponge/deprecated-list.html +++ b/docs/acf-sponge/deprecated-list.html @@ -1,96 +1,51 @@ - - -Deprecated List (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Deprecated API

    @@ -99,75 +54,27 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  • Classes
  • -
    - - -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/index-all.html b/docs/acf-sponge/index-all.html index 366d37ac..30b45d61 100644 --- a/docs/acf-sponge/index-all.html +++ b/docs/acf-sponge/index-all.html @@ -1,479 +1,343 @@ - - -Index (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Index (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A C E F G H I L M N O P R S T U V Y 
    All Classes All Packages - - -

    A

    -
    -
    accept(CommandResult) - Method in class co.aikar.commands.contexts.CommandResultSupplier
    +
    +

    Index

    +
    +A C E F G H I L M N O P R S T U V Y 
    All Classes and Interfaces|All Packages +

    A

    +
    +
    accept(CommandResult) - Method in class co.aikar.commands.contexts.CommandResultSupplier
     
    -
    ACFSpongeListener - Class in co.aikar.commands
    +
    ACFSpongeListener - Class in co.aikar.commands
     
    -
    ACFSpongeListener(SpongeCommandManager) - Constructor for class co.aikar.commands.ACFSpongeListener
    +
    ACFSpongeListener(SpongeCommandManager) - Constructor for class co.aikar.commands.ACFSpongeListener
     
    -
    ACFSpongeUtil - Class in co.aikar.commands
    +
    ACFSpongeUtil - Class in co.aikar.commands
     
    -
    ACFSpongeUtil() - Constructor for class co.aikar.commands.ACFSpongeUtil
    +
    ACFSpongeUtil() - Constructor for class co.aikar.commands.ACFSpongeUtil
     
    -
    addChild(BaseCommand) - Method in class co.aikar.commands.SpongeRootCommand
    +
    addChild(BaseCommand) - Method in class co.aikar.commands.SpongeRootCommand
     
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    co.aikar.commands.contexts - package co.aikar.commands.contexts
     
    co.aikar.commands.sponge.contexts - package co.aikar.commands.sponge.contexts
     
    -
    CommandResultSupplier - Class in co.aikar.commands.contexts
    +
    CommandResultSupplier - Class in co.aikar.commands.contexts
     
    -
    CommandResultSupplier() - Constructor for class co.aikar.commands.contexts.CommandResultSupplier
    +
    CommandResultSupplier() - Constructor for class co.aikar.commands.contexts.CommandResultSupplier
     
    -
    completions - Variable in class co.aikar.commands.SpongeCommandManager
    +
    completions - Variable in class co.aikar.commands.SpongeCommandManager
     
    -
    contexts - Variable in class co.aikar.commands.SpongeCommandManager
    +
    contexts - Variable in class co.aikar.commands.SpongeCommandManager
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    createTiming(String) - Method in class co.aikar.commands.SpongeCommandManager
    +
    createTiming(String) - Method in class co.aikar.commands.SpongeCommandManager
     
    - - - -

    E

    -
    -
    equals(Object) - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
    +

    E

    +
    +
    equals(Object) - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    -
    equals(Object) - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    equals(Object) - Method in class co.aikar.commands.SpongeCommandIssuer
     
    - - - -

    F

    -
    -
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFSpongeUtil
    +

    F

    +
    +
    findPlayerSmart(CommandIssuer, String) - Static method in class co.aikar.commands.ACFSpongeUtil
     
    -
    format(TextColor, String) - Method in class co.aikar.commands.SpongeMessageFormatter
    +
    format(TextColor, String) - Method in class co.aikar.commands.SpongeMessageFormatter
     
    - - - -

    G

    -
    -
    getChildren() - Method in class co.aikar.commands.SpongeRootCommand
    +

    G

    +
    +
    getChildren() - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.SpongeCommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.SpongeCommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.SpongeCommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getCommandName() - Method in class co.aikar.commands.SpongeRootCommand
    +
    getCommandName() - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.SpongeCommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getDefCommand() - Method in class co.aikar.commands.SpongeRootCommand
    +
    getDefCommand() - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getHelp(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
    +
    getHelp(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getIssuer() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    getIssuer() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    getLocales() - Method in class co.aikar.commands.SpongeCommandManager
    +
    getLocales() - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getManager() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    getManager() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    getManager() - Method in class co.aikar.commands.SpongeRootCommand
    +
    getManager() - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
    +
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    getPlayer() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
    +
    getPlayer() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    -
    getPlayer() - Method in class co.aikar.commands.SpongeCommandCompletionContext
    +
    getPlayer() - Method in class co.aikar.commands.SpongeCommandCompletionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.SpongeCommandExecutionContext
    +
    getPlayer() - Method in class co.aikar.commands.SpongeCommandExecutionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    getPlayer() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    getPlayer() - Method in class co.aikar.commands.SpongeConditionContext
    +
    getPlayer() - Method in class co.aikar.commands.SpongeConditionContext
     
    -
    getPlugin() - Method in class co.aikar.commands.SpongeCommandManager
    +
    getPlugin() - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.SpongeCommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    getResult() - Method in class co.aikar.commands.SpongeCommandOperationContext
    +
    getResult() - Method in class co.aikar.commands.SpongeCommandOperationContext
     
    -
    getShortDescription(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
    +
    getShortDescription(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getSource() - Method in class co.aikar.commands.SpongeCommandCompletionContext
    +
    getSource() - Method in class co.aikar.commands.SpongeCommandCompletionContext
     
    -
    getSource() - Method in class co.aikar.commands.SpongeCommandExecutionContext
    +
    getSource() - Method in class co.aikar.commands.SpongeCommandExecutionContext
     
    -
    getSource() - Method in class co.aikar.commands.SpongeConditionContext
    +
    getSource() - Method in class co.aikar.commands.SpongeConditionContext
     
    -
    getSubCommands() - Method in class co.aikar.commands.SpongeRootCommand
    +
    getSubCommands() - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getSuggestions(CommandSource, String, Location<World>) - Method in class co.aikar.commands.SpongeRootCommand
    +
    getSuggestions(CommandSource, String, Location<World>) - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    getUniqueId() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    getUniqueId() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    getUsage(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
    +
    getUsage(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
     
    - - - -

    H

    -
    -
    hashCode() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
    +

    H

    +
    +
    hashCode() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    -
    hashCode() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    hashCode() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    hasPermission(String) - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    hasPermission(String) - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.SpongeCommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.SpongeCommandManager
     
    - - - -

    I

    -
    -
    INVALID_WORLD - co.aikar.commands.MinecraftMessageKeys
    +

    I

    +
    +
    INVALID_WORLD - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    IS_NOT_A_VALID_NAME - co.aikar.commands.MinecraftMessageKeys
    +
    IS_NOT_A_VALID_NAME - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.SpongeCommandManager
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    isPlayer() - Method in class co.aikar.commands.SpongeCommandIssuer
    +
    isPlayer() - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    isValidName(String) - Static method in class co.aikar.commands.ACFSpongeUtil
    +
    isValidName(String) - Static method in class co.aikar.commands.ACFSpongeUtil
     
    - - - -

    L

    -
    -
    loadLanguages() - Method in class co.aikar.commands.SpongeLocales
    +

    L

    +
    +
    loadLanguages() - Method in class co.aikar.commands.SpongeLocales
     
    -
    locales - Variable in class co.aikar.commands.SpongeCommandManager
    +
    locales - Variable in class co.aikar.commands.SpongeCommandManager
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.SpongeCommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.SpongeCommandManager
     
    - - - -

    M

    -
    -
    matchPlayer(String) - Static method in class co.aikar.commands.ACFSpongeUtil
    +

    M

    +
    +
    matchPlayer(String) - Static method in class co.aikar.commands.ACFSpongeUtil
     
    -
    MinecraftMessageKeys - Enum in co.aikar.commands
    +
    MinecraftMessageKeys - Enum in co.aikar.commands
     
    -
    MULTIPLE_PLAYERS_MATCH - co.aikar.commands.MinecraftMessageKeys
    +
    MULTIPLE_PLAYERS_MATCH - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    N

    -
    -
    NO_PLAYER_FOUND - co.aikar.commands.MinecraftMessageKeys
    +

    N

    +
    +
    NO_PLAYER_FOUND - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    NO_PLAYER_FOUND_SERVER - co.aikar.commands.MinecraftMessageKeys
    +
    NO_PLAYER_FOUND_SERVER - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    O

    -
    -
    onDisconnectCleanup(ClientConnectionEvent.Disconnect, Player) - Method in class co.aikar.commands.ACFSpongeListener
    +

    O

    +
    +
    onDisconnectCleanup(ClientConnectionEvent.Disconnect, Player) - Method in class co.aikar.commands.ACFSpongeListener
     
    -
    OnlinePlayer - Class in co.aikar.commands.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.contexts
    -
    Deprecated. - +
    Deprecated. +
    -
    OnlinePlayer - Class in co.aikar.commands.sponge.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.sponge.contexts
     
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    -
    Deprecated.
    +
    Deprecated.
     
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.sponge.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    -
    onSettingsChange(PlayerChangeClientSettingsEvent, Player) - Method in class co.aikar.commands.ACFSpongeListener
    +
    onSettingsChange(PlayerChangeClientSettingsEvent, Player) - Method in class co.aikar.commands.ACFSpongeListener
     
    - - - -

    P

    -
    -
    player - Variable in class co.aikar.commands.sponge.contexts.OnlinePlayer
    +

    P

    +
    +
    player - Variable in class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    -
    PLAYER_IS_VANISHED_CONFIRM - co.aikar.commands.MinecraftMessageKeys
    +
    PLAYER_IS_VANISHED_CONFIRM - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    plugin - Variable in class co.aikar.commands.SpongeCommandManager
    +
    plugin - Variable in class co.aikar.commands.SpongeCommandManager
     
    -
    postCommand() - Method in class co.aikar.commands.SpongeRegisteredCommand
    +
    postCommand() - Method in class co.aikar.commands.SpongeRegisteredCommand
     
    -
    preCommand() - Method in class co.aikar.commands.SpongeRegisteredCommand
    +
    preCommand() - Method in class co.aikar.commands.SpongeRegisteredCommand
     
    -
    process(CommandSource, String) - Method in class co.aikar.commands.SpongeRootCommand
    +
    process(CommandSource, String) - Method in class co.aikar.commands.SpongeRootCommand
     
    - - - -

    R

    -
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.SpongeCommandManager
    +

    R

    +
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.SpongeCommandManager
     
    -
    registeredCommands - Variable in class co.aikar.commands.SpongeCommandManager
    +
    registeredCommands - Variable in class co.aikar.commands.SpongeCommandManager
     
    - - - -

    S

    -
    -
    sendMessageInternal(String) - Method in class co.aikar.commands.SpongeCommandIssuer
    +

    S

    +
    +
    sendMessageInternal(String) - Method in class co.aikar.commands.SpongeCommandIssuer
     
    -
    setResult(CommandResult) - Method in class co.aikar.commands.SpongeCommandOperationContext
    +
    setResult(CommandResult) - Method in class co.aikar.commands.SpongeCommandOperationContext
     
    -
    SpongeCommandCompletionContext - Class in co.aikar.commands
    +
    SpongeCommandCompletionContext - Class in co.aikar.commands
     
    -
    SpongeCommandCompletions - Class in co.aikar.commands
    +
    SpongeCommandCompletions - Class in co.aikar.commands
     
    -
    SpongeCommandCompletions(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeCommandCompletions
    +
    SpongeCommandCompletions(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeCommandCompletions
     
    -
    SpongeCommandContexts - Class in co.aikar.commands
    +
    SpongeCommandContexts - Class in co.aikar.commands
     
    -
    SpongeCommandContexts(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeCommandContexts
    +
    SpongeCommandContexts(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeCommandContexts
     
    -
    SpongeCommandExecutionContext - Class in co.aikar.commands
    +
    SpongeCommandExecutionContext - Class in co.aikar.commands
     
    -
    SpongeCommandIssuer - Class in co.aikar.commands
    +
    SpongeCommandIssuer - Class in co.aikar.commands
     
    -
    SpongeCommandManager - Class in co.aikar.commands
    +
    SpongeCommandManager - Class in co.aikar.commands
     
    -
    SpongeCommandManager(PluginContainer) - Constructor for class co.aikar.commands.SpongeCommandManager
    +
    SpongeCommandManager(PluginContainer) - Constructor for class co.aikar.commands.SpongeCommandManager
     
    -
    SpongeCommandOperationContext - Class in co.aikar.commands
    +
    SpongeCommandOperationContext - Class in co.aikar.commands
     
    -
    SpongeConditionContext - Class in co.aikar.commands
    +
    SpongeConditionContext - Class in co.aikar.commands
     
    -
    SpongeLocales - Class in co.aikar.commands
    +
    SpongeLocales - Class in co.aikar.commands
     
    -
    SpongeLocales(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeLocales
    +
    SpongeLocales(SpongeCommandManager) - Constructor for class co.aikar.commands.SpongeLocales
     
    -
    SpongeMessageFormatter - Class in co.aikar.commands
    +
    SpongeMessageFormatter - Class in co.aikar.commands
     
    -
    SpongeMessageFormatter(TextColor...) - Constructor for class co.aikar.commands.SpongeMessageFormatter
    +
    SpongeMessageFormatter(TextColor...) - Constructor for class co.aikar.commands.SpongeMessageFormatter
     
    -
    SpongeRegisteredCommand - Class in co.aikar.commands
    +
    SpongeRegisteredCommand - Class in co.aikar.commands
     
    -
    SpongeRootCommand - Class in co.aikar.commands
    +
    SpongeRootCommand - Class in co.aikar.commands
     
    - - - -

    T

    -
    -
    testPermission(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
    +

    T

    +
    +
    testPermission(CommandSource) - Method in class co.aikar.commands.SpongeRootCommand
     
    -
    toString() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
    +
    toString() - Method in class co.aikar.commands.sponge.contexts.OnlinePlayer
     
    - - - -

    U

    -
    -
    USERNAME_TOO_SHORT - co.aikar.commands.MinecraftMessageKeys
    +

    U

    +
    +
    USERNAME_TOO_SHORT - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    V

    -
    -
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +

    V

    +
    +
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns the enum constant of this type with the specified name.
    -
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns an array containing the constants of this enum type, in the order they are declared.
    - - - -

    Y

    -
    -
    YOU_MUST_BE_HOLDING_ITEM - co.aikar.commands.MinecraftMessageKeys
    +

    Y

    +
    +
    YOU_MUST_BE_HOLDING_ITEM - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -A C E F G H I L M N O P R S T U V Y 
    All Classes All Packages
    -
    +A C E F G H I L M N O P R S T U V Y 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/index.html b/docs/acf-sponge/index.html index 35c5b71e..305d6e02 100644 --- a/docs/acf-sponge/index.html +++ b/docs/acf-sponge/index.html @@ -1,51 +1,33 @@ - - -Overview (ACF (Sponge) 0.5.0-SNAPSHOT API) + +Overview (ACF (Sponge) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (Sponge) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.contexts 
    co.aikar.commands.sponge.contexts 
    +
    +

    ACF (Sponge) 0.5.1-SNAPSHOT API

    +
    +
    +
    Packages
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-sponge/jquery-ui.overrides.css b/docs/acf-sponge/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-sponge/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-sponge/legal/COPYRIGHT b/docs/acf-sponge/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-sponge/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-sponge/legal/LICENSE b/docs/acf-sponge/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-sponge/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-sponge/legal/jquery.md b/docs/acf-sponge/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-sponge/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-sponge/legal/jqueryUI.md b/docs/acf-sponge/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-sponge/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-sponge/member-search-index.js b/docs/acf-sponge/member-search-index.js index 4e26db16..a4f92970 100644 --- a/docs/acf-sponge/member-search-index.js +++ b/docs/acf-sponge/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands.contexts","c":"CommandResultSupplier","l":"accept(CommandResult)","url":"accept(org.spongepowered.api.command.CommandResult)"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"ACFSpongeListener(SpongeCommandManager)","url":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"ACFSpongeUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands.contexts","c":"CommandResultSupplier","l":"CommandResultSupplier()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","url":"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":"SpongeCommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","url":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createConditionContext(CommandIssuer, String)","url":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","url":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createRootCommand(String)","url":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createTiming(String)","url":"createTiming(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"findPlayerSmart(CommandIssuer, String)","url":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeMessageFormatter","l":"format(TextColor, String)","url":"format(org.spongepowered.api.text.format.TextColor,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandIssuer(Object)","url":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandPrefix(CommandIssuer)","url":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getHelp(CommandSource)","url":"getHelp(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands","c":"SpongeCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"SpongeCommandOperationContext","l":"getResult()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getShortDescription(CommandSource)","url":"getShortDescription(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands","c":"SpongeCommandCompletionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeCommandExecutionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeConditionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getSuggestions(CommandSource, String, Location)","url":"getSuggestions(org.spongepowered.api.command.CommandSource,java.lang.String,org.spongepowered.api.world.Location)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getUsage(CommandSource)","url":"getUsage(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"hasPermission(String)","url":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"INVALID_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"isValidName(String)","url":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"matchPlayer(String)","url":"matchPlayer(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"onDisconnectCleanup(ClientConnectionEvent.Disconnect, Player)","url":"onDisconnectCleanup(org.spongepowered.api.event.network.ClientConnectionEvent.Disconnect,org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"onSettingsChange(PlayerChangeClientSettingsEvent, Player)","url":"onSettingsChange(org.spongepowered.api.event.entity.living.humanoid.player.PlayerChangeClientSettingsEvent,org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"PLAYER_IS_VANISHED_CONFIRM"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"SpongeRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"SpongeRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"process(CommandSource, String)","url":"process(org.spongepowered.api.command.CommandSource,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandOperationContext","l":"setResult(CommandResult)","url":"setResult(org.spongepowered.api.command.CommandResult)"},{"p":"co.aikar.commands","c":"SpongeCommandCompletions","l":"SpongeCommandCompletions(SpongeCommandManager)","url":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeCommandContexts","l":"SpongeCommandContexts(SpongeCommandManager)","url":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"SpongeCommandManager(PluginContainer)","url":"%3Cinit%3E(org.spongepowered.api.plugin.PluginContainer)"},{"p":"co.aikar.commands","c":"SpongeLocales","l":"SpongeLocales(SpongeCommandManager)","url":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeMessageFormatter","l":"SpongeMessageFormatter(TextColor...)","url":"%3Cinit%3E(org.spongepowered.api.text.format.TextColor...)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"testPermission(CommandSource)","url":"testPermission(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","url":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"YOU_MUST_BE_HOLDING_ITEM"}] \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands.contexts","c":"CommandResultSupplier","l":"accept(CommandResult)","u":"accept(org.spongepowered.api.command.CommandResult)"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"ACFSpongeListener(SpongeCommandManager)","u":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"ACFSpongeUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands.contexts","c":"CommandResultSupplier","l":"CommandResultSupplier()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"SpongeCommandManager","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":"SpongeCommandManager","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":"SpongeCommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","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":"SpongeCommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"createTiming(String)","u":"createTiming(java.lang.String)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"findPlayerSmart(CommandIssuer, String)","u":"findPlayerSmart(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeMessageFormatter","l":"format(TextColor, String)","u":"format(org.spongepowered.api.text.format.TextColor,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getHelp(CommandSource)","u":"getHelp(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"SpongeCommandOperationContext","l":"getResult()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getShortDescription(CommandSource)","u":"getShortDescription(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands","c":"SpongeCommandCompletionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeCommandExecutionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeConditionContext","l":"getSource()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getSuggestions(CommandSource, String, Location)","u":"getSuggestions(org.spongepowered.api.command.CommandSource,java.lang.String,org.spongepowered.api.world.Location)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"getUsage(CommandSource)","u":"getUsage(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"INVALID_WORLD"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"isValidName(String)","u":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"ACFSpongeUtil","l":"matchPlayer(String)","u":"matchPlayer(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"onDisconnectCleanup(ClientConnectionEvent.Disconnect, Player)","u":"onDisconnectCleanup(org.spongepowered.api.event.network.ClientConnectionEvent.Disconnect,org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands","c":"ACFSpongeListener","l":"onSettingsChange(PlayerChangeClientSettingsEvent, Player)","u":"onSettingsChange(org.spongepowered.api.event.entity.living.humanoid.player.PlayerChangeClientSettingsEvent,org.spongepowered.api.entity.living.player.Player)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"PLAYER_IS_VANISHED_CONFIRM"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"SpongeRegisteredCommand","l":"postCommand()"},{"p":"co.aikar.commands","c":"SpongeRegisteredCommand","l":"preCommand()"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"process(CommandSource, String)","u":"process(org.spongepowered.api.command.CommandSource,java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"SpongeCommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"SpongeCommandOperationContext","l":"setResult(CommandResult)","u":"setResult(org.spongepowered.api.command.CommandResult)"},{"p":"co.aikar.commands","c":"SpongeCommandCompletions","l":"SpongeCommandCompletions(SpongeCommandManager)","u":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeCommandContexts","l":"SpongeCommandContexts(SpongeCommandManager)","u":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeCommandManager","l":"SpongeCommandManager(PluginContainer)","u":"%3Cinit%3E(org.spongepowered.api.plugin.PluginContainer)"},{"p":"co.aikar.commands","c":"SpongeLocales","l":"SpongeLocales(SpongeCommandManager)","u":"%3Cinit%3E(co.aikar.commands.SpongeCommandManager)"},{"p":"co.aikar.commands","c":"SpongeMessageFormatter","l":"SpongeMessageFormatter(TextColor...)","u":"%3Cinit%3E(org.spongepowered.api.text.format.TextColor...)"},{"p":"co.aikar.commands","c":"SpongeRootCommand","l":"testPermission(CommandSource)","u":"testPermission(org.spongepowered.api.command.CommandSource)"},{"p":"co.aikar.commands.sponge.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"YOU_MUST_BE_HOLDING_ITEM"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-sponge/module-search-index.js b/docs/acf-sponge/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-sponge/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-sponge/overview-summary.html b/docs/acf-sponge/overview-summary.html index 54e95886..e2d60524 100644 --- a/docs/acf-sponge/overview-summary.html +++ b/docs/acf-sponge/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (Sponge) 0.5.0-SNAPSHOT API + +ACF (Sponge) 0.5.1-SNAPSHOT API + + + + + - - - +
    -
    -
    + +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletionContext.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletionContext.html index c628b454..1c66e5a1 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletionContext.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletionContext.html @@ -1,308 +1,158 @@ - - -VelocityCommandCompletionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandCompletionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandCompletionContext

    + +

    Class VelocityCommandCompletionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class VelocityCommandCompletionContext +extends co.aikar.commands.CommandCompletionContext<VelocityCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandCompletionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandCompletionContext

        +issuer
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        com.velocitypowered.api.proxy.Player
        + +
         
        +
        com.velocitypowered.api.command.CommandSource
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.CommandCompletionContext

        +getConfig, getConfig, getConfig, getConfigs, getContextValue, getContextValue, getContextValueByName, getInput, getIssuer, hasConfig, isAsync
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public com.velocitypowered.api.command.CommandSource getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public com.velocitypowered.api.command.CommandSource getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public com.velocitypowered.api.proxy.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public com.velocitypowered.api.proxy.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletions.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletions.html index fe6d0aa8..f3e19413 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletions.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandCompletions.html @@ -1,298 +1,147 @@ - - -VelocityCommandCompletions (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandCompletions (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandCompletions

    + +

    Class VelocityCommandCompletions

    -
    - -
    - -
    -
    -
      -
    • +
      public class VelocityCommandCompletions +extends co.aikar.commands.CommandCompletions<VelocityCommandCompletionContext>
      + +
      +
        -
        -
          -
        • - - -

          Nested Class Summary

          -
            -
          • - - -

            Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

            -co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
          • -
          -
        • -
        +
      • +
        +

        Nested Class Summary

        +
        +

        Nested classes/interfaces inherited from class co.aikar.commands.CommandCompletions

        +co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.CommandCompletionHandler<C extends co.aikar.commands.CommandCompletionContext>, co.aikar.commands.CommandCompletions.SyncCompletionRequired
        +
      • -
        -
          -
        • - - -

          Constructor Summary

          - - - - - - - - - - -
          Constructors 
          ConstructorDescription
          VelocityCommandCompletions​(com.velocitypowered.api.proxy.ProxyServer server, - co.aikar.commands.CommandManager manager) 
          -
        • -
        +
      • +
        +

        Constructor Summary

        +
        Constructors
        +
        +
        Constructor
        +
        Description
        +
        VelocityCommandCompletions(com.velocitypowered.api.proxy.ProxyServer server, + co.aikar.commands.CommandManager manager)
        +
         
        +
        +
      • -
        - +
      • +
        +

        Method Summary

        +
        +

        Methods inherited from class co.aikar.commands.CommandCompletions

        +registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, setDefaultCompletion
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            VelocityCommandCompletions

            -
            public VelocityCommandCompletions​(com.velocitypowered.api.proxy.ProxyServer server,
            -                                  co.aikar.commands.CommandManager manager)
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            VelocityCommandCompletions

            +
            public VelocityCommandCompletions(com.velocitypowered.api.proxy.ProxyServer server, + co.aikar.commands.CommandManager manager)
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandContexts.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandContexts.html index 164d8655..87c62c2a 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandContexts.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandContexts.html @@ -1,250 +1,114 @@ - - -VelocityCommandContexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandContexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandContexts

    + +

    Class VelocityCommandContexts

    -
    - -
    - -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandExecutionContext.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandExecutionContext.html index acc6b872..e44032d0 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandExecutionContext.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandExecutionContext.html @@ -1,308 +1,158 @@ - - -VelocityCommandExecutionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandExecutionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandExecutionContext

    + +

    Class VelocityCommandExecutionContext

    -
    - -
    - -
    -
    -
      -
    • +
      public class VelocityCommandExecutionContext +extends co.aikar.commands.CommandExecutionContext<VelocityCommandExecutionContext,VelocityCommandIssuer>
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.CommandExecutionContext

            -issuer
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.CommandExecutionContext

        +issuer
        +
      • -
        -
          -
        • - - -

          Method Summary

          - - - - - - - - - - - - - - - - - -
          All Methods Instance Methods Concrete Methods 
          Modifier and TypeMethodDescription
          com.velocitypowered.api.proxy.PlayergetPlayer() 
          com.velocitypowered.api.command.CommandSourcegetSender() 
          -
            -
          • - - -

            Methods inherited from class co.aikar.commands.CommandExecutionContext

            -canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
          • -
          - -
        • -
        +
      • +
        +

        Method Summary

        +
        +
        +
        +
        +
        Modifier and Type
        +
        Method
        +
        Description
        +
        com.velocitypowered.api.proxy.Player
        + +
         
        +
        com.velocitypowered.api.command.CommandSource
        + +
         
        +
        +
        +
        +
        +

        Methods inherited from class co.aikar.commands.CommandExecutionContext

        +canOverridePlayerContext, getAnnotation, getAnnotationValue, getAnnotationValue, getArgs, getBooleanFlagValue, getBooleanFlagValue, getCmd, getDoubleFlagValue, getFirstArg, getFlags, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFlagValue, getFloatFlagValue, getIndex, getIntFlagValue, getIssuer, getLastArg, getLongFlagValue, getNumParams, getParam, getParameterPermissions, getPassedArgs, getResolvedArg, getResolvedArg, getResolvedArg, hasAnnotation, hasFlag, isLastArg, isOptional, joinArgs, joinArgs, popFirstArg, popLastArg
        +
        +

        Methods inherited from class java.lang.Object

        +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public com.velocitypowered.api.command.CommandSource getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public com.velocitypowered.api.command.CommandSource getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public com.velocitypowered.api.proxy.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public com.velocitypowered.api.proxy.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandIssuer.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandIssuer.html index 49b9d63e..079d53d6 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandIssuer.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandIssuer.html @@ -1,422 +1,248 @@ - - -VelocityCommandIssuer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandIssuer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandIssuer

    + +

    Class VelocityCommandIssuer

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.VelocityCommandIssuer
      +
      +
      +
      All Implemented Interfaces:
      co.aikar.commands.CommandIssuer

      -
      public class VelocityCommandIssuer
      -extends Object
      -implements co.aikar.commands.CommandIssuer
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getIssuer

            -
            public com.velocitypowered.api.command.CommandSource getIssuer()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getIssuer

              +
              public com.velocitypowered.api.command.CommandSource getIssuer()
              +
              +
              Specified by:
              getIssuer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public com.velocitypowered.api.proxy.Player getPlayer()
              +
            • +
              +

              getPlayer

              +
              public com.velocitypowered.api.proxy.Player getPlayer()
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              isPlayer

              -
              public boolean isPlayer()
              -
              -
              Specified by:
              +
            • +
              +

              isPlayer

              +
              public boolean isPlayer()
              +
              +
              Specified by:
              isPlayer in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              getUniqueId

              -
              @NotNull
              -public @NotNull UUID getUniqueId()
              -
              -
              Specified by:
              +
            • +
              +

              getUniqueId

              +
              @NotNull +public @NotNull UUID getUniqueId()
              +
              +
              Specified by:
              getUniqueId in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              sendMessageInternal

              -
              public void sendMessageInternal​(String message)
              -
              -
              Specified by:
              +
            • +
              +

              sendMessageInternal

              +
              public void sendMessageInternal(String message)
              +
              +
              Specified by:
              sendMessageInternal in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - -
              -
            • -

              hasPermission

              -
              public boolean hasPermission​(String name)
              -
              -
              Specified by:
              +
            • +
              +

              hasPermission

              +
              public boolean hasPermission(String name)
              +
              +
              Specified by:
              hasPermission in interface co.aikar.commands.CommandIssuer
              +
            • -
            - - - - - - - - +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html b/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html index 8360d486..7928ae0d 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityCommandManager.html @@ -1,824 +1,527 @@ - - -VelocityCommandManager (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityCommandManager (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityCommandManager

    + +

    Class VelocityCommandManager

    -
    - -
    - -
    -
    -
    -
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityConditionContext.html b/docs/acf-velocity/co/aikar/commands/VelocityConditionContext.html index 400e2c65..ec3c46ee 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityConditionContext.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityConditionContext.html @@ -1,291 +1,149 @@ - - -VelocityConditionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityConditionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityConditionContext

    + +

    Class VelocityConditionContext

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getSender

            -
            public com.velocitypowered.api.command.CommandSource getSender()
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getSender

              +
              public com.velocitypowered.api.command.CommandSource getSender()
              +
            • -
            - - - -
              -
            • -

              getPlayer

              -
              public com.velocitypowered.api.proxy.Player getPlayer()
              -
            • -
            +
          • +
            +

            getPlayer

            +
            public com.velocitypowered.api.proxy.Player getPlayer()
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityLocales.html b/docs/acf-velocity/co/aikar/commands/VelocityLocales.html index d3503bb5..de77664d 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityLocales.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityLocales.html @@ -1,338 +1,180 @@ - - -VelocityLocales (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityLocales (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityLocales

    + +

    Class VelocityLocales

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.Locales
      • -
      • -
          -
        • co.aikar.commands.VelocityLocales
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.Locales +
      co.aikar.commands.VelocityLocales
      +
      +
      +

      -
      public class VelocityLocales
      -extends co.aikar.commands.Locales
      -
    • -
    -
    -
    -
      -
    • +
      public class VelocityLocales +extends co.aikar.commands.Locales
      + +
      +
        -
        -
          -
        • - - -

          Field Summary

          -
            -
          • - - -

            Fields inherited from class co.aikar.commands.Locales

            -AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
          • -
          -
        • -
        +
      • +
        +

        Field Summary

        +
        +

        Fields inherited from class co.aikar.commands.Locales

        +AFRIKAANS, ARABIC, BULGARIAN, CHINESE, CZECH, DANISH, DUTCH, ENGLISH, FINNISH, FRENCH, GERMAN, GREEK, HEBREW, HINDI, HUNGARIAN, ITALIAN, JAPANESE, KOREAN, LATIN, NORWEGIAN_BOKMAAL, NORWEGIAN_NYNORSK, POLISH, PORTUGUESE, ROMANIAN, RUSSIAN, SIMPLIFIED_CHINESE, SPANISH, SWEDISH, THAI, TRADITIONAL_CHINESE, TURKISH, UKRANIAN, VIETNAMESE, WELSH
        +
      • -
        - -
        - -
        - -
        - -
      +
    • +
      +

      Constructor Summary

      +
      Constructors
      +
      +
      Constructor
      +
      Description
      + +
       
      -
      - + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      + +
       
      +
      +
      +
      +
      +

      Methods inherited from class co.aikar.commands.Locales

      +addBundleClassLoader, addMessage, addMessageBundle, addMessageBundle, addMessageBundles, addMessages, addMessageStrings, getDefaultLocale, getMessage, getOptionalMessage, loadMissingBundles, replaceI18NStrings, setDefaultLocale
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
    +
    +
      + +
    • +
      +

      Constructor Details

      + +
      +
    • -
      -
        -
      • - - -

        Method Detail

        - - - -
          -
        • -

          loadLanguages

          -
          public void loadLanguages()
          -
          -
          Overrides:
          +
        • +
          +

          Method Details

          +
            +
          • +
            +

            loadLanguages

            +
            public void loadLanguages()
            +
            +
            Overrides:
            loadLanguages in class co.aikar.commands.Locales
            -
          • -
          +
    -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityMessageFormatter.html b/docs/acf-velocity/co/aikar/commands/VelocityMessageFormatter.html index dcecfd02..f9123ce1 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityMessageFormatter.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityMessageFormatter.html @@ -1,279 +1,136 @@ - - -VelocityMessageFormatter (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityMessageFormatter (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityMessageFormatter

    + +

    Class VelocityMessageFormatter

    -
    -
      -
    • java.lang.Object
    • -
    • -
        -
      • co.aikar.commands.MessageFormatter<net.kyori.text.format.TextColor>
      • -
      • -
          -
        • co.aikar.commands.VelocityMessageFormatter
        • -
        -
      • -
      -
    • -
    -
    -
      -
    • +
      java.lang.Object +
      co.aikar.commands.MessageFormatter<net.kyori.adventure.text.format.NamedTextColor> +
      co.aikar.commands.VelocityMessageFormatter
      +
      +
      +

      -
      public class VelocityMessageFormatter
      -extends co.aikar.commands.MessageFormatter<net.kyori.text.format.TextColor>
      -
    • -
    -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - - +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            VelocityMessageFormatter

            +
            public VelocityMessageFormatter(net.kyori.adventure.text.format.NamedTextColor... colors)
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/VelocityRootCommand.html b/docs/acf-velocity/co/aikar/commands/VelocityRootCommand.html index 7473762c..55f82ec7 100644 --- a/docs/acf-velocity/co/aikar/commands/VelocityRootCommand.html +++ b/docs/acf-velocity/co/aikar/commands/VelocityRootCommand.html @@ -1,418 +1,263 @@ - - -VelocityRootCommand (ACF (Velocity) 0.5.0-SNAPSHOT API) + +VelocityRootCommand (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class VelocityRootCommand

    + +

    Class VelocityRootCommand

    -
    - -
    -
      -
    • -
      +
      java.lang.Object +
      co.aikar.commands.VelocityRootCommand
      +
      +
      +
      All Implemented Interfaces:
      -
      co.aikar.commands.RootCommand, com.velocitypowered.api.command.Command
      +
      co.aikar.commands.RootCommand, com.velocitypowered.api.command.Command, com.velocitypowered.api.command.InvocableCommand<com.velocitypowered.api.command.SimpleCommand.Invocation>, com.velocitypowered.api.command.SimpleCommand

      -
      public class VelocityRootCommand
      -extends Object
      -implements com.velocitypowered.api.command.Command, co.aikar.commands.RootCommand
      +
      public class VelocityRootCommand +extends Object +implements com.velocitypowered.api.command.SimpleCommand, co.aikar.commands.RootCommand
      +
      +
      +
        + +
      • +
        +

        Nested Class Summary

        +
        +

        Nested classes/interfaces inherited from interface com.velocitypowered.api.command.SimpleCommand

        +com.velocitypowered.api.command.SimpleCommand.Invocation
        +
      • -
      -
    -
    -
      -
    • -
      - +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      +
      void
      +
      addChild(co.aikar.commands.BaseCommand command)
      +
       
      +
      void
      +
      execute(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
      +
       
      +
      List<co.aikar.commands.BaseCommand>
      + +
       
      + + +
       
      +
      co.aikar.commands.BaseCommand
      + +
       
      +
      co.aikar.commands.CommandManager
      + +
       
      +
      com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand>
      + +
       
      + +
      suggest(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
      +
       
      + +
      suggestAsync(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
      +
       
      +
      +
      +
      +
      +

      Methods inherited from class java.lang.Object

      +clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
      +
      +

      Methods inherited from interface com.velocitypowered.api.command.InvocableCommand

      +hasPermission
      +
      +

      Methods inherited from interface co.aikar.commands.RootCommand

      +addChildShared, execute, getDefaultRegisteredCommand, getDescription, getTabCompletions, getTabCompletions, getTabCompletions, getUniquePermission, getUsage, hasAnyPermission
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Method Detail

          - - - -
            -
          • -

            getCommandName

            -
            public String getCommandName()
            -
            -
            Specified by:
            +
          • +
            +

            Method Details

            +
              +
            • +
              +

              getCommandName

              + +
              +
              Specified by:
              getCommandName in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              addChild

              -
              public void addChild​(co.aikar.commands.BaseCommand command)
              -
              -
              Specified by:
              +
            • +
              +

              addChild

              +
              public void addChild(co.aikar.commands.BaseCommand command)
              +
              +
              Specified by:
              addChild in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getManager

              -
              public co.aikar.commands.CommandManager getManager()
              -
              -
              Specified by:
              +
            • +
              +

              getManager

              +
              public co.aikar.commands.CommandManager getManager()
              +
              +
              Specified by:
              getManager in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getSubCommands

              -
              public com.google.common.collect.SetMultimap<String,​co.aikar.commands.RegisteredCommand> getSubCommands()
              -
              -
              Specified by:
              +
            • +
              +

              getSubCommands

              +
              public com.google.common.collect.SetMultimap<String,co.aikar.commands.RegisteredCommand> getSubCommands()
              +
              +
              Specified by:
              getSubCommands in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              getChildren

              -
              public List<co.aikar.commands.BaseCommand> getChildren()
              -
              -
              Specified by:
              +
            • +
              +

              getChildren

              +
              public List<co.aikar.commands.BaseCommand> getChildren()
              +
              +
              Specified by:
              getChildren in interface co.aikar.commands.RootCommand
              +
            • -
            - - - -
              -
            • -

              execute

              -
              public void execute​(com.velocitypowered.api.command.CommandSource source,
              -                    String[] args)
              -
              -
              Specified by:
              -
              execute in interface com.velocitypowered.api.command.Command
              -
              -
            • -
            - - - -
              -
            • -

              suggest

              -
              public List<Stringsuggest​(com.velocitypowered.api.command.CommandSource source,
              -                            String[] args)
              -
              -
              Specified by:
              -
              suggest in interface com.velocitypowered.api.command.Command
              -
              -
            • -
            - - - -
              -
            • -

              getDefCommand

              -
              public co.aikar.commands.BaseCommand getDefCommand()
              -
              -
              Specified by:
              +
            • +
              +

              getDefCommand

              +
              public co.aikar.commands.BaseCommand getDefCommand()
              +
              +
              Specified by:
              getDefCommand in interface co.aikar.commands.RootCommand
              +
            • -
            +
          • +
            +

            execute

            +
            public void execute(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
            +
            +
            Specified by:
            +
            execute in interface com.velocitypowered.api.command.InvocableCommand<com.velocitypowered.api.command.SimpleCommand.Invocation>
            +
            +
            +
          • +
          • +
            +

            suggest

            +
            public List<String> suggest(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
            +
            +
            Specified by:
            +
            suggest in interface com.velocitypowered.api.command.InvocableCommand<com.velocitypowered.api.command.SimpleCommand.Invocation>
            +
            +
            +
          • +
          • +
            +

            suggestAsync

            +
            public CompletableFuture<List<String>> suggestAsync(com.velocitypowered.api.command.SimpleCommand.Invocation invocation)
            +
            +
            Specified by:
            +
            suggestAsync in interface com.velocitypowered.api.command.InvocableCommand<com.velocitypowered.api.command.SimpleCommand.Invocation>
            +
            +
      -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityListener.html b/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityListener.html index f5636d01..daa70b01 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityListener.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityListener.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFVelocityListener (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFVelocityListener (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFVelocityListener

    +

    Uses of Class
    co.aikar.commands.ACFVelocityListener

    -
    No usage of co.aikar.commands.ACFVelocityListener
    -
    +No usage of co.aikar.commands.ACFVelocityListener
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityUtil.html b/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityUtil.html index 3d1a8663..39a07694 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityUtil.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/ACFVelocityUtil.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.ACFVelocityUtil (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.ACFVelocityUtil (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.ACFVelocityUtil

    +

    Uses of Class
    co.aikar.commands.ACFVelocityUtil

    -
    No usage of co.aikar.commands.ACFVelocityUtil
    -
    +No usage of co.aikar.commands.ACFVelocityUtil
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/MinecraftMessageKeys.html b/docs/acf-velocity/co/aikar/commands/class-use/MinecraftMessageKeys.html index 30f3ec97..2860cfa4 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/MinecraftMessageKeys.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/MinecraftMessageKeys.html @@ -1,201 +1,94 @@ - - -Uses of Class co.aikar.commands.MinecraftMessageKeys (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Enum co.aikar.commands.MinecraftMessageKeys (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.MinecraftMessageKeys

    +

    Uses of Enum
    co.aikar.commands.MinecraftMessageKeys

    -
    -
    +
    - - -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    + + diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletionContext.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletionContext.html index 619ff177..caea0431 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletionContext.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletionContext.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.VelocityCommandCompletionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandCompletionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandCompletionContext

    +

    Uses of Class
    co.aikar.commands.VelocityCommandCompletionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletions.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletions.html index 8d002a0d..61243b1c 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletions.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandCompletions.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.VelocityCommandCompletions (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandCompletions (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandCompletions

    +

    Uses of Class
    co.aikar.commands.VelocityCommandCompletions

    +
    +
    Packages that use VelocityCommandCompletions
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandContexts.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandContexts.html index 1fc343d4..9b142603 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandContexts.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandContexts.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.VelocityCommandContexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandContexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandContexts

    +

    Uses of Class
    co.aikar.commands.VelocityCommandContexts

    +
    +
    Packages that use VelocityCommandContexts
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandExecutionContext.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandExecutionContext.html index a8763e47..9423e9f7 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandExecutionContext.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandExecutionContext.html @@ -1,211 +1,100 @@ - - -Uses of Class co.aikar.commands.VelocityCommandExecutionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandExecutionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandExecutionContext

    +

    Uses of Class
    co.aikar.commands.VelocityCommandExecutionContext

    +
    + +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandIssuer.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandIssuer.html index d6ad34ca..e9c8dba6 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandIssuer.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandIssuer.html @@ -1,191 +1,86 @@ - - -Uses of Class co.aikar.commands.VelocityCommandIssuer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandIssuer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandIssuer

    +

    Uses of Class
    co.aikar.commands.VelocityCommandIssuer

    +
    +
    Packages that use VelocityCommandIssuer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandManager.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandManager.html index 2df26ecc..52a31b3f 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandManager.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityCommandManager.html @@ -1,195 +1,91 @@ - - -Uses of Class co.aikar.commands.VelocityCommandManager (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityCommandManager (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityCommandManager

    +

    Uses of Class
    co.aikar.commands.VelocityCommandManager

    +
    +
    Packages that use VelocityCommandManager
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityConditionContext.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityConditionContext.html index 3e867ef2..84f02f51 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityConditionContext.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityConditionContext.html @@ -1,192 +1,87 @@ - - -Uses of Class co.aikar.commands.VelocityConditionContext (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityConditionContext (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityConditionContext

    +

    Uses of Class
    co.aikar.commands.VelocityConditionContext

    +
    +
    Packages that use VelocityConditionContext
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityLocales.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityLocales.html index 85b3888b..cac89b45 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityLocales.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityLocales.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.VelocityLocales (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityLocales (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityLocales

    +

    Uses of Class
    co.aikar.commands.VelocityLocales

    +
    +
    Packages that use VelocityLocales
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityMessageFormatter.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityMessageFormatter.html index 1d879028..69af7c4c 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityMessageFormatter.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityMessageFormatter.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.VelocityMessageFormatter (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityMessageFormatter (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityMessageFormatter

    +

    Uses of Class
    co.aikar.commands.VelocityMessageFormatter

    -
    No usage of co.aikar.commands.VelocityMessageFormatter
    -
    +No usage of co.aikar.commands.VelocityMessageFormatter
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/class-use/VelocityRootCommand.html b/docs/acf-velocity/co/aikar/commands/class-use/VelocityRootCommand.html index c763953d..a7f8c81d 100644 --- a/docs/acf-velocity/co/aikar/commands/class-use/VelocityRootCommand.html +++ b/docs/acf-velocity/co/aikar/commands/class-use/VelocityRootCommand.html @@ -1,206 +1,95 @@ - - -Uses of Class co.aikar.commands.VelocityRootCommand (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.VelocityRootCommand (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.VelocityRootCommand

    +

    Uses of Class
    co.aikar.commands.VelocityRootCommand

    +
    +
    Packages that use VelocityRootCommand
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/contexts/OnlinePlayer.html b/docs/acf-velocity/co/aikar/commands/contexts/OnlinePlayer.html index 07efeff0..8f9af64b 100644 --- a/docs/acf-velocity/co/aikar/commands/contexts/OnlinePlayer.html +++ b/docs/acf-velocity/co/aikar/commands/contexts/OnlinePlayer.html @@ -1,303 +1,152 @@ - - -OnlinePlayer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Constructor Detail

          - - - -
            -
          • -

            OnlinePlayer

            -
            public OnlinePlayer​(com.velocitypowered.api.proxy.Player player)
            -
            Deprecated.
            -
          • -
          +
        • +
          +

          Constructor Details

          +
            +
          • +
            +

            OnlinePlayer

            +
            public OnlinePlayer(com.velocitypowered.api.proxy.Player player)
            +
            Deprecated.
            +
        -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/contexts/class-use/OnlinePlayer.html b/docs/acf-velocity/co/aikar/commands/contexts/class-use/OnlinePlayer.html index 4d455616..f149aa82 100644 --- a/docs/acf-velocity/co/aikar/commands/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-velocity/co/aikar/commands/contexts/class-use/OnlinePlayer.html @@ -1,147 +1,61 @@ - - -Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.contexts.OnlinePlayer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.contexts.OnlinePlayer

    -
    No usage of co.aikar.commands.contexts.OnlinePlayer
    -
    +No usage of co.aikar.commands.contexts.OnlinePlayer
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/contexts/package-summary.html b/docs/acf-velocity/co/aikar/commands/contexts/package-summary.html index 58ef9817..40bb329a 100644 --- a/docs/acf-velocity/co/aikar/commands/contexts/package-summary.html +++ b/docs/acf-velocity/co/aikar/commands/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.contexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.contexts

    +

    Package co.aikar.commands.contexts

    +
    +
    +
    package co.aikar.commands.contexts
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/contexts/package-tree.html b/docs/acf-velocity/co/aikar/commands/contexts/package-tree.html index 9ce9215c..52c6a257 100644 --- a/docs/acf-velocity/co/aikar/commands/contexts/package-tree.html +++ b/docs/acf-velocity/co/aikar/commands/contexts/package-tree.html @@ -1,166 +1,79 @@ - - -co.aikar.commands.contexts Class Hierarchy (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands.contexts Class Hierarchy (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/contexts/package-use.html b/docs/acf-velocity/co/aikar/commands/contexts/package-use.html index 9797282c..ceff8908 100644 --- a/docs/acf-velocity/co/aikar/commands/contexts/package-use.html +++ b/docs/acf-velocity/co/aikar/commands/contexts/package-use.html @@ -1,147 +1,61 @@ - - -Uses of Package co.aikar.commands.contexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.contexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.contexts

    -
    No usage of co.aikar.commands.contexts
    -
    +No usage of co.aikar.commands.contexts
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/package-summary.html b/docs/acf-velocity/co/aikar/commands/package-summary.html index c53761bd..dd02a502 100644 --- a/docs/acf-velocity/co/aikar/commands/package-summary.html +++ b/docs/acf-velocity/co/aikar/commands/package-summary.html @@ -1,52 +1,38 @@ - - -co.aikar.commands (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands

    +

    Package co.aikar.commands

    +
    +
    +
    package co.aikar.commands
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/package-tree.html b/docs/acf-velocity/co/aikar/commands/package-tree.html index b177d052..32e6557b 100644 --- a/docs/acf-velocity/co/aikar/commands/package-tree.html +++ b/docs/acf-velocity/co/aikar/commands/package-tree.html @@ -1,219 +1,132 @@ - - -co.aikar.commands Class Hierarchy (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands Class Hierarchy (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    +

    Enum Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/package-use.html b/docs/acf-velocity/co/aikar/commands/package-use.html index a689398d..93ffcb50 100644 --- a/docs/acf-velocity/co/aikar/commands/package-use.html +++ b/docs/acf-velocity/co/aikar/commands/package-use.html @@ -1,218 +1,101 @@ - - -Uses of Package co.aikar.commands (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands

    - +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/velocity/contexts/OnlinePlayer.html b/docs/acf-velocity/co/aikar/commands/velocity/contexts/OnlinePlayer.html index c38fac24..f404cb7e 100644 --- a/docs/acf-velocity/co/aikar/commands/velocity/contexts/OnlinePlayer.html +++ b/docs/acf-velocity/co/aikar/commands/velocity/contexts/OnlinePlayer.html @@ -1,405 +1,234 @@ - - -OnlinePlayer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +OnlinePlayer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + - +
    +
    - -

    Class OnlinePlayer

    + +

    Class OnlinePlayer

    -
    - -
    - -
    -
    -
    -
    -
      -
    • + +
      +
        -
        -
          -
        • - - -

          Field Detail

          - - - -
            -
          • -

            player

            -
            public final com.velocitypowered.api.proxy.Player player
            -
          • -
          +
        • +
          +

          Field Details

          +
            +
          • +
            +

            player

            +
            public final com.velocitypowered.api.proxy.Player player
            +
          +
        • -
          - -
    -
    -
    + +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/velocity/contexts/class-use/OnlinePlayer.html b/docs/acf-velocity/co/aikar/commands/velocity/contexts/class-use/OnlinePlayer.html index f0a2ee61..02ca7dfa 100644 --- a/docs/acf-velocity/co/aikar/commands/velocity/contexts/class-use/OnlinePlayer.html +++ b/docs/acf-velocity/co/aikar/commands/velocity/contexts/class-use/OnlinePlayer.html @@ -1,195 +1,90 @@ - - -Uses of Class co.aikar.commands.velocity.contexts.OnlinePlayer (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Class co.aikar.commands.velocity.contexts.OnlinePlayer (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Uses of Class
    co.aikar.commands.velocity.contexts.OnlinePlayer

    +

    Uses of Class
    co.aikar.commands.velocity.contexts.OnlinePlayer

    +
    +
    Packages that use OnlinePlayer
    +
    +
    Package
    +
    Description
    + +
     
    +
    +
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-summary.html b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-summary.html index 2a4760b5..8be37e6c 100644 --- a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-summary.html +++ b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-summary.html @@ -1,52 +1,34 @@ - - -co.aikar.commands.velocity.contexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands.velocity.contexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -

    Package co.aikar.commands.velocity.contexts

    +

    Package co.aikar.commands.velocity.contexts

    +
    +
    +
    package co.aikar.commands.velocity.contexts
    +
    +
      +
    • +
      +
      Classes
      +
      +
      Class
      +
      Description
      + +
       
      +
      -
      -
        -
      • - - - - - - - - - - - - -
        Class Summary 
        ClassDescription
        OnlinePlayer 
      -
      +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-tree.html b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-tree.html index cc6528b1..e735b52d 100644 --- a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-tree.html +++ b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-tree.html @@ -1,162 +1,75 @@ - - -co.aikar.commands.velocity.contexts Class Hierarchy (ACF (Velocity) 0.5.0-SNAPSHOT API) + +co.aikar.commands.velocity.contexts Class Hierarchy (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Hierarchy For Package co.aikar.commands.velocity.contexts

    -Package Hierarchies: +Package Hierarchies:
    -
    -
    +

    Class Hierarchy

    -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-use.html b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-use.html index e5d21992..9ad05304 100644 --- a/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-use.html +++ b/docs/acf-velocity/co/aikar/commands/velocity/contexts/package-use.html @@ -1,182 +1,83 @@ - - -Uses of Package co.aikar.commands.velocity.contexts (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Uses of Package co.aikar.commands.velocity.contexts (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Uses of Package
    co.aikar.commands.velocity.contexts

    -
    -
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/deprecated-list.html b/docs/acf-velocity/deprecated-list.html index 52dd8c1b..9075ca08 100644 --- a/docs/acf-velocity/deprecated-list.html +++ b/docs/acf-velocity/deprecated-list.html @@ -1,96 +1,51 @@ - - -Deprecated List (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Deprecated List (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +

    Deprecated API

    @@ -99,75 +54,27 @@ $('.navPadding').css('padding-top', $('.fixedNav').css("height"));
  • Classes
  • -
    - - -
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/index-all.html b/docs/acf-velocity/index-all.html index 241577de..ddc094be 100644 --- a/docs/acf-velocity/index-all.html +++ b/docs/acf-velocity/index-all.html @@ -1,453 +1,322 @@ - - -Index (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Index (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + +
    -
    A C E F G H I L M N O P R S T U V 
    All Classes All Packages - - -

    A

    -
    -
    ACFVelocityListener - Class in co.aikar.commands
    +
    +

    Index

    +
    +A C E F G H I L M N O P R S T U V 
    All Classes and Interfaces|All Packages +

    A

    +
    +
    ACFVelocityListener - Class in co.aikar.commands
     
    -
    ACFVelocityListener(VelocityCommandManager, PluginContainer, ProxyServer) - Constructor for class co.aikar.commands.ACFVelocityListener
    +
    ACFVelocityListener(VelocityCommandManager, PluginContainer, ProxyServer) - Constructor for class co.aikar.commands.ACFVelocityListener
     
    -
    ACFVelocityUtil - Class in co.aikar.commands
    +
    ACFVelocityUtil - Class in co.aikar.commands
     
    -
    ACFVelocityUtil() - Constructor for class co.aikar.commands.ACFVelocityUtil
    +
    ACFVelocityUtil() - Constructor for class co.aikar.commands.ACFVelocityUtil
     
    -
    addChild(BaseCommand) - Method in class co.aikar.commands.VelocityRootCommand
    +
    addChild(BaseCommand) - Method in class co.aikar.commands.VelocityRootCommand
     
    - - - -

    C

    -
    +

    C

    +
    co.aikar.commands - package co.aikar.commands
     
    co.aikar.commands.contexts - package co.aikar.commands.contexts
     
    co.aikar.commands.velocity.contexts - package co.aikar.commands.velocity.contexts
     
    -
    color(String) - Static method in class co.aikar.commands.ACFVelocityUtil
    +
    color(String) - Static method in class co.aikar.commands.ACFVelocityUtil
     
    -
    completions - Variable in class co.aikar.commands.VelocityCommandManager
    +
    completions - Variable in class co.aikar.commands.VelocityCommandManager
     
    -
    contexts - Variable in class co.aikar.commands.VelocityCommandManager
    +
    contexts - Variable in class co.aikar.commands.VelocityCommandManager
     
    -
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.VelocityCommandManager
    +
    createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List<String>, int, Map<String, Object>) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.VelocityCommandManager
    +
    createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[]) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.VelocityCommandManager
    +
    createConditionContext(CommandIssuer, String) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.VelocityCommandManager
    +
    createRegisteredCommand(BaseCommand, String, Method, String) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    createRootCommand(String) - Method in class co.aikar.commands.VelocityCommandManager
    +
    createRootCommand(String) - Method in class co.aikar.commands.VelocityCommandManager
     
    - - - -

    E

    -
    -
    equals(Object) - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
    +

    E

    +
    +
    equals(Object) - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    -
    equals(Object) - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    equals(Object) - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    execute(CommandSource, String[]) - Method in class co.aikar.commands.VelocityRootCommand
    +
    execute(SimpleCommand.Invocation) - Method in class co.aikar.commands.VelocityRootCommand
     
    - - - -

    F

    -
    -
    findPlayerSmart(ProxyServer, CommandIssuer, String) - Static method in class co.aikar.commands.ACFVelocityUtil
    +

    F

    +
    +
    findPlayerSmart(ProxyServer, CommandIssuer, String) - Static method in class co.aikar.commands.ACFVelocityUtil
     
    - - - -

    G

    -
    -
    getChildren() - Method in class co.aikar.commands.VelocityRootCommand
    +

    G

    +
    +
    getChildren() - Method in class co.aikar.commands.VelocityRootCommand
     
    -
    getCommandCompletions() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getCommandCompletions() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getCommandContexts() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getCommandContexts() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getCommandIssuer(Object) - Method in class co.aikar.commands.VelocityCommandManager
    +
    getCommandIssuer(Object) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getCommandName() - Method in class co.aikar.commands.VelocityRootCommand
    +
    getCommandName() - Method in class co.aikar.commands.VelocityRootCommand
     
    -
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.VelocityCommandManager
    +
    getCommandPrefix(CommandIssuer) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getDefCommand() - Method in class co.aikar.commands.VelocityRootCommand
    +
    getDefCommand() - Method in class co.aikar.commands.VelocityRootCommand
     
    -
    getIssuer() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    getIssuer() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    getLocales() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getLocales() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getManager() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    getManager() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    getManager() - Method in class co.aikar.commands.VelocityRootCommand
    +
    getManager() - Method in class co.aikar.commands.VelocityRootCommand
     
    -
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
    +
    getMessageKey() - Method in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    getPlayer() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
    +
    getPlayer() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    -
    getPlayer() - Method in class co.aikar.commands.VelocityCommandCompletionContext
    +
    getPlayer() - Method in class co.aikar.commands.VelocityCommandCompletionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.VelocityCommandExecutionContext
    +
    getPlayer() - Method in class co.aikar.commands.VelocityCommandExecutionContext
     
    -
    getPlayer() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    getPlayer() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    getPlayer() - Method in class co.aikar.commands.VelocityConditionContext
    +
    getPlayer() - Method in class co.aikar.commands.VelocityConditionContext
     
    -
    getPlugin() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getPlugin() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getProxy() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getProxy() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getRegisteredRootCommands() - Method in class co.aikar.commands.VelocityCommandManager
    +
    getRegisteredRootCommands() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    getSender() - Method in class co.aikar.commands.VelocityCommandCompletionContext
    +
    getSender() - Method in class co.aikar.commands.VelocityCommandCompletionContext
     
    -
    getSender() - Method in class co.aikar.commands.VelocityCommandExecutionContext
    +
    getSender() - Method in class co.aikar.commands.VelocityCommandExecutionContext
     
    -
    getSender() - Method in class co.aikar.commands.VelocityConditionContext
    +
    getSender() - Method in class co.aikar.commands.VelocityConditionContext
     
    -
    getSubCommands() - Method in class co.aikar.commands.VelocityRootCommand
    +
    getSubCommands() - Method in class co.aikar.commands.VelocityRootCommand
     
    -
    getUniqueId() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    getUniqueId() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    - - - -

    H

    -
    -
    hashCode() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
    +

    H

    +
    +
    hashCode() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    -
    hashCode() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    hashCode() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    hasPermission(String) - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    hasPermission(String) - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    hasRegisteredCommands() - Method in class co.aikar.commands.VelocityCommandManager
    +
    hasRegisteredCommands() - Method in class co.aikar.commands.VelocityCommandManager
     
    - - - -

    I

    -
    -
    IS_NOT_A_VALID_NAME - co.aikar.commands.MinecraftMessageKeys
    +

    I

    +
    +
    IS_NOT_A_VALID_NAME - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.VelocityCommandManager
    +
    isCommandIssuer(Class<?>) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    isPlayer() - Method in class co.aikar.commands.VelocityCommandIssuer
    +
    isPlayer() - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    isValidName(String) - Static method in class co.aikar.commands.ACFVelocityUtil
    +
    isValidName(String) - Static method in class co.aikar.commands.ACFVelocityUtil
     
    - - - -

    L

    -
    -
    loadLanguages() - Method in class co.aikar.commands.VelocityLocales
    +

    L

    +
    +
    loadLanguages() - Method in class co.aikar.commands.VelocityLocales
     
    -
    locales - Variable in class co.aikar.commands.VelocityCommandManager
    +
    locales - Variable in class co.aikar.commands.VelocityCommandManager
     
    -
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.VelocityCommandManager
    +
    log(LogLevel, String, Throwable) - Method in class co.aikar.commands.VelocityCommandManager
     
    - - - -

    M

    -
    -
    MinecraftMessageKeys - Enum in co.aikar.commands
    +

    M

    +
    +
    MinecraftMessageKeys - Enum in co.aikar.commands
     
    -
    MULTIPLE_PLAYERS_MATCH - co.aikar.commands.MinecraftMessageKeys
    +
    MULTIPLE_PLAYERS_MATCH - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    N

    -
    -
    NO_PLAYER_FOUND - co.aikar.commands.MinecraftMessageKeys
    +

    N

    +
    +
    NO_PLAYER_FOUND - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    -
    NO_PLAYER_FOUND_SERVER - co.aikar.commands.MinecraftMessageKeys
    +
    NO_PLAYER_FOUND_SERVER - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    O

    -
    -
    onDisconnect(DisconnectEvent) - Method in class co.aikar.commands.ACFVelocityListener
    +

    O

    +
    +
    onDisconnect(DisconnectEvent) - Method in class co.aikar.commands.ACFVelocityListener
     
    -
    OnlinePlayer - Class in co.aikar.commands.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.contexts
    -
    Deprecated. - +
    Deprecated. +
    -
    OnlinePlayer - Class in co.aikar.commands.velocity.contexts
    +
    OnlinePlayer - Class in co.aikar.commands.velocity.contexts
     
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.contexts.OnlinePlayer
    -
    Deprecated.
    +
    Deprecated.
     
    -
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.velocity.contexts.OnlinePlayer
    +
    OnlinePlayer(Player) - Constructor for class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    -
    onPlayerJoin(PostLoginEvent) - Method in class co.aikar.commands.ACFVelocityListener
    +
    onPlayerJoin(PostLoginEvent) - Method in class co.aikar.commands.ACFVelocityListener
     
    -
    onSettingsChange(PlayerSettingsChangedEvent) - Method in class co.aikar.commands.ACFVelocityListener
    +
    onSettingsChange(PlayerSettingsChangedEvent) - Method in class co.aikar.commands.ACFVelocityListener
     
    - - - -

    P

    -
    -
    player - Variable in class co.aikar.commands.velocity.contexts.OnlinePlayer
    +

    P

    +
    +
    player - Variable in class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    -
    plugin - Variable in class co.aikar.commands.VelocityCommandManager
    +
    plugin - Variable in class co.aikar.commands.VelocityCommandManager
     
    -
    proxy - Variable in class co.aikar.commands.VelocityCommandManager
    +
    proxy - Variable in class co.aikar.commands.VelocityCommandManager
     
    - - - -

    R

    -
    -
    readLocale(Player) - Method in class co.aikar.commands.VelocityCommandManager
    +

    R

    +
    +
    readLocale(Player) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    registerCommand(BaseCommand) - Method in class co.aikar.commands.VelocityCommandManager
    +
    registerCommand(BaseCommand) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    registerCommand(BaseCommand, boolean) - Method in class co.aikar.commands.VelocityCommandManager
    +
    registerCommand(BaseCommand, boolean) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    registeredCommands - Variable in class co.aikar.commands.VelocityCommandManager
    +
    registeredCommands - Variable in class co.aikar.commands.VelocityCommandManager
     
    - - - -

    S

    -
    -
    sendMessageInternal(String) - Method in class co.aikar.commands.VelocityCommandIssuer
    +

    S

    +
    +
    sendMessageInternal(String) - Method in class co.aikar.commands.VelocityCommandIssuer
     
    -
    suggest(CommandSource, String[]) - Method in class co.aikar.commands.VelocityRootCommand
    +
    suggest(SimpleCommand.Invocation) - Method in class co.aikar.commands.VelocityRootCommand
    +
     
    +
    suggestAsync(SimpleCommand.Invocation) - Method in class co.aikar.commands.VelocityRootCommand
     
    - - - -

    T

    -
    -
    toString() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
    +

    T

    +
    +
    toString() - Method in class co.aikar.commands.velocity.contexts.OnlinePlayer
     
    - - - -

    U

    -
    -
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.VelocityCommandManager
    +

    U

    +
    +
    unregisterCommand(BaseCommand) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    unregisterCommand(VelocityRootCommand) - Method in class co.aikar.commands.VelocityCommandManager
    +
    unregisterCommand(VelocityRootCommand) - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    unregisterCommands() - Method in class co.aikar.commands.VelocityCommandManager
    +
    unregisterCommands() - Method in class co.aikar.commands.VelocityCommandManager
     
    -
    USERNAME_TOO_SHORT - co.aikar.commands.MinecraftMessageKeys
    +
    USERNAME_TOO_SHORT - Enum constant in enum co.aikar.commands.MinecraftMessageKeys
     
    - - - -

    V

    -
    -
    validate(T, String, Object...) - Static method in class co.aikar.commands.ACFVelocityUtil
    +

    V

    +
    +
    validate(T, String, Object...) - Static method in class co.aikar.commands.ACFVelocityUtil
     
    -
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    valueOf(String) - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns the enum constant of this type with the specified name.
    -
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    +
    values() - Static method in enum co.aikar.commands.MinecraftMessageKeys
    Returns an array containing the constants of this enum type, in the order they are declared.
    -
    VelocityCommandCompletionContext - Class in co.aikar.commands
    +
    VelocityCommandCompletionContext - Class in co.aikar.commands
     
    -
    VelocityCommandCompletions - Class in co.aikar.commands
    +
    VelocityCommandCompletions - Class in co.aikar.commands
     
    -
    VelocityCommandCompletions(ProxyServer, CommandManager) - Constructor for class co.aikar.commands.VelocityCommandCompletions
    +
    VelocityCommandCompletions(ProxyServer, CommandManager) - Constructor for class co.aikar.commands.VelocityCommandCompletions
     
    -
    VelocityCommandContexts - Class in co.aikar.commands
    +
    VelocityCommandContexts - Class in co.aikar.commands
     
    -
    VelocityCommandExecutionContext - Class in co.aikar.commands
    +
    VelocityCommandExecutionContext - Class in co.aikar.commands
     
    -
    VelocityCommandIssuer - Class in co.aikar.commands
    +
    VelocityCommandIssuer - Class in co.aikar.commands
     
    -
    VelocityCommandManager - Class in co.aikar.commands
    +
    VelocityCommandManager - Class in co.aikar.commands
     
    -
    VelocityCommandManager(ProxyServer, Object) - Constructor for class co.aikar.commands.VelocityCommandManager
    +
    VelocityCommandManager(ProxyServer, Object) - Constructor for class co.aikar.commands.VelocityCommandManager
     
    -
    VelocityConditionContext - Class in co.aikar.commands
    +
    VelocityConditionContext - Class in co.aikar.commands
     
    -
    VelocityLocales - Class in co.aikar.commands
    +
    VelocityLocales - Class in co.aikar.commands
     
    -
    VelocityLocales(VelocityCommandManager) - Constructor for class co.aikar.commands.VelocityLocales
    +
    VelocityLocales(VelocityCommandManager) - Constructor for class co.aikar.commands.VelocityLocales
     
    -
    VelocityMessageFormatter - Class in co.aikar.commands
    +
    VelocityMessageFormatter - Class in co.aikar.commands
     
    -
    VelocityMessageFormatter(TextColor...) - Constructor for class co.aikar.commands.VelocityMessageFormatter
    +
    VelocityMessageFormatter(NamedTextColor...) - Constructor for class co.aikar.commands.VelocityMessageFormatter
     
    -
    VelocityRootCommand - Class in co.aikar.commands
    +
    VelocityRootCommand - Class in co.aikar.commands
     
    -A C E F G H I L M N O P R S T U V 
    All Classes All Packages
    -
    +A C E F G H I L M N O P R S T U V 
    All Classes and Interfaces|All Packages
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/index.html b/docs/acf-velocity/index.html index b836cc2c..948088f7 100644 --- a/docs/acf-velocity/index.html +++ b/docs/acf-velocity/index.html @@ -1,51 +1,33 @@ - - -Overview (ACF (Velocity) 0.5.0-SNAPSHOT API) + +Overview (ACF (Velocity) 0.5.1-SNAPSHOT API) + + + - + + - - - - - - + + - - -
    +
    + -
    -

    ACF (Velocity) 0.5.0-SNAPSHOT API

    -
    +
    -
    - - - - - - - - - - - - - - - - - - - - -
    Packages 
    PackageDescription
    co.aikar.commands 
    co.aikar.commands.contexts 
    co.aikar.commands.velocity.contexts 
    +
    +

    ACF (Velocity) 0.5.1-SNAPSHOT API

    +
    +
    +
    Packages
    +
    - -

    Copyright © 2020. All rights reserved.

    +
    +
    +
    +
    diff --git a/docs/acf-velocity/jquery-ui.overrides.css b/docs/acf-velocity/jquery-ui.overrides.css new file mode 100644 index 00000000..1abff952 --- /dev/null +++ b/docs/acf-velocity/jquery-ui.overrides.css @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +.ui-state-active, +.ui-widget-content .ui-state-active, +.ui-widget-header .ui-state-active, +a.ui-button:active, +.ui-button:active, +.ui-button.ui-state-active:hover { + /* Overrides the color of selection used in jQuery UI */ + background: #F8981D; +} diff --git a/docs/acf-velocity/legal/COPYRIGHT b/docs/acf-velocity/legal/COPYRIGHT new file mode 100644 index 00000000..ca74fffd --- /dev/null +++ b/docs/acf-velocity/legal/COPYRIGHT @@ -0,0 +1 @@ +Please see ..\java.base\COPYRIGHT diff --git a/docs/acf-velocity/legal/LICENSE b/docs/acf-velocity/legal/LICENSE new file mode 100644 index 00000000..4ad9fe40 --- /dev/null +++ b/docs/acf-velocity/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/acf-velocity/legal/jquery.md b/docs/acf-velocity/legal/jquery.md new file mode 100644 index 00000000..8054a34c --- /dev/null +++ b/docs/acf-velocity/legal/jquery.md @@ -0,0 +1,72 @@ +## jQuery v3.5.1 + +### jQuery License +``` +jQuery v 3.5.1 +Copyright JS Foundation and other contributors, https://js.foundation/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +****************************************** + +The jQuery JavaScript Library v3.5.1 also includes Sizzle.js + +Sizzle.js includes the following license: + +Copyright JS Foundation and other contributors, https://js.foundation/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/sizzle + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +********************* + +``` diff --git a/docs/acf-velocity/legal/jqueryUI.md b/docs/acf-velocity/legal/jqueryUI.md new file mode 100644 index 00000000..8031bdb5 --- /dev/null +++ b/docs/acf-velocity/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.12.1 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/acf-velocity/member-search-index.js b/docs/acf-velocity/member-search-index.js index 2fe0ca2d..63e167b7 100644 --- a/docs/acf-velocity/member-search-index.js +++ b/docs/acf-velocity/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"ACFVelocityListener(VelocityCommandManager, PluginContainer, ProxyServer)","url":"%3Cinit%3E(co.aikar.commands.VelocityCommandManager,com.velocitypowered.api.plugin.PluginContainer,com.velocitypowered.api.proxy.ProxyServer)"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"ACFVelocityUtil()","url":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"addChild(BaseCommand)","url":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"color(String)","url":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List, int, Map)","url":"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":"VelocityCommandManager","l":"createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])","url":"createCompletionContext(co.aikar.commands.RegisteredCommand,co.aikar.commands.CommandIssuer,java.lang.String,java.lang.String,java.lang.String[])"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"createConditionContext(CommandIssuer, String)","url":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"createRegisteredCommand(BaseCommand, String, Method, String)","url":"createRegisteredCommand(co.aikar.commands.BaseCommand,java.lang.String,java.lang.reflect.Method,java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"createRootCommand(String)","url":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"equals(Object)","url":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"execute(CommandSource, String[])","url":"execute(com.velocitypowered.api.command.CommandSource,java.lang.String[])"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"findPlayerSmart(ProxyServer, CommandIssuer, String)","url":"findPlayerSmart(com.velocitypowered.api.proxy.ProxyServer,co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandIssuer(Object)","url":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandPrefix(CommandIssuer)","url":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getProxy()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"hasPermission(String)","url":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"isCommandIssuer(Class)","url":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"isValidName(String)","url":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"log(LogLevel, String, Throwable)","url":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onDisconnect(DisconnectEvent)","url":"onDisconnect(com.velocitypowered.api.event.connection.DisconnectEvent)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","url":"%3Cinit%3E(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onPlayerJoin(PostLoginEvent)","url":"onPlayerJoin(com.velocitypowered.api.event.connection.PostLoginEvent)"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onSettingsChange(PlayerSettingsChangedEvent)","url":"onSettingsChange(com.velocitypowered.api.event.player.PlayerSettingsChangedEvent)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"proxy"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"readLocale(Player)","url":"readLocale(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registerCommand(BaseCommand, boolean)","url":"registerCommand(co.aikar.commands.BaseCommand,boolean)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registerCommand(BaseCommand)","url":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"sendMessageInternal(String)","url":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"suggest(CommandSource, String[])","url":"suggest(com.velocitypowered.api.command.CommandSource,java.lang.String[])"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommand(BaseCommand)","url":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommand(VelocityRootCommand)","url":"unregisterCommand(co.aikar.commands.VelocityRootCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"validate(T, String, Object...)","url":"validate(T,java.lang.String,java.lang.Object...)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","url":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletions","l":"VelocityCommandCompletions(ProxyServer, CommandManager)","url":"%3Cinit%3E(com.velocitypowered.api.proxy.ProxyServer,co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"VelocityCommandManager(ProxyServer, Object)","url":"%3Cinit%3E(com.velocitypowered.api.proxy.ProxyServer,java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityLocales","l":"VelocityLocales(VelocityCommandManager)","url":"%3Cinit%3E(co.aikar.commands.VelocityCommandManager)"},{"p":"co.aikar.commands","c":"VelocityMessageFormatter","l":"VelocityMessageFormatter(TextColor...)","url":"%3Cinit%3E(net.kyori.text.format.TextColor...)"}] \ No newline at end of file +memberSearchIndex = [{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"ACFVelocityListener(VelocityCommandManager, PluginContainer, ProxyServer)","u":"%3Cinit%3E(co.aikar.commands.VelocityCommandManager,com.velocitypowered.api.plugin.PluginContainer,com.velocitypowered.api.proxy.ProxyServer)"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"ACFVelocityUtil()","u":"%3Cinit%3E()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"addChild(BaseCommand)","u":"addChild(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"color(String)","u":"color(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"completions"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"contexts"},{"p":"co.aikar.commands","c":"VelocityCommandManager","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":"VelocityCommandManager","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":"VelocityCommandManager","l":"createConditionContext(CommandIssuer, String)","u":"createConditionContext(co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","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":"VelocityCommandManager","l":"createRootCommand(String)","u":"createRootCommand(java.lang.String)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"equals(Object)","u":"equals(java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"execute(SimpleCommand.Invocation)","u":"execute(com.velocitypowered.api.command.SimpleCommand.Invocation)"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"findPlayerSmart(ProxyServer, CommandIssuer, String)","u":"findPlayerSmart(com.velocitypowered.api.proxy.ProxyServer,co.aikar.commands.CommandIssuer,java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getChildren()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandCompletions()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandContexts()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandIssuer(Object)","u":"getCommandIssuer(java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getCommandName()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getCommandPrefix(CommandIssuer)","u":"getCommandPrefix(co.aikar.commands.CommandIssuer)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getDefCommand()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getIssuer()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getLocales()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getManager()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getManager()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"getMessageKey()"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandExecutionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityConditionContext","l":"getPlayer()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getPlugin()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getProxy()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"getRegisteredRootCommands()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityCommandExecutionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityConditionContext","l":"getSender()"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"getSubCommands()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"getUniqueId()"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"hashCode()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"hashCode()"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"hasPermission(String)","u":"hasPermission(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"hasRegisteredCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"IS_NOT_A_VALID_NAME"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"isCommandIssuer(Class)","u":"isCommandIssuer(java.lang.Class)"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"isPlayer()"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"isValidName(String)","u":"isValidName(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityLocales","l":"loadLanguages()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"locales"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"log(LogLevel, String, Throwable)","u":"log(co.aikar.commands.LogLevel,java.lang.String,java.lang.Throwable)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"MULTIPLE_PLAYERS_MATCH"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"NO_PLAYER_FOUND_SERVER"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onDisconnect(DisconnectEvent)","u":"onDisconnect(com.velocitypowered.api.event.connection.DisconnectEvent)"},{"p":"co.aikar.commands.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"OnlinePlayer(Player)","u":"%3Cinit%3E(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onPlayerJoin(PostLoginEvent)","u":"onPlayerJoin(com.velocitypowered.api.event.connection.PostLoginEvent)"},{"p":"co.aikar.commands","c":"ACFVelocityListener","l":"onSettingsChange(PlayerSettingsChangedEvent)","u":"onSettingsChange(com.velocitypowered.api.event.player.PlayerSettingsChangedEvent)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"player"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"plugin"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"proxy"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"readLocale(Player)","u":"readLocale(com.velocitypowered.api.proxy.Player)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registerCommand(BaseCommand)","u":"registerCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registerCommand(BaseCommand, boolean)","u":"registerCommand(co.aikar.commands.BaseCommand,boolean)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"registeredCommands"},{"p":"co.aikar.commands","c":"VelocityCommandIssuer","l":"sendMessageInternal(String)","u":"sendMessageInternal(java.lang.String)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"suggest(SimpleCommand.Invocation)","u":"suggest(com.velocitypowered.api.command.SimpleCommand.Invocation)"},{"p":"co.aikar.commands","c":"VelocityRootCommand","l":"suggestAsync(SimpleCommand.Invocation)","u":"suggestAsync(com.velocitypowered.api.command.SimpleCommand.Invocation)"},{"p":"co.aikar.commands.velocity.contexts","c":"OnlinePlayer","l":"toString()"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommand(BaseCommand)","u":"unregisterCommand(co.aikar.commands.BaseCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommand(VelocityRootCommand)","u":"unregisterCommand(co.aikar.commands.VelocityRootCommand)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"unregisterCommands()"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"USERNAME_TOO_SHORT"},{"p":"co.aikar.commands","c":"ACFVelocityUtil","l":"validate(T, String, Object...)","u":"validate(T,java.lang.String,java.lang.Object...)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"co.aikar.commands","c":"MinecraftMessageKeys","l":"values()"},{"p":"co.aikar.commands","c":"VelocityCommandCompletions","l":"VelocityCommandCompletions(ProxyServer, CommandManager)","u":"%3Cinit%3E(com.velocitypowered.api.proxy.ProxyServer,co.aikar.commands.CommandManager)"},{"p":"co.aikar.commands","c":"VelocityCommandManager","l":"VelocityCommandManager(ProxyServer, Object)","u":"%3Cinit%3E(com.velocitypowered.api.proxy.ProxyServer,java.lang.Object)"},{"p":"co.aikar.commands","c":"VelocityLocales","l":"VelocityLocales(VelocityCommandManager)","u":"%3Cinit%3E(co.aikar.commands.VelocityCommandManager)"},{"p":"co.aikar.commands","c":"VelocityMessageFormatter","l":"VelocityMessageFormatter(NamedTextColor...)","u":"%3Cinit%3E(net.kyori.adventure.text.format.NamedTextColor...)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-velocity/module-search-index.js b/docs/acf-velocity/module-search-index.js new file mode 100644 index 00000000..0d59754f --- /dev/null +++ b/docs/acf-velocity/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/acf-velocity/overview-summary.html b/docs/acf-velocity/overview-summary.html index 75c8ab16..c6bd9116 100644 --- a/docs/acf-velocity/overview-summary.html +++ b/docs/acf-velocity/overview-summary.html @@ -1,18 +1,20 @@ - - -ACF (Velocity) 0.5.0-SNAPSHOT API + +ACF (Velocity) 0.5.1-SNAPSHOT API + + + + + - - - +