From dba802124df75cd3df303d4f697dd047439990c6 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 18 Feb 2022 18:09:42 +0100 Subject: [PATCH] blockedThisTurn: switch to LKI list --- .../game/ability/effects/BlockEffect.java | 5 +++-- .../src/main/java/forge/game/card/Card.java | 22 ++++++++----------- .../java/forge/game/card/CardProperty.java | 8 +++---- .../java/forge/game/phase/PhaseHandler.java | 5 +++-- 4 files changed, 19 insertions(+), 21 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/BlockEffect.java b/forge-game/src/main/java/forge/game/ability/effects/BlockEffect.java index f229f4df2f2..04c9afa2e4d 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/BlockEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/BlockEffect.java @@ -12,6 +12,7 @@ import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardCollection; +import forge.game.card.CardUtil; import forge.game.combat.Combat; import forge.game.event.GameEventCombatChanged; import forge.game.spellability.SpellAbility; @@ -56,8 +57,8 @@ public class BlockEffect extends SpellAbilityEffect { combat.addBlocker(attacker, blocker); combat.orderAttackersForDamageAssignment(blocker); - blocker.addBlockedThisTurn(attacker); - attacker.addBlockedByThisTurn(blocker); + blocker.addBlockedThisTurn(CardUtil.getLKICopy(attacker)); + attacker.addBlockedByThisTurn(CardUtil.getLKICopy(blocker)); { final Map runParams = AbilityKey.newMap(); 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 35535d84f81..a38c7b5cc7b 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,10 @@ 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, blockedThisTurn, blockedByThisTurn; + private CardCollection mustBlockCards, gainControlTargets, chosenCards; private CardCollection mergedCards; + private List blockedThisTurn = Lists.newArrayList(); + private List blockedByThisTurn = Lists.newArrayList(); private CardCollection untilLeavesBattlefield = new CardCollection(); @@ -1289,30 +1291,24 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return count; } - public CardCollectionView getBlockedThisTurn() { - return CardCollection.getView(blockedThisTurn); + public List getBlockedThisTurn() { + return blockedThisTurn; } public void addBlockedThisTurn(Card attacker) { - if (blockedThisTurn == null) { - blockedThisTurn = new CardCollection(); - } blockedThisTurn.add(attacker); } public void clearBlockedThisTurn() { - blockedThisTurn = null; + blockedThisTurn.clear(); } - public CardCollectionView getBlockedByThisTurn() { - return CardCollection.getView(blockedByThisTurn); + public List getBlockedByThisTurn() { + return blockedByThisTurn; } public void addBlockedByThisTurn(Card blocker) { - if (blockedByThisTurn == null) { - blockedByThisTurn = new CardCollection(); - } blockedByThisTurn.add(blocker); } public void clearBlockedByThisTurn() { - blockedByThisTurn = null; + blockedByThisTurn.clear(); } //MustBlockCards are cards that this Card must block if able in an upcoming combat. diff --git a/forge-game/src/main/java/forge/game/card/CardProperty.java b/forge-game/src/main/java/forge/game/card/CardProperty.java index 5dbeeb00428..50b3f85d3bf 100644 --- a/forge-game/src/main/java/forge/game/card/CardProperty.java +++ b/forge-game/src/main/java/forge/game/card/CardProperty.java @@ -1583,8 +1583,8 @@ public class CardProperty { } else if (property.startsWith("blockedByThisTurn")) { return !card.getBlockedByThisTurn().isEmpty(); } else if (property.startsWith("blockedValidThisTurn ")) { - CardCollectionView blocked = card.getBlockedThisTurn(); - if (blocked == null) { + List blocked = card.getBlockedThisTurn(); + if (blocked.isEmpty()) { return false; } String valid = property.split(" ")[1]; @@ -1600,8 +1600,8 @@ public class CardProperty { } return false; } else if (property.startsWith("blockedByValidThisTurn ")) { - CardCollectionView blocked = card.getBlockedByThisTurn(); - if (blocked == null) { + List blocked = card.getBlockedByThisTurn(); + if (blocked.isEmpty()) { return false; } String valid = property.split(" ")[1]; 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 e5e357034bb..17cfd4e139e 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -34,6 +34,7 @@ import forge.game.ability.effects.SkipPhaseEffect; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardLists; +import forge.game.card.CardUtil; import forge.game.card.CardPredicates.Presets; import forge.game.card.CardZoneTable; import forge.game.card.CounterEnumType; @@ -795,8 +796,8 @@ public class PhaseHandler implements java.io.Serializable { // Run this trigger once for each blocker for (final Card b : blockers) { - b.addBlockedThisTurn(a); - a.addBlockedByThisTurn(b); + b.addBlockedThisTurn(CardUtil.getLKICopy(a)); + a.addBlockedByThisTurn(CardUtil.getLKICopy(b)); final Map runParams = AbilityKey.newMap(); runParams.put(AbilityKey.Attacker, a);