Skip to main content

[其五] 你应该注意的事情

本教程仅仅列举了一些常见例子,并不能完全满足你开发中的所有要求。

在开发过程中,我也踩了许多许多坑。

例如在玩家、区域的调度任务中,起初我以为延迟时间也和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


好啦~ 至此我们短暂的教程结束了,不知道有没有达到教学目的呢! 撒花~ ★,°:.☆( ̄▽ ̄)/$:.°★