Есть ещё вот такая штука для игрищ с CompletableFuture, но её пока не тестировал. Но по логике должно работать корректно:
PHP:
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitScheduler;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
// Author: Dymeth.Ru
public class CompletableFutureBukkit<T> extends CompletableFuture<T> {
private final Executor defaultExecutor;
public CompletableFutureBukkit(Plugin plugin, boolean async) {
BukkitScheduler scheduler = plugin.getServer().getScheduler();
this.defaultExecutor = async
? actions -> scheduler.runTaskAsynchronously(plugin, actions)
: actions -> scheduler.runTask(plugin, actions);
}
@Override
public Executor defaultExecutor() {
return this.defaultExecutor;
}
}
null-safety аннотации удалены
Преимущество перед обычным CompletableFuture в том, что такие таски должны останавливаться ядром при выгрузке плагина