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