我正在为我的朋友做一个bukkit插件,我想找出如何每2滴答(1/10秒)调用一个函数。如何使功能被称为每2滴答
6
A
回答
14
嗯,这可能不是你想看的地方。您应该使用this来满足您的任何开发需求。
无论哪种方式,我都可以回答你的问题。你想使用内置的调度程序。您可以使用
server.getScheduler();
具体来说,您会希望创建一个Runnable并使其打电话给你的方法,每2个蜱访问它。
int id = server.getScheduler().scheduleSyncRepeatingTask(plugin, new Runnable() {
public void run() {
myMethod();
}, 0, 2);
我将在一秒内解释同步和异步的区别,但这应该完成你想要的。第一个参数只是对插件的引用(通常为this
或plugin
)。第二个是可运行的,你应该用你想调用的方法替换myMethod
。第三个参数是延迟量(以滴答为单位),直到方法第一次运行。我假设为0,但也可能是两个,取决于你想要做什么。最后一个参数是两次运行之间的时间量,你希望是两次。
你会发现,该方法返回一个整数,你可以用它来取消任务,像这样:
server.getScheduler().cancelTask(id);
它讨论异步和同步之间的区别是很重要的。您会注意到我们在开始时调用的方法说时间表同步 RepeatingTask。同步意味着我们指定为第二个参数的Runnable将在服务器的主线程上运行。任何调用Bukkit/CraftBukkit/Minecraft方法的方法都必须作为同步运行。如果你运行一些说,修改块,作为异步你可以完全破坏服务器。只是不这样做;)另一方面,异步为Runnable创建一个单独的线程,用于后台任务,如复制和粘贴文件或检查它是什么时间。再次,从不运行一种方法,将修改世界为异步。最后,如果您以后只想运行一次方法但没有重复,您可以使用方法int id = scheduleSyncDelayedTask(plugin, Runnable, 2)
,前两个参数相同,第三个延迟直到可运行运行(蜱)
祝你好运,
提示
为什么downvote?如何比询问如何使用任何其他API更有效? Bukkit实际上是一个非常受欢迎的已发布api,如果无法提出有关您最好开始有关每个API的低级投票问题的问题 - MySQL,Hibernate ... – 2013-04-21 03:37:27
[Java Loop每分钟](http: //download.stackoverflow.com/questions/2702980/java-loop-every-minute) – 2013-04-22 06:25:58
@DavidZ使用'BukkitAPI'这个和使用'Java'完全不同。使用'Sleep'会使整个服务器停止'x'秒,导致滞后和其他许多问题。 – Jojodmo 2014-02-23 01:53:13