package advancedsystemsmanager.commands;
import advancedsystemsmanager.api.network.IPacketSync;
import advancedsystemsmanager.client.gui.TextColour;
import advancedsystemsmanager.network.ASMPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
import net.minecraft.command.CommandNotFoundException;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.StatCollector;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class ParentCommand extends CommandBase
{
public static Map<String, ISubCommand> commands = new LinkedHashMap<String, ISubCommand>();
public static ParentCommand instance = new ParentCommand();
public static List<IPacketSync> packetCommands = new ArrayList<IPacketSync>();
static
{
register(CommandHelp.instance);
register(CommandSave.instance);
register(CommandLoad.instance);
register(CommandClear.instance);
register(CommandPastebin.instance);
register(new CommandTheme());
}
public static void register(ISubCommand command)
{
commands.put(command.getCommandName(), command);
if (command instanceof IPacketSync)
{
((IPacketSync)command).setId(packetCommands.size());
packetCommands.add((IPacketSync)command);
}
}
public static void handlePacket(ASMPacket packet)
{
try
{
int id = packet.readByte();
packetCommands.get(id % packetCommands.size()).readData(packet);
} catch (CommandException e)
{
String message = e.getMessage();
Object[] objects = e.getErrorOjbects();
Minecraft.getMinecraft().thePlayer.addChatComponentMessage(new ChatComponentText(TextColour.DARK_RED + (objects.length == 0 ? StatCollector.translateToLocal(message) : StatCollector.translateToLocalFormatted(message, objects))));
}
}
public static boolean commandExists(String name)
{
return commands.containsKey(name);
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender sender)
{
return true;
} @Override
public String getCommandName()
{
return "asm";
}
@Override
@SuppressWarnings(value = "unchecked")
public List addTabCompletionOptions(ICommandSender sender, String[] args)
{
if (args.length == 1)
{
String subCommand = args[0];
List result = new ArrayList();
for (ISubCommand command : commands.values())
{
if (command.isVisible(sender) && command.getCommandName().startsWith(subCommand))
result.add(command.getCommandName());
}
return result;
} else if (commands.containsKey(args[0]) && commands.get(args[0]).isVisible(sender))
{
return commands.get(args[0]).addTabCompletionOptions(sender, args);
}
return null;
}
@Override
public String getCommandUsage(ICommandSender sender)
{
return "/" + getCommandName() + " help";
}
@Override
public void processCommand(ICommandSender sender, String[] args)
{
if (args.length < 1)
{
args = new String[]{"help"};
}
ISubCommand command = commands.get(args[0]);
if (command != null)
{
if (sender.canCommandSenderUseCommand(command.getPermissionLevel(), "asm " + command.getCommandName()) ||
(sender instanceof EntityPlayerMP && command.getPermissionLevel() <= 0))
{
command.handleCommand(sender, args);
return;
}
throw new CommandException("commands.generic.permission");
}
throw new CommandNotFoundException("asm.command.notFound");
}
}