protected <T> CompletableFuture<T> future(Callable<T> supplier) {
        return CompletableFuture.supplyAsync(() -> {
            try {
                return supplier.call();
            } catch (Exception e) {
                if (e instanceof RuntimeException) {
                    throw (RuntimeException) e;
                }
                throw new CompletionException(e);
            }
        }, this.plugin.getBootstrap().getScheduler().async());
    }
Base class for an interface which can perform operations asynchronously and return {@link CompletableFuture}s
common/src/main/java/me/lucko/luckperms/common/util/AsyncInterface.java