所以我遇到这个问题当一个 - 两个+玩家在线时,倒数计时器进入负值,如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;
}
}
}
答案 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)