diff --git a/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java b/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java index 3ad125f1842..d03bdbbcca3 100644 --- a/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java +++ b/forge-game/src/main/java/forge/game/event/GameEventRemoveSummoningSickness.java @@ -2,14 +2,15 @@ package forge.game.event; import forge.game.card.Card; -import java.util.Arrays; import java.util.Collection; +import java.util.List; public class GameEventRemoveSummoningSickness extends GameEvent { public final Collection cards; - public GameEventRemoveSummoningSickness(Card affected) { - cards = Arrays.asList(affected); + + public GameEventRemoveSummoningSickness(List affected) { + cards = affected; } @Override diff --git a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java index bc1ce81f375..6ed0154586b 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -73,6 +73,7 @@ public class PhaseHandler implements java.io.Serializable { private final transient Stack extraTurns = new Stack<>(); private final transient Map> extraPhases = Maps.newEnumMap(PhaseType.class); + private final List toUpdate = new ArrayList<>(); private int nUpkeepsThisTurn = 0; private int nUpkeepsThisGame = 0; @@ -177,10 +178,11 @@ public class PhaseHandler implements java.io.Serializable { // Tokens starting game in play should suffer from Sum. Sickness final CardCollectionView list = playerTurn.getCardsIncludePhasingIn(ZoneType.Battlefield); + toUpdate.clear(); for (final Card c : list) { if (playerTurn.getTurn() > 0 || !c.isStartsGameInPlay()) { - if (c.isSick() && c.isToken()) //update token stacking on battlefield - game.fireEvent(new GameEventRemoveSummoningSickness(c)); + if (c.isSick() && c.isToken()) //add toupdate stacking tokens + toUpdate.add(c); c.setSickness(false); } @@ -191,6 +193,8 @@ public class PhaseHandler implements java.io.Serializable { final List lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED); playerTurn.setNumPowerSurgeLands(lands.size()); + if (!toUpdate.isEmpty()) //fire event toupdate stacking tokens + game.fireEvent(new GameEventRemoveSummoningSickness(toUpdate)); } game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType)); diff --git a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java index 799364cff24..8a5200edb97 100644 --- a/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java +++ b/forge-gui/src/main/java/forge/control/FControlGameEventHandler.java @@ -357,6 +357,12 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base { return processCards(cards, cardsRefreshDetails); } + @Override + public Void visit(final GameEventRemoveSummoningSickness event) { + processCards(event.cards, cardsRefreshDetails); + return processCards(event.cards, cardsUpdate); + } + @Override public Void visit(final GameEventShuffle event) { //pfps the change to the library has already been performed by a setCards call