From 2270ea2e106d186b67c6248c651d2a06b80ace97 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Sun, 19 Feb 2023 09:28:54 +0100 Subject: [PATCH] StaticAbility: remove applyAbility --- .../main/java/forge/ai/ComputerUtilCard.java | 2 +- .../java/forge/ai/ComputerUtilCombat.java | 4 +- .../main/java/forge/ai/CreatureEvaluator.java | 18 ++--- .../main/java/forge/ai/ability/AttachAi.java | 10 +-- .../src/main/java/forge/game/GameAction.java | 10 +-- .../main/java/forge/game/GameActionUtil.java | 2 +- .../src/main/java/forge/game/card/Card.java | 16 +---- .../java/forge/game/combat/CombatUtil.java | 45 ++---------- .../java/forge/game/cost/CostAdjustment.java | 6 +- .../game/staticability/StaticAbility.java | 72 +++++-------------- ...StaticAbilityActivateAbilityAsIfHaste.java | 2 +- .../staticability/StaticAbilityAdapt.java | 2 +- ...cAbilityAssignCombatDamageAsUnblocked.java | 2 +- .../StaticAbilityAttackRestrict.java | 4 +- .../StaticAbilityAttackVigilance.java | 2 +- .../StaticAbilityCanAttackDefender.java | 2 +- .../StaticAbilityCantAttach.java | 2 +- .../StaticAbilityCantAttackBlock.java | 70 ++++++++++++++++-- .../StaticAbilityCantBeCast.java | 6 +- .../StaticAbilityCantBecomeMonarch.java | 2 +- .../StaticAbilityCantDiscard.java | 2 +- .../staticability/StaticAbilityCantDraw.java | 2 +- .../StaticAbilityCantGainLosePayLife.java | 14 ++-- .../StaticAbilityCantPhaseIn.java | 2 +- .../StaticAbilityCantPhaseOut.java | 2 +- .../StaticAbilityCantPreventDamage.java | 18 ++++- .../StaticAbilityCantPutCounter.java | 4 +- .../StaticAbilityCantSacrifice.java | 2 +- .../StaticAbilityCantSetSchemesInMotion.java | 2 +- .../StaticAbilityCantTarget.java | 4 +- .../StaticAbilityCantTransform.java | 2 +- .../StaticAbilityCantVenture.java | 2 +- .../StaticAbilityCastWithFlash.java | 4 +- .../StaticAbilityCombatDamageToughness.java | 2 +- .../staticability/StaticAbilityCrewValue.java | 6 +- .../StaticAbilityDisableTriggers.java | 2 +- .../StaticAbilityIgnoreHexproofShroud.java | 7 +- .../StaticAbilityIgnoreLegendRule.java | 2 +- .../StaticAbilityMustAttack.java | 2 +- .../staticability/StaticAbilityMustBlock.java | 2 +- .../StaticAbilityMustTarget.java | 2 +- .../StaticAbilityNumLoyaltyAct.java | 4 +- .../StaticAbilityPanharmonicon.java | 2 +- .../StaticAbilityUnspentMana.java | 2 +- 44 files changed, 173 insertions(+), 199 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java index 45505593e64..127b0651f02 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCard.java @@ -1758,7 +1758,7 @@ public class ComputerUtilCard { // remove old boost that might be copied for (final StaticAbility stAb : c.getStaticAbilities()) { vCard.removePTBoost(c.getTimestamp(), stAb.getId()); - if (!stAb.getParam("Mode").equals("Continuous")) { + if (!stAb.checkMode("Continuous")) { continue; } if (!stAb.hasParam("Affected")) { diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index c249824032a..c1f01f83ece 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -919,7 +919,7 @@ public class ComputerUtilCombat { final CardCollectionView cardList = CardCollection.combine(game.getCardsIn(ZoneType.Battlefield), game.getCardsIn(ZoneType.Command)); for (final Card card : cardList) { for (final StaticAbility stAb : card.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals("Continuous")) { + if (!stAb.checkMode("Continuous")) { continue; } if (!stAb.hasParam("Affected") || !stAb.getParam("Affected").contains("blocking")) { @@ -1215,7 +1215,7 @@ public class ComputerUtilCombat { final CardCollectionView cardList = CardCollection.combine(game.getCardsIn(ZoneType.Battlefield), game.getCardsIn(ZoneType.Command)); for (final Card card : cardList) { for (final StaticAbility stAb : card.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals("Continuous")) { + if (!stAb.checkMode("Continuous")) { continue; } if (!stAb.hasParam("Affected") || !stAb.getParam("Affected").contains("attacking")) { diff --git a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java index aac52cdaa9d..c9a778e26d5 100644 --- a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java +++ b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java @@ -10,10 +10,9 @@ import forge.game.card.CounterEnumType; import forge.game.cost.CostPayEnergy; import forge.game.keyword.Keyword; import forge.game.spellability.SpellAbility; -import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbilityAssignCombatDamageAsUnblocked; +import forge.game.staticability.StaticAbilityCantAttackBlock; import forge.game.staticability.StaticAbilityMustAttack; -import forge.game.zone.ZoneType; import java.util.List; @@ -62,17 +61,10 @@ public class CreatureEvaluator implements Function { if (c.hasKeyword(Keyword.HORSEMANSHIP)) { value += addValue(power * 10, "horses"); } - boolean unblockable = false; - for (final Card ca : c.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantBlockBy", c, null)) { - value += addValue(power * 10, "unblockable"); - unblockable = true; - break; - } - } - } - if (!unblockable) { + + if (StaticAbilityCantAttackBlock.cantBlockBy(c, null)) { + value += addValue(power * 10, "unblockable"); + } else { if (StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c) || StaticAbilityAssignCombatDamageAsUnblocked.assignCombatDamageAsUnblocked(c, false)) { value += addValue(power * 6, "thorns"); diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index dfa18f94992..8645ec07ced 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -44,6 +44,7 @@ import forge.game.player.PlayerActionConfirmMode; import forge.game.spellability.SpellAbility; import forge.game.spellability.TargetRestrictions; import forge.game.staticability.StaticAbility; +import forge.game.staticability.StaticAbilityCantAttackBlock; import forge.game.trigger.Trigger; import forge.game.trigger.TriggerType; import forge.game.zone.ZoneType; @@ -662,13 +663,8 @@ public class AttachAi extends SpellAbilityAi { cardPriority += 40; } //check if card is generally unblockable - for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantBlockBy", card, null)) { - cardPriority += 50; - break; - } - } + if (StaticAbilityCantAttackBlock.cantBlockBy(card, null)) { + cardPriority += 50; } // Prefer "tap to deal damage" // TODO : Skip this one if triggers on combat damage only? diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index f7c6832f0da..61ed25a5f6c 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -803,11 +803,11 @@ public class GameAction { // need to refresh ability text for affected cards for (final StaticAbility stAb : c.getStaticAbilities()) { - if (stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions()) { continue; } - if (stAb.getParam("Mode").equals("CantBlockBy")) { + if (stAb.checkMode("CantBlockBy")) { if (!stAb.hasParam("ValidAttacker") || (stAb.hasParam("ValidBlocker") && stAb.getParam("ValidBlocker").equals("Creature.Self"))) { continue; } @@ -817,7 +817,7 @@ public class GameAction { } } } - if (stAb.getParam("Mode").equals(StaticAbilityCantAttackBlock.MinMaxBlockerMode)) { + if (stAb.checkMode(StaticAbilityCantAttackBlock.MinMaxBlockerMode)) { for (Card creature : Iterables.filter(game.getCardsIn(ZoneType.Battlefield), CardPredicates.Presets.CREATURES)) { if (stAb.matchesValidParam("ValidCard", creature)) { creature.updateAbilityTextForView(); @@ -1077,7 +1077,7 @@ public class GameAction { public boolean hasStaticAbilityAffectingZone(ZoneType zone, StaticAbilityLayer layer) { for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals("Continuous") || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions("Continuous")) { continue; } if (layer != null && !stAb.getLayers().contains(layer)) { @@ -1126,7 +1126,7 @@ public class GameAction { // need to get Card from preList if able final Card co = preList.get(c); for (StaticAbility stAb : co.getStaticAbilities()) { - if (stAb.getParam("Mode").equals("Continuous")) { + if (stAb.checkMode("Continuous")) { staticAbilities.add(stAb); } } diff --git a/forge-game/src/main/java/forge/game/GameActionUtil.java b/forge-game/src/main/java/forge/game/GameActionUtil.java index c283301bb2b..92712f53785 100644 --- a/forge-game/src/main/java/forge/game/GameActionUtil.java +++ b/forge-game/src/main/java/forge/game/GameActionUtil.java @@ -396,7 +396,7 @@ public final class GameActionUtil { for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals("OptionalCost") || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions("OptionalCost")) { continue; } 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 fc376c1aacc..7e643ecd332 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -2580,14 +2580,14 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } boolean found = false; - if (stAb.getParam("Mode").equals("CantBlockBy")) { + if (stAb.checkMode("CantBlockBy")) { if (!stAb.hasParam("ValidAttacker") || (stAb.hasParam("ValidBlocker") && stAb.getParam("ValidBlocker").equals("Creature.Self"))) { continue; } if (stAb.matchesValidParam("ValidAttacker", this)) { found = true; } - } else if (stAb.getParam("Mode").equals(StaticAbilityCantAttackBlock.MinMaxBlockerMode)) { + } else if (stAb.checkMode(StaticAbilityCantAttackBlock.MinMaxBlockerMode)) { if (stAb.matchesValidParam("ValidCard", this)) { found = true; } @@ -5560,17 +5560,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } public final boolean canDamagePrevented(final boolean isCombat) { - CardCollection list = new CardCollection(getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)); - list.add(this); - for (final Card ca : list) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantPreventDamage", this, isCombat)) { - return false; - } - } - } - - return true; + return !StaticAbilityCantPreventDamage.cantPreventDamage(this, isCombat); } // This is used by the AI to forecast an effect (so it must not change the game state) 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 9c816a476a5..5a56144900b 100644 --- a/forge-game/src/main/java/forge/game/combat/CombatUtil.java +++ b/forge-game/src/main/java/forge/game/combat/CombatUtil.java @@ -255,38 +255,16 @@ public class CombatUtil { } } - // Keywords - // replace with Static Ability if able - if (attacker.hasKeyword("CARDNAME can't attack.") || attacker.hasKeyword("CARDNAME can't attack or block.")) { - return false; - } - // CantAttack static abilities - for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantAttack", attacker, defender)) { - return false; - } - } + if (StaticAbilityCantAttackBlock.cantAttack(attacker, defender)) { + return false; } return true; } public static boolean isAttackerSick(final Card attacker, final GameEntity defender) { - final Game game = attacker.getGame(); - if (!attacker.isSick()) { - return false; - } - - for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CanAttackIfHaste", attacker, defender)) { - return false; - } - } - } - return true; + return !StaticAbilityCantAttackBlock.canAttackHaste(attacker, defender); } /** @@ -575,12 +553,8 @@ public class CombatUtil { } // Unblockable check - for (final Card ca : attacker.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantBlockBy", attacker, null)) { - return false; - } - } + if (StaticAbilityCantAttackBlock.cantBlockBy(attacker, null)) { + return false; } return canBeBlocked(attacker, defendingPlayer); @@ -1146,7 +1120,6 @@ public class CombatUtil { return false; } - final Game game = attacker.getGame(); if (!canBlock(blocker, nextTurn)) { return false; } @@ -1172,12 +1145,8 @@ public class CombatUtil { } // CantBlockBy static abilities - for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { - for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (stAb.applyAbility("CantBlockBy", attacker, blocker)) { - return false; - } - } + if (StaticAbilityCantAttackBlock.cantBlockBy(attacker, blocker)) { + return false; } return true; diff --git a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java index 766d8f021a5..45f498acaea 100644 --- a/forge-game/src/main/java/forge/game/cost/CostAdjustment.java +++ b/forge-game/src/main/java/forge/game/cost/CostAdjustment.java @@ -75,7 +75,7 @@ public class CostAdjustment { // Sort abilities to apply them in proper order for (Card c : cardsOnBattlefield) { for (final StaticAbility stAb : c.getStaticAbilities()) { - if (stAb.getParam("Mode").equals("RaiseCost")) { + if (stAb.checkMode("RaiseCost")) { raiseAbilities.add(stAb); } } @@ -191,10 +191,10 @@ public class CostAdjustment { // Sort abilities to apply them in proper order for (Card c : cardsOnBattlefield) { for (final StaticAbility stAb : c.getStaticAbilities()) { - if (stAb.getParam("Mode").equals("ReduceCost")) { + if (stAb.checkMode("ReduceCost")) { reduceAbilities.add(stAb); } - else if (stAb.getParam("Mode").equals("SetCost")) { + else if (stAb.checkMode("SetCost")) { setAbilities.add(stAb); } } 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 ec7b67c5631..b7355c05205 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -119,7 +119,7 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone * @return the applicable layers. */ private final Set generateLayer() { - if (!getParam("Mode").equals("Continuous")) { + if (!checkMode("Continuous")) { return EnumSet.noneOf(StaticAbilityLayer.class); } @@ -273,77 +273,28 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone * conditions are fulfilled. */ private boolean shouldApplyContinuousAbility(final StaticAbilityLayer layer, final boolean previousRun) { - return getParam("Mode").equals("Continuous") && layers.contains(layer) && !isSuppressed() && checkConditions() && (previousRun || getHostCard().getStaticAbilities().contains(this)); - } - - public final boolean applyAbility(final String mode, final Card card, final boolean isCombat) { - // don't apply the ability if it hasn't got the right mode - if (!getParam("Mode").equals(mode)) { - return false; - } - - if (this.isSuppressed() || !this.checkConditions()) { - return false; - } - - if (mode.equals("CantPreventDamage")) { - return StaticAbilityCantPreventDamage.applyCantPreventDamage(this, card, isCombat); - } - - return false; - } - - /** - * Apply ability. - * - * @param mode - * the mode - * @param card - * the card - * @param target - * the target - * @return true, if successful - */ - public final boolean applyAbility(final String mode, final Card card, final GameEntity target) { - // don't apply the ability if it hasn't got the right mode - if (!getParam("Mode").equals(mode)) { - return false; - } - - if (this.isSuppressed() || !this.checkConditions()) { - return false; - } - - if (mode.equals("CantAttack")) { - return StaticAbilityCantAttackBlock.applyCantAttackAbility(this, card, target); - } else if (mode.equals("CantBlockBy")) { // null allowed, so no instanceof check - return StaticAbilityCantAttackBlock.applyCantBlockByAbility(this, card, (Card)target); - } else if (mode.equals("CanAttackIfHaste")) { - return StaticAbilityCantAttackBlock.applyCanAttackHasteAbility(this, card, target); - } - - return false; + return layers.contains(layer) && checkConditions("Continuous") && (previousRun || getHostCard().getStaticAbilities().contains(this)); } public final Cost getAttackCost(final Card attacker, final GameEntity target, final List attackersWithOptionalCost) { - if (!getParam("Mode").equals("CantAttackUnless") && (!getParam("Mode").equals("OptionalAttackCost") || !attackersWithOptionalCost.contains(attacker))) { + if (!checkMode("CantAttackUnless") && (!checkMode("OptionalAttackCost") || !attackersWithOptionalCost.contains(attacker))) { return null; } - if (this.isSuppressed() || !this.checkConditions()) { + if (!this.checkConditions()) { return null; } return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target); } public final boolean hasAttackCost(final Card attacker, Class costType) { - if (this.isSuppressed() || !getParam("Mode").equals("OptionalAttackCost") || !this.checkConditions()) { + if (!checkConditions("OptionalAttackCost")) { return false; } return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, null).hasSpecificCostType(costType); } public final Cost getBlockCost(final Card blocker, final Card attacker) { - if (this.isSuppressed() || !getParam("Mode").equals("CantBlockUnless") || !this.checkConditions()) { + if (!checkConditions("CantBlockUnless")) { return null; } return StaticAbilityCantAttackBlock.getBlockCost(this, blocker, attacker); @@ -365,6 +316,14 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone return true; } + public final boolean checkMode(String mode) { + return getParam("Mode").equals(mode); + } + + public final boolean checkConditions(String mode) { + return checkMode(mode) && checkConditions(); + } + /** * Check conditions. * @@ -375,6 +334,9 @@ public class StaticAbility extends CardTraitBase implements IIdentifiable, Clone final Game game = getHostCard().getGame(); final PhaseHandler ph = game.getPhaseHandler(); + if (isSuppressed()) { + return false; + } if (getHostCard().isPhasedOut()) { return false; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java index 64249cd9b82..c52ac164de3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityActivateAbilityAsIfHaste.java @@ -31,7 +31,7 @@ public class StaticAbilityActivateAbilityAsIfHaste { public static boolean canActivate(final Card card) { for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAdapt.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAdapt.java index b1507945a95..71633f336e5 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAdapt.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAdapt.java @@ -13,7 +13,7 @@ public class StaticAbilityAdapt { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyWithAdapt(stAb, sa, card)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java index 490da6e38b2..856a424cabf 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAssignCombatDamageAsUnblocked.java @@ -16,7 +16,7 @@ public class StaticAbilityAssignCombatDamageAsUnblocked { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackRestrict.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackRestrict.java index a5381ad8181..93c9dc347e8 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackRestrict.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackRestrict.java @@ -14,7 +14,7 @@ public class StaticAbilityAttackRestrict { int max = Integer.MAX_VALUE; for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions() + if (!stAb.checkConditions(MODE) || stAb.hasParam("ValidDefender")) { continue; } @@ -33,7 +33,7 @@ public class StaticAbilityAttackRestrict { int num = Integer.MAX_VALUE; for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions() + if (!stAb.checkConditions(MODE) || !stAb.hasParam("ValidDefender")) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackVigilance.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackVigilance.java index f0627881610..df60e2a6e6a 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackVigilance.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityAttackVigilance.java @@ -12,7 +12,7 @@ public class StaticAbilityAttackVigilance { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanAttackDefender.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanAttackDefender.java index b05f4e184b2..a1100fc5602 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanAttackDefender.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCanAttackDefender.java @@ -34,7 +34,7 @@ public class StaticAbilityCanAttackDefender { // CanAttack static abilities for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java index 4b361cc95b7..2b1f4e07733 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttach.java @@ -12,7 +12,7 @@ public class StaticAbilityCantAttach { // CantTarget static abilities for (final Card ca : target.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java index d3616157dd7..3fc1204041f 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java @@ -6,12 +6,12 @@ * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ @@ -38,12 +38,35 @@ import forge.game.zone.ZoneType; * The Class StaticAbility_CantBeCast. */ public class StaticAbilityCantAttackBlock { - + public static String CantAttackMode = "CantAttack"; + public static String CantBlockByMode = "CantBlockBy"; + public static String CanAttackHasteMode = "CanAttackIfHaste"; public static String MinMaxBlockerMode = "MinMaxBlocker"; + public static boolean cantAttack(final Card attacker, final GameEntity defender) { + // Keywords + // replace with Static Ability if able + if (attacker.hasKeyword("CARDNAME can't attack.") || attacker.hasKeyword("CARDNAME can't attack or block.")) { + return true; + } + + for (final Card ca : attacker.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(CantAttackMode)) { + continue; + } + + if (applyCantAttackAbility(stAb, attacker, defender)) { + return true; + } + } + } + return false; + } + /** * TODO Write javadoc for this method. - * + * * @param stAb * a StaticAbility * @param card @@ -100,6 +123,21 @@ public class StaticAbilityCantAttackBlock { return true; } + public static boolean cantBlockBy(final Card attacker, final Card blocker) + { + for (final Card ca : attacker.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(CantBlockByMode)) { + continue; + } + if (applyCantBlockByAbility(stAb, attacker, blocker)) { + return true; + } + } + } + return false; + } + /** * returns true if attacker can't be blocked by blocker * @param stAb @@ -156,7 +194,7 @@ public class StaticAbilityCantAttackBlock { /** * TODO Write javadoc for this method. - * + * * @param stAb * a StaticAbility * @param attacker @@ -196,7 +234,7 @@ public class StaticAbilityCantAttackBlock { /** * TODO Write javadoc for this method. - * + * * @param stAb * a StaticAbility * @param blocker @@ -221,6 +259,24 @@ public class StaticAbilityCantAttackBlock { return new Cost(costString, true); } + public static boolean canAttackHaste(final Card attacker, final GameEntity defender) { + final Game game = attacker.getGame(); + if (!attacker.isSick()) { + return true; + } + for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(CanAttackHasteMode)) { + continue; + } + if (applyCanAttackHasteAbility(stAb, attacker, defender)) { + return true; + } + } + } + return false; + } + public static boolean applyCanAttackHasteAbility(final StaticAbility stAb, final Card card, final GameEntity target) { if (!stAb.matchesValidParam("ValidCard", card)) { return false; @@ -243,7 +299,7 @@ public class StaticAbilityCantAttackBlock { final Game game = attacker.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MinMaxBlockerMode) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MinMaxBlockerMode)) { continue; } applyMinMaxBlockerAbility(stAb, attacker, defender, result); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java index 800f2742c2f..4bbc94fa629 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java @@ -45,7 +45,7 @@ public class StaticAbilityCantBeCast { allp.add(card); for (final Card ca : allp) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(CantBeCast) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(CantBeCast)) { continue; } if (applyCantBeCastAbility(stAb, spell, card, activator)) { @@ -63,7 +63,7 @@ public class StaticAbilityCantBeCast { final Game game = activator.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(CantBeActivated) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(CantBeActivated)) { continue; } if (applyCantBeActivatedAbility(stAb, spell, card, activator)) { @@ -78,7 +78,7 @@ public class StaticAbilityCantBeCast { final Game game = activator.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(CantPlayLand) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(CantPlayLand)) { continue; } if (applyCantPlayLandAbility(stAb, card, activator)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java index 3d8c49d5542..a820939040c 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBecomeMonarch.java @@ -13,7 +13,7 @@ public class StaticAbilityCantBecomeMonarch { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantBecomeMonarchAbility(stAb, player)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDiscard.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDiscard.java index f3b7749e4a4..caba7ba0079 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDiscard.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDiscard.java @@ -14,7 +14,7 @@ public class StaticAbilityCantDiscard { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDraw.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDraw.java index 90739fc91c1..8e2b72543cf 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDraw.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantDraw.java @@ -22,7 +22,7 @@ public class StaticAbilityCantDraw { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } amount = applyCantDrawAmountAbility(stAb, player, amount); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantGainLosePayLife.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantGainLosePayLife.java index 9d54f41cd6a..6932981cb0f 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantGainLosePayLife.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantGainLosePayLife.java @@ -16,11 +16,11 @@ public class StaticAbilityCantGainLosePayLife { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!(stAb.getParam("Mode").equals(MODE_CANT_GAIN_LIFE) || stAb.getParam("Mode").equals(MODE_CANT_CHANGE_LIFE))) { + if (!(stAb.checkMode(MODE_CANT_GAIN_LIFE) || stAb.checkMode(MODE_CANT_CHANGE_LIFE))) { continue; } - if (stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions()) { continue; } @@ -36,11 +36,7 @@ public class StaticAbilityCantGainLosePayLife { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE_CANT_CHANGE_LIFE)) { - continue; - } - - if (stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE_CANT_CHANGE_LIFE)) { continue; } @@ -57,11 +53,11 @@ public class StaticAbilityCantGainLosePayLife { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!(stAb.getParam("Mode").equals(MODE_CANT_PAY_LIFE) || stAb.getParam("Mode").equals(MODE_CANT_CHANGE_LIFE))) { + if (!(stAb.checkMode(MODE_CANT_PAY_LIFE) || stAb.checkMode(MODE_CANT_CHANGE_LIFE))) { continue; } - if (stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions()) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseIn.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseIn.java index 66067e4736d..4139a8b8707 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseIn.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseIn.java @@ -12,7 +12,7 @@ public class StaticAbilityCantPhaseIn { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantPhaseIn(stAb, card)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseOut.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseOut.java index d132d35ec3b..f51c6ba7350 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseOut.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPhaseOut.java @@ -12,7 +12,7 @@ public class StaticAbilityCantPhaseOut { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantPhaseOut(stAb, card)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPreventDamage.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPreventDamage.java index 5d34e605262..c48d8579a41 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPreventDamage.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPreventDamage.java @@ -1,11 +1,27 @@ package forge.game.staticability; import forge.game.card.Card; +import forge.game.card.CardCollection; +import forge.game.zone.ZoneType; public class StaticAbilityCantPreventDamage { - public StaticAbilityCantPreventDamage() { + static String MODE = "CantPreventDamage"; + public static boolean cantPreventDamage(final Card source, final boolean isCombat) { + CardCollection list = new CardCollection(source.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)); + list.add(source); + for (final Card ca : list) { + for (final StaticAbility stAb : ca.getStaticAbilities()) { + if (!stAb.checkConditions(MODE)) { + continue; + } + if (applyCantPreventDamage(stAb, source, isCombat)) { + return true; + } + } + } + return false; } public static boolean applyCantPreventDamage(final StaticAbility stAb, final Card source, final boolean isCombat) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPutCounter.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPutCounter.java index b6ed179c3fa..e74710cd897 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPutCounter.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantPutCounter.java @@ -14,7 +14,7 @@ public class StaticAbilityCantPutCounter { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantPutCounter(stAb, card, type)) { @@ -29,7 +29,7 @@ public class StaticAbilityCantPutCounter { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantPutCounter(stAb, player, type)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSacrifice.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSacrifice.java index 86598d04d68..77de6d97658 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSacrifice.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSacrifice.java @@ -13,7 +13,7 @@ public class StaticAbilityCantSacrifice { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSetSchemesInMotion.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSetSchemesInMotion.java index ef8ae2d90a9..019a29e12e6 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSetSchemesInMotion.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantSetSchemesInMotion.java @@ -11,7 +11,7 @@ public class StaticAbilityCantSetSchemesInMotion { public static boolean any(final Game game) { for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } return true; diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java index e3ee25fdb8d..9da52afdfdc 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java @@ -42,7 +42,7 @@ public class StaticAbilityCantTarget { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } @@ -58,7 +58,7 @@ public class StaticAbilityCantTarget { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTransform.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTransform.java index 79dab28f382..e0a643f221b 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTransform.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTransform.java @@ -13,7 +13,7 @@ public class StaticAbilityCantTransform { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantTransformAbility(stAb, card, cause)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantVenture.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantVenture.java index 4f9855155a7..51dce52217e 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantVenture.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantVenture.java @@ -13,7 +13,7 @@ public class StaticAbilityCantVenture { final Game game = player.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyCantVentureAbility(stAb, player)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCastWithFlash.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCastWithFlash.java index 2bc015f0c60..3fbb9cba3cb 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCastWithFlash.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCastWithFlash.java @@ -17,7 +17,7 @@ public class StaticAbilityCastWithFlash { allp.add(card); for (final Card ca : allp) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyWithFlashNeedsInfo(stAb, sa, card, activator)) { @@ -34,7 +34,7 @@ public class StaticAbilityCastWithFlash { allp.add(card); for (final Card ca : allp) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyWithFlashAbility(stAb, sa, card, activator)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCombatDamageToughness.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCombatDamageToughness.java index a1a64c04879..384687ffb5c 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCombatDamageToughness.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCombatDamageToughness.java @@ -12,7 +12,7 @@ public class StaticAbilityCombatDamageToughness { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCrewValue.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCrewValue.java index 42d49070d82..b810b8391b5 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCrewValue.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCrewValue.java @@ -12,7 +12,7 @@ public class StaticAbilityCrewValue { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (hasAnyCrewValue(stAb, card)) { @@ -31,7 +31,7 @@ public class StaticAbilityCrewValue { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (crewsWithToughness(stAb, card)) { @@ -51,7 +51,7 @@ public class StaticAbilityCrewValue { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (!stAb.matchesValidParam("ValidCard", card)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityDisableTriggers.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityDisableTriggers.java index efeee10ec00..99dbb9794e3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityDisableTriggers.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityDisableTriggers.java @@ -33,7 +33,7 @@ public class StaticAbilityDisableTriggers { for (final Card ca : cardList) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java index b0a12c9a157..a0c48aceac3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreHexproofShroud.java @@ -17,13 +17,10 @@ public class StaticAbilityIgnoreHexproofShroud { final Game game = entity.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (keyword.equals(Keyword.HEXPROOF) && !stAb.getParam("Mode").equals(HEXPROOF_MODE)) { + if (keyword.equals(Keyword.HEXPROOF) && !stAb.checkConditions(HEXPROOF_MODE)) { continue; } - if (keyword.equals(Keyword.SHROUD) && !stAb.getParam("Mode").equals(SHROUD_MODE)) { - continue; - } - if (stAb.isSuppressed() || !stAb.checkConditions()) { + if (keyword.equals(Keyword.SHROUD) && !stAb.checkConditions(SHROUD_MODE)) { continue; } if (commonAbility(stAb, entity, spellAbility)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java index 0b7211e0d49..17aa48973d0 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityIgnoreLegendRule.java @@ -12,7 +12,7 @@ public class StaticAbilityIgnoreLegendRule { final Game game = card.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java index d43660530ba..29aba06c8fc 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustAttack.java @@ -19,7 +19,7 @@ public class StaticAbilityMustAttack { final Game game = attacker.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (stAb.matchesValidParam("ValidCreature", attacker)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustBlock.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustBlock.java index 873b0171a80..0d9c059ac89 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustBlock.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustBlock.java @@ -12,7 +12,7 @@ public class StaticAbilityMustBlock { final Game game = creature.getGame(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyBlocksEachCombatIfAble(stAb, creature)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustTarget.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustTarget.java index 3693cc04268..c40f4b22e28 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustTarget.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMustTarget.java @@ -61,7 +61,7 @@ public class StaticAbilityMustTarget { for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || !stAb.matchesValidParam("ValidSA", spellAbility) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE) || !stAb.matchesValidParam("ValidSA", spellAbility)) { continue; } Pair newRestriction = Pair.of(stAb.getParam("ValidTarget"), ZoneType.smartValueOf(stAb.getParam("ValidZone"))); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityNumLoyaltyAct.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityNumLoyaltyAct.java index adca5c1e5c2..57b8c6be333 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityNumLoyaltyAct.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityNumLoyaltyAct.java @@ -16,7 +16,7 @@ public class StaticAbilityNumLoyaltyAct { public static boolean limitIncrease(final Card card) { for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } @@ -44,7 +44,7 @@ public class StaticAbilityNumLoyaltyAct { int addl = 0; for (final Card ca : card.getGame().getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (!stAb.matchesValidParam("ValidCard", card)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java index 377a2ac608d..bf66cbe34b3 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPanharmonicon.java @@ -51,7 +51,7 @@ public class StaticAbilityPanharmonicon { // Checks only the battlefield, as those effects only work from there for (final Card ca : cardList) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } if (applyPanharmoniconAbility(stAb, t, runParams)) { diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java index f8896db7769..52d7b66685e 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityUnspentMana.java @@ -21,7 +21,7 @@ public class StaticAbilityUnspentMana { Set result = Sets.newHashSet(); for (final Card ca : game.getCardsIn(ZoneType.STATIC_ABILITIES_SOURCE_ZONES)) { for (final StaticAbility stAb : ca.getStaticAbilities()) { - if (!stAb.getParam("Mode").equals(MODE) || stAb.isSuppressed() || !stAb.checkConditions()) { + if (!stAb.checkConditions(MODE)) { continue; } applyUnspentManaAbility(stAb, player, result);