[其五] 你应该注意的事情
本教程仅仅列举了一些常见例子,并不能完全满足你开发中的所有要求。
在开发过程中,我也踩了许多许多坑。
例如在玩家、区域的调度任务中,起初我以为延迟时间也和Bukkit一样,设置为0就是下一tick开始。 实际上FoliaAPI要求delay必须大于零,可这个内容你不试怎么知道不行呢?
Caused by: java.lang.IllegalArgumentException: Initial delay ticks may not be <= 0
不要害怕试错!不行就哪里错了改哪里嘛~
另外, 在一些情况下, 你可能会使用BukkitRunnable
来创建线程, 当你在Folia中运行后你会发现抛出了IllegalStateException("Not scheduled yet")
异常。
@NotNull
public synchronized BukkitTask runTask(@NotNull Plugin plugin) throws IllegalArgumentException, IllegalStateException {
checkNotYetScheduled();
return setupTask(Bukkit.getScheduler().runTask(plugin, (Runnable) this));
}
在观察其内部实现后, 我们会了解到: setupTask(Bukkit.getScheduler().runTask(plugin, (Runnable) this))
这一步是无法正确的setupTask的, 在Folia中你无法通过Bukkit.getScheduler()
实现调度。
因此你可以参考其四中的内容,实现一个自己的Runnable,例如:
public abstract class BukkitRunnable implements Runnable {
private BukkitTask task;
//其下省略
}
把字段类型BukkitTask替换为我给出的例子 Task
。然后把各种Bukkit.getScheduler().runTask
修修改改.
如果你想了解更多有关Folia的内容:你可以在Overview | PaperMC Documentation 获得详细的Folia服务端介绍,也可以在PaperMC/Folia (github.com) 中了解Folia服务端对于传统Spigot服务端究竟修改了什么。
例如你可以在这里 简单看出Folia把co/aikar/timings/Timings
中的一些方法禁用了,并写出了相应的原因:
Need a new profiler system with region threading
好啦~ 至此我们短暂的教程结束了,不知道有没有达到教学目的呢! 撒花~ ★,°:.☆( ̄▽ ̄)/$:.°★ 。