Fix event finally

This commit is contained in:
Anthony Calosa
2019-09-26 21:28:32 +08:00
parent 10e59c0ad7
commit f6df44510b
3 changed files with 16 additions and 5 deletions

View File

@@ -2,14 +2,15 @@ package forge.game.event;
import forge.game.card.Card; import forge.game.card.Card;
import java.util.Arrays;
import java.util.Collection; import java.util.Collection;
import java.util.List;
public class GameEventRemoveSummoningSickness extends GameEvent { public class GameEventRemoveSummoningSickness extends GameEvent {
public final Collection<Card> cards; public final Collection<Card> cards;
public GameEventRemoveSummoningSickness(Card affected) {
cards = Arrays.asList(affected); public GameEventRemoveSummoningSickness(List<Card> affected) {
cards = affected;
} }
@Override @Override

View File

@@ -73,6 +73,7 @@ public class PhaseHandler implements java.io.Serializable {
private final transient Stack<ExtraTurn> extraTurns = new Stack<>(); private final transient Stack<ExtraTurn> extraTurns = new Stack<>();
private final transient Map<PhaseType, Stack<PhaseType>> extraPhases = Maps.newEnumMap(PhaseType.class); private final transient Map<PhaseType, Stack<PhaseType>> extraPhases = Maps.newEnumMap(PhaseType.class);
private final List<Card> toUpdate = new ArrayList<>();
private int nUpkeepsThisTurn = 0; private int nUpkeepsThisTurn = 0;
private int nUpkeepsThisGame = 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 // Tokens starting game in play should suffer from Sum. Sickness
final CardCollectionView list = playerTurn.getCardsIncludePhasingIn(ZoneType.Battlefield); final CardCollectionView list = playerTurn.getCardsIncludePhasingIn(ZoneType.Battlefield);
toUpdate.clear();
for (final Card c : list) { for (final Card c : list) {
if (playerTurn.getTurn() > 0 || !c.isStartsGameInPlay()) { if (playerTurn.getTurn() > 0 || !c.isStartsGameInPlay()) {
if (c.isSick() && c.isToken()) //update token stacking on battlefield if (c.isSick() && c.isToken()) //add toupdate stacking tokens
game.fireEvent(new GameEventRemoveSummoningSickness(c)); toUpdate.add(c);
c.setSickness(false); c.setSickness(false);
} }
@@ -191,6 +193,8 @@ public class PhaseHandler implements java.io.Serializable {
final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED); final List<Card> lands = CardLists.filter(playerTurn.getLandsInPlay(), Presets.UNTAPPED);
playerTurn.setNumPowerSurgeLands(lands.size()); playerTurn.setNumPowerSurgeLands(lands.size());
if (!toUpdate.isEmpty()) //fire event toupdate stacking tokens
game.fireEvent(new GameEventRemoveSummoningSickness(toUpdate));
} }
game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType)); game.fireEvent(new GameEventTurnPhase(playerTurn, phase, phaseType));

View File

@@ -357,6 +357,12 @@ public class FControlGameEventHandler extends IGameEventVisitor.Base<Void> {
return processCards(cards, cardsRefreshDetails); return processCards(cards, cardsRefreshDetails);
} }
@Override
public Void visit(final GameEventRemoveSummoningSickness event) {
processCards(event.cards, cardsRefreshDetails);
return processCards(event.cards, cardsUpdate);
}
@Override @Override
public Void visit(final GameEventShuffle event) { public Void visit(final GameEventShuffle event) {
//pfps the change to the library has already been performed by a setCards call //pfps the change to the library has already been performed by a setCards call