@Override
    public boolean onCommand(final CommandSender sender, final Command command, final String s, final String[] args) {
        if (args.length == 0) {
            // Display help menu
            boolean player = (sender instanceof Player);
            if (player) {
                sender.sendMessage(Message.formulate(Message.COMMAND_HELP_TLTE));
                for (SubCommandModule module : plugin.getCommandHandler().getModules()) {
                    sender.sendMessage(Message.formulate(Message.COMMAND_HELP, s, module.getName(), (module.getUsage() == null ? "" : module.getUsage()), module.getDescription()));
                }
            } else {
                sender.sendMessage(Message.formulateConsole(Message.COMMAND_HELP_TLTE));
                for (SubCommandModule module : plugin.getCommandHandler().getModules()) {
                    sender.sendMessage(Message.formulateConsole(Message.COMMAND_HELP, s, module.getName(), (module.getUsage() == null ? "" : module.getUsage()), module.getDescription()));
                }
            }
        } else {
            // Attempt to execute sub-command
            String module = args[0];
            SubCommandModule moduleHandler = plugin.getCommandHandler().getModule(module);

            if (moduleHandler == null) {
                if (sender instanceof Player) {
                    Player p = (Player) sender;
                    p.sendMessage(Message.formulate(Message.ERROR_INVALID_COMMAND));
                } else {
                    sender.sendMessage(Message.formulateConsole(Message.ERROR_INVALID_COMMAND));
                }
            } else {
                return moduleHandler.execute(sender, command, s, (String[]) ArrayUtils.removeElement(args, module));
            }
        }
        return false;
    }