mirror of https://github.com/Minestom/Minestom.git
90 lines
2.8 KiB
Java
90 lines
2.8 KiB
Java
package net.minestom.server.command;
|
|
|
|
import net.minestom.server.command.builder.Command;
|
|
import net.minestom.server.command.builder.CommandExecutor;
|
|
import net.minestom.server.command.builder.condition.CommandCondition;
|
|
import org.jetbrains.annotations.NotNull;
|
|
import org.jetbrains.annotations.Nullable;
|
|
import org.jetbrains.annotations.UnknownNullability;
|
|
|
|
import java.util.Collection;
|
|
import java.util.List;
|
|
import java.util.function.Consumer;
|
|
import java.util.function.Predicate;
|
|
|
|
sealed interface Graph permits GraphImpl {
|
|
static @NotNull Builder builder(@NotNull Arg<?> argument, @Nullable Execution execution) {
|
|
return new GraphImpl.BuilderImpl(argument, execution);
|
|
}
|
|
|
|
static @NotNull Builder builder(@NotNull Arg<?> argument) {
|
|
return new GraphImpl.BuilderImpl(argument, null);
|
|
}
|
|
|
|
static @NotNull Graph fromCommand(@NotNull Command command) {
|
|
return GraphImpl.fromCommand(command);
|
|
}
|
|
|
|
static @NotNull Graph merge(@NotNull Collection<@NotNull Command> commands) {
|
|
return GraphImpl.merge(commands);
|
|
}
|
|
|
|
static @NotNull Graph merge(@NotNull List<@NotNull Graph> graphs) {
|
|
return GraphImpl.merge(graphs);
|
|
}
|
|
|
|
static @NotNull Graph merge(@NotNull Graph @NotNull ... graphs) {
|
|
return merge(List.of(graphs));
|
|
}
|
|
|
|
@NotNull Node root();
|
|
|
|
boolean compare(@NotNull Graph graph, @NotNull Comparator comparator);
|
|
|
|
sealed interface Node permits GraphImpl.NodeImpl {
|
|
@NotNull Arg<?> argument();
|
|
|
|
@UnknownNullability Execution execution();
|
|
|
|
@NotNull List<@NotNull Node> next();
|
|
}
|
|
|
|
sealed interface Execution extends Predicate<CommandSender> permits GraphImpl.ExecutionImpl {
|
|
@UnknownNullability CommandExecutor defaultExecutor();
|
|
|
|
@UnknownNullability CommandExecutor globalListener();
|
|
|
|
/**
|
|
* Non-null if the command at this point considered executable, must be present
|
|
* on the last node of the syntax.
|
|
*/
|
|
@Nullable CommandExecutor executor();
|
|
|
|
/**
|
|
* Non-null if the command or syntax has a condition, must be present
|
|
* only on nodes that specify it
|
|
*/
|
|
@Nullable CommandCondition condition();
|
|
}
|
|
|
|
sealed interface Builder permits GraphImpl.BuilderImpl {
|
|
@NotNull Builder append(@NotNull Arg<?> argument, @Nullable Execution execution, @NotNull Consumer<Builder> consumer);
|
|
|
|
@NotNull Builder append(@NotNull Arg<?> argument, @Nullable Execution execution);
|
|
|
|
default @NotNull Builder append(@NotNull Arg<?> argument, @NotNull Consumer<Builder> consumer) {
|
|
return append(argument, null, consumer);
|
|
}
|
|
|
|
default @NotNull Builder append(@NotNull Arg<?> argument) {
|
|
return append(argument, (Execution) null);
|
|
}
|
|
|
|
@NotNull Graph build();
|
|
}
|
|
|
|
enum Comparator {
|
|
TREE
|
|
}
|
|
}
|