我的世界Bukkit Runnable

时间:2017-06-16 11:21:02

标签: java delay minecraft runnable bukkit

我试图创建一个我的游戏插件,它会射击箭头5次,两次射击之间有10个刻度延迟。

不幸的是,我对Java并不熟悉,但我会尽力理解答案。

这是我的代码:

public void run() {
    for (int i = 0; i <5; i++){
        player.playSound(player.getLocation(), Sound.SHOOT_ARROW, 1.0f, 1.0f);
        Arrow arrow = player.launchProjectile(Arrow.class);
        Events.removeArrows.put(arrow.getEntityId(), (byte) 1);
    }
}

目前此代码段&#34;拍摄&#34; 5箭无延迟。现在我在添加延迟时陷入困境。

2 个答案:

答案 0 :(得分:0)

BukkitScheduler scheduler = getServer().getScheduler();
scheduler.scheduleSyncRepeatingTask(yourPlugin, new Runnable() {
    @Override
    public void run() {
        //Execute Arrow Code here
    }
}, 10L);

这将每隔10个滴答在run()方法中执行代码,直到停止。为此,请在Runnable中使用this.cancel();

答案 1 :(得分:0)

可能最简单的方法是使用异步任务:

//Asynchronous Task
Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
    for (int i = 0; i <5; i++){

       player.playSound(player.getLocation(), Sound.SHOOT_ARROW, 1.0f, 1.0f);
       Arrow arrow = player.launchProjectile(Arrow.class);
       Events.removeArrows.put(arrow.getEntityId(), (byte) 1);

        try {
            //pause the task for 10 ticks / half a second
            Thread.sleep(500);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

});

此代码射出一个箭头然后等待10个刻度并重新开始直到for循环结束。

通常,您不应该在代码中放置Thread.sleep(),因为它会在您定义的时间内停止整个服务器。但由于这个函数是异步的,我们不会遇到这个问题。