package de.oppermann.bastian.spleef.util; import org.bukkit.Bukkit; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import de.oppermann.bastian.spleef.SpleefMain; public class MoreFutures { private MoreFutures() { } /** * Add a callback to a {@link ListenableFuture} * to be run on the bukkit main thread * * @param plugin The plugin registering the callback * @param future The {@link ListenableFuture} to add this callback * @param callback The callback to be called */ public static <T> void addBukkitSyncCallback(ListenableFuture<T> future, final FutureCallback<T> callback) { Futures.addCallback(future, new FutureCallback<T>() { @Override public void onFailure(final Throwable cause) { Bukkit.getScheduler().runTask(SpleefMain.getInstance(), new Runnable() { @Override public void run() { callback.onFailure(cause); } }); } @Override public void onSuccess(final T result) { Bukkit.getScheduler().runTask(SpleefMain.getInstance(), new Runnable() { @Override public void run() { callback.onSuccess(result); } }); } }); } }