Java(Bukkit) - 在执行下一行之前等待

时间:2018-03-18 21:29:30

标签: java minecraft bukkit

我目前遇到插件问题。我想给玩家效果5秒,在5秒之后,它应该是白天。我的问题是,day命令是立即执行的,所以它是在效果结束之前的一天。 你可以帮助我,在执行之前将时间设置为1000的命令会等待5秒吗? 帮助将不胜感激, 直到

p.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, 100, 100, true));
                    p.addPotionEffect(new PotionEffect(PotionEffectType.SLOW, 100, 100, true));
                    p.addPotionEffect(new PotionEffect(PotionEffectType.JUMP, 100, -100, true));
                    p.sendMessage("§aGute Nacht!"); //german, dont worry :D
//here should be the delay of 5 seconds
                    Bukkit.getWorld("world").setTime(1000);

2 个答案:

答案 0 :(得分:3)

我还建议使用BukkitRunnable。提供此类是一种处理调度任务的简便方法。

new BukkitRunnable(
  public void run() {
    Bukkit.getWorld("world").setTime(1000);
  }
).runTaskLater​(yourPluginInstance, delayInTicks);

请记住,20个服务器刻度等于1个服务器秒。所以delayInTicks = 5s * 20 = 100

答案 1 :(得分:2)

你应该调查scheduleSyncDelayedTask 我没有测试过这个,但是你应该瞄准这样的事情。

myPlugin.getServer().getScheduler().scheduleSyncDelayedTask(myPlugin, new Runnable() {
  public void run() {
      Bukkit.getWorld("world").setTime(1000);
  }
}, 100);

scheduleSyncDelayedTask

  

尽快安排一次性任务。这个任务会   由主服务器线程执行。

     

参数:

     

插件 - 拥有任务的插件

     

任务 - 要完成的任务   执行

     

返回:任务ID号(如果调度失败,则为-1)