From 62dcf9d025d6e47c167ac755201209a9f6978b2f Mon Sep 17 00:00:00 2001 From: TRT <> Date: Sat, 21 Jan 2023 16:12:49 +0100 Subject: [PATCH] More flexibility --- .../src/main/java/forge/game/combat/CombatUtil.java | 11 ++++++----- .../src/main/java/forge/game/phase/PhaseHandler.java | 3 ++- .../java/forge/game/staticability/StaticAbility.java | 6 +++--- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/forge-game/src/main/java/forge/game/combat/CombatUtil.java b/forge-game/src/main/java/forge/game/combat/CombatUtil.java index 4ad747177a2..ae2377c7fe2 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -43,6 +43,7 @@ import forge.game.card.CardLists; import forge.game.card.CardPredicates; import forge.game.card.CardUtil; import forge.game.cost.Cost; +import forge.game.cost.CostPart; import forge.game.keyword.Keyword; import forge.game.keyword.KeywordInterface; import forge.game.phase.PhaseType; @@ -346,17 +347,17 @@ public class CombatUtil { return attackCost; } - public static CardCollection getOptionalAttackCostCreatures(final CardCollection attackers) { - final CardCollection exerters = new CardCollection(); + public static CardCollection getOptionalAttackCostCreatures(final CardCollection attackers, Class costType) { + final CardCollection attackersWithCost = new CardCollection(); for (final Card card : attackers) { for (final StaticAbility stAb : card.getStaticAbilities()) { - if (stAb.hasExertCost(card)) { - exerters.add(card); + if (stAb.hasAttackCost(card, costType)) { + attackersWithCost.add(card); } } } - return exerters; + return attackersWithCost; } public static boolean payRequiredBlockCosts(Game game, Card blocker, Card attacker) { 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 f6b7caccb9d..ad01140dbb3 100644 --- a/forge-game/src/main/java/forge/game/phase/PhaseHandler.java +++ b/forge-game/src/main/java/forge/game/phase/PhaseHandler.java @@ -40,6 +40,7 @@ import forge.game.card.CardZoneTable; import forge.game.card.CounterEnumType; import forge.game.combat.Combat; import forge.game.combat.CombatUtil; +import forge.game.cost.CostExert; import forge.game.event.GameEventAttackersDeclared; import forge.game.event.GameEventBlockersDeclared; import forge.game.event.GameEventCardStatsChanged; @@ -560,7 +561,7 @@ public class PhaseHandler implements java.io.Serializable { } // CR 508.1g - List possibleExerters = CombatUtil.getOptionalAttackCostCreatures(combat.getAttackers()); + List possibleExerters = CombatUtil.getOptionalAttackCostCreatures(combat.getAttackers(), CostExert.class); if (!possibleExerters.isEmpty()) { possibleExerters = whoDeclares.getController().exertAttackers(possibleExerters); } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java index 8946e508ab8..affd5c6ea66 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -39,7 +39,7 @@ import forge.game.card.CardCollectionView; import forge.game.card.CardLists; import forge.game.card.CardState; import forge.game.cost.Cost; -import forge.game.cost.CostExert; +import forge.game.cost.CostPart; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; import forge.game.player.Player; @@ -335,11 +335,11 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target); } - public final boolean hasExertCost(final Card attacker) { + public final boolean hasAttackCost(final Card attacker, Class costType) { if (this.isSuppressed() || !getParam("Mode").equals("OptionalAttackCost") || !this.checkConditions()) { return false; } - return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, null).hasSpecificCostType(CostExert.class); + return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, null).hasSpecificCostType(costType); } public final Cost getBlockCost(final Card blocker, final Card attacker) {