1.10 Bukkit如何实现输入两个指令 分别开启关闭同一个runTaskTimer计时器
首先,已经写好了两个类
DemoRunnable1 extends BukkitRunnable
DemoRunnable2 extends BukkitRunnable
目标是:
①输入/test 1可以开启一号计时器
(这一步做好了)
if(args[0].equalsIgnoreCase("1")) {
DemoRunnable d1 = new DemoRunnable();
d1.runTaskTimer(...);
}
②输入/test 2可以开启二号计时器
(这一步做好了)
if(args[0].equalsIgnoreCase("2")) {
DemoRunnable d2 = new DemoRunnable();
d2.runTaskTimer(...);
}
③输入/test cancel可以同时关闭上面两个计时器(如果开启了的话)
问题就是卡在③了
首先,已经写好了两个类
DemoRunnable1 extends BukkitRunnable
DemoRunnable2 extends BukkitRunnable
目标是:
①输入/test 1可以开启一号计时器
(这一步做好了)
if(args[0].equalsIgnoreCase("1")) {
DemoRunnable d1 = new DemoRunnable();
d1.runTaskTimer(...);
}
②输入/test 2可以开启二号计时器
(这一步做好了)
if(args[0].equalsIgnoreCase("2")) {
DemoRunnable d2 = new DemoRunnable();
d2.runTaskTimer(...);
}
③输入/test cancel可以同时关闭上面两个计时器(如果开启了的话)
问题就是卡在③了
 本帖最后由 William_Shi 于 2020-6-21 13:37 编辑 
你要记住一点
只要是BukkitScheduler,BukkitRunnable等等任务调度
全都有返回值的
也就是BukkitTask
BukkitTask类有一个cancel方法
可以取消任务
所以你得这个就很简单了
直接存起来你的俩BukkitTask
在合适的时机cancel掉
比如说
BukkitTask task =
new BukkitRunnable(){
@Override
public void run(){
xxx
}
}.runTask(xxx);
然后task.cancel();
你要记住一点
只要是BukkitScheduler,BukkitRunnable等等任务调度
全都有返回值的
也就是BukkitTask
BukkitTask类有一个cancel方法
可以取消任务
所以你得这个就很简单了
直接存起来你的俩BukkitTask
在合适的时机cancel掉
比如说
BukkitTask task =
new BukkitRunnable(){
@Override
public void run(){
xxx
}
}.runTask(xxx);
然后task.cancel();
.getTaskID()
.cancelTask(id)
.cancelTask(id)