MoonlightMeadows/src/main/java/me/kawaiizenbo/moonlight/command/Command.java
2022-12-06 21:59:13 -07:00

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(" "));
}
}