Skip to content

Commit 804e4f9

Browse files
committed
List support
1 parent a6c4baa commit 804e4f9

File tree

3 files changed

+64
-1
lines changed

3 files changed

+64
-1
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package com.mojang.brigadier.builder;
2+
3+
import com.mojang.brigadier.arguments.ArgumentType;
4+
import com.mojang.brigadier.tree.ArgumentCommandNode;
5+
import com.mojang.brigadier.tree.CommandNode;
6+
import com.mojang.brigadier.tree.ListCommandNode;
7+
8+
public class ListArgumentBuilder<S, T> extends RequiredArgumentBuilder<S, T> {
9+
protected ListArgumentBuilder(String name, ArgumentType<T> type) {
10+
super(name, type);
11+
}
12+
13+
public static <S, T> ListArgumentBuilder<S, T> list(final String name, final ArgumentType<T> type) {
14+
return new ListArgumentBuilder<>(name, type);
15+
}
16+
17+
public ArgumentCommandNode<S, T> build() {
18+
final ListCommandNode<S, T> result = new ListCommandNode<>(getName(), getType(), getCommand(), getRequirement(), getRedirect(), getRedirectModifier(), isFork(), getSuggestionsProvider());
19+
20+
for (final CommandNode<S> argument : getArguments()) {
21+
result.addChild(argument);
22+
}
23+
24+
return result;
25+
}
26+
}

src/main/java/com/mojang/brigadier/builder/RequiredArgumentBuilder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class RequiredArgumentBuilder<S, T> extends ArgumentBuilder<S, RequiredAr
1313
private final ArgumentType<T> type;
1414
private SuggestionProvider<S> suggestionsProvider = null;
1515

16-
private RequiredArgumentBuilder(final String name, final ArgumentType<T> type) {
16+
protected RequiredArgumentBuilder(final String name, final ArgumentType<T> type) {
1717
this.name = name;
1818
this.type = type;
1919
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.mojang.brigadier.tree;
2+
3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.RedirectModifier;
5+
import com.mojang.brigadier.StringReader;
6+
import com.mojang.brigadier.arguments.ArgumentType;
7+
import com.mojang.brigadier.context.CommandContextBuilder;
8+
import com.mojang.brigadier.context.ParsedArgument;
9+
import com.mojang.brigadier.exceptions.CommandSyntaxException;
10+
import com.mojang.brigadier.suggestion.SuggestionProvider;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
import java.util.function.Predicate;
15+
16+
public class ListCommandNode<S, T> extends ArgumentCommandNode<S, T> {
17+
public ListCommandNode(String name, ArgumentType<T> type, Command<S> command, Predicate<S> requirement, CommandNode<S> redirect, RedirectModifier<S> modifier, boolean forks, SuggestionProvider<S> customSuggestions) {
18+
super(name, type, command, requirement, redirect, modifier, forks, customSuggestions);
19+
}
20+
21+
@Override
22+
public void parse(StringReader reader, CommandContextBuilder<S> contextBuilder) throws CommandSyntaxException {
23+
final int start = reader.getCursor();
24+
final T result = getType().parse(reader);
25+
26+
ParsedArgument<S, List<T>> parsed = (ParsedArgument<S, List<T>>) contextBuilder.getArguments().get(getName());
27+
if (parsed == null) {
28+
parsed = new ParsedArgument<>(start, reader.getCursor(), new ArrayList<>());
29+
} else {
30+
parsed = new ParsedArgument<>(parsed.getRange().getStart(), reader.getCursor(), parsed.getResult());
31+
}
32+
parsed.getResult().add(result);
33+
34+
contextBuilder.withArgument(getName(), parsed);
35+
contextBuilder.withNode(this, parsed.getRange());
36+
}
37+
}

0 commit comments

Comments
 (0)