Bukkit插件制作05-定时器
- 2016-10-27 13:33:39
- 幻音い
- 8551
温馨提示: 这篇文章于2905天前编写,现在可能不再适用或落后.
Bukkit这坑慢慢填,不慌....
最近又回Minecraft的坑了,开始搞插件...
Bukkit定时器是平时开发也会用到的,比如延迟,冷却,准备时间等等,都会使用。
先声明java里面的sleep是会让服务器整体停止xxx秒,官方教程是这样说的,我并没有去试过这东西。
bukkit提供了一个专有的线程,可以用来实现延迟等效果。
Java里面1000L是1秒,而Bukkit里面的是20L一秒,Bukkit服务器是使用单线程的.
然后想要实现一个定时器,可以直接new一个BukkitRunnable抽象类然后创建继承的Runnable接口方法就行了。
这里不会多说,具体请反编译核心文件的org.bukkit.scheduler查看,文档直接官方看就行了
一般有2种方法实现,1是直接new匿名类,2是创建一个类继承BukkitRunnable实现定时器。
new BukkitRunnable(){
int s = 10;//设置定10秒后执行某段代码
@Override
public void run(){
s--;//迭代递减,我看官方的教程是没这个的,我没试过,你也可以删除试试
if(s==0){
//这个写10秒后执行的代码(假如定义的定时器每次是1秒)
cancel();//cancel用来取消定时器
}else{
//这里可以写每次触发定时器执行的代码
}
}
}.runTaskTimer(this, 0L, 20L);//参数是,主类、延迟、多少秒运行一次,比如5秒那就是5*20L
上面是用匿名类的方法创建定时器,一般来说,我喜欢创建一类继承来实现
package com.acgxt.mc;
import org.bukkit.scheduler.BukkitRunnable;
public class TimeOut extends BukkitRunnable{
public Test plugin;
public int s = 10;
public TimeOut(Test plugin){
//因为定时器需要一个主类,所以这里Test是主类,参数传一个主类进来
this.plugin = plugin;//赋值给成员变量
}
@Override
public void run() {
s--;
if(s==0){
//执行10秒后的代码(假如定义的定时器每次是1秒)
//取消定时器
cancel();
}else{
//每一次触发定时器执行的代码
}
}
//创建一个开始的函数
public void start(long delay,long time){
//调用runTaskTimer函数,参数分别是 主类,开始延迟多少秒,多少秒运行一次
this.runTaskTimer(this.plugin, 20L * delay, 20L * time);
}
}
//运行这个定时器(假设我们在主类中运行):
new TimeOut(this).start(1L,10L);//实例一个定时器,构造函数中传入主类,因为当前在主类所以this,
//然后调用start方法,第一个参数是延迟,传入1那么就是1秒后开始运行定时器
//参数2是多少秒运行一次,那么设定10就是10秒运行一次定时器,
//当运行10次,也就是10*10秒定时器将会停止(加上1秒延迟)
Bukkit坑慢慢填,不着急,反正我也不是学java的....
另外前几天看到了mcbbs一个团队翻译的中文DOC,可以看看
DOC地址:httpss://docs.windit.net/Chinese_BukkitAPI/
mcbbs发布地址:https://www.mcbbs.net/forum.php?mod=viewthread&tid=632861&extra=page%3D2
阁下需要登录后才可以查看评论哦~