小结
别忘了取消所有调度程序!
在服务器关闭时,你会用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的插件!