Methods BUKKIT:如何在排队前等待X个时间

Methods BUKKIT:如何在排队前等待X个时间,methods,wait,minecraft,bukkit,pause,Methods,Wait,Minecraft,Bukkit,Pause,所以,我正在编写这个Minecraft bukkit插件,我想得到一些帮助,帮助你如何让插件在执行一行代码之前等待一段特定的时间。因为如果我们尝试这样做: 睡眠(4000) 这将使整个服务器暂停4秒钟 所以我想要一个可以在Bukkit中使用的代码,而不是冻结整个服务器。 这是我的密码: @EventHandler public void bombSymptom (PlayerInteractEvent event) throws InterruptedException{ final P

所以,我正在编写这个Minecraft bukkit插件,我想得到一些帮助,帮助你如何让插件在执行一行代码之前等待一段特定的时间。因为如果我们尝试这样做:

睡眠(4000)

这将使整个服务器暂停4秒钟

所以我想要一个可以在Bukkit中使用的代码,而不是冻结整个服务器。 这是我的密码:

@EventHandler
public void bombSymptom (PlayerInteractEvent event) throws InterruptedException{
    final Player player = event.getPlayer();
    if (player == Bukkit.getPlayer("Viktoracri") && event.getItem() != null && event.getItem().getType() == Material.PUMPKIN && player.isOnGround() && player.getHealth() == 20){
        Location loc = event.getPlayer().getLocation();
        player.addPotionEffect(new PotionEffect(PotionEffectType.DAMAGE_RESISTANCE, 100, 10));
        event.getPlayer().getWorld().createExplosion(loc, 3);
        player.setHealth(15);
        //Wait 1 sec
        player.setHealth(16);
        //Wait 2 sec
        player.setHealth(17);
        //Wait 1 sec
        player.setHealth(18);
        //Wait 1 sec
        player.setHealth(19);
    }
}
有人能告诉我怎么做吗?非常感谢。

thread.sleep(int)导致服务器崩溃的原因是它冻结了服务器线程,使程序由于不活动而停止(类似这样的事情,您知道了)

您可以使用bukkit调度程序! 或者,如果您想做一些比bukkit更高级、更快的事情,您可以使用普通线程(只需确保使用thread.start()创建一个新线程)

您可以使用这两种方法中的任何一种,以1秒的延迟从15计数到19。 或者从0到4计数,并将运行状况设置为+15

为此,我们不需要比minecraft更快,所以我们可以使用bukkit调度程序

Init delay是开始之前的延迟(以滴答为单位)。 循环延迟是迭代之间的间隔时间

请记住,一秒钟内有20个滴答声,所以对于您来说,init延迟为0,循环延迟为20

如果您确实需要延迟更改,您可以将延迟保持在1秒,并在继续之前等待额外的迭代。

线程。睡眠(int)崩溃您的服务器的原因是它冻结了您的服务器线程,使程序因不活动而停止(诸如此类的事情,您可以理解)

您可以使用bukkit调度程序! 或者,如果您想做一些比bukkit更高级、更快的事情,您可以使用普通线程(只需确保使用thread.start()创建一个新线程)

您可以使用这两种方法中的任何一种,以1秒的延迟从15计数到19。 或者从0到4计数,并将运行状况设置为+15

为此,我们不需要比minecraft更快,所以我们可以使用bukkit调度程序

Init delay是开始之前的延迟(以滴答为单位)。 循环延迟是迭代之间的间隔时间

请记住,一秒钟内有20个滴答声,所以对于您来说,init延迟为0,循环延迟为20


如果您确实需要延迟更改,您可以将延迟保持在1秒,并在继续之前等待额外的迭代。

您可以创建一个线程,该线程基本上在服务器端运行。您可以按如下方式设置thread类:

public class BombThread implements Runnable {

    public Player p;

    public BombThread (Player p) {
        this.p = p;
    }

    public void run() {
        p.setHealth(15); 
        Thread.sleep(1000);
        p.setHealth(16);
        Thread.sleep(2000);
        p.setHealth(17);
        Thread.sleep(1000);
        p.setHealth(18);
        Thread.sleep(1000);
        p.setHealth(19);
    }
}
然后,要在侦听器方法中运行它,您需要执行以下操作:

BombThread thread = new BombThread(player);
thread.start();

您可以创建一个线程,它基本上沿着服务器运行。您可以按如下方式设置thread类:

public class BombThread implements Runnable {

    public Player p;

    public BombThread (Player p) {
        this.p = p;
    }

    public void run() {
        p.setHealth(15); 
        Thread.sleep(1000);
        p.setHealth(16);
        Thread.sleep(2000);
        p.setHealth(17);
        Thread.sleep(1000);
        p.setHealth(18);
        Thread.sleep(1000);
        p.setHealth(19);
    }
}
然后,要在侦听器方法中运行它,您需要执行以下操作:

BombThread thread = new BombThread(player);
thread.start();