跳到主要内容

小结

别忘了取消所有调度程序!

在服务器关闭时,你会用Bukkit.getScheduler().cancelTasks(plugin);来取消所有任务对吧!

而在Folia中,你需要使用Bukkit.getAsyncScheduler().cancelTasks(plugin);Bukkit.getGlobalRegionScheduler().cancelTasks(plugin);来代替它。什么,为什么不管实体和区域的调度器? 服务器关闭了实体的删除和区块的卸载过程肯定自动取消了嘛。

计分板、加载世界

我也很想给例子中的插件添加这些功能,例如计分板记录玩家传送次数、随机传送有概率创建一个新的世界(平行世界)。

可是很遗憾,Folia的不足点展现出来了。 计分板、世界的加载、卸载在这个服务端中基本无法实现。

计分板在传统的Spigot服务端中是一种全局状态,Folia中暂时无法以类似的方法复现这个功能。

谈论到世界的加载之前,我们先看看Folia中新增的一个事件:RegionizedServerInitEvent

这个事件会在服务器初始化完成,但服务器开始"并行地"区块更新前触发(callEvent)。

例如这样的例子:

    @EventHandler
public void loadWorld(RegionizedServerInitEvent e){
System.out.println("服务器初始化完成");
}

在Folia中世界的加载不同于传统Spigot服务端,注意到For help, tpye“help” 了吗? 在一些开服教程里把它当作服务器开启完毕的标识,而在Folia中会把世界的加载放在这个之后。由此可见,在Folia中世界加载机制是有较大差异的,在没有更新出新的API之前,多世界在Folia中似乎是遥不可及的梦。

小结

好了,经过一点点努力我们写出了一个支持Folia端随机传送的插件雏形,对RegionScheduler EntityScheduler GlobalRegionScheduler AsyncScheduler 有了一定的了解。当然对于一个随机传送插件来说这些还远远不够,但其它的部分你可以在Bukkit插件教程中学到~

希望你能通过这个简单的例子对FoliaAPI中新的调度程序有一定的了解,能够根据这些写(改)出一个支持Folia的插件!