private void executeCommand(CommandSender sender, CommandHandler commandHandler, String rawLabel, String[] rawArguments) {

        Command command;
        if (rawArguments.length > 0) {
            command = new Command(sender, rawLabel, rawArguments[0], new ArrayList<String>(Arrays.asList(rawArguments)).subList(1, rawArguments.length).toArray(new String[rawArguments.length - 1]));
        } else {
            command = new Command(sender, rawLabel, null);
        }

        if (sender instanceof Player) {
            if (commandHandler.getInfo().getPermission() == null || commandHandler.getInfo().getPermission().isEmpty()) {
                commandHandler.execute(command);
            } else {
                if (sender.hasPermission(commandHandler.getInfo().getPermission())) {
                    commandHandler.execute(command);
                } else {
                    String commandDisplay = "/" + rawLabel;
                    commandDisplay += rawArguments.length > 0 ? " " + rawArguments[0] : "";
                    if (!ExceptionHandler.exception(new NoCommandPermissionException(plugin, commandHandler.getInfo().getPermission(), sender, command, sender.getName() + " has no permissions for command " + commandDisplay))) {
                        commandHandler.execute(command);
                    }
                }
            }
        } else {
            commandHandler.execute(command);
        }
    }