(DEPLOYED ACF) Updated JavaDocs

This commit is contained in:
Aikar
2018-06-12 22:24:09 -04:00
parent 59c45f12ce
commit 54d64e69a2
72 changed files with 2694 additions and 1549 deletions
@@ -158,7 +158,7 @@ extends co.aikar.commands.CommandCompletions&lt;<a href="../../../co/aikar/comma
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;co.aikar.commands.CommandCompletions</h3>
<code>registerAsyncCompletion, registerCompletion</code></li>
<code>registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -158,7 +158,7 @@ extends co.aikar.commands.CommandCompletions&lt;<a href="../../../co/aikar/comma
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;co.aikar.commands.CommandCompletions</h3>
<code>registerAsyncCompletion, registerCompletion</code></li>
<code>registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
+110 -98
View File
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":42,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":42,"i23":10,"i24":10,"i25":10};
var methods = {"i0":42,"i1":10,"i2":10,"i3":10,"i4":42,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":42,"i23":10,"i24":10,"i25":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"],32:["t6","Deprecated Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -74,13 +74,13 @@ var activeTableTab = "activeTableTab";
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -112,37 +112,22 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
<pre>public abstract class <a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.65">BaseCommand</a>
<pre>public abstract class <a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.77">BaseCommand</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
<div class="block">A Base command is defined as a command group of related commands.
A BaseCommand does not imply nor enforce that they use the same root command.
It is up to the end user how to organize their command. you could use 1 base command per
command in your application.
Optionally (and encouraged), you can use the base command to represent a root command, and
then each actionable command is a sub command</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Field and Description</th>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#CATCHUNKNOWN">CATCHUNKNOWN</a></span></code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#DEFAULT">DEFAULT</a></span></code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
@@ -158,7 +143,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colOne"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#BaseCommand--">BaseCommand</a></span>()</code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#BaseCommand-java.lang.String-">BaseCommand</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</code>&nbsp;</td>
<td class="colOne"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#BaseCommand-java.lang.String-">BaseCommand</a></span>(@Nullable <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">Please switch to <a href="../../../co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation"><code>CommandAlias</code></a> for defining all root commands.</span></div>
</div>
</td>
</tr>
</table>
</li>
@@ -178,7 +167,11 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<tr id="i0" class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">canExecute</a></span>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>&nbsp;</td>
<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">See <a href="../../../co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>void</code></td>
@@ -210,11 +203,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
</tr>
<tr id="i6" class="altColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#getCurrentCommandIssuer--">getCurrentCommandIssuer</a></span>()</code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#getCurrentCommandIssuer--">getCurrentCommandIssuer</a></span>()</code>
<div class="block">Gets the current command issuer.</div>
</td>
</tr>
<tr id="i7" class="rowColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#getCurrentCommandManager--">getCurrentCommandManager</a></span>()</code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#getCurrentCommandManager--">getCurrentCommandManager</a></span>()</code>
<div class="block">Gets the current command manager.</div>
</td>
</tr>
<tr id="i8" class="altColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a></code></td>
@@ -298,14 +295,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete</a></span>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
<div class="block">Gets tab completed data from the given command from the user.</div>
</td>
</tr>
<tr id="i25" class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-boolean-">tabComplete</a></span>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args,
boolean&nbsp;isAsync)</code>&nbsp;</td>
boolean&nbsp;isAsync)</code>
<div class="block">Gets the tab complete suggestions from a given command.</div>
</td>
</tr>
</table>
<ul class="blockList">
@@ -323,40 +324,6 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ============ FIELD DETAIL =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.detail">
<!-- -->
</a>
<h3>Field Detail</h3>
<a name="CATCHUNKNOWN">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>CATCHUNKNOWN</h4>
<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.67">CATCHUNKNOWN</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#co.aikar.commands.BaseCommand.CATCHUNKNOWN">Constant Field Values</a></dd>
</dl>
</li>
</ul>
<a name="DEFAULT">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>DEFAULT</h4>
<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.68">DEFAULT</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../constant-values.html#co.aikar.commands.BaseCommand.DEFAULT">Constant Field Values</a></dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
@@ -369,7 +336,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>BaseCommand</h4>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.91">BaseCommand</a>()</pre>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.162">BaseCommand</a>()</pre>
</li>
</ul>
<a name="BaseCommand-java.lang.String-">
@@ -378,7 +345,15 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>BaseCommand</h4>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.92">BaseCommand</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.170">BaseCommand</a>(@Nullable
@Nullable <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;cmd)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Please switch to <a href="../../../co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation"><code>CommandAlias</code></a> for defining all root commands.</span></div>
<div class="block">Constructor based defining of commands will be removed in the next version bump.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>cmd</code> - </dd>
</dl>
</li>
</ul>
</li>
@@ -395,7 +370,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getExecCommandLabel</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.100">getExecCommandLabel</a>()</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.178">getExecCommandLabel</a>()</pre>
<div class="block">Gets the root command name that the user actually typed</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -409,7 +384,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getExecSubcommand</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.108">getExecSubcommand</a>()</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.186">getExecSubcommand</a>()</pre>
<div class="block">Gets the actual sub command name the user typed</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -423,7 +398,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getOrigArgs</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.116">getOrigArgs</a>()</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.194">getOrigArgs</a>()</pre>
<div class="block">Gets the actual args in string form the user typed</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -437,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>execute</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.360">execute</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.485">execute</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
</li>
@@ -448,7 +423,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getCurrentCommandIssuer</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.413">getCurrentCommandIssuer</a>()</pre>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.571">getCurrentCommandIssuer</a>()</pre>
<div class="block">Gets the current command issuer.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The current command issuer.</dd>
</dl>
</li>
</ul>
<a name="getCurrentCommandManager--">
@@ -457,7 +437,12 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>getCurrentCommandManager</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.416">getCurrentCommandManager</a>()</pre>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.580">getCurrentCommandManager</a>()</pre>
<div class="block">Gets the current command manager.</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The current command manager.</dd>
</dl>
</li>
</ul>
<a name="canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">
@@ -466,8 +451,17 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>canExecute</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.473">canExecute</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</pre>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.667">canExecute</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">See <a href="../../../co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
<div class="block">Please use command conditions for restricting execution</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>issuer</code> - </dd>
<dd><code>cmd</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">
@@ -476,9 +470,18 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tabComplete</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.477">tabComplete</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.683">tabComplete</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
<div class="block">Gets tab completed data from the given command from the user.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>issuer</code> - The user who executed the tabcomplete.</dd>
<dd><code>commandLabel</code> - The label which is being used by the user.</dd>
<dd><code>args</code> - The arguments the user has typed so far.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>All possibilities in the tab complete.</dd>
</dl>
</li>
</ul>
<a name="tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-boolean-">
@@ -487,12 +490,21 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>tabComplete</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.480">tabComplete</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.703">tabComplete</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args,
boolean&nbsp;isAsync)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></pre>
<div class="block">Gets the tab complete suggestions from a given command. This will automatically find anything
which is valid for the specified command through the command's implementation.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>issuer</code> - The issuer of the command.</dd>
<dd><code>commandLabel</code> - The command name as entered by the user instead of the ACF registered name.</dd>
<dd><code>args</code> - All arguments entered by the user.</dd>
<dd><code>isAsync</code> - Whether this is run off of the main thread.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The possibilities to tab complete in no particular order.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code></dd>
</dl>
@@ -505,7 +517,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<li class="blockList">
<h4>getCommandHelp</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public&nbsp;<a href="../../../co/aikar/commands/CommandHelp.html" title="class in co.aikar.commands">CommandHelp</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.597">getCommandHelp</a>()</pre>
public&nbsp;<a href="../../../co/aikar/commands/CommandHelp.html" title="class in co.aikar.commands">CommandHelp</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.907">getCommandHelp</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Unstable API</span></div>
</li>
</ul>
@@ -516,7 +528,7 @@ public&nbsp;<a href="../../../co/aikar/commands/CommandHelp.html" title="class i
<li class="blockList">
<h4>showCommandHelp</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.602">showCommandHelp</a>()</pre>
public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.912">showCommandHelp</a>()</pre>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">Unstable API</span></div>
</li>
</ul>
@@ -526,7 +538,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>help</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.606">help</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.916">help</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
</li>
</ul>
@@ -536,7 +548,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>help</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.609">help</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.919">help</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</pre>
</li>
</ul>
@@ -546,7 +558,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>doHelp</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.612">doHelp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.922">doHelp</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
</li>
</ul>
@@ -556,7 +568,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>doHelp</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.615">doHelp</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.925">doHelp</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>...&nbsp;args)</pre>
</li>
</ul>
@@ -566,7 +578,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>showSyntax</h4>
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.619">showSyntax</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<pre>public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.929">showSyntax</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</pre>
</li>
</ul>
@@ -576,7 +588,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>hasPermission</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.626">hasPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer)</pre>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.936">hasPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;issuer)</pre>
</li>
</ul>
<a name="hasPermission-co.aikar.commands.CommandIssuer-">
@@ -585,7 +597,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>hasPermission</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.630">hasPermission</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer)</pre>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.940">hasPermission</a>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer)</pre>
</li>
</ul>
<a name="getRequiredPermissions--">
@@ -594,7 +606,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>getRequiredPermissions</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.635">getRequiredPermissions</a>()</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.945">getRequiredPermissions</a>()</pre>
</li>
</ul>
<a name="requiresPermission-java.lang.String-">
@@ -603,7 +615,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>requiresPermission</h4>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.642">requiresPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;permission)</pre>
<pre>public&nbsp;boolean&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.952">requiresPermission</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;permission)</pre>
</li>
</ul>
<a name="getName--">
@@ -612,7 +624,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>getName</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.646">getName</a>()</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.956">getName</a>()</pre>
</li>
</ul>
<a name="getExceptionHandler--">
@@ -621,7 +633,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>getExceptionHandler</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/ExceptionHandler.html" title="interface in co.aikar.commands">ExceptionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.650">getExceptionHandler</a>()</pre>
<pre>public&nbsp;<a href="../../../co/aikar/commands/ExceptionHandler.html" title="interface in co.aikar.commands">ExceptionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.960">getExceptionHandler</a>()</pre>
</li>
</ul>
<a name="setExceptionHandler-co.aikar.commands.ExceptionHandler-">
@@ -630,7 +642,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>setExceptionHandler</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.654">setExceptionHandler</a>(<a href="../../../co/aikar/commands/ExceptionHandler.html" title="interface in co.aikar.commands">ExceptionHandler</a>&nbsp;exceptionHandler)</pre>
<pre>public&nbsp;<a href="../../../co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.964">setExceptionHandler</a>(<a href="../../../co/aikar/commands/ExceptionHandler.html" title="interface in co.aikar.commands">ExceptionHandler</a>&nbsp;exceptionHandler)</pre>
</li>
</ul>
<a name="getDefaultRegisteredCommand--">
@@ -639,7 +651,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>getDefaultRegisteredCommand</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.659">getDefaultRegisteredCommand</a>()</pre>
<pre>public&nbsp;<a href="../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.969">getDefaultRegisteredCommand</a>()</pre>
</li>
</ul>
<a name="setContextFlags-java.lang.Class-java.lang.String-">
@@ -648,7 +660,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockList">
<li class="blockList">
<h4>setContextFlags</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.663">setContextFlags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;cls,
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.973">setContextFlags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;cls,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;flags)</pre>
</li>
</ul>
@@ -658,7 +670,7 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="blockListLast">
<li class="blockList">
<h4>getContextFlags</h4>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.667">getContextFlags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;cls)</pre>
<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.html#line.977">getContextFlags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;?&gt;&nbsp;cls)</pre>
</li>
</ul>
</li>
@@ -714,13 +726,13 @@ public&nbsp;void&nbsp;<a href="../../../src-html/co/aikar/commands/BaseCommand.h
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field.summary">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li><a href="#field.detail">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
@@ -102,7 +102,7 @@
</dl>
<hr>
<br>
<pre>public static interface <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.162">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;
<pre>public static interface <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.233">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;
extends <a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;C&gt;</pre>
</li>
</ul>
@@ -108,7 +108,7 @@ var activeTableTab = "activeTableTab";
</dl>
<hr>
<br>
<pre>public static interface <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.159">CommandCompletions.CommandCompletionHandler</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;</pre>
<pre>public static interface <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.230">CommandCompletions.CommandCompletionHandler</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;</pre>
</li>
</ul>
</div>
@@ -154,7 +154,7 @@ var activeTableTab = "activeTableTab";
<ul class="blockListLast">
<li class="blockList">
<h4>getCompletions</h4>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html#line.160">getCompletions</a>(<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="type parameter in CommandCompletions.CommandCompletionHandler">C</a>&nbsp;context)
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.CommandCompletionHandler.html#line.231">getCompletions</a>(<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="type parameter in CommandCompletions.CommandCompletionHandler">C</a>&nbsp;context)
throws <a href="../../../co/aikar/commands/InvalidCommandArgument.html" title="class in co.aikar.commands">InvalidCommandArgument</a></pre>
<dl>
<dt><span class="throwsLabel">Throws:</span></dt>
@@ -120,7 +120,7 @@
</dl>
<hr>
<br>
<pre>public static class <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.163">CommandCompletions.SyncCompletionRequired</a>
<pre>public static class <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.234">CommandCompletions.SyncCompletionRequired</a>
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
@@ -189,7 +189,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.h
<ul class="blockListLast">
<li class="blockList">
<h4>SyncCompletionRequired</h4>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html#line.163">SyncCompletionRequired</a>()</pre>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.SyncCompletionRequired.html#line.234">SyncCompletionRequired</a>()</pre>
</li>
</ul>
</li>
@@ -18,7 +18,7 @@
catch(err) {
}
//-->
var methods = {"i0":10,"i1":10};
var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
@@ -108,7 +108,7 @@ var activeTableTab = "activeTableTab";
<li class="blockList">
<hr>
<br>
<pre>public class <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.39">CommandCompletions</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;
<pre>public class <a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.40">CommandCompletions</a>&lt;C extends <a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt;
extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
</li>
</ul>
@@ -175,12 +175,44 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerAsyncCompletion-java.lang.String-co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler-">registerAsyncCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerCompletion-java.lang.String-co.aikar.commands.CommandCompletions.CommandCompletionHandler-">registerCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.List-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;completions)</code>
<div class="block">Register a static list of command completions that will never change</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;list)</code>
<div class="block">Register a static list of command completions that will never change.</div>
</td>
</tr>
<tr id="i4" class="altColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String:A-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;completions)</code>
<div class="block">Register a static list of command completions that will never change</div>
</td>
</tr>
<tr id="i5" class="rowColor">
<td class="colFirst"><code><a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.function.Supplier-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;supplier)</code>
<div class="block">Register a static list of command completions that will never change.</div>
</td>
</tr>
</table>
<ul class="blockList">
@@ -210,7 +242,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockListLast">
<li class="blockList">
<h4>CommandCompletions</h4>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.44">CommandCompletions</a>(<a href="../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a>&nbsp;manager)</pre>
<pre>public&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.45">CommandCompletions</a>(<a href="../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a>&nbsp;manager)</pre>
</li>
</ul>
</li>
@@ -227,18 +259,112 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
<ul class="blockList">
<li class="blockList">
<h4>registerCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.67">registerCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.75">registerCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</pre>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>handler</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="registerAsyncCompletion-java.lang.String-co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler-">
<!-- -->
</a>
<ul class="blockListLast">
<ul class="blockList">
<li class="blockList">
<h4>registerAsyncCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.71">registerAsyncCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.94">registerAsyncCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</pre>
<div class="block">Registr a completion handler to provide command completions based on the user input.
This handler is declared to be safe to be executed asynchronously.
<p>
Not all platforms support this, so if the platform does not support asynchronous execution,
your handler will be executed on the main thread.
<p>
Use this anytime your handler does not need to access state that is not considered thread safe.
<p>
Use context.isAsync() to determine if you are async or not.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>handler</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="registerStaticCompletion-java.lang.String-java.lang.String-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerStaticCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.108">registerStaticCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;list)</pre>
<div class="block">Register a static list of command completions that will never change.
Like @CommandCompletion, values are | (PIPE) separated.
<p>
Example: foo|bar|baz</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>list</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="registerStaticCompletion-java.lang.String-java.lang.String:A-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerStaticCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.119">registerStaticCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;completions)</pre>
<div class="block">Register a static list of command completions that will never change</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>completions</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="registerStaticCompletion-java.lang.String-java.util.function.Supplier-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>registerStaticCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.131">registerStaticCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;supplier)</pre>
<div class="block">Register a static list of command completions that will never change. The list is obtained from the supplier
immediately as part of this method call.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>supplier</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
<a name="registerStaticCompletion-java.lang.String-java.util.List-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>registerStaticCompletion</h4>
<pre>public&nbsp;<a href="../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&nbsp;<a href="../../../src-html/co/aikar/commands/CommandCompletions.html#line.142">registerStaticCompletion</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;completions)</pre>
<div class="block">Register a static list of command completions that will never change</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>id</code> - </dd>
<dd><code>completions</code> - </dd>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
</li>
</ul>
</li>
@@ -74,7 +74,7 @@ var activeTableTab = "activeTableTab";
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.co.aikar.commands.BaseCommand">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
@@ -121,21 +121,6 @@ extends <a href="../../../co/aikar/commands/BaseCommand.html" title="class in co
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- =========== FIELD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="field.summary">
<!-- -->
</a>
<h3>Field Summary</h3>
<ul class="blockList">
<li class="blockList"><a name="fields.inherited.from.class.co.aikar.commands.BaseCommand">
<!-- -->
</a>
<h3>Fields inherited from class&nbsp;co.aikar.commands.<a href="../../../co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></h3>
<code><a href="../../../co/aikar/commands/BaseCommand.html#CATCHUNKNOWN">CATCHUNKNOWN</a>, <a href="../../../co/aikar/commands/BaseCommand.html#DEFAULT">DEFAULT</a></code></li>
</ul>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
@@ -162,7 +147,9 @@ extends <a href="../../../co/aikar/commands/BaseCommand.html" title="class in co
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../co/aikar/commands/ForwardingCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete</a></span>(<a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;alias,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
<div class="block">Gets tab completed data from the given command from the user.</div>
</td>
</tr>
</table>
<ul class="blockList">
@@ -216,9 +203,17 @@ extends <a href="../../../co/aikar/commands/BaseCommand.html" title="class in co
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;alias,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)
throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></pre>
<div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">BaseCommand</a></code></span></div>
<div class="block">Gets tab completed data from the given command from the user.</div>
<dl>
<dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
<dd><code><a href="../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete</a></code>&nbsp;in class&nbsp;<code><a href="../../../co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></code></dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>issuer</code> - The user who executed the tabcomplete.</dd>
<dd><code>alias</code> - The label which is being used by the user.</dd>
<dd><code>args</code> - The arguments the user has typed so far.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>All possibilities in the tab complete.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code></dd>
</dl>
@@ -292,7 +287,7 @@ extends <a href="../../../co/aikar/commands/BaseCommand.html" title="class in co
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#fields.inherited.from.class.co.aikar.commands.BaseCommand">Field</a>&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li>Constr&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
@@ -94,7 +94,14 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CatchUnknown.html#line.33">CatchUnknown</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CatchUnknown.html#line.42">CatchUnknown</a></pre>
<div class="block">Defines a method that should receive any unknown command for the related root command.
For example, if a BaseCommand /foo has a method with this, and /foo someunknowncommand is used
If a method is tagged with this annotation, it will catch unknown commands and let you react to them.
Only one instance of this annotation can be used per root command.</div>
</li>
</ul>
</div>
@@ -94,7 +94,13 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandAlias.html#line.33">CommandAlias</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandAlias.html#line.41">CommandAlias</a></pre>
<div class="block">Allows to add a single or several command alias(es).
In order to add more than one in a single go, use the syntax "alias|otheralias".
You can register as many aliases as wanted in a single value.
Used on a Class, defines the root command for all subcommands in the base command.
Used on a method, defines a root command alias to that specific command</div>
</li>
</ul>
</div>
@@ -138,7 +144,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Com
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandAlias.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandAlias.html#line.42">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,17 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandCompletion.html#line.33">CommandCompletion</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandCompletion.html#line.43">CommandCompletion</a></pre>
<div class="block">Many implementation platforms have a concept of "Tab Completions",
where pressing tab will give suggestions on what you can input.
This annotation specifies either static completion values,
or special @codes that let you define Completion Handlers to dynamically
populate completion values.</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><code>co.aikar.commands.CommandCompletions}</code></dd>
</dl>
</li>
</ul>
</div>
@@ -138,7 +148,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Com
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandCompletion.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandCompletion.html#line.44">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,10 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandPermission.html#line.33">CommandPermission</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/CommandPermission.html#line.38">CommandPermission</a></pre>
<div class="block">Sets the permission required to perform this command.
Permission format will vary based on implementation platform</div>
</li>
</ul>
</div>
@@ -138,7 +141,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Com
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandPermission.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/CommandPermission.html#line.39">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,15 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Conditions.html#line.33">Conditions</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Conditions.html#line.41">Conditions</a></pre>
<div class="block">Specifies conditions that must be met in order to execute this command.
If used on a method or a class, will be checked before parameter context is resolved
If used on a parameter, will be checked after the context is resolved</div>
<dl>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><code>co.aikar.commands.CommandConditions}</code></dd>
</dl>
</li>
</ul>
</div>
@@ -138,7 +146,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Con
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Conditions.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Conditions.html#line.42">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,9 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Default.html#line.33">Default</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Default.html#line.37">Default</a></pre>
<div class="block">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</div>
</li>
</ul>
</div>
@@ -138,7 +140,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Def
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Default.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Default.html#line.38">value</a></pre>
<dl>
<dt>Default:</dt>
<dd>""</dd>
@@ -94,7 +94,9 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#FIELD" title="class or interface in java.lang.annotation">FIELD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Dependency.html#line.33">Dependency</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Dependency.html#line.37">Dependency</a></pre>
<div class="block">Injects a dependency into the field this is attached to.
Any time a new dependency is registered, this will be overwritten.</div>
</li>
</ul>
</div>
@@ -140,7 +142,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Dep
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Dependency.html#line.38">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Dependency.html#line.42">value</a></pre>
<div class="block">The key that should be used to lookup the instances, defaults to \"\"</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
@@ -94,7 +94,9 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Description.html#line.33">Description</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Description.html#line.37">Description</a></pre>
<div class="block">Sets a description to the parameter or method this is attached to.
This is used in the help menus.</div>
</li>
</ul>
</div>
@@ -138,7 +140,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Des
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Description.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Description.html#line.38">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,12 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Flags.html#line.33">Flags</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Flags.html#line.40">Flags</a></pre>
<div class="block">Provides configuration options for <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>'s to change how they resolve context.
Example: Searching for a player, you might use @Flags("loose") to indicate a fuzzy match instead of an exact match.
If you want to restrict if an issuer can use the command, please use <a href="../../../../co/aikar/commands/CommandConditions.Condition.html" title="interface in co.aikar.commands"><code>CommandConditions.Condition</code></a> instead.</div>
</li>
</ul>
</div>
@@ -138,7 +143,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Fla
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Flags.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Flags.html#line.41">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,11 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/HelpCommand.html#line.33">HelpCommand</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/HelpCommand.html#line.39">HelpCommand</a></pre>
<div class="block">A Shortcut for specifying <a href="../../../../co/aikar/commands/annotation/CatchUnknown.html" title="annotation in co.aikar.commands.annotation"><code>CatchUnknown</code></a>, <a href="../../../../co/aikar/commands/annotation/Default.html" title="annotation in co.aikar.commands.annotation"><code>Default</code></a> and <a href="../../../../co/aikar/commands/annotation/Subcommand.html" title="annotation in co.aikar.commands.annotation"><code>Subcommand</code></a> on a method.
Subcommand carries the same value as this annotations value to define the list of subcommands to register for.
a method marked with this annotation should also use a <a href="../../../../co/aikar/commands/CommandHelp.html" title="class in co.aikar.commands"><code>CommandHelp</code></a> context parameter to show help.</div>
</li>
</ul>
</div>
@@ -115,7 +119,9 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Hel
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/annotation/HelpCommand.html#value--">value</a></span></code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/annotation/HelpCommand.html#value--">value</a></span></code>
<div class="block">The value to forward to the @Subcommand annotation.</div>
</td>
</tr>
</table>
</li>
@@ -138,7 +144,11 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Hel
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/HelpCommand.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/HelpCommand.html#line.44">value</a></pre>
<div class="block">The value to forward to the @Subcommand annotation. Lists which subcommands to register to trigger help</div>
<dl>
<dt><span class="returnLabel">Returns:</span></dt>
</dl>
<dl>
<dt>Default:</dt>
<dd>"help|?|-help|-h|-?"</dd>
@@ -94,7 +94,11 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/HelpSearchTags.html#line.33">HelpSearchTags</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/HelpSearchTags.html#line.39">HelpSearchTags</a></pre>
<div class="block">Defines additional keywords to feed into the search help system.
For example, if a specific word doesn't make sense to use in the command name or description, but should
be used for help in discovering the correct command, then you can add it as a tag.</div>
</li>
</ul>
</div>
@@ -138,7 +142,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Hel
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/HelpSearchTags.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/HelpSearchTags.html#line.40">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,12 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Optional.html#line.33">Optional</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Optional.html#line.40">Optional</a></pre>
<div class="block">Marks the parameter this is attached to as optional.
This will set the parameter as null if it was not provided.
<p>
In the case the language used is Kotlin, Ceylon or any other null-enforcing JVM language,
you will need to allow for a nullable value.</div>
</li>
</ul>
</div>
@@ -94,7 +94,8 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/PreCommand.html#line.34">PreCommand</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/PreCommand.html#line.37">PreCommand</a></pre>
<div class="block">This runs before any other command method each time it is invoked.</div>
</li>
</ul>
</div>
@@ -94,8 +94,8 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Single.html#line.37">Single</a></pre>
<div class="block">Don't join remaining arguments</div>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Single.html#line.36">Single</a></pre>
<div class="block">Don't join remaining arguments. Used on String parameters, which normally would combine the remaining arguments</div>
</li>
</ul>
</div>
@@ -94,7 +94,9 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Split.html#line.34">Split</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Split.html#line.38">Split</a></pre>
<div class="block">Joins arguments into a single piece of text with the specified separator.
For array based parameters, defines the regex pattern to split on</div>
</li>
</ul>
</div>
@@ -138,7 +140,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Spl
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Split.html#line.35">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Split.html#line.39">value</a></pre>
<dl>
<dt>Default:</dt>
<dd>","</dd>
@@ -94,7 +94,12 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#TYPE" title="class or interface in java.lang.annotation">TYPE</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Subcommand.html#line.33">Subcommand</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Subcommand.html#line.40">Subcommand</a></pre>
<div class="block">Defines the subcommand that can be used to execute this command.
This is appended onto the root command for the command group,
as well as any parent command groups subcommand base.
Defines the part after root command like so: "/rootcommand <a href="../../../../co/aikar/commands/annotation/Subcommand.html#value--"><code>value()</code></a>".</div>
</li>
</ul>
</div>
@@ -138,7 +143,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Sub
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Subcommand.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Subcommand.html#line.41">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,14 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>={<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#METHOD" title="class or interface in java.lang.annotation">METHOD</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>})
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Syntax.html#line.33">Syntax</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Syntax.html#line.42">Syntax</a></pre>
<div class="block">Specifies the syntax to be used when executing this command.
It should not include any descriptions of the arguments nor when some are allowed and when they are not.
Use of this annotation is not necessary. Syntax will be automatically generated for you.
Use this annotation to override automatic syntax
Use <a href="../../../../co/aikar/commands/annotation/Description.html" title="annotation in co.aikar.commands.annotation"><code>Description</code></a> together with the help menu for that purpose.</div>
</li>
</ul>
</div>
@@ -138,7 +145,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Syn
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Syntax.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Syntax.html#line.43">value</a></pre>
</li>
</ul>
</li>
@@ -94,7 +94,10 @@
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true" title="class or interface in java.lang.annotation">@Retention</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Retention.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/RetentionPolicy.html?is-external=true#RUNTIME" title="class or interface in java.lang.annotation">RUNTIME</a>)
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true" title="class or interface in java.lang.annotation">@Target</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/Target.html?is-external=true#value--" title="class or interface in java.lang.annotation">value</a>=<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/annotation/ElementType.html?is-external=true#PARAMETER" title="class or interface in java.lang.annotation">PARAMETER</a>)
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Values.html#line.33">Values</a></pre>
public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Values.html#line.38">Values</a></pre>
<div class="block">Specifies a list of values that the command input should be validated against, or else show an error.
You may also use <a href="../../../../co/aikar/commands/annotation/CommandCompletion.html" title="annotation in co.aikar.commands.annotation"><code>CommandCompletion</code></a> handler codes here to feed dynamic values and avoid repetition.</div>
</li>
</ul>
</div>
@@ -138,7 +141,7 @@ public @interface <a href="../../../../src-html/co/aikar/commands/annotation/Val
<ul class="blockListLast">
<li class="blockList">
<h4>value</h4>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Values.html#line.34">value</a></pre>
<pre>public abstract&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/annotation/Values.html#line.39">value</a></pre>
</li>
</ul>
</li>
@@ -89,55 +89,83 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/CatchUnknown.html" title="annotation in co.aikar.commands.annotation">CatchUnknown</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Defines a method that should receive any unknown command for the related root command.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation">CommandAlias</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Allows to add a single or several command alias(es).</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/CommandCompletion.html" title="annotation in co.aikar.commands.annotation">CommandCompletion</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Many implementation platforms have a concept of "Tab Completions",
where pressing tab will give suggestions on what you can input.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/CommandPermission.html" title="annotation in co.aikar.commands.annotation">CommandPermission</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Sets the permission required to perform this command.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Conditions.html" title="annotation in co.aikar.commands.annotation">Conditions</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Specifies conditions that must be met in order to execute this command.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Default.html" title="annotation in co.aikar.commands.annotation">Default</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">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</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Dependency.html" title="annotation in co.aikar.commands.annotation">Dependency</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Injects a dependency into the field this is attached to.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Description.html" title="annotation in co.aikar.commands.annotation">Description</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Sets a description to the parameter or method this is attached to.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Flags.html" title="annotation in co.aikar.commands.annotation">Flags</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Provides configuration options for <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>'s to change how they resolve context.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/HelpCommand.html" title="annotation in co.aikar.commands.annotation">HelpCommand</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">A Shortcut for specifying <a href="../../../../co/aikar/commands/annotation/CatchUnknown.html" title="annotation in co.aikar.commands.annotation"><code>CatchUnknown</code></a>, <a href="../../../../co/aikar/commands/annotation/Default.html" title="annotation in co.aikar.commands.annotation"><code>Default</code></a> and <a href="../../../../co/aikar/commands/annotation/Subcommand.html" title="annotation in co.aikar.commands.annotation"><code>Subcommand</code></a> on a method.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/HelpSearchTags.html" title="annotation in co.aikar.commands.annotation">HelpSearchTags</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Defines additional keywords to feed into the search help system.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Optional.html" title="annotation in co.aikar.commands.annotation">Optional</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Marks the parameter this is attached to as optional.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/PreCommand.html" title="annotation in co.aikar.commands.annotation">PreCommand</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">This runs before any other command method each time it is invoked.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Private.html" title="annotation in co.aikar.commands.annotation">Private</a></td>
@@ -148,20 +176,26 @@
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Single.html" title="annotation in co.aikar.commands.annotation">Single</a></td>
<td class="colLast">
<div class="block">Don't join remaining arguments</div>
<div class="block">Don't join remaining arguments.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Split.html" title="annotation in co.aikar.commands.annotation">Split</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Joins arguments into a single piece of text with the specified separator.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Subcommand.html" title="annotation in co.aikar.commands.annotation">Subcommand</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Defines the subcommand that can be used to execute this command.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Syntax.html" title="annotation in co.aikar.commands.annotation">Syntax</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Specifies the syntax to be used when executing this command.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/UnknownHandler.html" title="annotation in co.aikar.commands.annotation">UnknownHandler</a></td>
@@ -171,7 +205,9 @@
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/annotation/Values.html" title="annotation in co.aikar.commands.annotation">Values</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">Specifies a list of values that the command input should be validated against, or else show an error.</div>
</td>
</tr>
</tbody>
</table>
@@ -104,7 +104,9 @@
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerAsyncCompletion-java.lang.String-co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler-">registerAsyncCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
</tbody>
</table>
@@ -117,12 +117,44 @@
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerAsyncCompletion-java.lang.String-co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler-">registerAsyncCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/CommandCompletions.AsyncCommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.AsyncCommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerCompletion-java.lang.String-co.aikar.commands.CommandCompletions.CommandCompletionHandler-">registerCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.List-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;completions)</code>
<div class="block">Register a static list of command completions that will never change</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;list)</code>
<div class="block">Register a static list of command completions that will never change.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String:A-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;completions)</code>
<div class="block">Register a static list of command completions that will never change</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.function.Supplier-">registerStaticCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&gt;&nbsp;supplier)</code>
<div class="block">Register a static list of command completions that will never change.</div>
</td>
</tr>
</tbody>
</table>
@@ -136,7 +168,9 @@
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a></code></td>
<td class="colLast"><span class="typeNameLabel">CommandCompletions.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/CommandCompletions.html#registerCompletion-java.lang.String-co.aikar.commands.CommandCompletions.CommandCompletionHandler-">registerCompletion</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;id,
<a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/CommandCompletions.CommandCompletionHandler.html" title="interface in co.aikar.commands">CommandCompletions.CommandCompletionHandler</a>&lt;<a href="../../../../co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a>&gt;&nbsp;handler)</code>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</td>
</tr>
</tbody>
</table>
@@ -193,7 +193,9 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
@@ -208,7 +210,7 @@
<tr class="rowColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</td>
</tr>
<tr class="altColor">
@@ -183,7 +183,9 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a></code></td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#getCurrentCommandIssuer--">getCurrentCommandIssuer</a></span>()</code>&nbsp;</td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#getCurrentCommandIssuer--">getCurrentCommandIssuer</a></span>()</code>
<div class="block">Gets the current command issuer.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>static <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a></code></td>
@@ -209,7 +211,11 @@
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">canExecute</a></span>(<a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">See <a href="../../../../co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a></code></td>
@@ -403,7 +409,9 @@
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete</a></span>(<a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>&nbsp;</td>
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
<div class="block">Gets tab completed data from the given command from the user.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;</code></td>
@@ -416,7 +424,9 @@
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-boolean-">tabComplete</a></span>(<a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;commandLabel,
<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args,
boolean&nbsp;isAsync)</code>&nbsp;</td>
boolean&nbsp;isAsync)</code>
<div class="block">Gets the tab complete suggestions from a given command.</div>
</td>
</tr>
</tbody>
</table>
@@ -447,7 +457,9 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
@@ -462,7 +474,7 @@
<tr class="rowColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</td>
</tr>
<tr class="altColor">
@@ -120,7 +120,9 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></code></td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#getCurrentCommandManager--">getCurrentCommandManager</a></span>()</code>&nbsp;</td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#getCurrentCommandManager--">getCurrentCommandManager</a></span>()</code>
<div class="block">Gets the current command manager.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><code>static <a href="../../../../co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></code></td>
@@ -161,7 +161,9 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">T</a></code></td>
<td class="colLast"><span class="typeNameLabel">ContextResolver.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html#getContext-C-">getContext</a></span>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)</code>&nbsp;</td>
<td class="colLast"><span class="typeNameLabel">ContextResolver.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html#getContext-C-">getContext</a></span>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)</code>
<div class="block">Parses the context of type <code>C</code> into <code>T</code>, or throws an exception.</div>
</td>
</tr>
</tbody>
</table>
@@ -132,7 +132,11 @@
<tr class="altColor">
<td class="colFirst"><code>boolean</code></td>
<td class="colLast"><span class="typeNameLabel">BaseCommand.</span><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/BaseCommand.html#canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">canExecute</a></span>(<a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&nbsp;issuer,
<a href="../../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>&nbsp;</td>
<a href="../../../../co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a>&lt;?&gt;&nbsp;cmd)</code>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;
<div class="block"><span class="deprecationComment">See <a href="../../../../co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><code>abstract <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a></code></td>
@@ -99,6 +99,11 @@ var activeTableTab = "activeTableTab";
<ul class="blockList">
<li class="blockList">
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - The type to be parsed.</dd>
<dd><code>C</code> - The type of the context which the resolver would get its data from.</dd>
</dl>
<dl>
<dt>All Known Subinterfaces:</dt>
<dd><a href="../../../../co/aikar/commands/contexts/IssuerAwareContextResolver.html" title="interface in co.aikar.commands.contexts">IssuerAwareContextResolver</a>&lt;T,C&gt;, <a href="../../../../co/aikar/commands/contexts/IssuerOnlyContextResolver.html" title="interface in co.aikar.commands.contexts">IssuerOnlyContextResolver</a>&lt;T,C&gt;, <a href="../../../../co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts">OptionalContextResolver</a>&lt;T,C&gt;, <a href="../../../../co/aikar/commands/contexts/SenderAwareContextResolver.html" title="interface in co.aikar.commands.contexts">SenderAwareContextResolver</a>&lt;T,C&gt;</dd>
</dl>
@@ -109,7 +114,8 @@ var activeTableTab = "activeTableTab";
<hr>
<br>
<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html?is-external=true" title="class or interface in java.lang">@FunctionalInterface</a>
public interface <a href="../../../../src-html/co/aikar/commands/contexts/ContextResolver.html#line.31">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</pre>
public interface <a href="../../../../src-html/co/aikar/commands/contexts/ContextResolver.html#line.39">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</pre>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</li>
</ul>
</div>
@@ -130,7 +136,9 @@ public interface <a href="../../../../src-html/co/aikar/commands/contexts/Contex
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">T</a></code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html#getContext-C-">getContext</a></span>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)</code>&nbsp;</td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html#getContext-C-">getContext</a></span>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)</code>
<div class="block">Parses the context of type <code>C</code> into <code>T</code>, or throws an exception.</div>
</td>
</tr>
</table>
</li>
@@ -155,11 +163,16 @@ public interface <a href="../../../../src-html/co/aikar/commands/contexts/Contex
<ul class="blockListLast">
<li class="blockList">
<h4>getContext</h4>
<pre><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">T</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/contexts/ContextResolver.html#line.32">getContext</a>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)
<pre><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">T</a>&nbsp;<a href="../../../../src-html/co/aikar/commands/contexts/ContextResolver.html#line.51">getContext</a>(<a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a>&nbsp;c)
throws <a href="../../../../co/aikar/commands/InvalidCommandArgument.html" title="class in co.aikar.commands">InvalidCommandArgument</a></pre>
<div class="block">Parses the context of type <code>C</code> into <code>T</code>, or throws an exception.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>c</code> - The context to parse from.</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>The parsed instance of the wanted type.</dd>
<dt><span class="throwsLabel">Throws:</span></dt>
<dd><code><a href="../../../../co/aikar/commands/InvalidCommandArgument.html" title="class in co.aikar.commands">InvalidCommandArgument</a></code></dd>
<dd><code><a href="../../../../co/aikar/commands/InvalidCommandArgument.html" title="class in co.aikar.commands">InvalidCommandArgument</a></code> - In case the context contains any discrepancies, it will throw this exception.</dd>
</dl>
</li>
</ul>
@@ -93,14 +93,21 @@
<ul class="blockList">
<li class="blockList">
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - </dd>
<dd><code>C</code> - </dd>
</dl>
<dl>
<dt>All Superinterfaces:</dt>
<dd><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C&gt;</dd>
</dl>
<hr>
<br>
<pre>public interface <a href="../../../../src-html/co/aikar/commands/contexts/OptionalContextResolver.html#line.32">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;
<pre>public interface <a href="../../../../src-html/co/aikar/commands/contexts/OptionalContextResolver.html#line.37">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;
extends <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C&gt;</pre>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.
If the parameter was marked optional, will still be called with an empty args list</div>
</li>
</ul>
</div>
@@ -173,7 +173,7 @@
<tr class="altColor">
<td class="colFirst"><code>interface&nbsp;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</span></code>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</td>
</tr>
<tr class="rowColor">
@@ -83,7 +83,9 @@
<tbody>
<tr class="altColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/contexts/IssuerAwareContextResolver.html" title="interface in co.aikar.commands.contexts">IssuerAwareContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</td>
@@ -98,7 +100,7 @@
<tr class="rowColor">
<td class="colFirst"><a href="../../../../co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts">OptionalContextResolver</a>&lt;T,C extends <a href="../../../../co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="../../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt;</td>
<td class="colLast">
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</td>
</tr>
<tr class="altColor">
@@ -102,7 +102,9 @@
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/ContextResolver.html#co.aikar.commands">ContextResolver</a>&nbsp;</td>
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/ContextResolver.html#co.aikar.commands">ContextResolver</a>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html#co.aikar.commands">IssuerAwareContextResolver</a>&nbsp;</td>
@@ -114,7 +116,7 @@
</tr>
<tr class="rowColor">
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/OptionalContextResolver.html#co.aikar.commands">OptionalContextResolver</a>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="../../../../co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</td>
</tr>
</tbody>
@@ -130,7 +132,9 @@
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/ContextResolver.html#co.aikar.commands.contexts">ContextResolver</a>&nbsp;</td>
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/ContextResolver.html#co.aikar.commands.contexts">ContextResolver</a>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="../../../../co/aikar/commands/contexts/class-use/IssuerAwareContextResolver.html#co.aikar.commands.contexts">IssuerAwareContextResolver</a>&nbsp;</td>
@@ -132,7 +132,9 @@
</tr>
<tr class="rowColor">
<td class="colFirst"><a href="../../../co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></td>
<td class="colLast">&nbsp;</td>
<td class="colLast">
<div class="block">A Base command is defined as a command group of related commands.</div>
</td>
</tr>
<tr class="altColor">
<td class="colFirst"><a href="../../../co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&lt;I extends <a href="../../../co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;</td>
@@ -106,7 +106,9 @@
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="../../../co/aikar/commands/class-use/BaseCommand.html#co.aikar.commands">BaseCommand</a>&nbsp;</td>
<td class="colOne"><a href="../../../co/aikar/commands/class-use/BaseCommand.html#co.aikar.commands">BaseCommand</a>
<div class="block">A Base command is defined as a command group of related commands.</div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="../../../co/aikar/commands/class-use/CommandCompletionContext.html#co.aikar.commands">CommandCompletionContext</a>&nbsp;</td>
-28
View File
@@ -82,34 +82,6 @@
<ul class="blockList">
<li class="blockList">
<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
<caption><span>co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th scope="col">Constant Field</th>
<th class="colLast" scope="col">Value</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colFirst"><a name="co.aikar.commands.BaseCommand.CATCHUNKNOWN">
<!-- -->
</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="co/aikar/commands/BaseCommand.html#CATCHUNKNOWN">CATCHUNKNOWN</a></code></td>
<td class="colLast"><code>"__catchunknown"</code></td>
</tr>
<tr class="rowColor">
<td class="colFirst"><a name="co.aikar.commands.BaseCommand.DEFAULT">
<!-- -->
</a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
<td><code><a href="co/aikar/commands/BaseCommand.html#DEFAULT">DEFAULT</a></code></td>
<td class="colLast"><code>"__default"</code></td>
</tr>
</tbody>
</table>
</li>
</ul>
<ul class="blockList">
<li class="blockList">
<table class="constantsSummary" border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
<caption><span>co.aikar.commands.apachecommonslang.<a href="co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html" title="class in co.aikar.commands.apachecommonslang">ApacheCommonsLangUtil</a></span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
+43 -17
View File
@@ -76,6 +76,7 @@
<li><a href="#class">Deprecated Classes</a></li>
<li><a href="#annotation.type">Deprecated Annotation Types</a></li>
<li><a href="#method">Deprecated Methods</a></li>
<li><a href="#constructor">Deprecated Constructors</a></li>
</ul>
</div>
<div class="contentContainer"><a name="interface">
@@ -159,87 +160,92 @@
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/BaseCommand.html#canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">co.aikar.commands.BaseCommand.canExecute(CommandIssuer, RegisteredCommand&lt;?&gt;)</a>
<div class="block"><span class="deprecationComment">See <a href="co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
</td>
</tr>
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#enableUnstableAPI-java.lang.String-">co.aikar.commands.CommandManager.enableUnstableAPI(String)</a>
<div class="block"><span class="deprecationComment">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</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#generateCommandHelp--">co.aikar.commands.CommandManager.generateCommandHelp()</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#generateCommandHelp-co.aikar.commands.CommandIssuer-co.aikar.commands.RootCommand-">co.aikar.commands.CommandManager.generateCommandHelp(CommandIssuer, RootCommand)</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#generateCommandHelp-co.aikar.commands.CommandIssuer-java.lang.String-">co.aikar.commands.CommandManager.generateCommandHelp(CommandIssuer, String)</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#generateCommandHelp-java.lang.String-">co.aikar.commands.CommandManager.generateCommandHelp(String)</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandOperationContext.html#getAnnotation-java.lang.Class-">co.aikar.commands.CommandOperationContext.getAnnotation(Class&lt;T&gt;)</a>
<div class="block"><span class="deprecationComment">Use <a href="co/aikar/commands/CommandOperationContext.html#getAnnotationValue-java.lang.Class-"><code>CommandOperationContext.getAnnotationValue(Class)</code></a></span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandExecutionContext.html#getAnnotation-java.lang.Class-">co.aikar.commands.CommandExecutionContext.getAnnotation(Class&lt;T&gt;)</a>
<div class="block"><span class="deprecationComment">Use <a href="co/aikar/commands/CommandExecutionContext.html#getAnnotationValue-java.lang.Class-"><code>CommandExecutionContext.getAnnotationValue(Class)</code></a></span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/BaseCommand.html#getCommandHelp--">co.aikar.commands.BaseCommand.getCommandHelp()</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#getDefaultHelpPerPage--">co.aikar.commands.CommandManager.getDefaultHelpPerPage()</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#getHelpFormatter--">co.aikar.commands.CommandManager.getHelpFormatter()</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandExecutionContext.html#getParam--">co.aikar.commands.CommandExecutionContext.getParam()</a></td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/RegisteredCommand.html#getPermission--">co.aikar.commands.RegisteredCommand.getPermission()</a>&nbsp;</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/ACFUtil.html#random-java.lang.Class-">co.aikar.commands.ACFUtil.random(Class&lt;? extends T&gt;)</a></td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandContexts.html#registerSenderAwareContext-java.lang.Class-co.aikar.commands.contexts.IssuerAwareContextResolver-">co.aikar.commands.CommandContexts.registerSenderAwareContext(Class&lt;T&gt;, IssuerAwareContextResolver&lt;T, R&gt;)</a>
<div class="block"><span class="deprecationComment">Please switch to <a href="co/aikar/commands/CommandContexts.html#registerIssuerAwareContext-java.lang.Class-co.aikar.commands.contexts.IssuerAwareContextResolver-"><code>CommandContexts.registerIssuerAwareContext(Class, IssuerAwareContextResolver)</code></a>
as the core wants to use the platform agnostic term of "Issuer" instead of Sender</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandIssuer.html#sendMessageInternal-java.lang.String-">co.aikar.commands.CommandIssuer.sendMessageInternal(String)</a>
<div class="block"><span class="deprecationComment">Do not call this, for internal use. Not considered part of the API and may break.</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#setDefaultHelpPerPage-int-">co.aikar.commands.CommandManager.setDefaultHelpPerPage(int)</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="altColor">
<tr class="rowColor">
<td class="colOne"><a href="co/aikar/commands/CommandManager.html#setHelpFormatter-co.aikar.commands.CommandHelpFormatter-">co.aikar.commands.CommandManager.setHelpFormatter(CommandHelpFormatter)</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
</tr>
<tr class="rowColor">
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/BaseCommand.html#showCommandHelp--">co.aikar.commands.BaseCommand.showCommandHelp()</a>
<div class="block"><span class="deprecationComment">Unstable API</span></div>
</td>
@@ -248,6 +254,26 @@
</table>
</li>
</ul>
<a name="constructor">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<table class="deprecatedSummary" border="0" cellpadding="3" cellspacing="0" summary="Deprecated Constructors table, listing deprecated constructors, and an explanation">
<caption><span>Deprecated Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tbody>
<tr class="altColor">
<td class="colOne"><a href="co/aikar/commands/BaseCommand.html#BaseCommand-java.lang.String-">co.aikar.commands.BaseCommand(String)</a>
<div class="block"><span class="deprecationComment">Please switch to <a href="co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation"><code>CommandAlias</code></a> for defining all root commands.</span></div>
</td>
</tr>
</tbody>
</table>
</li>
</ul>
</div>
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
+108 -34
View File
@@ -153,11 +153,17 @@
<h2 class="title">B</h2>
<dl>
<dt><a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands"><span class="typeNameLink">BaseCommand</span></a> - Class in <a href="co/aikar/commands/package-summary.html">co.aikar.commands</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">A Base command is defined as a command group of related commands.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#BaseCommand--">BaseCommand()</a></span> - Constructor for class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#BaseCommand-java.lang.String-">BaseCommand(String)</a></span> - Constructor for class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="block"><span class="deprecationComment">Please switch to <a href="co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation"><code>CommandAlias</code></a> for defining all root commands.</span></div>
</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#BULGARIAN">BULGARIAN</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
<dd>&nbsp;</dd>
</dl>
@@ -169,7 +175,11 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandParameter.html#canConsumeInput--">canConsumeInput()</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandParameter.html" title="class in co.aikar.commands">CommandParameter</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#canExecute-co.aikar.commands.CommandIssuer-co.aikar.commands.RegisteredCommand-">canExecute(CommandIssuer, RegisteredCommand&lt;?&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block"><span class="deprecatedLabel">Deprecated.</span>
<div class="block"><span class="deprecationComment">See <a href="co/aikar/commands/CommandConditions.html" title="class in co.aikar.commands"><code>CommandConditions</code></a></span></div>
</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandExecutionContext.html#canOverridePlayerContext--">canOverridePlayerContext()</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/ACFUtil.html#capitalize-java.lang.String-char:A-">capitalize(String, char[])</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/ACFUtil.html" title="class in co.aikar.commands">ACFUtil</a></dt>
@@ -205,9 +215,9 @@
</div>
</dd>
<dt><a href="co/aikar/commands/annotation/CatchUnknown.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">CatchUnknown</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#CATCHUNKNOWN">CATCHUNKNOWN</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Defines a method that should receive any unknown command for the related root command.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#CHINESE">CHINESE</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html#clone-T:A-">clone(T[])</a></span> - Static method in class co.aikar.commands.apachecommonslang.<a href="co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html" title="class in co.aikar.commands.apachecommonslang">ApacheCommonsLangUtil</a></dt>
@@ -230,9 +240,14 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/ACFUtil.html#combine-java.lang.String:A-int-">combine(String[], int)</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/ACFUtil.html" title="class in co.aikar.commands">ACFUtil</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/CommandAlias.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">CommandAlias</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Allows to add a single or several command alias(es).</div>
</dd>
<dt><a href="co/aikar/commands/annotation/CommandCompletion.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">CommandCompletion</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Many implementation platforms have a concept of "Tab Completions",
where pressing tab will give suggestions on what you can input.</div>
</dd>
<dt><a href="co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands"><span class="typeNameLink">CommandCompletionContext</span></a>&lt;<a href="co/aikar/commands/CommandCompletionContext.html" title="type parameter in CommandCompletionContext">I</a> extends <a href="co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt; - Class in <a href="co/aikar/commands/package-summary.html">co.aikar.commands</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands"><span class="typeNameLink">CommandCompletions</span></a>&lt;<a href="co/aikar/commands/CommandCompletions.html" title="type parameter in CommandCompletions">C</a> extends <a href="co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a>&gt; - Class in <a href="co/aikar/commands/package-summary.html">co.aikar.commands</a></dt>
@@ -278,7 +293,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandParameter.html#CommandParameter-co.aikar.commands.RegisteredCommand-java.lang.reflect.Parameter-int-">CommandParameter(RegisteredCommand&lt;CEC&gt;, Parameter, int)</a></span> - Constructor for class co.aikar.commands.<a href="co/aikar/commands/CommandParameter.html" title="class in co.aikar.commands">CommandParameter</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/CommandPermission.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">CommandPermission</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Sets the permission required to perform this command.</div>
</dd>
<dt><a href="co/aikar/commands/CommandReplacements.html" title="class in co.aikar.commands"><span class="typeNameLink">CommandReplacements</span></a> - Class in <a href="co/aikar/commands/package-summary.html">co.aikar.commands</a></dt>
<dd>
<div class="block">Manages replacement template strings</div>
@@ -296,7 +313,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/ConditionFailedException.html#ConditionFailedException-java.lang.String-">ConditionFailedException(String)</a></span> - Constructor for exception co.aikar.commands.<a href="co/aikar/commands/ConditionFailedException.html" title="class in co.aikar.commands">ConditionFailedException</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Conditions.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Conditions</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Specifies conditions that must be met in order to execute this command.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#conditions">conditions</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/processors/ConditionsProcessor.html" title="class in co.aikar.commands.processors"><span class="typeNameLink">ConditionsProcessor</span></a> - Class in <a href="co/aikar/commands/processors/package-summary.html">co.aikar.commands.processors</a></dt>
@@ -310,7 +329,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandContexts.html#contextMap">contextMap</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandContexts.html" title="class in co.aikar.commands">CommandContexts</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><span class="typeNameLink">ContextResolver</span></a>&lt;<a href="co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">T</a>,<a href="co/aikar/commands/contexts/ContextResolver.html" title="type parameter in ContextResolver">C</a> extends <a href="co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt; - Interface in <a href="co/aikar/commands/contexts/package-summary.html">co.aikar.commands.contexts</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">This defines a context resolver, which parses <code>T</code> from <code>C</code>.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#createCommandContext-co.aikar.commands.RegisteredCommand-co.aikar.commands.CommandParameter-co.aikar.commands.CommandIssuer-java.util.List-int-java.util.Map-">createCommandContext(RegisteredCommand, CommandParameter, CommandIssuer, List&lt;String&gt;, int, Map&lt;String, Object&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#createCompletionContext-co.aikar.commands.RegisteredCommand-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String-java.lang.String:A-">createCompletionContext(RegisteredCommand, CommandIssuer, String, String, String[])</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
@@ -332,9 +353,10 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#DANISH">DANISH</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Default.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Default</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#DEFAULT">DEFAULT</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">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</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#defaultExceptionHandler">defaultExceptionHandler</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#defaultFormatter">defaultFormatter</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
@@ -344,9 +366,13 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#dependencies">dependencies</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Dependency.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Dependency</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Injects a dependency into the field this is attached to.</div>
</dd>
<dt><a href="co/aikar/commands/annotation/Description.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Description</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Sets a description to the parameter or method this is attached to.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#doHelp-java.lang.Object-java.lang.String...-">doHelp(Object, String...)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#doHelp-co.aikar.commands.CommandIssuer-java.lang.String...-">doHelp(CommandIssuer, String...)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
@@ -403,7 +429,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#FINNISH">FINNISH</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Flags.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Flags</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Provides configuration options for <a href="co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>'s to change how they resolve context.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/MessageFormatter.html#format-int-java.lang.String-">format(int, String)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/MessageFormatter.html" title="class in co.aikar.commands">MessageFormatter</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/MessageFormatter.html#format-java.lang.String-">format(String)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/MessageFormatter.html" title="class in co.aikar.commands">MessageFormatter</a></dt>
@@ -561,7 +589,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/ConditionContext.html#getConfigValue-java.lang.String-java.lang.Integer-">getConfigValue(String, Integer)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/ConditionContext.html" title="class in co.aikar.commands">ConditionContext</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/contexts/ContextResolver.html#getContext-C-">getContext(C)</a></span> - Method in interface co.aikar.commands.contexts.<a href="co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts">ContextResolver</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Parses the context of type <code>C</code> into <code>T</code>, or throws an exception.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#getContextFlags-java.lang.Class-">getContextFlags(Class&lt;?&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletionContext.html#getContextValue-java.lang.Class-">getContextValue(Class&lt;? extends T&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a></dt>
@@ -569,11 +599,15 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletionContext.html#getContextValue-java.lang.Class-java.lang.Integer-">getContextValue(Class&lt;? extends T&gt;, Integer)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletionContext.html" title="class in co.aikar.commands">CommandCompletionContext</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#getCurrentCommandIssuer--">getCurrentCommandIssuer()</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Gets the current command issuer.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#getCurrentCommandIssuer--">getCurrentCommandIssuer()</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#getCurrentCommandManager--">getCurrentCommandManager()</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Gets the current command manager.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#getCurrentCommandManager--">getCurrentCommandManager()</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#getCurrentCommandOperationContext--">getCurrentCommandOperationContext()</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
@@ -883,13 +917,17 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/MessageType.html#HELP">HELP</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/MessageType.html" title="class in co.aikar.commands">MessageType</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/HelpCommand.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">HelpCommand</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">A Shortcut for specifying <a href="co/aikar/commands/annotation/CatchUnknown.html" title="annotation in co.aikar.commands.annotation"><code>CatchUnknown</code></a>, <a href="co/aikar/commands/annotation/Default.html" title="annotation in co.aikar.commands.annotation"><code>Default</code></a> and <a href="co/aikar/commands/annotation/Subcommand.html" title="annotation in co.aikar.commands.annotation"><code>Subcommand</code></a> on a method.</div>
</dd>
<dt><a href="co/aikar/commands/HelpEntry.html" title="class in co.aikar.commands"><span class="typeNameLink">HelpEntry</span></a> - Class in <a href="co/aikar/commands/package-summary.html">co.aikar.commands</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#helpFormatter">helpFormatter</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/HelpSearchTags.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">HelpSearchTags</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Defines additional keywords to feed into the search help system.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/RegisteredCommand.html#helpSearchTags">helpSearchTags</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#HINDI">HINDI</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
@@ -1310,10 +1348,12 @@
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Optional.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Optional</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Marks the parameter this is attached to as optional.</div>
</dd>
<dt><a href="co/aikar/commands/contexts/OptionalContextResolver.html" title="interface in co.aikar.commands.contexts"><span class="typeNameLink">OptionalContextResolver</span></a>&lt;<a href="co/aikar/commands/contexts/OptionalContextResolver.html" title="type parameter in OptionalContextResolver">T</a>,<a href="co/aikar/commands/contexts/OptionalContextResolver.html" title="type parameter in OptionalContextResolver">C</a> extends <a href="co/aikar/commands/CommandExecutionContext.html" title="class in co.aikar.commands">CommandExecutionContext</a>&lt;?,? extends <a href="co/aikar/commands/CommandIssuer.html" title="interface in co.aikar.commands">CommandIssuer</a>&gt;&gt; - Interface in <a href="co/aikar/commands/contexts/package-summary.html">co.aikar.commands.contexts</a></dt>
<dd>
<div class="block">Context Resolver that can accept null input</div>
<div class="block">The same as <a href="co/aikar/commands/contexts/ContextResolver.html" title="interface in co.aikar.commands.contexts"><code>ContextResolver</code></a>, however it can accept a null context.</div>
</dd>
</dl>
<a name="I:P">
@@ -1358,7 +1398,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/ACFUtil.html#precision-double-int-">precision(double, int)</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/ACFUtil.html" title="class in co.aikar.commands">ACFUtil</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/PreCommand.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">PreCommand</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">This runs before any other command method each time it is invoked.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/RegisteredCommand.html#preCommand--">preCommand()</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/RegisteredCommand.html" title="class in co.aikar.commands">RegisteredCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandHelpFormatter.html#printDetailedHelpCommand-co.aikar.commands.CommandHelp-co.aikar.commands.CommandIssuer-co.aikar.commands.HelpEntry-">printDetailedHelpCommand(CommandHelp, CommandIssuer, HelpEntry)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandHelpFormatter.html" title="class in co.aikar.commands">CommandHelpFormatter</a></dt>
@@ -1428,13 +1470,17 @@
<div class="block"><span class="deprecatedLabel">Deprecated.</span></div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerAsyncCompletion-java.lang.String-co.aikar.commands.CommandCompletions.AsyncCommandCompletionHandler-">registerAsyncCompletion(String, CommandCompletions.AsyncCommandCompletionHandler&lt;C&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#registerCommand-co.aikar.commands.BaseCommand-">registerCommand(BaseCommand)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>
<div class="block">Registers a command with ACF</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerCompletion-java.lang.String-co.aikar.commands.CommandCompletions.CommandCompletionHandler-">registerCompletion(String, CommandCompletions.CommandCompletionHandler&lt;C&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Registr a completion handler to provide command completions based on the user input.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandContexts.html#registerContext-java.lang.Class-co.aikar.commands.contexts.ContextResolver-">registerContext(Class&lt;T&gt;, ContextResolver&lt;T, R&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandContexts.html" title="class in co.aikar.commands">CommandContexts</a></dt>
<dd>
<div class="block">Registers a context that requires input from the command issuer to resolve.</div>
@@ -1473,6 +1519,22 @@
as the core wants to use the platform agnostic term of "Issuer" instead of Sender</span></div>
</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String-">registerStaticCompletion(String, String)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>
<div class="block">Register a static list of command completions that will never change.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.lang.String:A-">registerStaticCompletion(String, String[])</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>
<div class="block">Register a static list of command completions that will never change</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.function.Supplier-">registerStaticCompletion(String, Supplier&lt;List&lt;String&gt;&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>
<div class="block">Register a static list of command completions that will never change.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.html#registerStaticCompletion-java.lang.String-java.util.List-">registerStaticCompletion(String, List&lt;String&gt;)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.html" title="class in co.aikar.commands">CommandCompletions</a></dt>
<dd>
<div class="block">Register a static list of command completions that will never change</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html#removeCauseMethodName-java.lang.String-">removeCauseMethodName(String)</a></span> - Static method in class co.aikar.commands.apachecommonslang.<a href="co/aikar/commands/apachecommonslang/ApacheCommonsExceptionUtil.html" title="class in co.aikar.commands.apachecommonslang">ApacheCommonsExceptionUtil</a></dt>
<dd>
<div class="block">Removes from the list of method names used in the search for <code>Throwable</code>
@@ -1681,14 +1743,16 @@
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Single.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Single</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>
<div class="block">Don't join remaining arguments</div>
<div class="block">Don't join remaining arguments.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/ACFUtil.html#sneaky-java.lang.Throwable-">sneaky(Throwable)</a></span> - Static method in class co.aikar.commands.<a href="co/aikar/commands/ACFUtil.html" title="class in co.aikar.commands">ACFUtil</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#SPANISH">SPANISH</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Split.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Split</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Joins arguments into a single piece of text with the specified separator.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html#startsWith-java.lang.CharSequence-java.lang.CharSequence-">startsWith(CharSequence, CharSequence)</a></span> - Static method in class co.aikar.commands.apachecommonslang.<a href="co/aikar/commands/apachecommonslang/ApacheCommonsLangUtil.html" title="class in co.aikar.commands.apachecommonslang">ApacheCommonsLangUtil</a></dt>
<dd>
<div class="block">Check if a CharSequence starts with a specified prefix.</div>
@@ -1698,7 +1762,9 @@
<div class="block">Case insensitive check if a CharSequence starts with a specified prefix.</div>
</dd>
<dt><a href="co/aikar/commands/annotation/Subcommand.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Subcommand</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Defines the subcommand that can be used to execute this command.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandManager.html#supportedLanguages">supportedLanguages</a></span> - Variable in class co.aikar.commands.<a href="co/aikar/commands/CommandManager.html" title="class in co.aikar.commands">CommandManager</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#SWEDISH">SWEDISH</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
@@ -1706,7 +1772,9 @@
<dt><span class="memberNameLink"><a href="co/aikar/commands/CommandCompletions.SyncCompletionRequired.html#SyncCompletionRequired--">SyncCompletionRequired()</a></span> - Constructor for exception co.aikar.commands.<a href="co/aikar/commands/CommandCompletions.SyncCompletionRequired.html" title="class in co.aikar.commands">CommandCompletions.SyncCompletionRequired</a></dt>
<dd>&nbsp;</dd>
<dt><a href="co/aikar/commands/annotation/Syntax.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Syntax</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Specifies the syntax to be used when executing this command.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/MessageType.html#SYNTAX">SYNTAX</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/MessageType.html" title="class in co.aikar.commands">MessageType</a></dt>
<dd>&nbsp;</dd>
</dl>
@@ -1716,9 +1784,13 @@
<h2 class="title">T</h2>
<dl>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete(CommandIssuer, String, String[])</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Gets tab completed data from the given command from the user.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/BaseCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-boolean-">tabComplete(CommandIssuer, String, String[], boolean)</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/BaseCommand.html" title="class in co.aikar.commands">BaseCommand</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Gets the tab complete suggestions from a given command.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/ForwardingCommand.html#tabComplete-co.aikar.commands.CommandIssuer-java.lang.String-java.lang.String:A-">tabComplete(CommandIssuer, String, String[])</a></span> - Method in class co.aikar.commands.<a href="co/aikar/commands/ForwardingCommand.html" title="class in co.aikar.commands">ForwardingCommand</a></dt>
<dd>&nbsp;</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/Locales.html#THAI">THAI</a></span> - Static variable in class co.aikar.commands.<a href="co/aikar/commands/Locales.html" title="class in co.aikar.commands">Locales</a></dt>
@@ -1775,7 +1847,9 @@
<div class="block">Returns the enum constant of this type with the specified name.</div>
</dd>
<dt><a href="co/aikar/commands/annotation/Values.html" title="annotation in co.aikar.commands.annotation"><span class="typeNameLink">Values</span></a> - Annotation Type in <a href="co/aikar/commands/annotation/package-summary.html">co.aikar.commands.annotation</a></dt>
<dd>&nbsp;</dd>
<dd>
<div class="block">Specifies a list of values that the command input should be validated against, or else show an error.</div>
</dd>
<dt><span class="memberNameLink"><a href="co/aikar/commands/MessageKeys.html#values--">values()</a></span> - Static method in enum co.aikar.commands.<a href="co/aikar/commands/MessageKeys.html" title="enum in co.aikar.commands">MessageKeys</a></dt>
<dd>
<div class="block">Returns an array containing the constants of this enum type, in
File diff suppressed because it is too large Load Diff
@@ -39,138 +39,209 @@
<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.List;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Map;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.stream.Collectors;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.IntStream;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">034</span>import java.util.function.Supplier;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.Collectors;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.stream.IntStream;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.39"></a>
<span class="sourceLineNo">040</span> private final CommandManager manager;<a name="line.40"></a>
<span class="sourceLineNo">041</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span> public CommandCompletions(CommandManager manager) {<a name="line.44"></a>
<span class="sourceLineNo">045</span> this.manager = manager;<a name="line.45"></a>
<span class="sourceLineNo">046</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.47"></a>
<span class="sourceLineNo">048</span> String config = c.getConfig();<a name="line.48"></a>
<span class="sourceLineNo">049</span> if (config == null) {<a name="line.49"></a>
<span class="sourceLineNo">050</span> return ImmutableList.of();<a name="line.50"></a>
<span class="sourceLineNo">051</span> }<a name="line.51"></a>
<span class="sourceLineNo">052</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.52"></a>
<span class="sourceLineNo">053</span> int start;<a name="line.53"></a>
<span class="sourceLineNo">054</span> int end;<a name="line.54"></a>
<span class="sourceLineNo">055</span> if (ranges.length != 2) {<a name="line.55"></a>
<span class="sourceLineNo">056</span> start = 0;<a name="line.56"></a>
<span class="sourceLineNo">057</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.57"></a>
<span class="sourceLineNo">058</span> } else {<a name="line.58"></a>
<span class="sourceLineNo">059</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.59"></a>
<span class="sourceLineNo">060</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> }<a name="line.61"></a>
<span class="sourceLineNo">062</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.62"></a>
<span class="sourceLineNo">063</span> });<a name="line.63"></a>
<span class="sourceLineNo">064</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.64"></a>
<span class="sourceLineNo">065</span> }<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.67"></a>
<span class="sourceLineNo">068</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.68"></a>
<span class="sourceLineNo">069</span> }<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.71"></a>
<span class="sourceLineNo">072</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.72"></a>
<span class="sourceLineNo">073</span> }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span> /**<a name="line.75"></a>
<span class="sourceLineNo">076</span> * @deprecated Feature Not done yet<a name="line.76"></a>
<span class="sourceLineNo">077</span> * @param id<a name="line.77"></a>
<span class="sourceLineNo">078</span> * @param classes<a name="line.78"></a>
<span class="sourceLineNo">079</span> * @return<a name="line.79"></a>
<span class="sourceLineNo">080</span> */<a name="line.80"></a>
<span class="sourceLineNo">081</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.81"></a>
<span class="sourceLineNo">082</span> // get completion with specified id<a name="line.82"></a>
<span class="sourceLineNo">083</span> id = id.toLowerCase();<a name="line.83"></a>
<span class="sourceLineNo">084</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span> if(completion == null) {<a name="line.86"></a>
<span class="sourceLineNo">087</span> // Throw something because no completion with specified id<a name="line.87"></a>
<span class="sourceLineNo">088</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.88"></a>
<span class="sourceLineNo">089</span> }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span> for(Class clazz : classes) {<a name="line.91"></a>
<span class="sourceLineNo">092</span> defaultCompletions.put(clazz, id);<a name="line.92"></a>
<span class="sourceLineNo">093</span> }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span> return completion;<a name="line.95"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.40"></a>
<span class="sourceLineNo">041</span> private final CommandManager manager;<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span> public CommandCompletions(CommandManager manager) {<a name="line.45"></a>
<span class="sourceLineNo">046</span> this.manager = manager;<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.47"></a>
<span class="sourceLineNo">048</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.48"></a>
<span class="sourceLineNo">049</span> String config = c.getConfig();<a name="line.49"></a>
<span class="sourceLineNo">050</span> if (config == null) {<a name="line.50"></a>
<span class="sourceLineNo">051</span> return ImmutableList.of();<a name="line.51"></a>
<span class="sourceLineNo">052</span> }<a name="line.52"></a>
<span class="sourceLineNo">053</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.53"></a>
<span class="sourceLineNo">054</span> int start;<a name="line.54"></a>
<span class="sourceLineNo">055</span> int end;<a name="line.55"></a>
<span class="sourceLineNo">056</span> if (ranges.length != 2) {<a name="line.56"></a>
<span class="sourceLineNo">057</span> start = 0;<a name="line.57"></a>
<span class="sourceLineNo">058</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.58"></a>
<span class="sourceLineNo">059</span> } else {<a name="line.59"></a>
<span class="sourceLineNo">060</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.61"></a>
<span class="sourceLineNo">062</span> }<a name="line.62"></a>
<span class="sourceLineNo">063</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.63"></a>
<span class="sourceLineNo">064</span> });<a name="line.64"></a>
<span class="sourceLineNo">065</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.65"></a>
<span class="sourceLineNo">066</span> }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span> /**<a name="line.68"></a>
<span class="sourceLineNo">069</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.69"></a>
<span class="sourceLineNo">070</span> *<a name="line.70"></a>
<span class="sourceLineNo">071</span> * @param id<a name="line.71"></a>
<span class="sourceLineNo">072</span> * @param handler<a name="line.72"></a>
<span class="sourceLineNo">073</span> * @return<a name="line.73"></a>
<span class="sourceLineNo">074</span> */<a name="line.74"></a>
<span class="sourceLineNo">075</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.75"></a>
<span class="sourceLineNo">076</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.76"></a>
<span class="sourceLineNo">077</span> }<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
<span class="sourceLineNo">080</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.80"></a>
<span class="sourceLineNo">081</span> * This handler is declared to be safe to be executed asynchronously.<a name="line.81"></a>
<span class="sourceLineNo">082</span> * &lt;p&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span> * Not all platforms support this, so if the platform does not support asynchronous execution,<a name="line.83"></a>
<span class="sourceLineNo">084</span> * your handler will be executed on the main thread.<a name="line.84"></a>
<span class="sourceLineNo">085</span> * &lt;p&gt;<a name="line.85"></a>
<span class="sourceLineNo">086</span> * Use this anytime your handler does not need to access state that is not considered thread safe.<a name="line.86"></a>
<span class="sourceLineNo">087</span> * &lt;p&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span> * Use context.isAsync() to determine if you are async or not.<a name="line.88"></a>
<span class="sourceLineNo">089</span> *<a name="line.89"></a>
<span class="sourceLineNo">090</span> * @param id<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @param handler<a name="line.91"></a>
<span class="sourceLineNo">092</span> * @return<a name="line.92"></a>
<span class="sourceLineNo">093</span> */<a name="line.93"></a>
<span class="sourceLineNo">094</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.94"></a>
<span class="sourceLineNo">095</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span> @NotNull<a name="line.98"></a>
<span class="sourceLineNo">099</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.99"></a>
<span class="sourceLineNo">100</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.100"></a>
<span class="sourceLineNo">101</span> final int argIndex = args.length - 1;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span> String input = args[argIndex];<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.105"></a>
<span class="sourceLineNo">106</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> completion = completions[completions.length - 1];<a name="line.107"></a>
<span class="sourceLineNo">108</span> }<a name="line.108"></a>
<span class="sourceLineNo">109</span> if (completion == null) {<a name="line.109"></a>
<span class="sourceLineNo">110</span> return ImmutableList.of(input);<a name="line.110"></a>
<span class="sourceLineNo">111</span> }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.113"></a>
<span class="sourceLineNo">114</span> }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.116"></a>
<span class="sourceLineNo">117</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.119"></a>
<span class="sourceLineNo">120</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.122"></a>
<span class="sourceLineNo">123</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.123"></a>
<span class="sourceLineNo">124</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.124"></a>
<span class="sourceLineNo">125</span> if (handler != null) {<a name="line.125"></a>
<span class="sourceLineNo">126</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.126"></a>
<span class="sourceLineNo">127</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.127"></a>
<span class="sourceLineNo">128</span> return null;<a name="line.128"></a>
<span class="sourceLineNo">129</span> }<a name="line.129"></a>
<span class="sourceLineNo">130</span> String config = complete.length == 1 ? null : complete[1];<a name="line.130"></a>
<span class="sourceLineNo">131</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span> try {<a name="line.133"></a>
<span class="sourceLineNo">134</span> //noinspection unchecked<a name="line.134"></a>
<span class="sourceLineNo">135</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.135"></a>
<span class="sourceLineNo">136</span> if (completions != null) {<a name="line.136"></a>
<span class="sourceLineNo">137</span> allCompletions.addAll(completions);<a name="line.137"></a>
<span class="sourceLineNo">138</span> continue;<a name="line.138"></a>
<span class="sourceLineNo">139</span> }<a name="line.139"></a>
<span class="sourceLineNo">140</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.140"></a>
<span class="sourceLineNo">141</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.141"></a>
<span class="sourceLineNo">142</span> throw new CommandCompletionTextLookupException();<a name="line.142"></a>
<span class="sourceLineNo">143</span> }<a name="line.143"></a>
<span class="sourceLineNo">144</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.144"></a>
<span class="sourceLineNo">145</span> // This should only happen if some other feedback error occured.<a name="line.145"></a>
<span class="sourceLineNo">146</span> } catch (Exception e) {<a name="line.146"></a>
<span class="sourceLineNo">147</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.147"></a>
<span class="sourceLineNo">148</span> }<a name="line.148"></a>
<span class="sourceLineNo">149</span> // Something went wrong in lookup, fall back to input<a name="line.149"></a>
<span class="sourceLineNo">150</span> return ImmutableList.of(input);<a name="line.150"></a>
<span class="sourceLineNo">151</span> } else {<a name="line.151"></a>
<span class="sourceLineNo">152</span> // Plaintext value<a name="line.152"></a>
<span class="sourceLineNo">153</span> allCompletions.add(value);<a name="line.153"></a>
<span class="sourceLineNo">154</span> }<a name="line.154"></a>
<span class="sourceLineNo">155</span> }<a name="line.155"></a>
<span class="sourceLineNo">156</span> return allCompletions;<a name="line.156"></a>
<span class="sourceLineNo">157</span> }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.159"></a>
<span class="sourceLineNo">160</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.160"></a>
<span class="sourceLineNo">161</span> }<a name="line.161"></a>
<span class="sourceLineNo">162</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.162"></a>
<span class="sourceLineNo">163</span> public static class SyncCompletionRequired extends Exception {}<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>}<a name="line.165"></a>
<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
<span class="sourceLineNo">099</span> * Register a static list of command completions that will never change.<a name="line.99"></a>
<span class="sourceLineNo">100</span> * Like @CommandCompletion, values are | (PIPE) separated.<a name="line.100"></a>
<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span> * Example: foo|bar|baz<a name="line.102"></a>
<span class="sourceLineNo">103</span> *<a name="line.103"></a>
<span class="sourceLineNo">104</span> * @param id<a name="line.104"></a>
<span class="sourceLineNo">105</span> * @param list<a name="line.105"></a>
<span class="sourceLineNo">106</span> * @return<a name="line.106"></a>
<span class="sourceLineNo">107</span> */<a name="line.107"></a>
<span class="sourceLineNo">108</span> public CommandCompletionHandler registerStaticCompletion(String id, String list) {<a name="line.108"></a>
<span class="sourceLineNo">109</span> return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));<a name="line.109"></a>
<span class="sourceLineNo">110</span> }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span> /**<a name="line.112"></a>
<span class="sourceLineNo">113</span> * Register a static list of command completions that will never change<a name="line.113"></a>
<span class="sourceLineNo">114</span> *<a name="line.114"></a>
<span class="sourceLineNo">115</span> * @param id<a name="line.115"></a>
<span class="sourceLineNo">116</span> * @param completions<a name="line.116"></a>
<span class="sourceLineNo">117</span> * @return<a name="line.117"></a>
<span class="sourceLineNo">118</span> */<a name="line.118"></a>
<span class="sourceLineNo">119</span> public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {<a name="line.119"></a>
<span class="sourceLineNo">120</span> return registerStaticCompletion(id, Lists.newArrayList(completions));<a name="line.120"></a>
<span class="sourceLineNo">121</span> }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
<span class="sourceLineNo">124</span> * Register a static list of command completions that will never change. The list is obtained from the supplier<a name="line.124"></a>
<span class="sourceLineNo">125</span> * immediately as part of this method call.<a name="line.125"></a>
<span class="sourceLineNo">126</span> *<a name="line.126"></a>
<span class="sourceLineNo">127</span> * @param id<a name="line.127"></a>
<span class="sourceLineNo">128</span> * @param supplier<a name="line.128"></a>
<span class="sourceLineNo">129</span> * @return<a name="line.129"></a>
<span class="sourceLineNo">130</span> */<a name="line.130"></a>
<span class="sourceLineNo">131</span> public CommandCompletionHandler registerStaticCompletion(String id, Supplier&lt;List&lt;String&gt;&gt; supplier) {<a name="line.131"></a>
<span class="sourceLineNo">132</span> return registerStaticCompletion(id, supplier.get());<a name="line.132"></a>
<span class="sourceLineNo">133</span> }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
<span class="sourceLineNo">136</span> * Register a static list of command completions that will never change<a name="line.136"></a>
<span class="sourceLineNo">137</span> *<a name="line.137"></a>
<span class="sourceLineNo">138</span> * @param id<a name="line.138"></a>
<span class="sourceLineNo">139</span> * @param completions<a name="line.139"></a>
<span class="sourceLineNo">140</span> * @return<a name="line.140"></a>
<span class="sourceLineNo">141</span> */<a name="line.141"></a>
<span class="sourceLineNo">142</span> public CommandCompletionHandler registerStaticCompletion(String id, List&lt;String&gt; completions) {<a name="line.142"></a>
<span class="sourceLineNo">143</span> return registerAsyncCompletion(id, x -&gt; completions);<a name="line.143"></a>
<span class="sourceLineNo">144</span> }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span> /**<a name="line.146"></a>
<span class="sourceLineNo">147</span> * @deprecated Feature Not done yet<a name="line.147"></a>
<span class="sourceLineNo">148</span> * @param id<a name="line.148"></a>
<span class="sourceLineNo">149</span> * @param classes<a name="line.149"></a>
<span class="sourceLineNo">150</span> * @return<a name="line.150"></a>
<span class="sourceLineNo">151</span> */<a name="line.151"></a>
<span class="sourceLineNo">152</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.152"></a>
<span class="sourceLineNo">153</span> // get completion with specified id<a name="line.153"></a>
<span class="sourceLineNo">154</span> id = id.toLowerCase();<a name="line.154"></a>
<span class="sourceLineNo">155</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span> if(completion == null) {<a name="line.157"></a>
<span class="sourceLineNo">158</span> // Throw something because no completion with specified id<a name="line.158"></a>
<span class="sourceLineNo">159</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span> for(Class clazz : classes) {<a name="line.162"></a>
<span class="sourceLineNo">163</span> defaultCompletions.put(clazz, id);<a name="line.163"></a>
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> return completion;<a name="line.166"></a>
<span class="sourceLineNo">167</span> }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span> @NotNull<a name="line.169"></a>
<span class="sourceLineNo">170</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.170"></a>
<span class="sourceLineNo">171</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.171"></a>
<span class="sourceLineNo">172</span> final int argIndex = args.length - 1;<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span> String input = args[argIndex];<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.176"></a>
<span class="sourceLineNo">177</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.177"></a>
<span class="sourceLineNo">178</span> completion = completions[completions.length - 1];<a name="line.178"></a>
<span class="sourceLineNo">179</span> }<a name="line.179"></a>
<span class="sourceLineNo">180</span> if (completion == null) {<a name="line.180"></a>
<span class="sourceLineNo">181</span> return ImmutableList.of(input);<a name="line.181"></a>
<span class="sourceLineNo">182</span> }<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.184"></a>
<span class="sourceLineNo">185</span> }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.187"></a>
<span class="sourceLineNo">188</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.190"></a>
<span class="sourceLineNo">191</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.193"></a>
<span class="sourceLineNo">194</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.194"></a>
<span class="sourceLineNo">195</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.195"></a>
<span class="sourceLineNo">196</span> if (handler != null) {<a name="line.196"></a>
<span class="sourceLineNo">197</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.197"></a>
<span class="sourceLineNo">198</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.198"></a>
<span class="sourceLineNo">199</span> return null;<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span> String config = complete.length == 1 ? null : complete[1];<a name="line.201"></a>
<span class="sourceLineNo">202</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span> try {<a name="line.204"></a>
<span class="sourceLineNo">205</span> //noinspection unchecked<a name="line.205"></a>
<span class="sourceLineNo">206</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.206"></a>
<span class="sourceLineNo">207</span> if (completions != null) {<a name="line.207"></a>
<span class="sourceLineNo">208</span> allCompletions.addAll(completions);<a name="line.208"></a>
<span class="sourceLineNo">209</span> continue;<a name="line.209"></a>
<span class="sourceLineNo">210</span> }<a name="line.210"></a>
<span class="sourceLineNo">211</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.211"></a>
<span class="sourceLineNo">212</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.212"></a>
<span class="sourceLineNo">213</span> throw new CommandCompletionTextLookupException();<a name="line.213"></a>
<span class="sourceLineNo">214</span> }<a name="line.214"></a>
<span class="sourceLineNo">215</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.215"></a>
<span class="sourceLineNo">216</span> // This should only happen if some other feedback error occured.<a name="line.216"></a>
<span class="sourceLineNo">217</span> } catch (Exception e) {<a name="line.217"></a>
<span class="sourceLineNo">218</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.218"></a>
<span class="sourceLineNo">219</span> }<a name="line.219"></a>
<span class="sourceLineNo">220</span> // Something went wrong in lookup, fall back to input<a name="line.220"></a>
<span class="sourceLineNo">221</span> return ImmutableList.of(input);<a name="line.221"></a>
<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span> // Plaintext value<a name="line.223"></a>
<span class="sourceLineNo">224</span> allCompletions.add(value);<a name="line.224"></a>
<span class="sourceLineNo">225</span> }<a name="line.225"></a>
<span class="sourceLineNo">226</span> }<a name="line.226"></a>
<span class="sourceLineNo">227</span> return allCompletions;<a name="line.227"></a>
<span class="sourceLineNo">228</span> }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.230"></a>
<span class="sourceLineNo">231</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.231"></a>
<span class="sourceLineNo">232</span> }<a name="line.232"></a>
<span class="sourceLineNo">233</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.233"></a>
<span class="sourceLineNo">234</span> public static class SyncCompletionRequired extends Exception {}<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>}<a name="line.236"></a>
@@ -39,138 +39,209 @@
<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.List;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Map;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.stream.Collectors;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.IntStream;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">034</span>import java.util.function.Supplier;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.Collectors;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.stream.IntStream;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.39"></a>
<span class="sourceLineNo">040</span> private final CommandManager manager;<a name="line.40"></a>
<span class="sourceLineNo">041</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span> public CommandCompletions(CommandManager manager) {<a name="line.44"></a>
<span class="sourceLineNo">045</span> this.manager = manager;<a name="line.45"></a>
<span class="sourceLineNo">046</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.47"></a>
<span class="sourceLineNo">048</span> String config = c.getConfig();<a name="line.48"></a>
<span class="sourceLineNo">049</span> if (config == null) {<a name="line.49"></a>
<span class="sourceLineNo">050</span> return ImmutableList.of();<a name="line.50"></a>
<span class="sourceLineNo">051</span> }<a name="line.51"></a>
<span class="sourceLineNo">052</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.52"></a>
<span class="sourceLineNo">053</span> int start;<a name="line.53"></a>
<span class="sourceLineNo">054</span> int end;<a name="line.54"></a>
<span class="sourceLineNo">055</span> if (ranges.length != 2) {<a name="line.55"></a>
<span class="sourceLineNo">056</span> start = 0;<a name="line.56"></a>
<span class="sourceLineNo">057</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.57"></a>
<span class="sourceLineNo">058</span> } else {<a name="line.58"></a>
<span class="sourceLineNo">059</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.59"></a>
<span class="sourceLineNo">060</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> }<a name="line.61"></a>
<span class="sourceLineNo">062</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.62"></a>
<span class="sourceLineNo">063</span> });<a name="line.63"></a>
<span class="sourceLineNo">064</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.64"></a>
<span class="sourceLineNo">065</span> }<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.67"></a>
<span class="sourceLineNo">068</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.68"></a>
<span class="sourceLineNo">069</span> }<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.71"></a>
<span class="sourceLineNo">072</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.72"></a>
<span class="sourceLineNo">073</span> }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span> /**<a name="line.75"></a>
<span class="sourceLineNo">076</span> * @deprecated Feature Not done yet<a name="line.76"></a>
<span class="sourceLineNo">077</span> * @param id<a name="line.77"></a>
<span class="sourceLineNo">078</span> * @param classes<a name="line.78"></a>
<span class="sourceLineNo">079</span> * @return<a name="line.79"></a>
<span class="sourceLineNo">080</span> */<a name="line.80"></a>
<span class="sourceLineNo">081</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.81"></a>
<span class="sourceLineNo">082</span> // get completion with specified id<a name="line.82"></a>
<span class="sourceLineNo">083</span> id = id.toLowerCase();<a name="line.83"></a>
<span class="sourceLineNo">084</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span> if(completion == null) {<a name="line.86"></a>
<span class="sourceLineNo">087</span> // Throw something because no completion with specified id<a name="line.87"></a>
<span class="sourceLineNo">088</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.88"></a>
<span class="sourceLineNo">089</span> }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span> for(Class clazz : classes) {<a name="line.91"></a>
<span class="sourceLineNo">092</span> defaultCompletions.put(clazz, id);<a name="line.92"></a>
<span class="sourceLineNo">093</span> }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span> return completion;<a name="line.95"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.40"></a>
<span class="sourceLineNo">041</span> private final CommandManager manager;<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span> public CommandCompletions(CommandManager manager) {<a name="line.45"></a>
<span class="sourceLineNo">046</span> this.manager = manager;<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.47"></a>
<span class="sourceLineNo">048</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.48"></a>
<span class="sourceLineNo">049</span> String config = c.getConfig();<a name="line.49"></a>
<span class="sourceLineNo">050</span> if (config == null) {<a name="line.50"></a>
<span class="sourceLineNo">051</span> return ImmutableList.of();<a name="line.51"></a>
<span class="sourceLineNo">052</span> }<a name="line.52"></a>
<span class="sourceLineNo">053</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.53"></a>
<span class="sourceLineNo">054</span> int start;<a name="line.54"></a>
<span class="sourceLineNo">055</span> int end;<a name="line.55"></a>
<span class="sourceLineNo">056</span> if (ranges.length != 2) {<a name="line.56"></a>
<span class="sourceLineNo">057</span> start = 0;<a name="line.57"></a>
<span class="sourceLineNo">058</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.58"></a>
<span class="sourceLineNo">059</span> } else {<a name="line.59"></a>
<span class="sourceLineNo">060</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.61"></a>
<span class="sourceLineNo">062</span> }<a name="line.62"></a>
<span class="sourceLineNo">063</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.63"></a>
<span class="sourceLineNo">064</span> });<a name="line.64"></a>
<span class="sourceLineNo">065</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.65"></a>
<span class="sourceLineNo">066</span> }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span> /**<a name="line.68"></a>
<span class="sourceLineNo">069</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.69"></a>
<span class="sourceLineNo">070</span> *<a name="line.70"></a>
<span class="sourceLineNo">071</span> * @param id<a name="line.71"></a>
<span class="sourceLineNo">072</span> * @param handler<a name="line.72"></a>
<span class="sourceLineNo">073</span> * @return<a name="line.73"></a>
<span class="sourceLineNo">074</span> */<a name="line.74"></a>
<span class="sourceLineNo">075</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.75"></a>
<span class="sourceLineNo">076</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.76"></a>
<span class="sourceLineNo">077</span> }<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
<span class="sourceLineNo">080</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.80"></a>
<span class="sourceLineNo">081</span> * This handler is declared to be safe to be executed asynchronously.<a name="line.81"></a>
<span class="sourceLineNo">082</span> * &lt;p&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span> * Not all platforms support this, so if the platform does not support asynchronous execution,<a name="line.83"></a>
<span class="sourceLineNo">084</span> * your handler will be executed on the main thread.<a name="line.84"></a>
<span class="sourceLineNo">085</span> * &lt;p&gt;<a name="line.85"></a>
<span class="sourceLineNo">086</span> * Use this anytime your handler does not need to access state that is not considered thread safe.<a name="line.86"></a>
<span class="sourceLineNo">087</span> * &lt;p&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span> * Use context.isAsync() to determine if you are async or not.<a name="line.88"></a>
<span class="sourceLineNo">089</span> *<a name="line.89"></a>
<span class="sourceLineNo">090</span> * @param id<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @param handler<a name="line.91"></a>
<span class="sourceLineNo">092</span> * @return<a name="line.92"></a>
<span class="sourceLineNo">093</span> */<a name="line.93"></a>
<span class="sourceLineNo">094</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.94"></a>
<span class="sourceLineNo">095</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span> @NotNull<a name="line.98"></a>
<span class="sourceLineNo">099</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.99"></a>
<span class="sourceLineNo">100</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.100"></a>
<span class="sourceLineNo">101</span> final int argIndex = args.length - 1;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span> String input = args[argIndex];<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.105"></a>
<span class="sourceLineNo">106</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> completion = completions[completions.length - 1];<a name="line.107"></a>
<span class="sourceLineNo">108</span> }<a name="line.108"></a>
<span class="sourceLineNo">109</span> if (completion == null) {<a name="line.109"></a>
<span class="sourceLineNo">110</span> return ImmutableList.of(input);<a name="line.110"></a>
<span class="sourceLineNo">111</span> }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.113"></a>
<span class="sourceLineNo">114</span> }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.116"></a>
<span class="sourceLineNo">117</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.119"></a>
<span class="sourceLineNo">120</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.122"></a>
<span class="sourceLineNo">123</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.123"></a>
<span class="sourceLineNo">124</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.124"></a>
<span class="sourceLineNo">125</span> if (handler != null) {<a name="line.125"></a>
<span class="sourceLineNo">126</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.126"></a>
<span class="sourceLineNo">127</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.127"></a>
<span class="sourceLineNo">128</span> return null;<a name="line.128"></a>
<span class="sourceLineNo">129</span> }<a name="line.129"></a>
<span class="sourceLineNo">130</span> String config = complete.length == 1 ? null : complete[1];<a name="line.130"></a>
<span class="sourceLineNo">131</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span> try {<a name="line.133"></a>
<span class="sourceLineNo">134</span> //noinspection unchecked<a name="line.134"></a>
<span class="sourceLineNo">135</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.135"></a>
<span class="sourceLineNo">136</span> if (completions != null) {<a name="line.136"></a>
<span class="sourceLineNo">137</span> allCompletions.addAll(completions);<a name="line.137"></a>
<span class="sourceLineNo">138</span> continue;<a name="line.138"></a>
<span class="sourceLineNo">139</span> }<a name="line.139"></a>
<span class="sourceLineNo">140</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.140"></a>
<span class="sourceLineNo">141</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.141"></a>
<span class="sourceLineNo">142</span> throw new CommandCompletionTextLookupException();<a name="line.142"></a>
<span class="sourceLineNo">143</span> }<a name="line.143"></a>
<span class="sourceLineNo">144</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.144"></a>
<span class="sourceLineNo">145</span> // This should only happen if some other feedback error occured.<a name="line.145"></a>
<span class="sourceLineNo">146</span> } catch (Exception e) {<a name="line.146"></a>
<span class="sourceLineNo">147</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.147"></a>
<span class="sourceLineNo">148</span> }<a name="line.148"></a>
<span class="sourceLineNo">149</span> // Something went wrong in lookup, fall back to input<a name="line.149"></a>
<span class="sourceLineNo">150</span> return ImmutableList.of(input);<a name="line.150"></a>
<span class="sourceLineNo">151</span> } else {<a name="line.151"></a>
<span class="sourceLineNo">152</span> // Plaintext value<a name="line.152"></a>
<span class="sourceLineNo">153</span> allCompletions.add(value);<a name="line.153"></a>
<span class="sourceLineNo">154</span> }<a name="line.154"></a>
<span class="sourceLineNo">155</span> }<a name="line.155"></a>
<span class="sourceLineNo">156</span> return allCompletions;<a name="line.156"></a>
<span class="sourceLineNo">157</span> }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.159"></a>
<span class="sourceLineNo">160</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.160"></a>
<span class="sourceLineNo">161</span> }<a name="line.161"></a>
<span class="sourceLineNo">162</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.162"></a>
<span class="sourceLineNo">163</span> public static class SyncCompletionRequired extends Exception {}<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>}<a name="line.165"></a>
<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
<span class="sourceLineNo">099</span> * Register a static list of command completions that will never change.<a name="line.99"></a>
<span class="sourceLineNo">100</span> * Like @CommandCompletion, values are | (PIPE) separated.<a name="line.100"></a>
<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span> * Example: foo|bar|baz<a name="line.102"></a>
<span class="sourceLineNo">103</span> *<a name="line.103"></a>
<span class="sourceLineNo">104</span> * @param id<a name="line.104"></a>
<span class="sourceLineNo">105</span> * @param list<a name="line.105"></a>
<span class="sourceLineNo">106</span> * @return<a name="line.106"></a>
<span class="sourceLineNo">107</span> */<a name="line.107"></a>
<span class="sourceLineNo">108</span> public CommandCompletionHandler registerStaticCompletion(String id, String list) {<a name="line.108"></a>
<span class="sourceLineNo">109</span> return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));<a name="line.109"></a>
<span class="sourceLineNo">110</span> }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span> /**<a name="line.112"></a>
<span class="sourceLineNo">113</span> * Register a static list of command completions that will never change<a name="line.113"></a>
<span class="sourceLineNo">114</span> *<a name="line.114"></a>
<span class="sourceLineNo">115</span> * @param id<a name="line.115"></a>
<span class="sourceLineNo">116</span> * @param completions<a name="line.116"></a>
<span class="sourceLineNo">117</span> * @return<a name="line.117"></a>
<span class="sourceLineNo">118</span> */<a name="line.118"></a>
<span class="sourceLineNo">119</span> public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {<a name="line.119"></a>
<span class="sourceLineNo">120</span> return registerStaticCompletion(id, Lists.newArrayList(completions));<a name="line.120"></a>
<span class="sourceLineNo">121</span> }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
<span class="sourceLineNo">124</span> * Register a static list of command completions that will never change. The list is obtained from the supplier<a name="line.124"></a>
<span class="sourceLineNo">125</span> * immediately as part of this method call.<a name="line.125"></a>
<span class="sourceLineNo">126</span> *<a name="line.126"></a>
<span class="sourceLineNo">127</span> * @param id<a name="line.127"></a>
<span class="sourceLineNo">128</span> * @param supplier<a name="line.128"></a>
<span class="sourceLineNo">129</span> * @return<a name="line.129"></a>
<span class="sourceLineNo">130</span> */<a name="line.130"></a>
<span class="sourceLineNo">131</span> public CommandCompletionHandler registerStaticCompletion(String id, Supplier&lt;List&lt;String&gt;&gt; supplier) {<a name="line.131"></a>
<span class="sourceLineNo">132</span> return registerStaticCompletion(id, supplier.get());<a name="line.132"></a>
<span class="sourceLineNo">133</span> }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
<span class="sourceLineNo">136</span> * Register a static list of command completions that will never change<a name="line.136"></a>
<span class="sourceLineNo">137</span> *<a name="line.137"></a>
<span class="sourceLineNo">138</span> * @param id<a name="line.138"></a>
<span class="sourceLineNo">139</span> * @param completions<a name="line.139"></a>
<span class="sourceLineNo">140</span> * @return<a name="line.140"></a>
<span class="sourceLineNo">141</span> */<a name="line.141"></a>
<span class="sourceLineNo">142</span> public CommandCompletionHandler registerStaticCompletion(String id, List&lt;String&gt; completions) {<a name="line.142"></a>
<span class="sourceLineNo">143</span> return registerAsyncCompletion(id, x -&gt; completions);<a name="line.143"></a>
<span class="sourceLineNo">144</span> }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span> /**<a name="line.146"></a>
<span class="sourceLineNo">147</span> * @deprecated Feature Not done yet<a name="line.147"></a>
<span class="sourceLineNo">148</span> * @param id<a name="line.148"></a>
<span class="sourceLineNo">149</span> * @param classes<a name="line.149"></a>
<span class="sourceLineNo">150</span> * @return<a name="line.150"></a>
<span class="sourceLineNo">151</span> */<a name="line.151"></a>
<span class="sourceLineNo">152</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.152"></a>
<span class="sourceLineNo">153</span> // get completion with specified id<a name="line.153"></a>
<span class="sourceLineNo">154</span> id = id.toLowerCase();<a name="line.154"></a>
<span class="sourceLineNo">155</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span> if(completion == null) {<a name="line.157"></a>
<span class="sourceLineNo">158</span> // Throw something because no completion with specified id<a name="line.158"></a>
<span class="sourceLineNo">159</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span> for(Class clazz : classes) {<a name="line.162"></a>
<span class="sourceLineNo">163</span> defaultCompletions.put(clazz, id);<a name="line.163"></a>
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> return completion;<a name="line.166"></a>
<span class="sourceLineNo">167</span> }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span> @NotNull<a name="line.169"></a>
<span class="sourceLineNo">170</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.170"></a>
<span class="sourceLineNo">171</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.171"></a>
<span class="sourceLineNo">172</span> final int argIndex = args.length - 1;<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span> String input = args[argIndex];<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.176"></a>
<span class="sourceLineNo">177</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.177"></a>
<span class="sourceLineNo">178</span> completion = completions[completions.length - 1];<a name="line.178"></a>
<span class="sourceLineNo">179</span> }<a name="line.179"></a>
<span class="sourceLineNo">180</span> if (completion == null) {<a name="line.180"></a>
<span class="sourceLineNo">181</span> return ImmutableList.of(input);<a name="line.181"></a>
<span class="sourceLineNo">182</span> }<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.184"></a>
<span class="sourceLineNo">185</span> }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.187"></a>
<span class="sourceLineNo">188</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.190"></a>
<span class="sourceLineNo">191</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.193"></a>
<span class="sourceLineNo">194</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.194"></a>
<span class="sourceLineNo">195</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.195"></a>
<span class="sourceLineNo">196</span> if (handler != null) {<a name="line.196"></a>
<span class="sourceLineNo">197</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.197"></a>
<span class="sourceLineNo">198</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.198"></a>
<span class="sourceLineNo">199</span> return null;<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span> String config = complete.length == 1 ? null : complete[1];<a name="line.201"></a>
<span class="sourceLineNo">202</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span> try {<a name="line.204"></a>
<span class="sourceLineNo">205</span> //noinspection unchecked<a name="line.205"></a>
<span class="sourceLineNo">206</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.206"></a>
<span class="sourceLineNo">207</span> if (completions != null) {<a name="line.207"></a>
<span class="sourceLineNo">208</span> allCompletions.addAll(completions);<a name="line.208"></a>
<span class="sourceLineNo">209</span> continue;<a name="line.209"></a>
<span class="sourceLineNo">210</span> }<a name="line.210"></a>
<span class="sourceLineNo">211</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.211"></a>
<span class="sourceLineNo">212</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.212"></a>
<span class="sourceLineNo">213</span> throw new CommandCompletionTextLookupException();<a name="line.213"></a>
<span class="sourceLineNo">214</span> }<a name="line.214"></a>
<span class="sourceLineNo">215</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.215"></a>
<span class="sourceLineNo">216</span> // This should only happen if some other feedback error occured.<a name="line.216"></a>
<span class="sourceLineNo">217</span> } catch (Exception e) {<a name="line.217"></a>
<span class="sourceLineNo">218</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.218"></a>
<span class="sourceLineNo">219</span> }<a name="line.219"></a>
<span class="sourceLineNo">220</span> // Something went wrong in lookup, fall back to input<a name="line.220"></a>
<span class="sourceLineNo">221</span> return ImmutableList.of(input);<a name="line.221"></a>
<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span> // Plaintext value<a name="line.223"></a>
<span class="sourceLineNo">224</span> allCompletions.add(value);<a name="line.224"></a>
<span class="sourceLineNo">225</span> }<a name="line.225"></a>
<span class="sourceLineNo">226</span> }<a name="line.226"></a>
<span class="sourceLineNo">227</span> return allCompletions;<a name="line.227"></a>
<span class="sourceLineNo">228</span> }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.230"></a>
<span class="sourceLineNo">231</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.231"></a>
<span class="sourceLineNo">232</span> }<a name="line.232"></a>
<span class="sourceLineNo">233</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.233"></a>
<span class="sourceLineNo">234</span> public static class SyncCompletionRequired extends Exception {}<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>}<a name="line.236"></a>
@@ -39,138 +39,209 @@
<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.List;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Map;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.stream.Collectors;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.IntStream;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">034</span>import java.util.function.Supplier;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.Collectors;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.stream.IntStream;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.39"></a>
<span class="sourceLineNo">040</span> private final CommandManager manager;<a name="line.40"></a>
<span class="sourceLineNo">041</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span> public CommandCompletions(CommandManager manager) {<a name="line.44"></a>
<span class="sourceLineNo">045</span> this.manager = manager;<a name="line.45"></a>
<span class="sourceLineNo">046</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.47"></a>
<span class="sourceLineNo">048</span> String config = c.getConfig();<a name="line.48"></a>
<span class="sourceLineNo">049</span> if (config == null) {<a name="line.49"></a>
<span class="sourceLineNo">050</span> return ImmutableList.of();<a name="line.50"></a>
<span class="sourceLineNo">051</span> }<a name="line.51"></a>
<span class="sourceLineNo">052</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.52"></a>
<span class="sourceLineNo">053</span> int start;<a name="line.53"></a>
<span class="sourceLineNo">054</span> int end;<a name="line.54"></a>
<span class="sourceLineNo">055</span> if (ranges.length != 2) {<a name="line.55"></a>
<span class="sourceLineNo">056</span> start = 0;<a name="line.56"></a>
<span class="sourceLineNo">057</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.57"></a>
<span class="sourceLineNo">058</span> } else {<a name="line.58"></a>
<span class="sourceLineNo">059</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.59"></a>
<span class="sourceLineNo">060</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> }<a name="line.61"></a>
<span class="sourceLineNo">062</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.62"></a>
<span class="sourceLineNo">063</span> });<a name="line.63"></a>
<span class="sourceLineNo">064</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.64"></a>
<span class="sourceLineNo">065</span> }<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.67"></a>
<span class="sourceLineNo">068</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.68"></a>
<span class="sourceLineNo">069</span> }<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.71"></a>
<span class="sourceLineNo">072</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.72"></a>
<span class="sourceLineNo">073</span> }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span> /**<a name="line.75"></a>
<span class="sourceLineNo">076</span> * @deprecated Feature Not done yet<a name="line.76"></a>
<span class="sourceLineNo">077</span> * @param id<a name="line.77"></a>
<span class="sourceLineNo">078</span> * @param classes<a name="line.78"></a>
<span class="sourceLineNo">079</span> * @return<a name="line.79"></a>
<span class="sourceLineNo">080</span> */<a name="line.80"></a>
<span class="sourceLineNo">081</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.81"></a>
<span class="sourceLineNo">082</span> // get completion with specified id<a name="line.82"></a>
<span class="sourceLineNo">083</span> id = id.toLowerCase();<a name="line.83"></a>
<span class="sourceLineNo">084</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span> if(completion == null) {<a name="line.86"></a>
<span class="sourceLineNo">087</span> // Throw something because no completion with specified id<a name="line.87"></a>
<span class="sourceLineNo">088</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.88"></a>
<span class="sourceLineNo">089</span> }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span> for(Class clazz : classes) {<a name="line.91"></a>
<span class="sourceLineNo">092</span> defaultCompletions.put(clazz, id);<a name="line.92"></a>
<span class="sourceLineNo">093</span> }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span> return completion;<a name="line.95"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.40"></a>
<span class="sourceLineNo">041</span> private final CommandManager manager;<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span> public CommandCompletions(CommandManager manager) {<a name="line.45"></a>
<span class="sourceLineNo">046</span> this.manager = manager;<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.47"></a>
<span class="sourceLineNo">048</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.48"></a>
<span class="sourceLineNo">049</span> String config = c.getConfig();<a name="line.49"></a>
<span class="sourceLineNo">050</span> if (config == null) {<a name="line.50"></a>
<span class="sourceLineNo">051</span> return ImmutableList.of();<a name="line.51"></a>
<span class="sourceLineNo">052</span> }<a name="line.52"></a>
<span class="sourceLineNo">053</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.53"></a>
<span class="sourceLineNo">054</span> int start;<a name="line.54"></a>
<span class="sourceLineNo">055</span> int end;<a name="line.55"></a>
<span class="sourceLineNo">056</span> if (ranges.length != 2) {<a name="line.56"></a>
<span class="sourceLineNo">057</span> start = 0;<a name="line.57"></a>
<span class="sourceLineNo">058</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.58"></a>
<span class="sourceLineNo">059</span> } else {<a name="line.59"></a>
<span class="sourceLineNo">060</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.61"></a>
<span class="sourceLineNo">062</span> }<a name="line.62"></a>
<span class="sourceLineNo">063</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.63"></a>
<span class="sourceLineNo">064</span> });<a name="line.64"></a>
<span class="sourceLineNo">065</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.65"></a>
<span class="sourceLineNo">066</span> }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span> /**<a name="line.68"></a>
<span class="sourceLineNo">069</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.69"></a>
<span class="sourceLineNo">070</span> *<a name="line.70"></a>
<span class="sourceLineNo">071</span> * @param id<a name="line.71"></a>
<span class="sourceLineNo">072</span> * @param handler<a name="line.72"></a>
<span class="sourceLineNo">073</span> * @return<a name="line.73"></a>
<span class="sourceLineNo">074</span> */<a name="line.74"></a>
<span class="sourceLineNo">075</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.75"></a>
<span class="sourceLineNo">076</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.76"></a>
<span class="sourceLineNo">077</span> }<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
<span class="sourceLineNo">080</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.80"></a>
<span class="sourceLineNo">081</span> * This handler is declared to be safe to be executed asynchronously.<a name="line.81"></a>
<span class="sourceLineNo">082</span> * &lt;p&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span> * Not all platforms support this, so if the platform does not support asynchronous execution,<a name="line.83"></a>
<span class="sourceLineNo">084</span> * your handler will be executed on the main thread.<a name="line.84"></a>
<span class="sourceLineNo">085</span> * &lt;p&gt;<a name="line.85"></a>
<span class="sourceLineNo">086</span> * Use this anytime your handler does not need to access state that is not considered thread safe.<a name="line.86"></a>
<span class="sourceLineNo">087</span> * &lt;p&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span> * Use context.isAsync() to determine if you are async or not.<a name="line.88"></a>
<span class="sourceLineNo">089</span> *<a name="line.89"></a>
<span class="sourceLineNo">090</span> * @param id<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @param handler<a name="line.91"></a>
<span class="sourceLineNo">092</span> * @return<a name="line.92"></a>
<span class="sourceLineNo">093</span> */<a name="line.93"></a>
<span class="sourceLineNo">094</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.94"></a>
<span class="sourceLineNo">095</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span> @NotNull<a name="line.98"></a>
<span class="sourceLineNo">099</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.99"></a>
<span class="sourceLineNo">100</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.100"></a>
<span class="sourceLineNo">101</span> final int argIndex = args.length - 1;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span> String input = args[argIndex];<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.105"></a>
<span class="sourceLineNo">106</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> completion = completions[completions.length - 1];<a name="line.107"></a>
<span class="sourceLineNo">108</span> }<a name="line.108"></a>
<span class="sourceLineNo">109</span> if (completion == null) {<a name="line.109"></a>
<span class="sourceLineNo">110</span> return ImmutableList.of(input);<a name="line.110"></a>
<span class="sourceLineNo">111</span> }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.113"></a>
<span class="sourceLineNo">114</span> }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.116"></a>
<span class="sourceLineNo">117</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.119"></a>
<span class="sourceLineNo">120</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.122"></a>
<span class="sourceLineNo">123</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.123"></a>
<span class="sourceLineNo">124</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.124"></a>
<span class="sourceLineNo">125</span> if (handler != null) {<a name="line.125"></a>
<span class="sourceLineNo">126</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.126"></a>
<span class="sourceLineNo">127</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.127"></a>
<span class="sourceLineNo">128</span> return null;<a name="line.128"></a>
<span class="sourceLineNo">129</span> }<a name="line.129"></a>
<span class="sourceLineNo">130</span> String config = complete.length == 1 ? null : complete[1];<a name="line.130"></a>
<span class="sourceLineNo">131</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span> try {<a name="line.133"></a>
<span class="sourceLineNo">134</span> //noinspection unchecked<a name="line.134"></a>
<span class="sourceLineNo">135</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.135"></a>
<span class="sourceLineNo">136</span> if (completions != null) {<a name="line.136"></a>
<span class="sourceLineNo">137</span> allCompletions.addAll(completions);<a name="line.137"></a>
<span class="sourceLineNo">138</span> continue;<a name="line.138"></a>
<span class="sourceLineNo">139</span> }<a name="line.139"></a>
<span class="sourceLineNo">140</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.140"></a>
<span class="sourceLineNo">141</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.141"></a>
<span class="sourceLineNo">142</span> throw new CommandCompletionTextLookupException();<a name="line.142"></a>
<span class="sourceLineNo">143</span> }<a name="line.143"></a>
<span class="sourceLineNo">144</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.144"></a>
<span class="sourceLineNo">145</span> // This should only happen if some other feedback error occured.<a name="line.145"></a>
<span class="sourceLineNo">146</span> } catch (Exception e) {<a name="line.146"></a>
<span class="sourceLineNo">147</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.147"></a>
<span class="sourceLineNo">148</span> }<a name="line.148"></a>
<span class="sourceLineNo">149</span> // Something went wrong in lookup, fall back to input<a name="line.149"></a>
<span class="sourceLineNo">150</span> return ImmutableList.of(input);<a name="line.150"></a>
<span class="sourceLineNo">151</span> } else {<a name="line.151"></a>
<span class="sourceLineNo">152</span> // Plaintext value<a name="line.152"></a>
<span class="sourceLineNo">153</span> allCompletions.add(value);<a name="line.153"></a>
<span class="sourceLineNo">154</span> }<a name="line.154"></a>
<span class="sourceLineNo">155</span> }<a name="line.155"></a>
<span class="sourceLineNo">156</span> return allCompletions;<a name="line.156"></a>
<span class="sourceLineNo">157</span> }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.159"></a>
<span class="sourceLineNo">160</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.160"></a>
<span class="sourceLineNo">161</span> }<a name="line.161"></a>
<span class="sourceLineNo">162</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.162"></a>
<span class="sourceLineNo">163</span> public static class SyncCompletionRequired extends Exception {}<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>}<a name="line.165"></a>
<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
<span class="sourceLineNo">099</span> * Register a static list of command completions that will never change.<a name="line.99"></a>
<span class="sourceLineNo">100</span> * Like @CommandCompletion, values are | (PIPE) separated.<a name="line.100"></a>
<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span> * Example: foo|bar|baz<a name="line.102"></a>
<span class="sourceLineNo">103</span> *<a name="line.103"></a>
<span class="sourceLineNo">104</span> * @param id<a name="line.104"></a>
<span class="sourceLineNo">105</span> * @param list<a name="line.105"></a>
<span class="sourceLineNo">106</span> * @return<a name="line.106"></a>
<span class="sourceLineNo">107</span> */<a name="line.107"></a>
<span class="sourceLineNo">108</span> public CommandCompletionHandler registerStaticCompletion(String id, String list) {<a name="line.108"></a>
<span class="sourceLineNo">109</span> return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));<a name="line.109"></a>
<span class="sourceLineNo">110</span> }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span> /**<a name="line.112"></a>
<span class="sourceLineNo">113</span> * Register a static list of command completions that will never change<a name="line.113"></a>
<span class="sourceLineNo">114</span> *<a name="line.114"></a>
<span class="sourceLineNo">115</span> * @param id<a name="line.115"></a>
<span class="sourceLineNo">116</span> * @param completions<a name="line.116"></a>
<span class="sourceLineNo">117</span> * @return<a name="line.117"></a>
<span class="sourceLineNo">118</span> */<a name="line.118"></a>
<span class="sourceLineNo">119</span> public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {<a name="line.119"></a>
<span class="sourceLineNo">120</span> return registerStaticCompletion(id, Lists.newArrayList(completions));<a name="line.120"></a>
<span class="sourceLineNo">121</span> }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
<span class="sourceLineNo">124</span> * Register a static list of command completions that will never change. The list is obtained from the supplier<a name="line.124"></a>
<span class="sourceLineNo">125</span> * immediately as part of this method call.<a name="line.125"></a>
<span class="sourceLineNo">126</span> *<a name="line.126"></a>
<span class="sourceLineNo">127</span> * @param id<a name="line.127"></a>
<span class="sourceLineNo">128</span> * @param supplier<a name="line.128"></a>
<span class="sourceLineNo">129</span> * @return<a name="line.129"></a>
<span class="sourceLineNo">130</span> */<a name="line.130"></a>
<span class="sourceLineNo">131</span> public CommandCompletionHandler registerStaticCompletion(String id, Supplier&lt;List&lt;String&gt;&gt; supplier) {<a name="line.131"></a>
<span class="sourceLineNo">132</span> return registerStaticCompletion(id, supplier.get());<a name="line.132"></a>
<span class="sourceLineNo">133</span> }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
<span class="sourceLineNo">136</span> * Register a static list of command completions that will never change<a name="line.136"></a>
<span class="sourceLineNo">137</span> *<a name="line.137"></a>
<span class="sourceLineNo">138</span> * @param id<a name="line.138"></a>
<span class="sourceLineNo">139</span> * @param completions<a name="line.139"></a>
<span class="sourceLineNo">140</span> * @return<a name="line.140"></a>
<span class="sourceLineNo">141</span> */<a name="line.141"></a>
<span class="sourceLineNo">142</span> public CommandCompletionHandler registerStaticCompletion(String id, List&lt;String&gt; completions) {<a name="line.142"></a>
<span class="sourceLineNo">143</span> return registerAsyncCompletion(id, x -&gt; completions);<a name="line.143"></a>
<span class="sourceLineNo">144</span> }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span> /**<a name="line.146"></a>
<span class="sourceLineNo">147</span> * @deprecated Feature Not done yet<a name="line.147"></a>
<span class="sourceLineNo">148</span> * @param id<a name="line.148"></a>
<span class="sourceLineNo">149</span> * @param classes<a name="line.149"></a>
<span class="sourceLineNo">150</span> * @return<a name="line.150"></a>
<span class="sourceLineNo">151</span> */<a name="line.151"></a>
<span class="sourceLineNo">152</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.152"></a>
<span class="sourceLineNo">153</span> // get completion with specified id<a name="line.153"></a>
<span class="sourceLineNo">154</span> id = id.toLowerCase();<a name="line.154"></a>
<span class="sourceLineNo">155</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span> if(completion == null) {<a name="line.157"></a>
<span class="sourceLineNo">158</span> // Throw something because no completion with specified id<a name="line.158"></a>
<span class="sourceLineNo">159</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span> for(Class clazz : classes) {<a name="line.162"></a>
<span class="sourceLineNo">163</span> defaultCompletions.put(clazz, id);<a name="line.163"></a>
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> return completion;<a name="line.166"></a>
<span class="sourceLineNo">167</span> }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span> @NotNull<a name="line.169"></a>
<span class="sourceLineNo">170</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.170"></a>
<span class="sourceLineNo">171</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.171"></a>
<span class="sourceLineNo">172</span> final int argIndex = args.length - 1;<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span> String input = args[argIndex];<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.176"></a>
<span class="sourceLineNo">177</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.177"></a>
<span class="sourceLineNo">178</span> completion = completions[completions.length - 1];<a name="line.178"></a>
<span class="sourceLineNo">179</span> }<a name="line.179"></a>
<span class="sourceLineNo">180</span> if (completion == null) {<a name="line.180"></a>
<span class="sourceLineNo">181</span> return ImmutableList.of(input);<a name="line.181"></a>
<span class="sourceLineNo">182</span> }<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.184"></a>
<span class="sourceLineNo">185</span> }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.187"></a>
<span class="sourceLineNo">188</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.190"></a>
<span class="sourceLineNo">191</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.193"></a>
<span class="sourceLineNo">194</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.194"></a>
<span class="sourceLineNo">195</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.195"></a>
<span class="sourceLineNo">196</span> if (handler != null) {<a name="line.196"></a>
<span class="sourceLineNo">197</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.197"></a>
<span class="sourceLineNo">198</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.198"></a>
<span class="sourceLineNo">199</span> return null;<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span> String config = complete.length == 1 ? null : complete[1];<a name="line.201"></a>
<span class="sourceLineNo">202</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span> try {<a name="line.204"></a>
<span class="sourceLineNo">205</span> //noinspection unchecked<a name="line.205"></a>
<span class="sourceLineNo">206</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.206"></a>
<span class="sourceLineNo">207</span> if (completions != null) {<a name="line.207"></a>
<span class="sourceLineNo">208</span> allCompletions.addAll(completions);<a name="line.208"></a>
<span class="sourceLineNo">209</span> continue;<a name="line.209"></a>
<span class="sourceLineNo">210</span> }<a name="line.210"></a>
<span class="sourceLineNo">211</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.211"></a>
<span class="sourceLineNo">212</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.212"></a>
<span class="sourceLineNo">213</span> throw new CommandCompletionTextLookupException();<a name="line.213"></a>
<span class="sourceLineNo">214</span> }<a name="line.214"></a>
<span class="sourceLineNo">215</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.215"></a>
<span class="sourceLineNo">216</span> // This should only happen if some other feedback error occured.<a name="line.216"></a>
<span class="sourceLineNo">217</span> } catch (Exception e) {<a name="line.217"></a>
<span class="sourceLineNo">218</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.218"></a>
<span class="sourceLineNo">219</span> }<a name="line.219"></a>
<span class="sourceLineNo">220</span> // Something went wrong in lookup, fall back to input<a name="line.220"></a>
<span class="sourceLineNo">221</span> return ImmutableList.of(input);<a name="line.221"></a>
<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span> // Plaintext value<a name="line.223"></a>
<span class="sourceLineNo">224</span> allCompletions.add(value);<a name="line.224"></a>
<span class="sourceLineNo">225</span> }<a name="line.225"></a>
<span class="sourceLineNo">226</span> }<a name="line.226"></a>
<span class="sourceLineNo">227</span> return allCompletions;<a name="line.227"></a>
<span class="sourceLineNo">228</span> }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.230"></a>
<span class="sourceLineNo">231</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.231"></a>
<span class="sourceLineNo">232</span> }<a name="line.232"></a>
<span class="sourceLineNo">233</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.233"></a>
<span class="sourceLineNo">234</span> public static class SyncCompletionRequired extends Exception {}<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>}<a name="line.236"></a>
@@ -39,138 +39,209 @@
<span class="sourceLineNo">031</span>import java.util.HashMap;<a name="line.31"></a>
<span class="sourceLineNo">032</span>import java.util.List;<a name="line.32"></a>
<span class="sourceLineNo">033</span>import java.util.Map;<a name="line.33"></a>
<span class="sourceLineNo">034</span>import java.util.stream.Collectors;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.IntStream;<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">034</span>import java.util.function.Supplier;<a name="line.34"></a>
<span class="sourceLineNo">035</span>import java.util.stream.Collectors;<a name="line.35"></a>
<span class="sourceLineNo">036</span>import java.util.stream.IntStream;<a name="line.36"></a>
<span class="sourceLineNo">037</span><a name="line.37"></a>
<span class="sourceLineNo">038</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.39"></a>
<span class="sourceLineNo">040</span> private final CommandManager manager;<a name="line.40"></a>
<span class="sourceLineNo">041</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span> public CommandCompletions(CommandManager manager) {<a name="line.44"></a>
<span class="sourceLineNo">045</span> this.manager = manager;<a name="line.45"></a>
<span class="sourceLineNo">046</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.47"></a>
<span class="sourceLineNo">048</span> String config = c.getConfig();<a name="line.48"></a>
<span class="sourceLineNo">049</span> if (config == null) {<a name="line.49"></a>
<span class="sourceLineNo">050</span> return ImmutableList.of();<a name="line.50"></a>
<span class="sourceLineNo">051</span> }<a name="line.51"></a>
<span class="sourceLineNo">052</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.52"></a>
<span class="sourceLineNo">053</span> int start;<a name="line.53"></a>
<span class="sourceLineNo">054</span> int end;<a name="line.54"></a>
<span class="sourceLineNo">055</span> if (ranges.length != 2) {<a name="line.55"></a>
<span class="sourceLineNo">056</span> start = 0;<a name="line.56"></a>
<span class="sourceLineNo">057</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.57"></a>
<span class="sourceLineNo">058</span> } else {<a name="line.58"></a>
<span class="sourceLineNo">059</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.59"></a>
<span class="sourceLineNo">060</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> }<a name="line.61"></a>
<span class="sourceLineNo">062</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.62"></a>
<span class="sourceLineNo">063</span> });<a name="line.63"></a>
<span class="sourceLineNo">064</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.64"></a>
<span class="sourceLineNo">065</span> }<a name="line.65"></a>
<span class="sourceLineNo">066</span><a name="line.66"></a>
<span class="sourceLineNo">067</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.67"></a>
<span class="sourceLineNo">068</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.68"></a>
<span class="sourceLineNo">069</span> }<a name="line.69"></a>
<span class="sourceLineNo">070</span><a name="line.70"></a>
<span class="sourceLineNo">071</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.71"></a>
<span class="sourceLineNo">072</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.72"></a>
<span class="sourceLineNo">073</span> }<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span> /**<a name="line.75"></a>
<span class="sourceLineNo">076</span> * @deprecated Feature Not done yet<a name="line.76"></a>
<span class="sourceLineNo">077</span> * @param id<a name="line.77"></a>
<span class="sourceLineNo">078</span> * @param classes<a name="line.78"></a>
<span class="sourceLineNo">079</span> * @return<a name="line.79"></a>
<span class="sourceLineNo">080</span> */<a name="line.80"></a>
<span class="sourceLineNo">081</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.81"></a>
<span class="sourceLineNo">082</span> // get completion with specified id<a name="line.82"></a>
<span class="sourceLineNo">083</span> id = id.toLowerCase();<a name="line.83"></a>
<span class="sourceLineNo">084</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.84"></a>
<span class="sourceLineNo">085</span><a name="line.85"></a>
<span class="sourceLineNo">086</span> if(completion == null) {<a name="line.86"></a>
<span class="sourceLineNo">087</span> // Throw something because no completion with specified id<a name="line.87"></a>
<span class="sourceLineNo">088</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.88"></a>
<span class="sourceLineNo">089</span> }<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span> for(Class clazz : classes) {<a name="line.91"></a>
<span class="sourceLineNo">092</span> defaultCompletions.put(clazz, id);<a name="line.92"></a>
<span class="sourceLineNo">093</span> }<a name="line.93"></a>
<span class="sourceLineNo">094</span><a name="line.94"></a>
<span class="sourceLineNo">095</span> return completion;<a name="line.95"></a>
<span class="sourceLineNo">038</span><a name="line.38"></a>
<span class="sourceLineNo">039</span>@SuppressWarnings({"WeakerAccess", "UnusedReturnValue"})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public class CommandCompletions &lt;C extends CommandCompletionContext&gt; {<a name="line.40"></a>
<span class="sourceLineNo">041</span> private final CommandManager manager;<a name="line.41"></a>
<span class="sourceLineNo">042</span> private Map&lt;String, CommandCompletionHandler&gt; completionMap = new HashMap&lt;&gt;();<a name="line.42"></a>
<span class="sourceLineNo">043</span> private Map&lt;Class, String&gt; defaultCompletions = new HashMap&lt;&gt;();<a name="line.43"></a>
<span class="sourceLineNo">044</span><a name="line.44"></a>
<span class="sourceLineNo">045</span> public CommandCompletions(CommandManager manager) {<a name="line.45"></a>
<span class="sourceLineNo">046</span> this.manager = manager;<a name="line.46"></a>
<span class="sourceLineNo">047</span> registerAsyncCompletion("nothing", c -&gt; ImmutableList.of());<a name="line.47"></a>
<span class="sourceLineNo">048</span> registerAsyncCompletion("range", (c) -&gt; {<a name="line.48"></a>
<span class="sourceLineNo">049</span> String config = c.getConfig();<a name="line.49"></a>
<span class="sourceLineNo">050</span> if (config == null) {<a name="line.50"></a>
<span class="sourceLineNo">051</span> return ImmutableList.of();<a name="line.51"></a>
<span class="sourceLineNo">052</span> }<a name="line.52"></a>
<span class="sourceLineNo">053</span> final String[] ranges = ACFPatterns.DASH.split(config);<a name="line.53"></a>
<span class="sourceLineNo">054</span> int start;<a name="line.54"></a>
<span class="sourceLineNo">055</span> int end;<a name="line.55"></a>
<span class="sourceLineNo">056</span> if (ranges.length != 2) {<a name="line.56"></a>
<span class="sourceLineNo">057</span> start = 0;<a name="line.57"></a>
<span class="sourceLineNo">058</span> end = ACFUtil.parseInt(ranges[0], 0);<a name="line.58"></a>
<span class="sourceLineNo">059</span> } else {<a name="line.59"></a>
<span class="sourceLineNo">060</span> start = ACFUtil.parseInt(ranges[0], 0);<a name="line.60"></a>
<span class="sourceLineNo">061</span> end = ACFUtil.parseInt(ranges[1], 0);<a name="line.61"></a>
<span class="sourceLineNo">062</span> }<a name="line.62"></a>
<span class="sourceLineNo">063</span> return IntStream.rangeClosed(start, end).mapToObj(Integer::toString).collect(Collectors.toList());<a name="line.63"></a>
<span class="sourceLineNo">064</span> });<a name="line.64"></a>
<span class="sourceLineNo">065</span> registerAsyncCompletion("timeunits", (c) -&gt; ImmutableList.of("minutes", "hours", "days", "weeks", "months", "years"));<a name="line.65"></a>
<span class="sourceLineNo">066</span> }<a name="line.66"></a>
<span class="sourceLineNo">067</span><a name="line.67"></a>
<span class="sourceLineNo">068</span> /**<a name="line.68"></a>
<span class="sourceLineNo">069</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.69"></a>
<span class="sourceLineNo">070</span> *<a name="line.70"></a>
<span class="sourceLineNo">071</span> * @param id<a name="line.71"></a>
<span class="sourceLineNo">072</span> * @param handler<a name="line.72"></a>
<span class="sourceLineNo">073</span> * @return<a name="line.73"></a>
<span class="sourceLineNo">074</span> */<a name="line.74"></a>
<span class="sourceLineNo">075</span> public CommandCompletionHandler registerCompletion(String id, CommandCompletionHandler&lt;C&gt; handler) {<a name="line.75"></a>
<span class="sourceLineNo">076</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.76"></a>
<span class="sourceLineNo">077</span> }<a name="line.77"></a>
<span class="sourceLineNo">078</span><a name="line.78"></a>
<span class="sourceLineNo">079</span> /**<a name="line.79"></a>
<span class="sourceLineNo">080</span> * Registr a completion handler to provide command completions based on the user input.<a name="line.80"></a>
<span class="sourceLineNo">081</span> * This handler is declared to be safe to be executed asynchronously.<a name="line.81"></a>
<span class="sourceLineNo">082</span> * &lt;p&gt;<a name="line.82"></a>
<span class="sourceLineNo">083</span> * Not all platforms support this, so if the platform does not support asynchronous execution,<a name="line.83"></a>
<span class="sourceLineNo">084</span> * your handler will be executed on the main thread.<a name="line.84"></a>
<span class="sourceLineNo">085</span> * &lt;p&gt;<a name="line.85"></a>
<span class="sourceLineNo">086</span> * Use this anytime your handler does not need to access state that is not considered thread safe.<a name="line.86"></a>
<span class="sourceLineNo">087</span> * &lt;p&gt;<a name="line.87"></a>
<span class="sourceLineNo">088</span> * Use context.isAsync() to determine if you are async or not.<a name="line.88"></a>
<span class="sourceLineNo">089</span> *<a name="line.89"></a>
<span class="sourceLineNo">090</span> * @param id<a name="line.90"></a>
<span class="sourceLineNo">091</span> * @param handler<a name="line.91"></a>
<span class="sourceLineNo">092</span> * @return<a name="line.92"></a>
<span class="sourceLineNo">093</span> */<a name="line.93"></a>
<span class="sourceLineNo">094</span> public CommandCompletionHandler registerAsyncCompletion(String id, AsyncCommandCompletionHandler&lt;C&gt; handler) {<a name="line.94"></a>
<span class="sourceLineNo">095</span> return this.completionMap.put("@" + id.toLowerCase(), handler);<a name="line.95"></a>
<span class="sourceLineNo">096</span> }<a name="line.96"></a>
<span class="sourceLineNo">097</span><a name="line.97"></a>
<span class="sourceLineNo">098</span> @NotNull<a name="line.98"></a>
<span class="sourceLineNo">099</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.99"></a>
<span class="sourceLineNo">100</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.100"></a>
<span class="sourceLineNo">101</span> final int argIndex = args.length - 1;<a name="line.101"></a>
<span class="sourceLineNo">102</span><a name="line.102"></a>
<span class="sourceLineNo">103</span> String input = args[argIndex];<a name="line.103"></a>
<span class="sourceLineNo">104</span><a name="line.104"></a>
<span class="sourceLineNo">105</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.105"></a>
<span class="sourceLineNo">106</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.106"></a>
<span class="sourceLineNo">107</span> completion = completions[completions.length - 1];<a name="line.107"></a>
<span class="sourceLineNo">108</span> }<a name="line.108"></a>
<span class="sourceLineNo">109</span> if (completion == null) {<a name="line.109"></a>
<span class="sourceLineNo">110</span> return ImmutableList.of(input);<a name="line.110"></a>
<span class="sourceLineNo">111</span> }<a name="line.111"></a>
<span class="sourceLineNo">112</span><a name="line.112"></a>
<span class="sourceLineNo">113</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.113"></a>
<span class="sourceLineNo">114</span> }<a name="line.114"></a>
<span class="sourceLineNo">115</span><a name="line.115"></a>
<span class="sourceLineNo">116</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.116"></a>
<span class="sourceLineNo">117</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.117"></a>
<span class="sourceLineNo">118</span><a name="line.118"></a>
<span class="sourceLineNo">119</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.119"></a>
<span class="sourceLineNo">120</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.120"></a>
<span class="sourceLineNo">121</span><a name="line.121"></a>
<span class="sourceLineNo">122</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.122"></a>
<span class="sourceLineNo">123</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.123"></a>
<span class="sourceLineNo">124</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.124"></a>
<span class="sourceLineNo">125</span> if (handler != null) {<a name="line.125"></a>
<span class="sourceLineNo">126</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.126"></a>
<span class="sourceLineNo">127</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.127"></a>
<span class="sourceLineNo">128</span> return null;<a name="line.128"></a>
<span class="sourceLineNo">129</span> }<a name="line.129"></a>
<span class="sourceLineNo">130</span> String config = complete.length == 1 ? null : complete[1];<a name="line.130"></a>
<span class="sourceLineNo">131</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.131"></a>
<span class="sourceLineNo">132</span><a name="line.132"></a>
<span class="sourceLineNo">133</span> try {<a name="line.133"></a>
<span class="sourceLineNo">134</span> //noinspection unchecked<a name="line.134"></a>
<span class="sourceLineNo">135</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.135"></a>
<span class="sourceLineNo">136</span> if (completions != null) {<a name="line.136"></a>
<span class="sourceLineNo">137</span> allCompletions.addAll(completions);<a name="line.137"></a>
<span class="sourceLineNo">138</span> continue;<a name="line.138"></a>
<span class="sourceLineNo">139</span> }<a name="line.139"></a>
<span class="sourceLineNo">140</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.140"></a>
<span class="sourceLineNo">141</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.141"></a>
<span class="sourceLineNo">142</span> throw new CommandCompletionTextLookupException();<a name="line.142"></a>
<span class="sourceLineNo">143</span> }<a name="line.143"></a>
<span class="sourceLineNo">144</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.144"></a>
<span class="sourceLineNo">145</span> // This should only happen if some other feedback error occured.<a name="line.145"></a>
<span class="sourceLineNo">146</span> } catch (Exception e) {<a name="line.146"></a>
<span class="sourceLineNo">147</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.147"></a>
<span class="sourceLineNo">148</span> }<a name="line.148"></a>
<span class="sourceLineNo">149</span> // Something went wrong in lookup, fall back to input<a name="line.149"></a>
<span class="sourceLineNo">150</span> return ImmutableList.of(input);<a name="line.150"></a>
<span class="sourceLineNo">151</span> } else {<a name="line.151"></a>
<span class="sourceLineNo">152</span> // Plaintext value<a name="line.152"></a>
<span class="sourceLineNo">153</span> allCompletions.add(value);<a name="line.153"></a>
<span class="sourceLineNo">154</span> }<a name="line.154"></a>
<span class="sourceLineNo">155</span> }<a name="line.155"></a>
<span class="sourceLineNo">156</span> return allCompletions;<a name="line.156"></a>
<span class="sourceLineNo">157</span> }<a name="line.157"></a>
<span class="sourceLineNo">158</span><a name="line.158"></a>
<span class="sourceLineNo">159</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.159"></a>
<span class="sourceLineNo">160</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.160"></a>
<span class="sourceLineNo">161</span> }<a name="line.161"></a>
<span class="sourceLineNo">162</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.162"></a>
<span class="sourceLineNo">163</span> public static class SyncCompletionRequired extends Exception {}<a name="line.163"></a>
<span class="sourceLineNo">164</span><a name="line.164"></a>
<span class="sourceLineNo">165</span>}<a name="line.165"></a>
<span class="sourceLineNo">098</span> /**<a name="line.98"></a>
<span class="sourceLineNo">099</span> * Register a static list of command completions that will never change.<a name="line.99"></a>
<span class="sourceLineNo">100</span> * Like @CommandCompletion, values are | (PIPE) separated.<a name="line.100"></a>
<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
<span class="sourceLineNo">102</span> * Example: foo|bar|baz<a name="line.102"></a>
<span class="sourceLineNo">103</span> *<a name="line.103"></a>
<span class="sourceLineNo">104</span> * @param id<a name="line.104"></a>
<span class="sourceLineNo">105</span> * @param list<a name="line.105"></a>
<span class="sourceLineNo">106</span> * @return<a name="line.106"></a>
<span class="sourceLineNo">107</span> */<a name="line.107"></a>
<span class="sourceLineNo">108</span> public CommandCompletionHandler registerStaticCompletion(String id, String list) {<a name="line.108"></a>
<span class="sourceLineNo">109</span> return registerStaticCompletion(id, ACFPatterns.PIPE.split(list));<a name="line.109"></a>
<span class="sourceLineNo">110</span> }<a name="line.110"></a>
<span class="sourceLineNo">111</span><a name="line.111"></a>
<span class="sourceLineNo">112</span> /**<a name="line.112"></a>
<span class="sourceLineNo">113</span> * Register a static list of command completions that will never change<a name="line.113"></a>
<span class="sourceLineNo">114</span> *<a name="line.114"></a>
<span class="sourceLineNo">115</span> * @param id<a name="line.115"></a>
<span class="sourceLineNo">116</span> * @param completions<a name="line.116"></a>
<span class="sourceLineNo">117</span> * @return<a name="line.117"></a>
<span class="sourceLineNo">118</span> */<a name="line.118"></a>
<span class="sourceLineNo">119</span> public CommandCompletionHandler registerStaticCompletion(String id, String[] completions) {<a name="line.119"></a>
<span class="sourceLineNo">120</span> return registerStaticCompletion(id, Lists.newArrayList(completions));<a name="line.120"></a>
<span class="sourceLineNo">121</span> }<a name="line.121"></a>
<span class="sourceLineNo">122</span><a name="line.122"></a>
<span class="sourceLineNo">123</span> /**<a name="line.123"></a>
<span class="sourceLineNo">124</span> * Register a static list of command completions that will never change. The list is obtained from the supplier<a name="line.124"></a>
<span class="sourceLineNo">125</span> * immediately as part of this method call.<a name="line.125"></a>
<span class="sourceLineNo">126</span> *<a name="line.126"></a>
<span class="sourceLineNo">127</span> * @param id<a name="line.127"></a>
<span class="sourceLineNo">128</span> * @param supplier<a name="line.128"></a>
<span class="sourceLineNo">129</span> * @return<a name="line.129"></a>
<span class="sourceLineNo">130</span> */<a name="line.130"></a>
<span class="sourceLineNo">131</span> public CommandCompletionHandler registerStaticCompletion(String id, Supplier&lt;List&lt;String&gt;&gt; supplier) {<a name="line.131"></a>
<span class="sourceLineNo">132</span> return registerStaticCompletion(id, supplier.get());<a name="line.132"></a>
<span class="sourceLineNo">133</span> }<a name="line.133"></a>
<span class="sourceLineNo">134</span><a name="line.134"></a>
<span class="sourceLineNo">135</span> /**<a name="line.135"></a>
<span class="sourceLineNo">136</span> * Register a static list of command completions that will never change<a name="line.136"></a>
<span class="sourceLineNo">137</span> *<a name="line.137"></a>
<span class="sourceLineNo">138</span> * @param id<a name="line.138"></a>
<span class="sourceLineNo">139</span> * @param completions<a name="line.139"></a>
<span class="sourceLineNo">140</span> * @return<a name="line.140"></a>
<span class="sourceLineNo">141</span> */<a name="line.141"></a>
<span class="sourceLineNo">142</span> public CommandCompletionHandler registerStaticCompletion(String id, List&lt;String&gt; completions) {<a name="line.142"></a>
<span class="sourceLineNo">143</span> return registerAsyncCompletion(id, x -&gt; completions);<a name="line.143"></a>
<span class="sourceLineNo">144</span> }<a name="line.144"></a>
<span class="sourceLineNo">145</span><a name="line.145"></a>
<span class="sourceLineNo">146</span> /**<a name="line.146"></a>
<span class="sourceLineNo">147</span> * @deprecated Feature Not done yet<a name="line.147"></a>
<span class="sourceLineNo">148</span> * @param id<a name="line.148"></a>
<span class="sourceLineNo">149</span> * @param classes<a name="line.149"></a>
<span class="sourceLineNo">150</span> * @return<a name="line.150"></a>
<span class="sourceLineNo">151</span> */<a name="line.151"></a>
<span class="sourceLineNo">152</span> CommandCompletionHandler setDefaultCompletion(String id, Class... classes) {<a name="line.152"></a>
<span class="sourceLineNo">153</span> // get completion with specified id<a name="line.153"></a>
<span class="sourceLineNo">154</span> id = id.toLowerCase();<a name="line.154"></a>
<span class="sourceLineNo">155</span> CommandCompletionHandler completion = completionMap.get(id);<a name="line.155"></a>
<span class="sourceLineNo">156</span><a name="line.156"></a>
<span class="sourceLineNo">157</span> if(completion == null) {<a name="line.157"></a>
<span class="sourceLineNo">158</span> // Throw something because no completion with specified id<a name="line.158"></a>
<span class="sourceLineNo">159</span> ACFUtil.sneaky(new CommandCompletionTextLookupException());<a name="line.159"></a>
<span class="sourceLineNo">160</span> }<a name="line.160"></a>
<span class="sourceLineNo">161</span><a name="line.161"></a>
<span class="sourceLineNo">162</span> for(Class clazz : classes) {<a name="line.162"></a>
<span class="sourceLineNo">163</span> defaultCompletions.put(clazz, id);<a name="line.163"></a>
<span class="sourceLineNo">164</span> }<a name="line.164"></a>
<span class="sourceLineNo">165</span><a name="line.165"></a>
<span class="sourceLineNo">166</span> return completion;<a name="line.166"></a>
<span class="sourceLineNo">167</span> }<a name="line.167"></a>
<span class="sourceLineNo">168</span><a name="line.168"></a>
<span class="sourceLineNo">169</span> @NotNull<a name="line.169"></a>
<span class="sourceLineNo">170</span> List&lt;String&gt; of(RegisteredCommand cmd, CommandIssuer sender, String[] args, boolean isAsync) {<a name="line.170"></a>
<span class="sourceLineNo">171</span> String[] completions = ACFPatterns.SPACE.split(cmd.complete);<a name="line.171"></a>
<span class="sourceLineNo">172</span> final int argIndex = args.length - 1;<a name="line.172"></a>
<span class="sourceLineNo">173</span><a name="line.173"></a>
<span class="sourceLineNo">174</span> String input = args[argIndex];<a name="line.174"></a>
<span class="sourceLineNo">175</span><a name="line.175"></a>
<span class="sourceLineNo">176</span> String completion = argIndex &lt; completions.length ? completions[argIndex] : null;<a name="line.176"></a>
<span class="sourceLineNo">177</span> if (completion == null &amp;&amp; completions.length &gt; 0) {<a name="line.177"></a>
<span class="sourceLineNo">178</span> completion = completions[completions.length - 1];<a name="line.178"></a>
<span class="sourceLineNo">179</span> }<a name="line.179"></a>
<span class="sourceLineNo">180</span> if (completion == null) {<a name="line.180"></a>
<span class="sourceLineNo">181</span> return ImmutableList.of(input);<a name="line.181"></a>
<span class="sourceLineNo">182</span> }<a name="line.182"></a>
<span class="sourceLineNo">183</span><a name="line.183"></a>
<span class="sourceLineNo">184</span> return getCompletionValues(cmd, sender, completion, args, isAsync);<a name="line.184"></a>
<span class="sourceLineNo">185</span> }<a name="line.185"></a>
<span class="sourceLineNo">186</span><a name="line.186"></a>
<span class="sourceLineNo">187</span> List&lt;String&gt; getCompletionValues(RegisteredCommand command, CommandIssuer sender, String completion, String[] args, boolean isAsync) {<a name="line.187"></a>
<span class="sourceLineNo">188</span> completion = manager.getCommandReplacements().replace(completion);<a name="line.188"></a>
<span class="sourceLineNo">189</span><a name="line.189"></a>
<span class="sourceLineNo">190</span> List&lt;String&gt; allCompletions = Lists.newArrayList();<a name="line.190"></a>
<span class="sourceLineNo">191</span> String input = args.length &gt; 0 ? args[args.length - 1] : "";<a name="line.191"></a>
<span class="sourceLineNo">192</span><a name="line.192"></a>
<span class="sourceLineNo">193</span> for (String value : ACFPatterns.PIPE.split(completion)) {<a name="line.193"></a>
<span class="sourceLineNo">194</span> String[] complete = ACFPatterns.COLONEQUALS.split(value, 2);<a name="line.194"></a>
<span class="sourceLineNo">195</span> CommandCompletionHandler handler = this.completionMap.get(complete[0].toLowerCase());<a name="line.195"></a>
<span class="sourceLineNo">196</span> if (handler != null) {<a name="line.196"></a>
<span class="sourceLineNo">197</span> if (isAsync &amp;&amp; !(handler instanceof AsyncCommandCompletionHandler)) {<a name="line.197"></a>
<span class="sourceLineNo">198</span> ACFUtil.sneaky(new SyncCompletionRequired());<a name="line.198"></a>
<span class="sourceLineNo">199</span> return null;<a name="line.199"></a>
<span class="sourceLineNo">200</span> }<a name="line.200"></a>
<span class="sourceLineNo">201</span> String config = complete.length == 1 ? null : complete[1];<a name="line.201"></a>
<span class="sourceLineNo">202</span> CommandCompletionContext context = manager.createCompletionContext(command, sender, input, config, args);<a name="line.202"></a>
<span class="sourceLineNo">203</span><a name="line.203"></a>
<span class="sourceLineNo">204</span> try {<a name="line.204"></a>
<span class="sourceLineNo">205</span> //noinspection unchecked<a name="line.205"></a>
<span class="sourceLineNo">206</span> Collection&lt;String&gt; completions = handler.getCompletions(context);<a name="line.206"></a>
<span class="sourceLineNo">207</span> if (completions != null) {<a name="line.207"></a>
<span class="sourceLineNo">208</span> allCompletions.addAll(completions);<a name="line.208"></a>
<span class="sourceLineNo">209</span> continue;<a name="line.209"></a>
<span class="sourceLineNo">210</span> }<a name="line.210"></a>
<span class="sourceLineNo">211</span> //noinspection ConstantIfStatement,ConstantConditions<a name="line.211"></a>
<span class="sourceLineNo">212</span> if (false) { // Hack to fool compiler. since its sneakily thrown.<a name="line.212"></a>
<span class="sourceLineNo">213</span> throw new CommandCompletionTextLookupException();<a name="line.213"></a>
<span class="sourceLineNo">214</span> }<a name="line.214"></a>
<span class="sourceLineNo">215</span> } catch (CommandCompletionTextLookupException ignored) {<a name="line.215"></a>
<span class="sourceLineNo">216</span> // This should only happen if some other feedback error occured.<a name="line.216"></a>
<span class="sourceLineNo">217</span> } catch (Exception e) {<a name="line.217"></a>
<span class="sourceLineNo">218</span> command.handleException(sender, Lists.newArrayList(args), e);<a name="line.218"></a>
<span class="sourceLineNo">219</span> }<a name="line.219"></a>
<span class="sourceLineNo">220</span> // Something went wrong in lookup, fall back to input<a name="line.220"></a>
<span class="sourceLineNo">221</span> return ImmutableList.of(input);<a name="line.221"></a>
<span class="sourceLineNo">222</span> } else {<a name="line.222"></a>
<span class="sourceLineNo">223</span> // Plaintext value<a name="line.223"></a>
<span class="sourceLineNo">224</span> allCompletions.add(value);<a name="line.224"></a>
<span class="sourceLineNo">225</span> }<a name="line.225"></a>
<span class="sourceLineNo">226</span> }<a name="line.226"></a>
<span class="sourceLineNo">227</span> return allCompletions;<a name="line.227"></a>
<span class="sourceLineNo">228</span> }<a name="line.228"></a>
<span class="sourceLineNo">229</span><a name="line.229"></a>
<span class="sourceLineNo">230</span> public interface CommandCompletionHandler &lt;C extends CommandCompletionContext&gt; {<a name="line.230"></a>
<span class="sourceLineNo">231</span> Collection&lt;String&gt; getCompletions(C context) throws InvalidCommandArgument;<a name="line.231"></a>
<span class="sourceLineNo">232</span> }<a name="line.232"></a>
<span class="sourceLineNo">233</span> public interface AsyncCommandCompletionHandler &lt;C extends CommandCompletionContext&gt; extends CommandCompletionHandler &lt;C&gt; {}<a name="line.233"></a>
<span class="sourceLineNo">234</span> public static class SyncCompletionRequired extends Exception {}<a name="line.234"></a>
<span class="sourceLineNo">235</span><a name="line.235"></a>
<span class="sourceLineNo">236</span>}<a name="line.236"></a>
@@ -36,10 +36,19 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface CatchUnknown {<a name="line.33"></a>
<span class="sourceLineNo">034</span>}<a name="line.34"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Defines a method that should receive any unknown command for the related root command.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * For example, if a BaseCommand /foo has a method with this, and /foo someunknowncommand is used<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> * If a method is tagged with this annotation, it will catch unknown commands and let you react to them.<a name="line.36"></a>
<span class="sourceLineNo">037</span> *<a name="line.37"></a>
<span class="sourceLineNo">038</span> * Only one instance of this annotation can be used per root command.<a name="line.38"></a>
<span class="sourceLineNo">039</span> */<a name="line.39"></a>
<span class="sourceLineNo">040</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.40"></a>
<span class="sourceLineNo">041</span>@Target({ElementType.METHOD})<a name="line.41"></a>
<span class="sourceLineNo">042</span>public @interface CatchUnknown {<a name="line.42"></a>
<span class="sourceLineNo">043</span>}<a name="line.43"></a>
@@ -36,11 +36,19 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface CommandAlias {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Allows to add a single or several command alias(es).<a name="line.32"></a>
<span class="sourceLineNo">033</span> * In order to add more than one in a single go, use the syntax "alias|otheralias".<a name="line.33"></a>
<span class="sourceLineNo">034</span> * You can register as many aliases as wanted in a single value.<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> * Used on a Class, defines the root command for all subcommands in the base command.<a name="line.36"></a>
<span class="sourceLineNo">037</span> * Used on a method, defines a root command alias to that specific command<a name="line.37"></a>
<span class="sourceLineNo">038</span> */<a name="line.38"></a>
<span class="sourceLineNo">039</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.39"></a>
<span class="sourceLineNo">040</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.40"></a>
<span class="sourceLineNo">041</span>public @interface CommandAlias {<a name="line.41"></a>
<span class="sourceLineNo">042</span> String value();<a name="line.42"></a>
<span class="sourceLineNo">043</span>}<a name="line.43"></a>
@@ -36,11 +36,21 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface CommandCompletion {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Many implementation platforms have a concept of "Tab Completions",<a name="line.32"></a>
<span class="sourceLineNo">033</span> * where pressing tab will give suggestions on what you can input.<a name="line.33"></a>
<span class="sourceLineNo">034</span> *<a name="line.34"></a>
<span class="sourceLineNo">035</span> * This annotation specifies either static completion values,<a name="line.35"></a>
<span class="sourceLineNo">036</span> * or special @codes that let you define Completion Handlers to dynamically<a name="line.36"></a>
<span class="sourceLineNo">037</span> * populate completion values.<a name="line.37"></a>
<span class="sourceLineNo">038</span> *<a name="line.38"></a>
<span class="sourceLineNo">039</span> * @see {@link co.aikar.commands.CommandCompletions}<a name="line.39"></a>
<span class="sourceLineNo">040</span> */<a name="line.40"></a>
<span class="sourceLineNo">041</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.41"></a>
<span class="sourceLineNo">042</span>@Target({ElementType.METHOD})<a name="line.42"></a>
<span class="sourceLineNo">043</span>public @interface CommandCompletion {<a name="line.43"></a>
<span class="sourceLineNo">044</span> String value();<a name="line.44"></a>
<span class="sourceLineNo">045</span>}<a name="line.45"></a>
@@ -36,11 +36,16 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface CommandPermission {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Sets the permission required to perform this command.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * Permission format will vary based on implementation platform<a name="line.34"></a>
<span class="sourceLineNo">035</span> */<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.36"></a>
<span class="sourceLineNo">037</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.37"></a>
<span class="sourceLineNo">038</span>public @interface CommandPermission {<a name="line.38"></a>
<span class="sourceLineNo">039</span> String value();<a name="line.39"></a>
<span class="sourceLineNo">040</span>}<a name="line.40"></a>
@@ -36,11 +36,19 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Conditions {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Specifies conditions that must be met in order to execute this command.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * If used on a method or a class, will be checked before parameter context is resolved<a name="line.34"></a>
<span class="sourceLineNo">035</span> * If used on a parameter, will be checked after the context is resolved<a name="line.35"></a>
<span class="sourceLineNo">036</span> *<a name="line.36"></a>
<span class="sourceLineNo">037</span> * @see {@link co.aikar.commands.CommandConditions}<a name="line.37"></a>
<span class="sourceLineNo">038</span> */<a name="line.38"></a>
<span class="sourceLineNo">039</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.39"></a>
<span class="sourceLineNo">040</span>@Target({ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE})<a name="line.40"></a>
<span class="sourceLineNo">041</span>public @interface Conditions {<a name="line.41"></a>
<span class="sourceLineNo">042</span> String value();<a name="line.42"></a>
<span class="sourceLineNo">043</span>}<a name="line.43"></a>
@@ -36,11 +36,15 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Default {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value() default "";<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * If used on a method, sets default command handler for the root command of this group<a name="line.32"></a>
<span class="sourceLineNo">033</span> * If used on a parameter, sets the value to be used for context resolution<a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.36"></a>
<span class="sourceLineNo">037</span>public @interface Default {<a name="line.37"></a>
<span class="sourceLineNo">038</span> String value() default "";<a name="line.38"></a>
<span class="sourceLineNo">039</span>}<a name="line.39"></a>
@@ -36,15 +36,19 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target(ElementType.FIELD)<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Dependency {<a name="line.33"></a>
<span class="sourceLineNo">034</span> /**<a name="line.34"></a>
<span class="sourceLineNo">035</span> * The key that should be used to lookup the instances, defaults to \"\"<a name="line.35"></a>
<span class="sourceLineNo">036</span> * @return the key<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span> String value() default "";<a name="line.38"></a>
<span class="sourceLineNo">039</span>}<a name="line.39"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Injects a dependency into the field this is attached to.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * Any time a new dependency is registered, this will be overwritten.<a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Target(ElementType.FIELD)<a name="line.36"></a>
<span class="sourceLineNo">037</span>public @interface Dependency {<a name="line.37"></a>
<span class="sourceLineNo">038</span> /**<a name="line.38"></a>
<span class="sourceLineNo">039</span> * The key that should be used to lookup the instances, defaults to \"\"<a name="line.39"></a>
<span class="sourceLineNo">040</span> * @return the key<a name="line.40"></a>
<span class="sourceLineNo">041</span> */<a name="line.41"></a>
<span class="sourceLineNo">042</span> String value() default "";<a name="line.42"></a>
<span class="sourceLineNo">043</span>}<a name="line.43"></a>
@@ -36,11 +36,15 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Description {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Sets a description to the parameter or method this is attached to.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * This is used in the help menus.<a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.36"></a>
<span class="sourceLineNo">037</span>public @interface Description {<a name="line.37"></a>
<span class="sourceLineNo">038</span> String value();<a name="line.38"></a>
<span class="sourceLineNo">039</span>}<a name="line.39"></a>
@@ -36,11 +36,18 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Flags {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Provides configuration options for {@link co.aikar.commands.contexts.ContextResolver}'s to change how they resolve context.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * Example: Searching for a player, you might use @Flags("loose") to indicate a fuzzy match instead of an exact match.<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> * If you want to restrict if an issuer can use the command, please use {@link co.aikar.commands.CommandConditions.Condition} instead.<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.38"></a>
<span class="sourceLineNo">039</span>@Target({ElementType.PARAMETER})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public @interface Flags {<a name="line.40"></a>
<span class="sourceLineNo">041</span> String value();<a name="line.41"></a>
<span class="sourceLineNo">042</span>}<a name="line.42"></a>
@@ -36,11 +36,21 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface HelpCommand {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value() default "help|?|-help|-h|-?";<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * A Shortcut for specifying {@link CatchUnknown}, {@link Default} and {@link Subcommand} on a method.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * Subcommand carries the same value as this annotations value to define the list of subcommands to register for.<a name="line.33"></a>
<span class="sourceLineNo">034</span> *<a name="line.34"></a>
<span class="sourceLineNo">035</span> * a method marked with this annotation should also use a {@link co.aikar.commands.CommandHelp} context parameter to show help.<a name="line.35"></a>
<span class="sourceLineNo">036</span> */<a name="line.36"></a>
<span class="sourceLineNo">037</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.37"></a>
<span class="sourceLineNo">038</span>@Target({ElementType.METHOD})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public @interface HelpCommand {<a name="line.39"></a>
<span class="sourceLineNo">040</span> /**<a name="line.40"></a>
<span class="sourceLineNo">041</span> * The value to forward to the @Subcommand annotation. Lists which subcommands to register to trigger help<a name="line.41"></a>
<span class="sourceLineNo">042</span> * @return<a name="line.42"></a>
<span class="sourceLineNo">043</span> */<a name="line.43"></a>
<span class="sourceLineNo">044</span> String value() default "help|?|-help|-h|-?";<a name="line.44"></a>
<span class="sourceLineNo">045</span>}<a name="line.45"></a>
@@ -36,11 +36,17 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface HelpSearchTags {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Defines additional keywords to feed into the search help system.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * For example, if a specific word doesn't make sense to use in the command name or description, but should<a name="line.34"></a>
<span class="sourceLineNo">035</span> * be used for help in discovering the correct command, then you can add it as a tag.<a name="line.35"></a>
<span class="sourceLineNo">036</span> */<a name="line.36"></a>
<span class="sourceLineNo">037</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.37"></a>
<span class="sourceLineNo">038</span>@Target({ElementType.METHOD})<a name="line.38"></a>
<span class="sourceLineNo">039</span>public @interface HelpSearchTags {<a name="line.39"></a>
<span class="sourceLineNo">040</span> String value();<a name="line.40"></a>
<span class="sourceLineNo">041</span>}<a name="line.41"></a>
@@ -36,10 +36,17 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Optional {<a name="line.33"></a>
<span class="sourceLineNo">034</span>}<a name="line.34"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Marks the parameter this is attached to as optional.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * This will set the parameter as null if it was not provided.<a name="line.33"></a>
<span class="sourceLineNo">034</span> * &lt;p&gt;<a name="line.34"></a>
<span class="sourceLineNo">035</span> * In the case the language used is Kotlin, Ceylon or any other null-enforcing JVM language,<a name="line.35"></a>
<span class="sourceLineNo">036</span> * you will need to allow for a nullable value.<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.38"></a>
<span class="sourceLineNo">039</span>@Target({ElementType.PARAMETER})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public @interface Optional {<a name="line.40"></a>
<span class="sourceLineNo">041</span>}<a name="line.41"></a>
@@ -37,9 +37,12 @@
<span class="sourceLineNo">029</span>import java.lang.annotation.RetentionPolicy;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.lang.annotation.Target;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.32"></a>
<span class="sourceLineNo">033</span>@Target({ElementType.METHOD})<a name="line.33"></a>
<span class="sourceLineNo">034</span>public @interface PreCommand {}<a name="line.34"></a>
<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
<span class="sourceLineNo">033</span> * This runs before any other command method each time it is invoked.<a name="line.33"></a>
<span class="sourceLineNo">034</span> */<a name="line.34"></a>
<span class="sourceLineNo">035</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Target({ElementType.METHOD})<a name="line.36"></a>
<span class="sourceLineNo">037</span>public @interface PreCommand {}<a name="line.37"></a>
@@ -37,12 +37,11 @@
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Don't join remaining arguments<a name="line.32"></a>
<span class="sourceLineNo">032</span> * Don't join remaining arguments. Used on String parameters, which normally would combine the remaining arguments<a name="line.32"></a>
<span class="sourceLineNo">033</span> */<a name="line.33"></a>
<span class="sourceLineNo">034</span><a name="line.34"></a>
<span class="sourceLineNo">035</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Target({ElementType.PARAMETER})<a name="line.36"></a>
<span class="sourceLineNo">037</span>public @interface Single {}<a name="line.37"></a>
<span class="sourceLineNo">034</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.34"></a>
<span class="sourceLineNo">035</span>@Target({ElementType.PARAMETER})<a name="line.35"></a>
<span class="sourceLineNo">036</span>public @interface Single {}<a name="line.36"></a>
@@ -37,11 +37,15 @@
<span class="sourceLineNo">029</span>import java.lang.annotation.RetentionPolicy;<a name="line.29"></a>
<span class="sourceLineNo">030</span>import java.lang.annotation.Target;<a name="line.30"></a>
<span class="sourceLineNo">031</span><a name="line.31"></a>
<span class="sourceLineNo">032</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.32"></a>
<span class="sourceLineNo">033</span>@Target({ElementType.PARAMETER})<a name="line.33"></a>
<span class="sourceLineNo">034</span>public @interface Split {<a name="line.34"></a>
<span class="sourceLineNo">035</span> String value() default ",";<a name="line.35"></a>
<span class="sourceLineNo">036</span>}<a name="line.36"></a>
<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
<span class="sourceLineNo">033</span> * Joins arguments into a single piece of text with the specified separator.<a name="line.33"></a>
<span class="sourceLineNo">034</span> * For array based parameters, defines the regex pattern to split on<a name="line.34"></a>
<span class="sourceLineNo">035</span> */<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.36"></a>
<span class="sourceLineNo">037</span>@Target({ElementType.PARAMETER})<a name="line.37"></a>
<span class="sourceLineNo">038</span>public @interface Split {<a name="line.38"></a>
<span class="sourceLineNo">039</span> String value() default ",";<a name="line.39"></a>
<span class="sourceLineNo">040</span>}<a name="line.40"></a>
@@ -36,11 +36,18 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Subcommand {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Defines the subcommand that can be used to execute this command.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * This is appended onto the root command for the command group,<a name="line.33"></a>
<span class="sourceLineNo">034</span> * as well as any parent command groups subcommand base.<a name="line.34"></a>
<span class="sourceLineNo">035</span> *<a name="line.35"></a>
<span class="sourceLineNo">036</span> * Defines the part after root command like so: "/rootcommand {@link #value()}".<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.38"></a>
<span class="sourceLineNo">039</span>@Target({ElementType.METHOD, ElementType.TYPE})<a name="line.39"></a>
<span class="sourceLineNo">040</span>public @interface Subcommand {<a name="line.40"></a>
<span class="sourceLineNo">041</span> String value();<a name="line.41"></a>
<span class="sourceLineNo">042</span>}<a name="line.42"></a>
@@ -36,12 +36,21 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Syntax {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">036</span><a name="line.36"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Specifies the syntax to be used when executing this command.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * It should not include any descriptions of the arguments nor when some are allowed and when they are not.<a name="line.33"></a>
<span class="sourceLineNo">034</span> *<a name="line.34"></a>
<span class="sourceLineNo">035</span> * Use of this annotation is not necessary. Syntax will be automatically generated for you.<a name="line.35"></a>
<span class="sourceLineNo">036</span> * Use this annotation to override automatic syntax<a name="line.36"></a>
<span class="sourceLineNo">037</span> *<a name="line.37"></a>
<span class="sourceLineNo">038</span> * Use {@link Description} together with the help menu for that purpose.<a name="line.38"></a>
<span class="sourceLineNo">039</span> **/<a name="line.39"></a>
<span class="sourceLineNo">040</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.40"></a>
<span class="sourceLineNo">041</span>@Target({ElementType.METHOD, ElementType.PARAMETER})<a name="line.41"></a>
<span class="sourceLineNo">042</span>public @interface Syntax {<a name="line.42"></a>
<span class="sourceLineNo">043</span> String value();<a name="line.43"></a>
<span class="sourceLineNo">044</span>}<a name="line.44"></a>
<span class="sourceLineNo">045</span><a name="line.45"></a>
@@ -36,11 +36,16 @@
<span class="sourceLineNo">028</span>import java.lang.annotation.RetentionPolicy;<a name="line.28"></a>
<span class="sourceLineNo">029</span>import java.lang.annotation.Target;<a name="line.29"></a>
<span class="sourceLineNo">030</span><a name="line.30"></a>
<span class="sourceLineNo">031</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.31"></a>
<span class="sourceLineNo">032</span>@Target({ElementType.PARAMETER})<a name="line.32"></a>
<span class="sourceLineNo">033</span>public @interface Values {<a name="line.33"></a>
<span class="sourceLineNo">034</span> String value();<a name="line.34"></a>
<span class="sourceLineNo">035</span>}<a name="line.35"></a>
<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
<span class="sourceLineNo">032</span> * Specifies a list of values that the command input should be validated against, or else show an error.<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * You may also use {@link CommandCompletion} handler codes here to feed dynamic values and avoid repetition.<a name="line.34"></a>
<span class="sourceLineNo">035</span> */<a name="line.35"></a>
<span class="sourceLineNo">036</span>@Retention(RetentionPolicy.RUNTIME)<a name="line.36"></a>
<span class="sourceLineNo">037</span>@Target({ElementType.PARAMETER})<a name="line.37"></a>
<span class="sourceLineNo">038</span>public @interface Values {<a name="line.38"></a>
<span class="sourceLineNo">039</span> String value();<a name="line.39"></a>
<span class="sourceLineNo">040</span>}<a name="line.40"></a>
@@ -35,10 +35,29 @@
<span class="sourceLineNo">027</span>import co.aikar.commands.CommandIssuer;<a name="line.27"></a>
<span class="sourceLineNo">028</span>import co.aikar.commands.InvalidCommandArgument;<a name="line.28"></a>
<span class="sourceLineNo">029</span><a name="line.29"></a>
<span class="sourceLineNo">030</span>@FunctionalInterface<a name="line.30"></a>
<span class="sourceLineNo">031</span>public interface ContextResolver &lt;T, C extends CommandExecutionContext&lt;?, ? extends CommandIssuer&gt;&gt; {<a name="line.31"></a>
<span class="sourceLineNo">032</span> T getContext(C c) throws InvalidCommandArgument;<a name="line.32"></a>
<span class="sourceLineNo">033</span>}<a name="line.33"></a>
<span class="sourceLineNo">030</span>/**<a name="line.30"></a>
<span class="sourceLineNo">031</span> * This defines a context resolver, which parses {@link T} from {@link C}.<a name="line.31"></a>
<span class="sourceLineNo">032</span> *<a name="line.32"></a>
<span class="sourceLineNo">033</span> * @param &lt;T&gt;<a name="line.33"></a>
<span class="sourceLineNo">034</span> * The type to be parsed.<a name="line.34"></a>
<span class="sourceLineNo">035</span> * @param &lt;C&gt;<a name="line.35"></a>
<span class="sourceLineNo">036</span> * The type of the context which the resolver would get its data from.<a name="line.36"></a>
<span class="sourceLineNo">037</span> */<a name="line.37"></a>
<span class="sourceLineNo">038</span>@FunctionalInterface<a name="line.38"></a>
<span class="sourceLineNo">039</span>public interface ContextResolver &lt;T, C extends CommandExecutionContext&lt;?, ? extends CommandIssuer&gt;&gt; {<a name="line.39"></a>
<span class="sourceLineNo">040</span> /**<a name="line.40"></a>
<span class="sourceLineNo">041</span> * Parses the context of type {@link C} into {@link T}, or throws an exception.<a name="line.41"></a>
<span class="sourceLineNo">042</span> *<a name="line.42"></a>
<span class="sourceLineNo">043</span> * @param c<a name="line.43"></a>
<span class="sourceLineNo">044</span> * The context to parse from.<a name="line.44"></a>
<span class="sourceLineNo">045</span> *<a name="line.45"></a>
<span class="sourceLineNo">046</span> * @return The parsed instance of the wanted type.<a name="line.46"></a>
<span class="sourceLineNo">047</span> *<a name="line.47"></a>
<span class="sourceLineNo">048</span> * @throws InvalidCommandArgument<a name="line.48"></a>
<span class="sourceLineNo">049</span> * In case the context contains any discrepancies, it will throw this exception.<a name="line.49"></a>
<span class="sourceLineNo">050</span> */<a name="line.50"></a>
<span class="sourceLineNo">051</span> T getContext(C c) throws InvalidCommandArgument;<a name="line.51"></a>
<span class="sourceLineNo">052</span>}<a name="line.52"></a>
@@ -35,9 +35,14 @@
<span class="sourceLineNo">027</span>import co.aikar.commands.CommandIssuer;<a name="line.27"></a>
<span class="sourceLineNo">028</span><a name="line.28"></a>
<span class="sourceLineNo">029</span>/**<a name="line.29"></a>
<span class="sourceLineNo">030</span> * Context Resolver that can accept null input<a name="line.30"></a>
<span class="sourceLineNo">031</span> */<a name="line.31"></a>
<span class="sourceLineNo">032</span>public interface OptionalContextResolver &lt;T, C extends CommandExecutionContext&lt;?, ? extends CommandIssuer&gt;&gt; extends ContextResolver &lt;T, C&gt; {}<a name="line.32"></a>
<span class="sourceLineNo">030</span> * The same as {@link ContextResolver}, however it can accept a null context.<a name="line.30"></a>
<span class="sourceLineNo">031</span> *<a name="line.31"></a>
<span class="sourceLineNo">032</span> * If the parameter was marked optional, will still be called with an empty args list<a name="line.32"></a>
<span class="sourceLineNo">033</span> *<a name="line.33"></a>
<span class="sourceLineNo">034</span> * @param &lt;T&gt;<a name="line.34"></a>
<span class="sourceLineNo">035</span> * @param &lt;C&gt;<a name="line.35"></a>
<span class="sourceLineNo">036</span> */<a name="line.36"></a>
<span class="sourceLineNo">037</span>public interface OptionalContextResolver &lt;T, C extends CommandExecutionContext&lt;?, ? extends CommandIssuer&gt;&gt; extends ContextResolver &lt;T, C&gt; {}<a name="line.37"></a>
@@ -177,6 +177,13 @@ extends co.aikar.commands.CommandCompletions&lt;co.aikar.commands.CommandComplet
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.co.aikar.commands.CommandCompletions">
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;co.aikar.commands.CommandCompletions</h3>
<code>registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
@@ -162,7 +162,7 @@ extends co.aikar.commands.BukkitCommandCompletions</pre>
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;co.aikar.commands.CommandCompletions</h3>
<code>registerAsyncCompletion, registerCompletion</code></li>
<code>registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -158,7 +158,7 @@ extends co.aikar.commands.CommandCompletions&lt;<a href="../../../co/aikar/comma
<!-- -->
</a>
<h3>Methods inherited from class&nbsp;co.aikar.commands.CommandCompletions</h3>
<code>registerAsyncCompletion, registerCompletion</code></li>
<code>registerAsyncCompletion, registerCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion, registerStaticCompletion</code></li>
</ul>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">