LoChat/surce/gradientnick/util/FoliaUtil.java

101 lines
3.3 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ru.lovar.gradientnick.util;
import org.bukkit.Bukkit;
import org.bukkit.entity.Entity;
import org.bukkit.plugin.Plugin;
import java.util.concurrent.TimeUnit;
/**
* Утилита для работы с Folia и Paper 1.21.8+
* Обеспечивает потокобезопасность при работе с игроками
*/
public final class FoliaUtil {
private static final boolean IS_FOLIA;
static {
IS_FOLIA = checkFolia();
}
private FoliaUtil() {}
private static boolean checkFolia() {
try {
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
public static boolean isFolia() {
return IS_FOLIA;
}
/**
* Выполняет задачу в контексте сущности (потокобезопасно для Folia)
*/
public static void runEntityTask(Plugin plugin, Entity entity, Runnable task) {
if (IS_FOLIA) {
entity.getScheduler().run(plugin, scheduledTask -> task.run(), null);
} else {
Bukkit.getScheduler().runTask(plugin, task);
}
}
/**
* Выполняет задачу в контексте сущности с задержкой
*/
public static void runEntityTaskLater(Plugin plugin, Entity entity, Runnable task, long delayTicks) {
if (IS_FOLIA) {
entity.getScheduler().runDelayed(plugin, scheduledTask -> task.run(), null, delayTicks);
} else {
Bukkit.getScheduler().runTaskLater(plugin, task, delayTicks);
}
}
/**
* Выполняет задачу асинхронно
*/
public static void runAsync(Plugin plugin, Runnable task) {
if (IS_FOLIA) {
Bukkit.getAsyncScheduler().runNow(plugin, scheduledTask -> task.run());
} else {
Bukkit.getScheduler().runTaskAsynchronously(plugin, task);
}
}
/**
* Выполняет задачу асинхронно с задержкой
*/
public static void runAsyncLater(Plugin plugin, Runnable task, long delayMs) {
if (IS_FOLIA) {
Bukkit.getAsyncScheduler().runDelayed(plugin, scheduledTask -> task.run(), delayMs, TimeUnit.MILLISECONDS);
} else {
Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, task, delayMs / 50);
}
}
/**
* Выполняет глобальную задачу (для Folia — на глобальном регионе)
*/
public static void runGlobalTask(Plugin plugin, Runnable task) {
if (IS_FOLIA) {
Bukkit.getGlobalRegionScheduler().run(plugin, scheduledTask -> task.run());
} else {
Bukkit.getScheduler().runTask(plugin, task);
}
}
/**
* Выполняет глобальную задачу с задержкой
*/
public static void runGlobalTaskLater(Plugin plugin, Runnable task, long delayTicks) {
if (IS_FOLIA) {
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> task.run(), delayTicks);
} else {
Bukkit.getScheduler().runTaskLater(plugin, task, delayTicks);
}
}
}