protected CompletableFuture<Void> future(Throwing.Runnable runnable) {
        return CompletableFuture.runAsync(() -> {
            try {
                runnable.run();
            } 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