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 p_365586_); @Override default void close() { } R wrapRunnable(Runnable p_367607_); default CompletableFuture scheduleWithResult(Consumer> p_365778_) { CompletableFuture completablefuture = new CompletableFuture<>(); this.schedule(this.wrapRunnable(() -> p_365778_.accept(completablefuture))); return completablefuture; } static TaskScheduler wrapExecutor(final String p_367076_, final Executor p_363384_) { return new TaskScheduler() { @Override public String name() { return p_367076_; } @Override public void schedule(Runnable p_361412_) { p_363384_.execute(p_361412_); } @Override public Runnable wrapRunnable(Runnable p_367104_) { return p_367104_; } @Override public String toString() { return p_367076_; } }; } }