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 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 RequiredArgumentBuilder argument(final String name, final ArgumentType type) { return RequiredArgumentBuilder.argument(name, type); } protected static LiteralArgumentBuilder literal(final String name) { return LiteralArgumentBuilder.literal(name); } public final void registerTo(CommandDispatcher dispatcher) { register(dispatcher, name); for (String alias : aliases) register(dispatcher, alias); } public void register(CommandDispatcher dispatcher, String name) { LiteralArgumentBuilder builder = LiteralArgumentBuilder.literal(name); build(builder); dispatcher.register(builder); } public abstract void build(LiteralArgumentBuilder builder); public String getName() { return name; } public String getDescription() { return description; } public List 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(" ")); } }