我正在为我的朋友制作一个 bukkit 插件,我想知道如何每 2 个滴答声(1/10 秒)调用一个函数。
1 回答
嗯,这可能不是你想看的地方。您应该将其用于您的任何开发需求。
不管怎样,我可以回答你的问题。您想使用内置的调度程序。您可以使用它访问它
server.getScheduler();
具体来说,您将要创建一个 Runnable 并使其每 2 个滴答声调用您的方法。
int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
public void run() {
myMethod();
}}, 0, 2);
我将在一秒钟内解释同步和异步的区别,但这应该可以完成你想要的。第一个参数只是对插件的引用(通常是this
或plugin
)。第二个是runnable,你显然应该myMethod
用你想要调用的方法替换。第三个参数是方法首次运行之前的延迟量(以滴答计)。我假设为 0,但也可能是 2,具体取决于您想要做什么。最后一个参数是运行之间的时间量,您希望是两次。
您会注意到该方法返回一个整数,您可以使用它来取消任务,如下所示:
server.getScheduler().cancelTask(id);
讨论异步和同步之间的区别很重要。你会注意到我们一开始调用的方法是 schedule Sync RepeatingTask。同步意味着我们指定为第二个参数的 Runnable 将在服务器的主线程上运行。任何调用 Bukkit/CraftBukkit/Minecraft 方法的方法都必须作为同步运行。如果你运行一些东西,修改一个块,作为异步你可能会完全破坏服务器。只是不要这样做;)另一方面,异步为 Runnable 创建一个单独的线程,用于后台任务,例如复制和粘贴文件或检查时间。再一次,永远不要运行将世界修改为异步的方法。
最后,将来如果你只想运行一个方法一次然后不让它重复,你可以只使用 method int id = scheduleSyncDelayedTask(plugin, Runnable, 2)
,前两个参数相同,第三个是运行 runnable 之前的延迟(Ticks)
祝你好运,
小贴士