84 lines
2.6 KiB
Java
84 lines
2.6 KiB
Java
package me.kawaiizenbo.moonlight.command;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Arrays;
|
|
import java.util.Collections;
|
|
import java.util.List;
|
|
import java.util.stream.Collectors;
|
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
|
import com.mojang.brigadier.CommandDispatcher;
|
|
import com.mojang.brigadier.arguments.ArgumentType;
|
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
|
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
|
|
|
import net.minecraft.client.MinecraftClient;
|
|
import net.minecraft.command.CommandSource;
|
|
|
|
public abstract class Command
|
|
{
|
|
protected static MinecraftClient mc;
|
|
|
|
private final String name;
|
|
private final String description;
|
|
private final List<String> aliases = new ArrayList<>();
|
|
public int SINGLE_SUCCESS = com.mojang.brigadier.Command.SINGLE_SUCCESS;
|
|
|
|
public Command(String name, String description, String... aliases) {
|
|
this.name = name;
|
|
this.description = description;
|
|
Collections.addAll(this.aliases, aliases);
|
|
mc = MinecraftClient.getInstance();
|
|
}
|
|
|
|
// Helper methods to painlessly infer the CommandSource generic type argument
|
|
protected static <T> RequiredArgumentBuilder<CommandSource, T> argument(final String name, final ArgumentType<T> type) {
|
|
return RequiredArgumentBuilder.argument(name, type);
|
|
}
|
|
|
|
protected static LiteralArgumentBuilder<CommandSource> literal(final String name) {
|
|
return LiteralArgumentBuilder.literal(name);
|
|
}
|
|
|
|
public final void registerTo(CommandDispatcher<CommandSource> dispatcher) {
|
|
register(dispatcher, name);
|
|
for (String alias : aliases) register(dispatcher, alias);
|
|
}
|
|
|
|
public void register(CommandDispatcher<CommandSource> dispatcher, String name) {
|
|
LiteralArgumentBuilder<CommandSource> builder = LiteralArgumentBuilder.literal(name);
|
|
build(builder);
|
|
dispatcher.register(builder);
|
|
}
|
|
|
|
public abstract void build(LiteralArgumentBuilder<CommandSource> builder);
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
public String getDescription() {
|
|
return description;
|
|
}
|
|
|
|
public List<String> getAliases() {
|
|
return aliases;
|
|
}
|
|
|
|
public String toString() {
|
|
return CommandManager.get().getPrefix() + name;
|
|
}
|
|
|
|
public String toString(String... args) {
|
|
StringBuilder base = new StringBuilder(toString());
|
|
for (String arg : args)
|
|
base.append(' ').append(arg);
|
|
|
|
return base.toString();
|
|
}
|
|
|
|
public static String nameToTitle(String name) {
|
|
return Arrays.stream(name.split("-")).map(StringUtils::capitalize).collect(Collectors.joining(" "));
|
|
}
|
|
}
|