From 5ae86d51f011c7c505be5d2941f766a74258257d Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Wed, 23 Mar 2022 23:00:45 +0100 Subject: [PATCH] Use timestamps --- .../effects/LifeExchangeVariantEffect.java | 1 - .../game/ability/effects/MustBlockEffect.java | 13 ++++------ .../src/main/java/forge/game/card/Card.java | 25 ++++++++++--------- 3 files changed, 18 insertions(+), 21 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/LifeExchangeVariantEffect.java b/forge-game/src/main/java/forge/game/ability/effects/LifeExchangeVariantEffect.java index b4290864f67..c3d8c5359ca 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/LifeExchangeVariantEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/LifeExchangeVariantEffect.java @@ -8,7 +8,6 @@ import forge.game.card.Card; import forge.game.event.GameEventCardStatsChanged; import forge.game.player.Player; import forge.game.spellability.SpellAbility; -import forge.game.zone.ZoneType; public class LifeExchangeVariantEffect extends SpellAbilityEffect { diff --git a/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java b/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java index 4e9a4fdc4b2..57e817ab00b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/MustBlockEffect.java @@ -59,13 +59,15 @@ public class MustBlockEffect extends SpellAbilityEffect { final boolean mustBlockAll = sa.hasParam("BlockAllDefined"); + long ts = game.getNextTimestamp(); + for (final Card c : tgtCards) { if ((!sa.usesTargeting()) || c.canBeTargetedBy(sa)) { if (mustBlockAll) { - c.addMustBlockCards(cards); + c.addMustBlockCards(ts, cards); } else { final Card attacker = cards.get(0); - c.addMustBlockCard(attacker); + c.addMustBlockCard(ts, attacker); } } } @@ -77,12 +79,7 @@ public class MustBlockEffect extends SpellAbilityEffect { @Override public void run() { for (final Card c : tgtCards) { - if (mustBlockAll) { - c.removeMustBlockCards(cards); - } else { - final Card attacker = cards.get(0); - c.removeMustBlockCard(attacker); - } + c.removeMustBlockCards(ts); } } }; diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 955aab50c61..59215e84894 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -108,8 +108,9 @@ public class Card extends GameEntity implements Comparable, IHasSVars { // cards attached or otherwise linked to this card private CardCollection hauntedBy, devouredCards, exploitedCards, delvedCards, convokedCards, imprintedCards, encodedCards; - private CardCollection mustBlockCards, gainControlTargets, chosenCards; + private CardCollection gainControlTargets, chosenCards; private CardCollection mergedCards; + private Map mustBlockCards = Maps.newHashMap(); private List blockedThisTurn = Lists.newArrayList(); private List blockedByThisTurn = Lists.newArrayList(); @@ -1313,22 +1314,22 @@ public class Card extends GameEntity implements Comparable, IHasSVars { //MustBlockCards are cards that this Card must block if able in an upcoming combat. //This is cleared at the end of each turn. public final CardCollectionView getMustBlockCards() { - return CardCollection.getView(mustBlockCards); + return CardCollection.getView(Iterables.concat(mustBlockCards.values())); } - public final void addMustBlockCard(final Card c) { - mustBlockCards = view.addCard(mustBlockCards, c, TrackableProperty.MustBlockCards); + public final void addMustBlockCard(long ts, final Card c) { + mustBlockCards.put(ts, new CardCollection(c)); + view.setCards(null, Iterables.concat(mustBlockCards.values()), TrackableProperty.MustBlockCards); } - public final void addMustBlockCards(final Iterable attackersToBlock) { - mustBlockCards = view.addCards(mustBlockCards, attackersToBlock, TrackableProperty.MustBlockCards); + public final void addMustBlockCards(long ts, final Iterable attackersToBlock) { + mustBlockCards.put(ts, new CardCollection(attackersToBlock)); + view.setCards(null, Iterables.concat(mustBlockCards.values()), TrackableProperty.MustBlockCards); } - public final void removeMustBlockCard(final Card c) { - mustBlockCards = view.removeCard(mustBlockCards, c, TrackableProperty.MustBlockCards); - } - public final void removeMustBlockCards(final Iterable attackersToBlock) { - mustBlockCards = view.removeCards(mustBlockCards, attackersToBlock, TrackableProperty.MustBlockCards); + public final void removeMustBlockCards(long ts) { + mustBlockCards.remove(ts); + view.setCards(null, Iterables.concat(mustBlockCards.values()), TrackableProperty.MustBlockCards); } public final void clearMustBlockCards() { - mustBlockCards = view.clearCards(mustBlockCards, TrackableProperty.MustBlockCards); + view.setCards(null, null, TrackableProperty.MustBlockCards); } public final void setMustAttackEntity(final GameEntity e) {