跳到主要内容

支持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();