All source projects
MrUltimateLibrary Source
Standalone source project / 68 files
MrUltimateLibrary is the backbone of all my plugins; it offers features that facilitate plugin creation, maintenance, and updates.
java
MrUltimateLibrary/src/main/java/eu/mrneznamy/mrultimatelibrary/scheduler/MrLibScheduler.java
JAVA · Read-only source
package eu.mrneznamy.mrultimatelibrary.scheduler;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.entity.Entity;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitTask;
import java.util.concurrent.TimeUnit;
public class MrLibScheduler {
private static final boolean IS_FOLIA = isFolia();
private static boolean isFolia() {
try {
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
public interface MrLibTask {
void cancel();
boolean isCancelled();
int getTaskId();
}
private static class BukkitMrLibTask implements MrLibTask {
private final BukkitTask task;
public BukkitMrLibTask(BukkitTask task) { this.task = task; }
@Override public void cancel() { task.cancel(); }
@Override public boolean isCancelled() { return task.isCancelled(); }
@Override public int getTaskId() { return task.getTaskId(); }
}
private static class FoliaMrLibTask implements MrLibTask {
private final io.papermc.paper.threadedregions.scheduler.ScheduledTask task;
public FoliaMrLibTask(io.papermc.paper.threadedregions.scheduler.ScheduledTask task) { this.task = task; }
@Override public void cancel() { task.cancel(); }
@Override public boolean isCancelled() { return task.isCancelled(); }
@Override public int getTaskId() { return -1; }
}
public static MrLibTask runTask(Plugin plugin, Runnable runnable) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getGlobalRegionScheduler().run(plugin, task -> runnable.run()));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTask(plugin, runnable));
}
}
public static MrLibTask runTaskAsynchronously(Plugin plugin, Runnable runnable) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getAsyncScheduler().runNow(plugin, task -> runnable.run()));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskAsynchronously(plugin, runnable));
}
}
public static MrLibTask runTaskLater(Plugin plugin, Runnable runnable, long delayTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getGlobalRegionScheduler().runDelayed(plugin, task -> runnable.run(), delayTicks));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskLater(plugin, runnable, delayTicks));
}
}
public static MrLibTask runTaskLaterAsynchronously(Plugin plugin, Runnable runnable, long delayTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getAsyncScheduler().runDelayed(plugin, task -> runnable.run(), delayTicks * 50, TimeUnit.MILLISECONDS));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, runnable, delayTicks));
}
}
public static MrLibTask runTaskTimer(Plugin plugin, Runnable runnable, long delayTicks, long periodTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getGlobalRegionScheduler().runAtFixedRate(plugin, task -> runnable.run(), delayTicks < 1 ? 1 : delayTicks, periodTicks));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskTimer(plugin, runnable, delayTicks, periodTicks));
}
}
public static MrLibTask runTaskTimerAsynchronously(Plugin plugin, Runnable runnable, long delayTicks, long periodTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getAsyncScheduler().runAtFixedRate(plugin, task -> runnable.run(), delayTicks * 50, periodTicks * 50, TimeUnit.MILLISECONDS));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskTimerAsynchronously(plugin, runnable, delayTicks, periodTicks));
}
}
public static MrLibTask runTaskForRegion(Plugin plugin, Location location, Runnable runnable) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getRegionScheduler().run(plugin, location, task -> runnable.run()));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTask(plugin, runnable));
}
}
public static MrLibTask runTaskLaterForRegion(Plugin plugin, Location location, Runnable runnable, long delayTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getRegionScheduler().runDelayed(plugin, location, task -> runnable.run(), delayTicks));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskLater(plugin, runnable, delayTicks));
}
}
public static MrLibTask runTaskTimerForRegion(Plugin plugin, Location location, Runnable runnable, long delayTicks, long periodTicks) {
if (IS_FOLIA) {
return new FoliaMrLibTask(Bukkit.getRegionScheduler().runAtFixedRate(plugin, location, task -> runnable.run(), delayTicks < 1 ? 1 : delayTicks, periodTicks));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTaskTimer(plugin, runnable, delayTicks, periodTicks));
}
}
public static MrLibTask runTaskForEntity(Plugin plugin, Entity entity, Runnable runnable, Runnable retired) {
if (IS_FOLIA) {
return new FoliaMrLibTask(entity.getScheduler().run(plugin, task -> runnable.run(), retired));
} else {
return new BukkitMrLibTask(Bukkit.getScheduler().runTask(plugin, runnable));
}
}
}
126 linesGNU GENERAL PUBLIC LICENSE · Version 3, 29 June 2007 · UTF-8 · Read only