我刚刚为一个迷你游戏创建了一个倒计时器,但是当我即将测试倒计时时,我注意到如果我是唯一一个在线倒计时工作完美,但当另一个玩家加入倒计时时加倍了这样:10,8,6,4等。我认为它有“for(Player p:Bukkit.getOnlinePlayers()){”的东西,但我不太确定。有人可以提供帮助吗?
这是我的倒计时课程:
Main plugin;
public StartCountdown(Main pl) {
plugin = pl;
}
public static int timeUntilStart;
@Override
public void run() {
for(Player p1 : Bukkit.getOnlinePlayers()){
if(timeUntilStart == 0) {
if(!Game.canStart()) {
plugin.restartCountdown();
ChatUtilities.broadcast(ChatColor.RED + "Not enough players to start. Countdown will");
ChatUtilities.broadcast(ChatColor.RED + "restart.");
p1.playSound(p1.getLocation(), Sound.ENDERDRAGON_WINGS, 5, 1);
return;
}
Game.start();
}
if(timeUntilStart == 1) {
}
for(Player p : Bukkit.getOnlinePlayers()){
p.setLevel(timeUntilStart);
if(timeUntilStart < 11 || 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);
}
ChatUtilities.broadcast(String.valueOf(timeUntilStart)
+ " §6Seconds until the game starts!");
}
timeUntilStart -= 1;
}
if(timeUntilStart == 0) {
ChatUtilities.broadcast("§6The round has started, good luck!");
}
}
} }
答案 0 :(得分:0)
您对减量时间(timeUntilStart -= 1;
)的调用是在循环for(Player p1 : Bukkit.getOnlinePlayers())...
内。
这意味着对于每个在线玩家,您将timeUntilStart减1。但是,每次运行只需要执行一次 - 将其放在每个玩家p1循环之外。
话虽如此,大多数逻辑应该每次运行一次,而不是每次运行一次(即除非你知道我不知道的事情,game.start
应该只被调用一次) ......但这无关紧要,所以我不管它。