package net.minecraft.util.thread; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; import java.util.function.Consumer; public interface TaskScheduler extends AutoCloseable { String name(); void schedule(R runnable); default void close() { } R wrapRunnable(Runnable runnable); default CompletableFuture scheduleWithResult(Consumer> consumer) { CompletableFuture completableFuture = new CompletableFuture(); this.schedule(this.wrapRunnable(() -> consumer.accept(completableFuture))); return completableFuture; } static TaskScheduler wrapExecutor(String string, Executor executor) { return new TaskScheduler() { @Override public String name() { return string; } @Override public void schedule(Runnable runnable) { executor.execute(runnable); } @Override public Runnable wrapRunnable(Runnable runnable) { return runnable; } public String toString() { return string; } }; } }