From c4e1552b8bc5f29b71df6df2bd723da4b70f62d0 Mon Sep 17 00:00:00 2001 From: Hellfish Date: Sun, 9 Feb 2014 14:42:39 +0000 Subject: [PATCH] *StaticAbility shares some functionality with Trigger and ReplacementEffect, extend their base instead of duplicating code --- .gitattributes | 2 +- .../main/java/forge/ai/AiBlockController.java | 8 +- .../src/main/java/forge/ai/ComputerUtil.java | 2 +- .../java/forge/ai/ComputerUtilCombat.java | 32 ++-- .../main/java/forge/ai/ability/AttachAi.java | 2 +- .../forge/ai/ability/PermanentCreatureAi.java | 2 +- ...eplacementBase.java => CardTraitBase.java} | 7 +- .../src/main/java/forge/game/GameAction.java | 2 +- .../main/java/forge/game/StaticEffect.java | 7 +- .../main/java/forge/game/StaticEffects.java | 4 +- .../ability/effects/AnimateAllEffect.java | 4 +- .../game/ability/effects/AnimateEffect.java | 4 +- .../ability/effects/UnattachAllEffect.java | 2 +- .../game/replacement/ReplacementEffect.java | 4 +- .../game/staticability/StaticAbility.java | 169 ++++++------------ .../StaticAbilityCantAttackBlock.java | 7 +- .../StaticAbilityCantBeCast.java | 7 +- .../StaticAbilityCantTarget.java | 3 +- .../StaticAbilityContinuous.java | 15 +- .../StaticAbilityCostChange.java | 5 +- .../staticability/StaticAbilityETBTapped.java | 3 +- .../staticability/StaticAbilityMayLookAt.java | 3 +- .../StaticAbilityPreventDamage.java | 3 +- .../main/java/forge/game/trigger/Trigger.java | 4 +- 24 files changed, 126 insertions(+), 175 deletions(-) rename forge-game/src/main/java/forge/game/{TriggerReplacementBase.java => CardTraitBase.java} (95%) diff --git a/.gitattributes b/.gitattributes index 306cfbde318..5b8393ef2e3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -245,6 +245,7 @@ forge-game/src/main/java/forge/ai/ability/UnattachAllAi.java -text forge-game/src/main/java/forge/ai/ability/UntapAi.java -text forge-game/src/main/java/forge/ai/ability/UntapAllAi.java -text forge-game/src/main/java/forge/ai/ability/ZoneExchangeAi.java -text +forge-game/src/main/java/forge/game/CardTraitBase.java -text forge-game/src/main/java/forge/game/Game.java -text forge-game/src/main/java/forge/game/GameAction.java svneol=native#text/plain forge-game/src/main/java/forge/game/GameActionUtil.java svneol=native#text/plain @@ -265,7 +266,6 @@ forge-game/src/main/java/forge/game/Match.java -text forge-game/src/main/java/forge/game/PlanarDice.java -text forge-game/src/main/java/forge/game/StaticEffect.java svneol=native#text/plain forge-game/src/main/java/forge/game/StaticEffects.java svneol=native#text/plain -forge-game/src/main/java/forge/game/TriggerReplacementBase.java -text forge-game/src/main/java/forge/game/ability/AbilityApiBased.java -text forge-game/src/main/java/forge/game/ability/AbilityFactory.java svneol=native#text/plain forge-game/src/main/java/forge/game/ability/AbilityUtils.java -text diff --git a/forge-game/src/main/java/forge/ai/AiBlockController.java b/forge-game/src/main/java/forge/ai/AiBlockController.java index 1f293b13ba7..27b06ac2480 100644 --- a/forge-game/src/main/java/forge/ai/AiBlockController.java +++ b/forge-game/src/main/java/forge/ai/AiBlockController.java @@ -19,8 +19,8 @@ package forge.ai; import com.google.common.base.Predicate; import com.google.common.base.Predicates; +import forge.game.CardTraitBase; import forge.game.GameEntity; -import forge.game.TriggerReplacementBase; import forge.game.card.Card; import forge.game.card.CardLists; import forge.game.card.CardPredicates; @@ -235,14 +235,14 @@ public class AiBlockController { if (mode == TriggerType.DamageDone) { if ((!trigParams.containsKey("ValidSource") - || TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), attacker)) + || CardTraitBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), attacker)) && attacker.getNetCombatDamage() > 0 && (!trigParams.containsKey("ValidTarget") - || TriggerReplacementBase.matchesValid(combat.getDefenderByAttacker(attacker), trigParams.get("ValidTarget").split(","), attacker))) { + || CardTraitBase.matchesValid(combat.getDefenderByAttacker(attacker), trigParams.get("ValidTarget").split(","), attacker))) { value += 50; } } else if (mode == TriggerType.AttackerUnblocked) { - if (TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), attacker)) { + if (CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), attacker)) { value += 50; } } diff --git a/forge-game/src/main/java/forge/ai/ComputerUtil.java b/forge-game/src/main/java/forge/ai/ComputerUtil.java index 11c00d672f1..a6167e20541 100644 --- a/forge-game/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-game/src/main/java/forge/ai/ComputerUtil.java @@ -1201,7 +1201,7 @@ public class ComputerUtil { for (final Card c : all) { if (c.isEquipment()) { for (StaticAbility stAb : c.getStaticAbilities()) { - HashMap params = stAb.getMapParams(); + Map params = stAb.getMapParams(); if ("Continuous".equals(params.get("Mode")) && params.containsKey("AddKeyword") && params.get("AddKeyword").contains("Haste") && c.getEquippingCard() == null) { return true; diff --git a/forge-game/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-game/src/main/java/forge/ai/ComputerUtilCombat.java index e2283992b1a..e02c32a047f 100644 --- a/forge-game/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-game/src/main/java/forge/ai/ComputerUtilCombat.java @@ -18,10 +18,10 @@ package forge.ai; import com.google.common.base.Predicate; +import forge.game.CardTraitBase; import forge.game.Game; import forge.game.GameEntity; import forge.game.GlobalRuleChange; -import forge.game.TriggerReplacementBase; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; @@ -628,9 +628,9 @@ public class ComputerUtilCombat { return false; // The trigger should have triggered already } if (trigParams.containsKey("ValidCard")) { - if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source) - && !(combat.isAttacking(source) && TriggerReplacementBase.matchesValid(source, - trigParams.get("ValidCard").split(","), source) + if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source) + && !(combat.isAttacking(source) && CardTraitBase.matchesValid(source, + trigParams.get("ValidCard").split(","), source) && !trigParams.containsKey("Alone"))) { return false; } @@ -641,7 +641,7 @@ public class ComputerUtilCombat { if ((defender == null) && mode == TriggerType.AttackerUnblocked) { willTrigger = true; if (trigParams.containsKey("ValidCard")) { - if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) { + if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) { return false; } } @@ -663,7 +663,7 @@ public class ComputerUtilCombat { return false; } } - if (!TriggerReplacementBase.matchesValid(attacker, validBlocked.split(","), source)) { + if (!CardTraitBase.matchesValid(attacker, validBlocked.split(","), source)) { return false; } } @@ -677,35 +677,35 @@ public class ComputerUtilCombat { return false; } } - if (!TriggerReplacementBase.matchesValid(defender, validBlocker.split(","), source)) { + if (!CardTraitBase.matchesValid(defender, validBlocker.split(","), source)) { return false; } } } else if (mode == TriggerType.AttackerBlocked) { willTrigger = true; if (trigParams.containsKey("ValidBlocker")) { - if (!TriggerReplacementBase.matchesValid(defender, trigParams.get("ValidBlocker").split(","), source)) { + if (!CardTraitBase.matchesValid(defender, trigParams.get("ValidBlocker").split(","), source)) { return false; } } if (trigParams.containsKey("ValidCard")) { - if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) { + if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) { return false; } } } else if (mode == TriggerType.DamageDone) { willTrigger = true; if (trigParams.containsKey("ValidSource")) { - if (TriggerReplacementBase.matchesValid(defender, trigParams.get("ValidSource").split(","), source) + if (CardTraitBase.matchesValid(defender, trigParams.get("ValidSource").split(","), source) && defender.getNetCombatDamage() > 0 && (!trigParams.containsKey("ValidTarget") - || TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidTarget").split(","), source))) { + || CardTraitBase.matchesValid(attacker, trigParams.get("ValidTarget").split(","), source))) { return true; } - if (TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), source) + if (CardTraitBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), source) && attacker.getNetCombatDamage() > 0 && (!trigParams.containsKey("ValidTarget") - || TriggerReplacementBase.matchesValid(defender, trigParams.get("ValidTarget").split(","), source))) { + || CardTraitBase.matchesValid(defender, trigParams.get("ValidTarget").split(","), source))) { return true; } } @@ -759,7 +759,7 @@ public class ComputerUtilCombat { final List cardList = game.getCardsIn(ZoneType.Battlefield); for (final Card card : cardList) { for (final StaticAbility stAb : card.getStaticAbilities()) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); if (!params.get("Mode").equals("Continuous")) { continue; } @@ -1054,7 +1054,7 @@ public class ComputerUtilCombat { final List cardList = game.getCardsIn(ZoneType.Battlefield); for (final Card card : cardList) { for (final StaticAbility stAb : card.getStaticAbilities()) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); if (!params.get("Mode").equals("Continuous")) { continue; } @@ -1220,7 +1220,7 @@ public class ComputerUtilCombat { final List cardList = game.getCardsIn(ZoneType.Battlefield); for (final Card card : cardList) { for (final StaticAbility stAb : card.getStaticAbilities()) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); if (!params.get("Mode").equals("Continuous")) { continue; } diff --git a/forge-game/src/main/java/forge/ai/ability/AttachAi.java b/forge-game/src/main/java/forge/ai/ability/AttachAi.java index 68c6c4e2e57..7f5d82404e8 100644 --- a/forge-game/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-game/src/main/java/forge/ai/ability/AttachAi.java @@ -154,7 +154,7 @@ public class AttachAi extends SpellAbilityAi { String type = ""; for (final StaticAbility stAb : attachSource.getStaticAbilities()) { - final HashMap stab = stAb.getMapParams(); + final Map stab = stAb.getMapParams(); if (stab.get("Mode").equals("Continuous") && stab.containsKey("AddType")) { type = stab.get("AddType"); } diff --git a/forge-game/src/main/java/forge/ai/ability/PermanentCreatureAi.java b/forge-game/src/main/java/forge/ai/ability/PermanentCreatureAi.java index 164c1356f6b..f5b1769d633 100644 --- a/forge-game/src/main/java/forge/ai/ability/PermanentCreatureAi.java +++ b/forge-game/src/main/java/forge/ai/ability/PermanentCreatureAi.java @@ -45,7 +45,7 @@ public class PermanentCreatureAi extends SpellAbilityAi { for(Card c : cards) { ArrayList statics = c.getStaticAbilities(); for(StaticAbility s : statics) { - final Map stabMap = s.getMapParams(); + final Map stabMap = s.parseParams(); if (!stabMap.get("Mode").equals("Continuous")) { continue; diff --git a/forge-game/src/main/java/forge/game/TriggerReplacementBase.java b/forge-game/src/main/java/forge/game/CardTraitBase.java similarity index 95% rename from forge-game/src/main/java/forge/game/TriggerReplacementBase.java rename to forge-game/src/main/java/forge/game/CardTraitBase.java index 91a19fc8cce..f356fbbe84e 100644 --- a/forge-game/src/main/java/forge/game/TriggerReplacementBase.java +++ b/forge-game/src/main/java/forge/game/CardTraitBase.java @@ -19,7 +19,7 @@ import java.util.*; * Provides the matchesValid function to both classes. * */ -public abstract class TriggerReplacementBase { +public abstract class CardTraitBase { /** The host card. */ protected Card hostCard; @@ -75,6 +75,11 @@ public abstract class TriggerReplacementBase { return this.mapParams; } + public final void setMapParams(Map params) { + this.mapParams.clear(); + this.mapParams.putAll(params); + } + /** * Checks if is intrinsic. * diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index f123ed7fd4c..940830bae6b 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -153,7 +153,7 @@ public class GameAction { for (final Trigger trigger : copied.getTriggers()) { trigger.setHostCard(copied); } - for (final TriggerReplacementBase repl : copied.getReplacementEffects()) { + for (final CardTraitBase repl : copied.getReplacementEffects()) { repl.setHostCard(copied); } if (c.getName().equals("Skullbriar, the Walking Grave")) { diff --git a/forge-game/src/main/java/forge/game/StaticEffect.java b/forge-game/src/main/java/forge/game/StaticEffect.java index d329d6ff5db..e15a9cbbc1a 100644 --- a/forge-game/src/main/java/forge/game/StaticEffect.java +++ b/forge-game/src/main/java/forge/game/StaticEffect.java @@ -24,6 +24,7 @@ import forge.game.spellability.SpellAbility; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; /** *

@@ -44,7 +45,7 @@ public class StaticEffect { private HashMap xValueMap = new HashMap(); private String chosenType; - private HashMap mapParams = new HashMap(); + private Map mapParams = new HashMap(); // for P/T private final HashMap originalPT = new HashMap(); @@ -845,7 +846,7 @@ public class StaticEffect { * @param params * a HashMap */ - public final void setParams(final HashMap params) { + public final void setParams(final Map params) { this.mapParams = params; } @@ -854,7 +855,7 @@ public class StaticEffect { * * @return the params */ - public final HashMap getParams() { + public final Map getParams() { return this.mapParams; } diff --git a/forge-game/src/main/java/forge/game/StaticEffects.java b/forge-game/src/main/java/forge/game/StaticEffects.java index 6700b94a83a..d575fa139a5 100644 --- a/forge-game/src/main/java/forge/game/StaticEffects.java +++ b/forge-game/src/main/java/forge/game/StaticEffects.java @@ -80,7 +80,7 @@ public class StaticEffects { private final List removeStaticEffect(final StaticEffect se) { final List affectedCards = se.getAffectedCards(); final ArrayList affectedPlayers = se.getAffectedPlayers(); - final HashMap params = se.getParams(); + final Map params = se.getParams(); int powerBonus = 0; String addP = ""; @@ -223,7 +223,7 @@ public class StaticEffects { for (final StaticAbility stA : affectedCard.getStaticAbilities()) { stA.setTemporarilySuppressed(false); } - for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) { + for (final CardTraitBase rE : affectedCard.getReplacementEffects()) { rE.setTemporarilySuppressed(false); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java index 77a42413b61..e99486d6799 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateAllEffect.java @@ -1,8 +1,8 @@ package forge.game.ability.effects; import forge.Command; +import forge.game.CardTraitBase; import forge.game.Game; -import forge.game.TriggerReplacementBase; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -237,7 +237,7 @@ public class AnimateAllEffect extends AnimateEffectBase { } // give back suppressed replacement effects - for (final TriggerReplacementBase re : removedReplacements) { + for (final CardTraitBase re : removedReplacements) { re.setTemporarilySuppressed(false); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java index 2fa439ac3db..e7122ffcba8 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/AnimateEffect.java @@ -1,8 +1,8 @@ package forge.game.ability.effects; import forge.Command; +import forge.game.CardTraitBase; import forge.game.Game; -import forge.game.TriggerReplacementBase; import forge.game.ability.AbilityFactory; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -272,7 +272,7 @@ public class AnimateEffect extends AnimateEffectBase { } // give back suppressed replacement effects - for (final TriggerReplacementBase re : removedReplacements) { + for (final CardTraitBase re : removedReplacements) { re.setTemporarilySuppressed(false); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java index 3a5130d1461..e197371d40c 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/UnattachAllEffect.java @@ -20,7 +20,7 @@ public class UnattachAllEffect extends SpellAbilityEffect { if (o instanceof Card) { final Card c = (Card) o; if (cardToUnattach.isAura()) { - //final boolean gainControl = "GainControl".equals(af.getMapParams().get("AILogic")); + //final boolean gainControl = "GainControl".equals(af.parseParams().get("AILogic")); //AbilityFactoryAttach.handleUnattachAura(cardToUnattach, c, gainControl); } else if (cardToUnattach.isEquipment()) { if (cardToUnattach.isEquipping() && c.getEquippedBy().contains(cardToUnattach)) { diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index 20dac254949..d247eb093ca 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -17,8 +17,8 @@ */ package forge.game.replacement; +import forge.game.CardTraitBase; import forge.game.Game; -import forge.game.TriggerReplacementBase; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardFactoryUtil; @@ -35,7 +35,7 @@ import java.util.Map; * TODO: Write javadoc for this type. * */ -public abstract class ReplacementEffect extends TriggerReplacementBase { +public abstract class ReplacementEffect extends CardTraitBase { private ReplacementLayer layer = ReplacementLayer.None; 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 9849c3a5610..739a51742e9 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbility.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbility.java @@ -18,6 +18,7 @@ package forge.game.staticability; import forge.card.MagicColor; +import forge.game.CardTraitBase; import forge.game.GameEntity; import forge.game.ability.AbilityUtils; import forge.game.card.Card; @@ -36,44 +37,10 @@ import java.util.Map; /** * The Class StaticAbility. */ -public class StaticAbility { - - private Card hostCard = null; - - private HashMap params = new HashMap(); +public class StaticAbility extends CardTraitBase { private int layer = 0; - /** The temporarily suppressed. */ - private boolean temporarilySuppressed = false; - - /** The suppressed. */ - private final boolean suppressed = false; - - private boolean temporary = false; - - /** - *

- * getHostCard. - *

- * - * @return a {@link forge.game.card.Card} object. - */ - public final Card getHostCard() { - return this.hostCard; - } - - /** - *

- * Getter for the field mapParams. - *

- * - * @return a {@link java.util.HashMap} object. - */ - public final HashMap getMapParams() { - return this.params; - } - // ******************************************************* /** @@ -87,7 +54,7 @@ public class StaticAbility { * a {@link forge.game.card.Card} object. * @return a {@link java.util.HashMap} object. */ - public final HashMap getMapParams(final String abString, final Card hostCard) { + public final HashMap parseParams(final String abString, final Card hostCard) { final HashMap mapParameters = new HashMap(); if (!(abString.length() > 0)) { @@ -134,41 +101,41 @@ public class StaticAbility { */ public final int generateLayer() { - if (!this.params.get("Mode").equals("Continuous")) { + if (!this.mapParams.get("Mode").equals("Continuous")) { return 0; } - if (this.params.containsKey("GainControl")) { + if (this.mapParams.containsKey("GainControl")) { return 2; } - if (this.params.containsKey("AddType") || this.params.containsKey("RemoveType") - || this.params.containsKey("RemoveCardTypes") || this.params.containsKey("RemoveSubTypes") - || this.params.containsKey("RemoveSuperTypes") || this.params.containsKey("RemoveCreatureTypes")) { + if (this.mapParams.containsKey("AddType") || this.mapParams.containsKey("RemoveType") + || this.mapParams.containsKey("RemoveCardTypes") || this.mapParams.containsKey("RemoveSubTypes") + || this.mapParams.containsKey("RemoveSuperTypes") || this.mapParams.containsKey("RemoveCreatureTypes")) { return 4; } - if (this.params.containsKey("AddColor") || this.params.containsKey("RemoveColor") - || this.params.containsKey("SetColor")) { + if (this.mapParams.containsKey("AddColor") || this.mapParams.containsKey("RemoveColor") + || this.mapParams.containsKey("SetColor")) { return 5; } - if (this.params.containsKey("RemoveAllAbilities") || this.params.containsKey("GainsAbilitiesOf")) { + if (this.mapParams.containsKey("RemoveAllAbilities") || this.mapParams.containsKey("GainsAbilitiesOf")) { return 6; // Layer 6 } - if (this.params.containsKey("AddKeyword") || this.params.containsKey("AddAbility") - || this.params.containsKey("AddTrigger") || this.params.containsKey("RemoveTriggers") - || this.params.containsKey("RemoveKeyword") || this.params.containsKey("AddReplacementEffects")) { + if (this.mapParams.containsKey("AddKeyword") || this.mapParams.containsKey("AddAbility") + || this.mapParams.containsKey("AddTrigger") || this.mapParams.containsKey("RemoveTriggers") + || this.mapParams.containsKey("RemoveKeyword") || this.mapParams.containsKey("AddReplacementEffects")) { return 7; // Layer 6 (dependent) } - if (this.params.containsKey("CharacteristicDefining")) { + if (this.mapParams.containsKey("CharacteristicDefining")) { return 8; // Layer 7a } - if (this.params.containsKey("AddPower") || this.params.containsKey("AddToughness") - || this.params.containsKey("SetPower") || this.params.containsKey("SetToughness")) { + if (this.mapParams.containsKey("AddPower") || this.mapParams.containsKey("AddToughness") + || this.mapParams.containsKey("SetPower") || this.mapParams.containsKey("SetToughness")) { return 9; // This is the collection of 7b and 7c } @@ -184,8 +151,8 @@ public class StaticAbility { */ @Override public final String toString() { - if (this.params.containsKey("Description") && !this.isSuppressed()) { - return this.params.get("Description").replace("CARDNAME", this.hostCard.getName()); + if (this.mapParams.containsKey("Description") && !this.isSuppressed()) { + return this.mapParams.get("Description").replace("CARDNAME", this.hostCard.getName()); } else { return ""; } @@ -201,7 +168,7 @@ public class StaticAbility { * the host */ public StaticAbility(final String params, final Card host) { - this.params = this.getMapParams(params, host); + this.mapParams.putAll(this.parseParams(params, host)); this.hostCard = host; this.layer = this.generateLayer(); } @@ -215,9 +182,8 @@ public class StaticAbility { * the host */ public StaticAbility(final HashMap params, final Card host) { - this.params = new HashMap(); for (final Map.Entry entry : params.entrySet()) { - this.params.put(entry.getKey(), entry.getValue()); + this.mapParams.put(entry.getKey(), entry.getValue()); } this.layer = this.generateLayer(); this.hostCard = host; @@ -234,7 +200,7 @@ public class StaticAbility { public final List applyAbility(final String mode) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return null; } @@ -269,7 +235,7 @@ public class StaticAbility { final boolean isCombat, final boolean isTest) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return in; } @@ -299,7 +265,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card, final Player player) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return false; } @@ -336,7 +302,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card, final SpellAbility spellAbility) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return false; } @@ -369,7 +335,7 @@ public class StaticAbility { public final void applyAbility(final String mode, final SpellAbility sa, final ManaCostBeingPaid originalCost) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return; } @@ -400,7 +366,7 @@ public class StaticAbility { public final boolean applyAbility(final String mode, final Card card) { // don't apply the ability if it hasn't got the right mode - if (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return false; } @@ -433,7 +399,7 @@ public class StaticAbility { 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 (!this.params.get("Mode").equals(mode)) { + if (!this.mapParams.get("Mode").equals(mode)) { return false; } @@ -449,14 +415,14 @@ public class StaticAbility { } public final Cost getAttackCost(final Card attacker, final GameEntity target) { - if (this.isSuppressed() || !params.get("Mode").equals("CantAttackUnless") || !this.checkConditions()) { + if (this.isSuppressed() || !mapParams.get("Mode").equals("CantAttackUnless") || !this.checkConditions()) { return null; } return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target); } public final Cost getBlockCost(final Card blocker, final Card attacker) { - if (this.isSuppressed() || !params.get("Mode").equals("CantBlockUnless") || !this.checkConditions()) { + if (this.isSuppressed() || !mapParams.get("Mode").equals("CantBlockUnless") || !this.checkConditions()) { return null; } return StaticAbilityCantAttackBlock.getBlockCost(this, blocker, attacker); @@ -474,9 +440,9 @@ public class StaticAbility { return false; } - if (this.params.containsKey("EffectZone")) { - if (!this.params.get("EffectZone").equals("All") - && !ZoneType.listValueOf(this.params.get("EffectZone")) + if (this.mapParams.containsKey("EffectZone")) { + if (!this.mapParams.get("EffectZone").equals("All") + && !ZoneType.listValueOf(this.mapParams.get("EffectZone")) .contains(controller.getGame().getZoneOf(this.hostCard).getZoneType())) { return false; } @@ -486,7 +452,7 @@ public class StaticAbility { } } - String condition = params.get("Condition"); + String condition = mapParams.get("Condition"); if (null != condition) { if (condition.equals("Threshold") && !controller.hasThreshold()) return false; if (condition.equals("Hellbent") && !controller.hasHellbent()) return false; @@ -515,33 +481,33 @@ public class StaticAbility { } } - if (this.params.containsKey("OpponentAttackedWithCreatureThisTurn") + if (this.mapParams.containsKey("OpponentAttackedWithCreatureThisTurn") && !controller.getOpponent().getAttackedWithCreatureThisTurn()) { return false; } - if (this.params.containsKey("Phases")) { - List phases = PhaseType.parseRange(this.params.get("Phases")); + if (this.mapParams.containsKey("Phases")) { + List phases = PhaseType.parseRange(this.mapParams.get("Phases")); if (!phases.contains(controller.getGame().getPhaseHandler().getPhase())) { return false; } } - if (this.params.containsKey("TopCardOfLibraryIs")) { + if (this.mapParams.containsKey("TopCardOfLibraryIs")) { if (controller.getCardsIn(ZoneType.Library).isEmpty()) { return false; } final Card topCard = controller.getCardsIn(ZoneType.Library).get(0); - if (!topCard.isValid(this.params.get("TopCardOfLibraryIs").split(","), controller, this.hostCard)) { + if (!topCard.isValid(this.mapParams.get("TopCardOfLibraryIs").split(","), controller, this.hostCard)) { return false; } } - if (this.params.containsKey("CheckSVar")) { - final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckSVar"), null); + if (this.mapParams.containsKey("CheckSVar")) { + final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckSVar"), null); String comparator = "GE1"; - if (this.params.containsKey("SVarCompare")) { - comparator = this.params.get("SVarCompare"); + if (this.mapParams.containsKey("SVarCompare")) { + comparator = this.mapParams.get("SVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -553,11 +519,11 @@ public class StaticAbility { return true; } - if (this.params.containsKey("CheckSecondSVar")) { - final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckSecondSVar"), null); + if (this.mapParams.containsKey("CheckSecondSVar")) { + final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckSecondSVar"), null); String comparator = "GE1"; - if (this.params.containsKey("SecondSVarCompare")) { - comparator = this.params.get("SecondSVarCompare"); + if (this.mapParams.containsKey("SecondSVarCompare")) { + comparator = this.mapParams.get("SecondSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -569,11 +535,11 @@ public class StaticAbility { return true; } - if (this.params.containsKey("CheckThirdSVar")) { - final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckThirdSVar"), null); + if (this.mapParams.containsKey("CheckThirdSVar")) { + final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckThirdSVar"), null); String comparator = "GE1"; - if (this.params.containsKey("ThirdSVarCompare")) { - comparator = this.params.get("ThirdSVarCompare"); + if (this.mapParams.containsKey("ThirdSVarCompare")) { + comparator = this.mapParams.get("ThirdSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -585,11 +551,11 @@ public class StaticAbility { return true; } - if (this.params.containsKey("CheckFourthSVar")) { - final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckFourthSVar"), null); + if (this.mapParams.containsKey("CheckFourthSVar")) { + final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckFourthSVar"), null); String comparator = "GE1"; - if (this.params.containsKey("FourthSVarCompare")) { - comparator = this.params.get("FourthSVarCompare"); + if (this.mapParams.containsKey("FourthSVarCompare")) { + comparator = this.mapParams.get("FourthSVarCompare"); } final String svarOperator = comparator.substring(0, 2); final String svarOperand = comparator.substring(2); @@ -602,24 +568,6 @@ public class StaticAbility { return true; } - /** - * Sets the temporarily suppressed. - * - * @param supp - * the new temporarily suppressed - */ - public final void setTemporarilySuppressed(final boolean supp) { - this.temporarilySuppressed = supp; - } - - /** - * Checks if is suppressed. - * - * @return true, if is suppressed - */ - public final boolean isSuppressed() { - return (this.suppressed || this.temporarilySuppressed); - } /** * @return the layer @@ -635,11 +583,4 @@ public class StaticAbility { this.layer = layer; } - public void setTemporarily(boolean b) { - this.temporary = b; - } - public boolean isTemporary() { - return this.temporary; - } - } // end class StaticEffectFactory 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 72d10285124..786a8fa38c9 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantAttackBlock.java @@ -23,6 +23,7 @@ import forge.game.card.CardFactoryUtil; import forge.game.cost.Cost; import java.util.HashMap; +import java.util.Map; /** * The Class StaticAbility_CantBeCast. @@ -39,7 +40,7 @@ public class StaticAbilityCantAttackBlock { * @return a Cost */ public static boolean applyCantAttackAbility(final StaticAbility stAb, final Card card, final GameEntity target) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") @@ -65,7 +66,7 @@ public class StaticAbilityCantAttackBlock { * @return a Cost */ public static Cost getAttackCost(final StaticAbility stAb, final Card card, final GameEntity target) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") @@ -101,7 +102,7 @@ public class StaticAbilityCantAttackBlock { * @return a Cost */ public static Cost getBlockCost(final StaticAbility stAb, final Card blocker, final GameEntity attacker) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") 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 b0d73b8784a..2adbece5c1e 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantBeCast.java @@ -24,6 +24,7 @@ import forge.game.zone.ZoneType; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * The Class StaticAbility_CantBeCast. @@ -42,7 +43,7 @@ public class StaticAbilityCantBeCast { * @return true, if successful */ public static boolean applyCantBeCastAbility(final StaticAbility stAb, final Card card, final Player activator) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") @@ -82,7 +83,7 @@ public class StaticAbilityCantBeCast { */ public static boolean applyCantBeActivatedAbility(final StaticAbility staticAbility, final Card card, final SpellAbility spellAbility) { - final HashMap params = staticAbility.getMapParams(); + final Map params = staticAbility.getMapParams(); final Card hostCard = staticAbility.getHostCard(); final Player activator = spellAbility.getActivatingPlayer(); @@ -119,7 +120,7 @@ public class StaticAbilityCantBeCast { * @return true, if successful */ public static boolean applyCantPlayLandAbility(final StaticAbility stAb, final Card card, final Player player) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") 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 5a9c75e7b0e..9e2ccb2497b 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCantTarget.java @@ -23,6 +23,7 @@ import forge.game.spellability.SpellAbility; import forge.game.zone.ZoneType; import java.util.HashMap; +import java.util.Map; /** * The Class StaticAbilityCantTarget. @@ -42,7 +43,7 @@ public class StaticAbilityCantTarget { */ public static boolean applyCantTargetAbility(final StaticAbility staticAbility, final Card card, final SpellAbility spellAbility) { - final HashMap params = staticAbility.getMapParams(); + final Map params = staticAbility.getMapParams(); final Card hostCard = staticAbility.getHostCard(); final Card source = spellAbility.getSourceCard(); final Player activator = spellAbility.getActivatingPlayer(); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java index 7bc6142930f..84d16d0e7ff 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityContinuous.java @@ -41,10 +41,7 @@ import forge.game.zone.ZoneType; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.text.WordUtils; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; +import java.util.*; /** * The Class StaticAbility_Continuous. @@ -61,7 +58,7 @@ public class StaticAbilityContinuous { * */ public static List applyContinuousAbility(final StaticAbility stAb) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); final StaticEffect se = new StaticEffect(hostCard); @@ -515,7 +512,7 @@ public class StaticAbilityContinuous { final String costcmc = Integer.toString(affectedCard.getCMC()); s = s.replace("ConvertedManaCost", costcmc); } - affectedCard.addStaticAbility(s).setTemporarily(true); + affectedCard.addStaticAbility(s).setTemporary(true); } } @@ -534,7 +531,7 @@ public class StaticAbilityContinuous { for (final StaticAbility stA : affectedCard.getStaticAbilities()) { stA.setTemporarilySuppressed(true); } - for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) { + for (final CardTraitBase rE : affectedCard.getReplacementEffects()) { rE.setTemporarilySuppressed(true); } } @@ -544,7 +541,7 @@ public class StaticAbilityContinuous { } private static ArrayList getAffectedPlayers(final StaticAbility stAb) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); final Player controller = hostCard.getController(); @@ -566,7 +563,7 @@ public class StaticAbilityContinuous { } private static List getAffectedCards(final StaticAbility stAb) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); final Game game = hostCard.getGame(); final Player controller = hostCard.getController(); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCostChange.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCostChange.java index 9e7ee4f67d5..f4578394d1f 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityCostChange.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityCostChange.java @@ -30,6 +30,7 @@ import forge.game.zone.ZoneType; import java.util.HashMap; import java.util.List; +import java.util.Map; /** * The Class StaticAbility_CantBeCast. @@ -47,7 +48,7 @@ public class StaticAbilityCostChange { * a ManaCost */ public static void applyRaiseCostAbility(final StaticAbility staticAbility, final SpellAbility sa, final ManaCostBeingPaid manaCost) { - final HashMap params = staticAbility.getMapParams(); + final Map params = staticAbility.getMapParams(); final Card hostCard = staticAbility.getHostCard(); final Player activator = sa.getActivatingPlayer(); final Card card = sa.getSourceCard(); @@ -198,7 +199,7 @@ public class StaticAbilityCostChange { if (manaCost.toString().equals("{0}")) { return; } - final HashMap params = staticAbility.getMapParams(); + final Map params = staticAbility.getMapParams(); final Card hostCard = staticAbility.getHostCard(); final Player activator = sa.getActivatingPlayer(); final Card card = sa.getSourceCard(); diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityETBTapped.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityETBTapped.java index 9b7b25671ef..95f3c6c3d95 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityETBTapped.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityETBTapped.java @@ -20,6 +20,7 @@ package forge.game.staticability; import forge.game.card.Card; import java.util.HashMap; +import java.util.Map; /** * The Class StaticAbility_CantBeCast. @@ -36,7 +37,7 @@ public class StaticAbilityETBTapped { * @return true, if successful */ public static boolean applyETBTappedAbility(final StaticAbility stAb, final Card card) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("ValidCard") diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMayLookAt.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMayLookAt.java index fb6322dc02f..017cf1dc023 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityMayLookAt.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityMayLookAt.java @@ -22,6 +22,7 @@ import forge.game.player.Player; import forge.game.zone.ZoneType; import java.util.HashMap; +import java.util.Map; /** * The Class StaticAbility_CantBeCast. @@ -40,7 +41,7 @@ public class StaticAbilityMayLookAt { * @return true, if successful */ public static boolean applyMayLookAtAbility(final StaticAbility stAb, final Card card, final Player player) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); if (params.containsKey("Affected") diff --git a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPreventDamage.java b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPreventDamage.java index 9a35872d38e..687ab1dad18 100644 --- a/forge-game/src/main/java/forge/game/staticability/StaticAbilityPreventDamage.java +++ b/forge-game/src/main/java/forge/game/staticability/StaticAbilityPreventDamage.java @@ -22,6 +22,7 @@ import forge.game.card.Card; import forge.game.card.CardFactoryUtil; import java.util.HashMap; +import java.util.Map; /** * The Class StaticAbility_PreventDamage. @@ -45,7 +46,7 @@ public class StaticAbilityPreventDamage { */ public static int applyPreventDamageAbility(final StaticAbility stAb, final Card source, final GameEntity target, final int damage, final boolean isCombat, final boolean isTest) { - final HashMap params = stAb.getMapParams(); + final Map params = stAb.getMapParams(); final Card hostCard = stAb.getHostCard(); int restDamage = damage; diff --git a/forge-game/src/main/java/forge/game/trigger/Trigger.java b/forge-game/src/main/java/forge/game/trigger/Trigger.java index 6aa2d799933..168ade73480 100644 --- a/forge-game/src/main/java/forge/game/trigger/Trigger.java +++ b/forge-game/src/main/java/forge/game/trigger/Trigger.java @@ -17,8 +17,8 @@ */ package forge.game.trigger; +import forge.game.CardTraitBase; import forge.game.Game; -import forge.game.TriggerReplacementBase; import forge.game.card.Card; import forge.game.phase.PhaseHandler; import forge.game.phase.PhaseType; @@ -41,7 +41,7 @@ import java.util.Map; * @author Forge * @version $Id$ */ -public abstract class Trigger extends TriggerReplacementBase { +public abstract class Trigger extends CardTraitBase { /** Constant nextID=0. */ private static int nextID = 0;