protected SubCommand(Object commandContainer, Method method, String name, String[] aliases, Permission permission, boolean addPermissionParent, String usage)
    {
        if (commandContainer == null)
        {
            throw new IllegalArgumentException("The command container must not be null!");
        }
        if (method == null)
        {
            throw new IllegalArgumentException("The method must not be null!");
        }
        if (name == null)
        {
            throw new IllegalArgumentException("The name must not be null!");
        }
        if (aliases == null)
        {
            throw new IllegalArgumentException("The aliases must not be null!");
        }

        Class<?>[] paramTypes = method.getParameterTypes();
        if (paramTypes.length != 2 || paramTypes[0] != CommandSender.class || paramTypes[1] != CommandArgs.class)
        {
            throw new IllegalArgumentException("The methods signature is invalid!");
        }

        this.commandContainer = commandContainer;
        this.method = method;
        this.method.setAccessible(true);

        this.name = name;
        this.aliases = aliases;
        this.permission = permission;
        this.addPermissionParent = addPermissionParent;
        this.usage = usage;
    }