@Override
 public String getCommandUsage(ICommandSender sender) {
   String sub = "";
   int i = 0;
   for (IESubCommand com : CommandHandler.commands) sub += ((i++) > 0 ? "|" : "") + com.getIdent();
   return "/ie <" + sub + ">";
 }
 @Override
 public void processCommand(ICommandSender sender, String[] args) {
   if (args.length > 0)
     for (IESubCommand com : commands) {
       if (com.getIdent().equalsIgnoreCase(args[0])) com.perform(sender, args);
     }
   else {
     String sub = "";
     int i = 0;
     for (IESubCommand com : CommandHandler.commands)
       sub += ((i++) > 0 ? ", " : "") + com.getIdent();
     sender.addChatMessage(new ChatComponentTranslation(Lib.CHAT_COMMAND + "available", sub));
   }
 }
 @Override
 public List addTabCompletionOptions(ICommandSender sender, String[] args) {
   ArrayList<String> list = new ArrayList<String>();
   if (args.length > 0)
     for (IESubCommand sub : commands) {
       if (args.length == 1) {
         if (args[0].isEmpty() || sub.getIdent().startsWith(args[0].toLowerCase()))
           list.add(sub.getIdent());
       } else if (sub.getIdent().equalsIgnoreCase(args[0])) {
         String[] redArgs = new String[args.length - 1];
         System.arraycopy(args, 1, redArgs, 0, redArgs.length);
         ArrayList<String> subCommands = sub.getSubCommands(redArgs);
         if (subCommands != null) list.addAll(subCommands);
       }
     }
   return list;
 }