@Override
   public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
      if(args.length == 0) {
         return noArgs(sender, command, label);
      } else {
         final String subcmd = args[0].toLowerCase();
         // Check known handlers first and pass to them
         final CommandHandler handler = registeredHandlers.get(subcmd);
         if(handler != null) {
            return handler.onCommand(sender, command, label, shortenArgs(args));
         }
         // Its our command, so handle it if its registered.
         final BadgeCommand subCommand = registeredCommands.get(subcmd);
         if(subCommand == null) {
            return unknownCommand(sender, command, label, args);
         }
         // Execute command
         boolean value = true;
         try {
            value = subCommand.execute(plugin, sender, command, label, shortenArgs(args));
         } catch(ArrayIndexOutOfBoundsException e) {
            sender.sendMessage(ChatColor.GRAY + Badges.TAG + ChatColor.RED + " Missing parameters.");
         }
         return value;
      }
   }