Catch redirect errors when forked
This commit is contained in:
parent
9fbf7bfe42
commit
928912de68
3 changed files with 26 additions and 9 deletions
|
@ -111,13 +111,20 @@ public class CommandDispatcher<S> {
|
|||
}
|
||||
next.add(child.copyFor(context.getSource()));
|
||||
} else {
|
||||
final Collection<S> results = modifier.apply(context);
|
||||
if (!results.isEmpty()) {
|
||||
if (next == null) {
|
||||
next = new ArrayList<>(results.size());
|
||||
try {
|
||||
final Collection<S> results = modifier.apply(context);
|
||||
if (!results.isEmpty()) {
|
||||
if (next == null) {
|
||||
next = new ArrayList<>(results.size());
|
||||
}
|
||||
for (final S source : results) {
|
||||
next.add(child.copyFor(source));
|
||||
}
|
||||
}
|
||||
for (final S source : results) {
|
||||
next.add(child.copyFor(source));
|
||||
} catch (final CommandSyntaxException ex) {
|
||||
consumer.onCommandComplete(context, false, 0);
|
||||
if (!forked) {
|
||||
throw ex;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
package com.mojang.brigadier;
|
||||
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
@FunctionalInterface
|
||||
public interface SingleRedirectModifier<S> {
|
||||
S apply(CommandContext<S> context) throws CommandSyntaxException;
|
||||
}
|
|
@ -2,13 +2,12 @@ package com.mojang.brigadier.builder;
|
|||
|
||||
import com.mojang.brigadier.Command;
|
||||
import com.mojang.brigadier.RedirectModifier;
|
||||
import com.mojang.brigadier.context.CommandContext;
|
||||
import com.mojang.brigadier.SingleRedirectModifier;
|
||||
import com.mojang.brigadier.tree.CommandNode;
|
||||
import com.mojang.brigadier.tree.RootCommandNode;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public abstract class ArgumentBuilder<S, T extends ArgumentBuilder<S, T>> {
|
||||
|
@ -63,7 +62,7 @@ public abstract class ArgumentBuilder<S, T extends ArgumentBuilder<S, T>> {
|
|||
return forward(target, null, false);
|
||||
}
|
||||
|
||||
public T redirect(final CommandNode<S> target, final Function<CommandContext<S>, S> modifier) {
|
||||
public T redirect(final CommandNode<S> target, final SingleRedirectModifier<S> modifier) {
|
||||
return forward(target, modifier == null ? null : o -> Collections.singleton(modifier.apply(o)), false);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue