summaryrefslogtreecommitdiff
path: root/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
diff options
context:
space:
mode:
Diffstat (limited to 'dicore3/command/src/main/java/io/dico/dicore/command/Command.java')
-rw-r--r--dicore3/command/src/main/java/io/dico/dicore/command/Command.java28
1 files changed, 10 insertions, 18 deletions
diff --git a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
index e7c2e93..e423529 100644
--- a/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
+++ b/dicore3/command/src/main/java/io/dico/dicore/command/Command.java
@@ -91,18 +91,18 @@ public abstract class Command {
* ---- CONTEXT FILTERS ----
* Filter the contexts. For example, if the sender must be a player but it's the console,
* throw a CommandException describing the problem.
- * <p>
- * The index of the first element in contextFilters whose priority is POST_PARAMETERS
- * Computed by {@link #computeContextFilterPostParameterIndex()}
*/
- private transient int contextFilterPostParameterIndex;
+ private transient int postParameterFilterCount = 0;
public Command addContextFilter(IContextFilter contextFilter) {
Objects.requireNonNull(contextFilter);
if (!contextFilters.contains(contextFilter)) {
contextFilters.add(contextFilter);
contextFilters.sort(null);
- computeContextFilterPostParameterIndex();
+
+ if (contextFilter.getPriority().compareTo(Priority.POST_PARAMETERS) >= 0) {
+ postParameterFilterCount++;
+ }
}
return this;
}
@@ -114,19 +114,11 @@ public abstract class Command {
public Command removeContextFilter(IContextFilter contextFilter) {
boolean ret = contextFilters.remove(contextFilter);
if (ret) {
- computeContextFilterPostParameterIndex();
- }
- return this;
- }
-
- private void computeContextFilterPostParameterIndex() {
- List<IContextFilter> contextFilters = this.contextFilters;
- contextFilterPostParameterIndex = 0;
- for (int i = contextFilters.size() - 1; i >= 0; i--) {
- if (contextFilters.get(i).getPriority() != Priority.POST_PARAMETERS) {
- contextFilterPostParameterIndex = i + 1;
+ if (contextFilter.getPriority().compareTo(Priority.POST_PARAMETERS) >= 0) {
+ postParameterFilterCount--;
}
}
+ return this;
}
// ---- CONTROL FLOW IN COMMAND TREES ----
@@ -154,7 +146,7 @@ public abstract class Command {
public void executeWithContext(ExecutionContext context) throws CommandException {
//System.out.println("In Command.execute(sender, caller, buffer)#try{");
int i, n;
- for (i = 0, n = contextFilterPostParameterIndex; i < n; i++) {
+ for (i = 0, n = contextFilters.size() - postParameterFilterCount; i < n; i++) {
contextFilters.get(i).filterContext(context);
}
@@ -183,7 +175,7 @@ public abstract class Command {
public List<String> tabCompleteWithContext(ExecutionContext context, Location location) throws CommandException {
int i, n;
- for (i = 0, n = contextFilterPostParameterIndex; i < n; i++) {
+ for (i = 0, n = contextFilters.size() - postParameterFilterCount; i < n; i++) {
contextFilters.get(i).filterContext(context);
}