83 lines
3.2 KiB
Java
83 lines
3.2 KiB
Java
package tf.tuff.util;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
import org.bukkit.Location;
|
|
import org.bukkit.World;
|
|
import org.bukkit.entity.Entity;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.plugin.Plugin;
|
|
|
|
import io.github.retrooper.packetevents.util.folia.FoliaScheduler;
|
|
import io.github.retrooper.packetevents.util.folia.TaskWrapper;
|
|
|
|
public final class SchedulerCompat {
|
|
|
|
private SchedulerCompat() {
|
|
}
|
|
|
|
public static boolean isFolia() {
|
|
return FoliaScheduler.isFolia();
|
|
}
|
|
|
|
public static void runGlobal(Plugin plugin, Runnable task) {
|
|
FoliaScheduler.getGlobalRegionScheduler().execute(plugin, task);
|
|
}
|
|
|
|
public static TaskWrapper runGlobalLater(Plugin plugin, Runnable task, long delayTicks) {
|
|
return FoliaScheduler.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> task.run(), delayTicks);
|
|
}
|
|
|
|
public static TaskWrapper runGlobalTimer(Plugin plugin, Runnable task, long delayTicks, long periodTicks) {
|
|
return FoliaScheduler.getGlobalRegionScheduler().runAtFixedRate(plugin, scheduledTask -> task.run(), delayTicks, periodTicks);
|
|
}
|
|
|
|
public static void runAsync(Plugin plugin, Runnable task) {
|
|
FoliaScheduler.getAsyncScheduler().runNow(plugin, scheduledTask -> task.run());
|
|
}
|
|
|
|
public static TaskWrapper runAsyncLater(Plugin plugin, Runnable task, long delayTicks) {
|
|
return FoliaScheduler.getAsyncScheduler().runDelayed(plugin, scheduledTask -> task.run(), delayTicks * 50L, TimeUnit.MILLISECONDS);
|
|
}
|
|
|
|
public static void runRegion(Plugin plugin, World world, int chunkX, int chunkZ, Runnable task) {
|
|
FoliaScheduler.getRegionScheduler().execute(plugin, world, chunkX, chunkZ, task);
|
|
}
|
|
|
|
public static TaskWrapper runRegionLater(Plugin plugin, World world, int chunkX, int chunkZ, Runnable task, long delayTicks) {
|
|
return FoliaScheduler.getRegionScheduler().runDelayed(plugin, world, chunkX, chunkZ, scheduledTask -> task.run(), delayTicks);
|
|
}
|
|
|
|
public static void runRegion(Plugin plugin, Location location, Runnable task) {
|
|
FoliaScheduler.getRegionScheduler().execute(plugin, location, task);
|
|
}
|
|
|
|
public static TaskWrapper runRegionLater(Plugin plugin, Location location, Runnable task, long delayTicks) {
|
|
return FoliaScheduler.getRegionScheduler().runDelayed(plugin, location, scheduledTask -> task.run(), delayTicks);
|
|
}
|
|
|
|
public static void runEntity(Entity entity, Plugin plugin, Runnable task) {
|
|
FoliaScheduler.getEntityScheduler().execute(entity, plugin, task, () -> {
|
|
}, 0L);
|
|
}
|
|
|
|
public static TaskWrapper runEntityLater(Entity entity, Plugin plugin, Runnable task, long delayTicks) {
|
|
return FoliaScheduler.getEntityScheduler().runDelayed(entity, plugin, scheduledTask -> task.run(), () -> {
|
|
}, delayTicks);
|
|
}
|
|
|
|
public static TaskWrapper runEntityTimer(Entity entity, Plugin plugin, Runnable task, long delayTicks, long periodTicks) {
|
|
return FoliaScheduler.getEntityScheduler().runAtFixedRate(entity, plugin, scheduledTask -> task.run(), () -> {
|
|
}, delayTicks, periodTicks);
|
|
}
|
|
|
|
public static void sendPluginMessage(Plugin plugin, Player player, String channel, byte[] payload) {
|
|
if (player == null || channel == null || payload == null || !player.isOnline()) return;
|
|
runEntity(player, plugin, () -> {
|
|
if (player.isOnline()) {
|
|
player.sendPluginMessage(plugin, channel, payload);
|
|
}
|
|
});
|
|
}
|
|
}
|