@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 ICommand 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 + WorldChannels.TAG
                        + ChatColor.RED + " Missing parameters.");
            }
            return value;
        }
    }