支持Paper和Folia

Folia是Paper的一个分支,目前由PaperMC团队维护。 它增加了将世界分割成区域的能力,如这里更详细地概述。
检查Folia
根据你的插件运行的平台,你可能需要以不同的方式实现功能。为此,你可以 使用这个实用方法来检查当前服务器是否运行Folia:
private static boolean isFolia() {
try {
Class.forName("io.papermc.paper.threadedregions.RegionizedServer");
return true;
} catch (ClassNotFoundException e) {
return false;
}
}
调度器
为了支持Paper和Folia,你必须使用正确的调度器。Folia有不同类型的调度器 可用于不同的用途。它们是:
如果你在运行Paper时使用这些调度器,它们将被内部处理,提供与运行 Folia时相同的功能。
全局调度器
在全局调度器上运行的任务将在全局区域上执行,有关更多信息请参见这里。 你应该将此调度器用于任何不属于特定区域的任务。可以通过以下方式获取:
GlobalRegionScheduler globalScheduler = server.getGlobalRegionScheduler();
区域调度器
区域调度器负责为拥有某个位置的区域运行任务。不要将此调度器用于 实体上的操作,因为此调度器与区域绑定。每个实体都有自己的调度器, 它将跟随实体跨区域移动。例如,假设我想将一个方块设置为蜂箱:
Location locationToChange = ...;
RegionScheduler scheduler = server.getRegionScheduler();
scheduler.execute(plugin, locationToChange, () -> {
locationToChange.getBlock().setType(Material.BEEHIVE);
});
我们将位置作为参数传递给RegionScheduler,
因为它需要确定在哪个区域执行。
异步调度器
异步调度器可用于运行独立于服务器tick进程的任务。可以通过以下方式获取:
AsyncScheduler asyncScheduler = server.getAsyncScheduler();
实体调度器
实体调度器用于在实体上执行任务。这些将跟随实体无论它去哪里,所以你必须使用 这些而不是区域调度器。
EntityScheduler scheduler = entity.getScheduler();