diff --git a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java index a44bd542d..1be0c2c82 100644 --- a/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java +++ b/gemp-lotr/gemp-lotr-logic/src/main/java/com/gempukku/lotro/game/state/GameState.java @@ -175,29 +175,24 @@ public class GameState { for (Map.Entry stringIntegerEntry : _playerPosition.entrySet()) listener.setPlayerPosition(stringIntegerEntry.getKey(), stringIntegerEntry.getValue()); + Set cardsLeftToSent = new HashSet(_inPlay); Set sentCardsFromPlay = new HashSet(); - Set attachedCardsToSend = new HashSet(); - // First non-attached cards - for (PhysicalCardImpl physicalCard : _inPlay) { - if (physicalCard.getAttachedTo() == null) { - listener.cardCreated(physicalCard); - sentCardsFromPlay.add(physicalCard); - } else - attachedCardsToSend.add(physicalCard); - } + int passes = 4; - // Now the attached ones - while (!attachedCardsToSend.isEmpty()) { - Iterator iter = attachedCardsToSend.iterator(); - while (iter.hasNext()) { - PhysicalCard attachedCard = iter.next(); - if (sentCardsFromPlay.contains(attachedCard.getAttachedTo())) { - listener.cardCreated(attachedCard); - sentCardsFromPlay.add(attachedCard); - iter.remove(); + while (cardsLeftToSent.size() > 0 && passes > 0) { + Set newCardsLeft = new HashSet(); + for (PhysicalCard physicalCard : cardsLeftToSent) { + PhysicalCard attachedTo = physicalCard.getAttachedTo(); + if (attachedTo == null || sentCardsFromPlay.contains(attachedTo)) { + listener.cardCreated(physicalCard); + sentCardsFromPlay.add(physicalCard); + } else { + newCardsLeft.add(physicalCard); } } + passes--; + cardsLeftToSent = newCardsLeft; } // Finally the stacked ones