package chbachman.armour.handler;
import java.util.ArrayList;
import java.util.List;
import chbachman.api.registry.UpgradeRegistry;
import chbachman.api.util.Array;
import chbachman.armour.ModularArmour;
import chbachman.armour.gui.tablet.TabletGui;
import chbachman.armour.register.ItemRegister;
import chbachman.armour.register.Module;
import cpw.mods.fml.common.event.FMLServerStartingEvent;
import net.minecraft.command.CommandBase;
import net.minecraft.command.ICommandSender;
import net.minecraft.util.ChatComponentText;
public class CommandHandler {
static MACommand command;
public static void registerCommands(FMLServerStartingEvent event){
command = new MACommand();
event.registerServerCommand(command);
initCommands();
}
public static void initCommands(){
if(ModularArmour.developmentEnvironment){
command.registerCommand(new SubCommand("refresh", "refresh"){
@Override
void processCommand(ICommandSender sender, String[] args) {
UpgradeRegistry.INSTANCE.recipeList.clear();
TabletGui.pages.clear();
ItemRegister.INSTANCE.base.registerUpgradeRecipes();
for(Module module : ItemRegister.INSTANCE.list){
module.registerUpgradeRecipes();
}
}
});
command.registerCommand(new SubCommand("refreshCommands", "refreshCommands"){
@Override
void processCommand(ICommandSender sender, String[] args) {
command.commandList.clear();
initCommands();
}
});
command.registerCommand(new SubCommand("help", "help"){
@Override
void processCommand(ICommandSender sender, String[] args) {
for(SubCommand command : command.commandList){
sender.addChatMessage(new ChatComponentText(command.name));
}
}
});
}
}
static class MACommand extends CommandBase{
private Array<SubCommand> commandList = new Array<SubCommand>();
@Override
public String getCommandName() {
return "ma";
}
@Override
public String getCommandUsage(ICommandSender sender) {
return "ma <subcommand>";
}
@Override
public void processCommand(ICommandSender sender, String[] args) {
if(args.length == 0){
return;
}
for(SubCommand command : commandList){
if(command.name.equals(args[0])){
command.processCommand(sender, args);
return;
}
}
sender.addChatMessage(new ChatComponentText("That is not a valid command!"));
}
@Override
public List<String> addTabCompletionOptions(ICommandSender sender, String[] args) {
for(SubCommand command : commandList){
if(command.name.equals(args[0])){
return command.autoComplete(sender, args);
}
}
List<String> list = new ArrayList<String>();
String lastArg = args[args.length - 1];
for(SubCommand command : commandList){
if(command.name.startsWith(lastArg)){
list.add(command.name);
}
}
return list;
}
public void registerCommand(SubCommand command){
this.commandList.add(command);
}
}
static abstract class SubCommand{
public final String name;
public final String usage;
public SubCommand(String name, String usage){
this.name = name;
this.usage = usage;
}
abstract void processCommand(ICommandSender sender, String[] args);
List<String> autoComplete(ICommandSender sender, String[] args){
return null;
}
}
}