From 74abaa76c0542dce189cdb1a0939381f0e6806cd Mon Sep 17 00:00:00 2001 From: Stephen Seo Date: Wed, 19 Sep 2018 15:00:38 +0900 Subject: [PATCH] Stability fixes --- .../TurnBasedMinecraft/common/Battle.java | 34 +++++++++++++++---- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java index 4e8057b..be80909 100644 --- a/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java +++ b/src/main/java/com/seodisparate/TurnBasedMinecraft/common/Battle.java @@ -502,8 +502,7 @@ public class Battle } } boolean didRemove = !removeQueue.isEmpty(); - Integer toRemove = removeQueue.poll(); - while(toRemove != null) + for(Integer toRemove = removeQueue.poll(); toRemove != null; toRemove = removeQueue.poll()) { sideA.remove(toRemove); sideB.remove(toRemove); @@ -511,7 +510,6 @@ public class Battle { playerCount.decrementAndGet(); } - toRemove = removeQueue.poll(); } if(players.isEmpty() || sideA.isEmpty() || sideB.isEmpty()) { @@ -521,12 +519,13 @@ public class Battle else if(didRemove) { notifyPlayersBattleInfo(); + resetUndecidedCount(); } return didRemove; } - private void isCreativeCheck() + private boolean isCreativeCheck() { Queue removeQueue = new ArrayDeque(); for(Combatant c : players.values()) @@ -537,15 +536,38 @@ public class Battle removeQueue.add(c.entity.getEntityId()); } } - Integer toRemove = removeQueue.poll(); - while(toRemove != null) + boolean didRemove = false; + for(Integer toRemove = removeQueue.poll(); toRemove != null; toRemove = removeQueue.poll()) { + didRemove = true; sideA.remove(toRemove); sideB.remove(toRemove); players.remove(toRemove); playerCount.decrementAndGet(); sendMessageToAllPlayers(PacketBattleMessage.MessageType.BECAME_CREATIVE, toRemove, 0, 0); } + if(didRemove) + { + notifyPlayersBattleInfo(); + resetUndecidedCount(); + } + + return didRemove; + } + + private void resetUndecidedCount() + { + if(state == State.DECISION) + { + undecidedCount.set(0); + for(Combatant p : players.values()) + { + if(p.decision == Decision.UNDECIDED) + { + undecidedCount.incrementAndGet(); + } + } + } } private void enforceFreezePositions()