Bukkit倒数计时器开始向下计数无限(2,1,-1,-2等)

时间:2016-06-11 19:16:53

标签: minecraft bukkit

所以我遇到这个问题当一个 - 两个+玩家在线时,倒数计时器进入负值,如4,3,2,1,0 -1,-2,-3等。 有谁知道我怎么能解决这个问题,现在已经挣扎了很长时间了:P

这是我的倒计时课程:

@Override
public void run() {
    if (timeUntilStart == 0) {
        if (!Game.canStart()) {
            if(Bukkit.getOnlinePlayers().size() <= 2) {
            plugin.restartCountdown();
            ChatUtilities.broadcast(ChatColor.RED + "Not enough players to start. Countdown will");
            ChatUtilities.broadcast(ChatColor.RED + "restart.");
            for (Player p : Bukkit.getOnlinePlayers()) p.playSound(p.getLocation(), Sound.ENDERDRAGON_WINGS, 5, 1);
            return;
        }else{
            if(Game.canStart()) {
                if(Bukkit.getOnlinePlayers().size() >= 2) {
            Game.start();
                }
            }
        }

    }

    }
    boolean broadcast = false;

    for (Player p : Bukkit.getOnlinePlayers()) {
        p.setLevel(timeUntilStart);

        if (timeUntilStart < 11  || timeUntilStart == 120 ||timeUntilStart == 60 || timeUntilStart == 30) {
            p.playSound(p.getLocation(), Sound.ORB_PICKUP, 5, 0);
            if (timeUntilStart == 1) p.playSound(p.getLocation(), Sound.ORB_PICKUP, 5, 1);
            broadcast = true;
        }
    }


    if (broadcast) ChatUtilities.broadcast(String.valueOf(timeUntilStart) + " §6Seconds until the game starts!");{

    }
    {
    timeUntilStart -= 1;   

}
}
}

2 个答案:

答案 0 :(得分:0)

您的方法返回且timeUtilStart未递减的唯一情况是

timeUntilStart == 0 && !Game.canStart() && Bukkit.getOnlinePlayers().size() <= 2

由代码中前三个if块定义。
这就解释了为什么当你有3个或更多玩家时你的倒计时不会停止。

我认为这个错误是因为凌乱的{}块和缩进而发生的。退后一步,仔细阅读您再次编写的代码并修复括号和缩进。

良好的格式化不是毫无意义的苦差事,它是帮助自己理解已写作内容的重要工具。

答案 1 :(得分:0)

您是否尝试过使用bukkit调度程序?人们往往忘记bukkit的API可以很好地处理倒计时。只需使用此

调用调度程序即可
myInteger = Bukkit's.getScheduler.scheduleSyncRepeatingTask(plugin, new runnable(), 0L, 20L)

将您的JavaPlugin扩展类置于插件中,使用runnable添加未实现的方法,0L在第一次运行之前是滴答,20L是每次运行之间的滴答。

取消像这样的倒计时

Bukkit's.getScheduler.cancelTask(myInteger)