Methods BUKKIT:如何在排队前等待X个时间
所以,我正在编写这个Minecraft bukkit插件,我想得到一些帮助,帮助你如何让插件在执行一行代码之前等待一段特定的时间。因为如果我们尝试这样做: 睡眠(4000) 这将使整个服务器暂停4秒钟 所以我想要一个可以在Bukkit中使用的代码,而不是冻结整个服务器。 这是我的密码: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
@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();