5
5
6
6
import com .mojang .brigadier .AmbiguityConsumer ;
7
7
import com .mojang .brigadier .Command ;
8
+ import com .mojang .brigadier .ParseResults ;
8
9
import com .mojang .brigadier .RedirectModifier ;
9
10
import com .mojang .brigadier .StringReader ;
10
11
import com .mojang .brigadier .builder .ArgumentBuilder ;
@@ -28,6 +29,7 @@ public abstract class CommandNode<S> implements Comparable<CommandNode<S>> {
28
29
private final Map <String , LiteralCommandNode <S >> literals = new LinkedHashMap <>();
29
30
private final Map <String , ArgumentCommandNode <S , ?>> arguments = new LinkedHashMap <>();
30
31
private final Predicate <S > requirement ;
32
+ private final Predicate <ParseResults <S >> contextRequirement ;
31
33
private final CommandNode <S > redirect ;
32
34
private final RedirectModifier <S > modifier ;
33
35
private final boolean forks ;
@@ -36,6 +38,16 @@ public abstract class CommandNode<S> implements Comparable<CommandNode<S>> {
36
38
protected CommandNode (final Command <S > command , final Predicate <S > requirement , final CommandNode <S > redirect , final RedirectModifier <S > modifier , final boolean forks ) {
37
39
this .command = command ;
38
40
this .requirement = requirement ;
41
+ this .contextRequirement = parse -> true ;
42
+ this .redirect = redirect ;
43
+ this .modifier = modifier ;
44
+ this .forks = forks ;
45
+ }
46
+
47
+ protected CommandNode (final Command <S > command , final Predicate <S > requirement , final Predicate <ParseResults <S >> contextRequirement , final CommandNode <S > redirect , final RedirectModifier <S > modifier , final boolean forks ) {
48
+ this .command = command ;
49
+ this .requirement = requirement ;
50
+ this .contextRequirement = contextRequirement ;
39
51
this .redirect = redirect ;
40
52
this .modifier = modifier ;
41
53
this .forks = forks ;
@@ -65,6 +77,10 @@ public boolean canUse(final S source) {
65
77
return requirement .test (source );
66
78
}
67
79
80
+ public boolean canUse (final ParseResults <S > parse ) {
81
+ return contextRequirement .test (parse );
82
+ }
83
+
68
84
public void addChild (final CommandNode <S > node ) {
69
85
if (node instanceof RootCommandNode ) {
70
86
throw new UnsupportedOperationException ("Cannot add a RootCommandNode as a child to any other CommandNode" );
@@ -138,6 +154,10 @@ public Predicate<S> getRequirement() {
138
154
return requirement ;
139
155
}
140
156
157
+ public Predicate <ParseResults <S >> getContextRequirement () {
158
+ return contextRequirement ;
159
+ }
160
+
141
161
public abstract String getName ();
142
162
143
163
public abstract String getUsageText ();
0 commit comments