mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 19:28:01 +00:00
*StaticAbility shares some functionality with Trigger and ReplacementEffect, extend their base instead of duplicating code
This commit is contained in:
2
.gitattributes
vendored
2
.gitattributes
vendored
@@ -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/UntapAi.java -text
|
||||||
forge-game/src/main/java/forge/ai/ability/UntapAllAi.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/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/Game.java -text
|
||||||
forge-game/src/main/java/forge/game/GameAction.java svneol=native#text/plain
|
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
|
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/PlanarDice.java -text
|
||||||
forge-game/src/main/java/forge/game/StaticEffect.java svneol=native#text/plain
|
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/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/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/AbilityFactory.java svneol=native#text/plain
|
||||||
forge-game/src/main/java/forge/game/ability/AbilityUtils.java -text
|
forge-game/src/main/java/forge/game/ability/AbilityUtils.java -text
|
||||||
|
|||||||
@@ -19,8 +19,8 @@ package forge.ai;
|
|||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
import com.google.common.base.Predicates;
|
import com.google.common.base.Predicates;
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.GameEntity;
|
import forge.game.GameEntity;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardLists;
|
import forge.game.card.CardLists;
|
||||||
import forge.game.card.CardPredicates;
|
import forge.game.card.CardPredicates;
|
||||||
@@ -235,14 +235,14 @@ public class AiBlockController {
|
|||||||
|
|
||||||
if (mode == TriggerType.DamageDone) {
|
if (mode == TriggerType.DamageDone) {
|
||||||
if ((!trigParams.containsKey("ValidSource")
|
if ((!trigParams.containsKey("ValidSource")
|
||||||
|| TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), attacker))
|
|| CardTraitBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), attacker))
|
||||||
&& attacker.getNetCombatDamage() > 0
|
&& attacker.getNetCombatDamage() > 0
|
||||||
&& (!trigParams.containsKey("ValidTarget")
|
&& (!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;
|
value += 50;
|
||||||
}
|
}
|
||||||
} else if (mode == TriggerType.AttackerUnblocked) {
|
} 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;
|
value += 50;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1201,7 +1201,7 @@ public class ComputerUtil {
|
|||||||
for (final Card c : all) {
|
for (final Card c : all) {
|
||||||
if (c.isEquipment()) {
|
if (c.isEquipment()) {
|
||||||
for (StaticAbility stAb : c.getStaticAbilities()) {
|
for (StaticAbility stAb : c.getStaticAbilities()) {
|
||||||
HashMap<String, String> params = stAb.getMapParams();
|
Map<String, String> params = stAb.getMapParams();
|
||||||
if ("Continuous".equals(params.get("Mode")) && params.containsKey("AddKeyword")
|
if ("Continuous".equals(params.get("Mode")) && params.containsKey("AddKeyword")
|
||||||
&& params.get("AddKeyword").contains("Haste") && c.getEquippingCard() == null) {
|
&& params.get("AddKeyword").contains("Haste") && c.getEquippingCard() == null) {
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -18,10 +18,10 @@
|
|||||||
package forge.ai;
|
package forge.ai;
|
||||||
|
|
||||||
import com.google.common.base.Predicate;
|
import com.google.common.base.Predicate;
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.GameEntity;
|
import forge.game.GameEntity;
|
||||||
import forge.game.GlobalRuleChange;
|
import forge.game.GlobalRuleChange;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.ability.ApiType;
|
import forge.game.ability.ApiType;
|
||||||
@@ -628,8 +628,8 @@ public class ComputerUtilCombat {
|
|||||||
return false; // The trigger should have triggered already
|
return false; // The trigger should have triggered already
|
||||||
}
|
}
|
||||||
if (trigParams.containsKey("ValidCard")) {
|
if (trigParams.containsKey("ValidCard")) {
|
||||||
if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)
|
if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)
|
||||||
&& !(combat.isAttacking(source) && TriggerReplacementBase.matchesValid(source,
|
&& !(combat.isAttacking(source) && CardTraitBase.matchesValid(source,
|
||||||
trigParams.get("ValidCard").split(","), source)
|
trigParams.get("ValidCard").split(","), source)
|
||||||
&& !trigParams.containsKey("Alone"))) {
|
&& !trigParams.containsKey("Alone"))) {
|
||||||
return false;
|
return false;
|
||||||
@@ -641,7 +641,7 @@ public class ComputerUtilCombat {
|
|||||||
if ((defender == null) && mode == TriggerType.AttackerUnblocked) {
|
if ((defender == null) && mode == TriggerType.AttackerUnblocked) {
|
||||||
willTrigger = true;
|
willTrigger = true;
|
||||||
if (trigParams.containsKey("ValidCard")) {
|
if (trigParams.containsKey("ValidCard")) {
|
||||||
if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) {
|
if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -663,7 +663,7 @@ public class ComputerUtilCombat {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!TriggerReplacementBase.matchesValid(attacker, validBlocked.split(","), source)) {
|
if (!CardTraitBase.matchesValid(attacker, validBlocked.split(","), source)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -677,35 +677,35 @@ public class ComputerUtilCombat {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!TriggerReplacementBase.matchesValid(defender, validBlocker.split(","), source)) {
|
if (!CardTraitBase.matchesValid(defender, validBlocker.split(","), source)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (mode == TriggerType.AttackerBlocked) {
|
} else if (mode == TriggerType.AttackerBlocked) {
|
||||||
willTrigger = true;
|
willTrigger = true;
|
||||||
if (trigParams.containsKey("ValidBlocker")) {
|
if (trigParams.containsKey("ValidBlocker")) {
|
||||||
if (!TriggerReplacementBase.matchesValid(defender, trigParams.get("ValidBlocker").split(","), source)) {
|
if (!CardTraitBase.matchesValid(defender, trigParams.get("ValidBlocker").split(","), source)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (trigParams.containsKey("ValidCard")) {
|
if (trigParams.containsKey("ValidCard")) {
|
||||||
if (!TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) {
|
if (!CardTraitBase.matchesValid(attacker, trigParams.get("ValidCard").split(","), source)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (mode == TriggerType.DamageDone) {
|
} else if (mode == TriggerType.DamageDone) {
|
||||||
willTrigger = true;
|
willTrigger = true;
|
||||||
if (trigParams.containsKey("ValidSource")) {
|
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
|
&& defender.getNetCombatDamage() > 0
|
||||||
&& (!trigParams.containsKey("ValidTarget")
|
&& (!trigParams.containsKey("ValidTarget")
|
||||||
|| TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidTarget").split(","), source))) {
|
|| CardTraitBase.matchesValid(attacker, trigParams.get("ValidTarget").split(","), source))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (TriggerReplacementBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), source)
|
if (CardTraitBase.matchesValid(attacker, trigParams.get("ValidSource").split(","), source)
|
||||||
&& attacker.getNetCombatDamage() > 0
|
&& attacker.getNetCombatDamage() > 0
|
||||||
&& (!trigParams.containsKey("ValidTarget")
|
&& (!trigParams.containsKey("ValidTarget")
|
||||||
|| TriggerReplacementBase.matchesValid(defender, trigParams.get("ValidTarget").split(","), source))) {
|
|| CardTraitBase.matchesValid(defender, trigParams.get("ValidTarget").split(","), source))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -759,7 +759,7 @@ public class ComputerUtilCombat {
|
|||||||
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||||
for (final Card card : cardList) {
|
for (final Card card : cardList) {
|
||||||
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
if (!params.get("Mode").equals("Continuous")) {
|
if (!params.get("Mode").equals("Continuous")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1054,7 +1054,7 @@ public class ComputerUtilCombat {
|
|||||||
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||||
for (final Card card : cardList) {
|
for (final Card card : cardList) {
|
||||||
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
if (!params.get("Mode").equals("Continuous")) {
|
if (!params.get("Mode").equals("Continuous")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1220,7 +1220,7 @@ public class ComputerUtilCombat {
|
|||||||
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||||
for (final Card card : cardList) {
|
for (final Card card : cardList) {
|
||||||
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
for (final StaticAbility stAb : card.getStaticAbilities()) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
if (!params.get("Mode").equals("Continuous")) {
|
if (!params.get("Mode").equals("Continuous")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -154,7 +154,7 @@ public class AttachAi extends SpellAbilityAi {
|
|||||||
String type = "";
|
String type = "";
|
||||||
|
|
||||||
for (final StaticAbility stAb : attachSource.getStaticAbilities()) {
|
for (final StaticAbility stAb : attachSource.getStaticAbilities()) {
|
||||||
final HashMap<String, String> stab = stAb.getMapParams();
|
final Map<String, String> stab = stAb.getMapParams();
|
||||||
if (stab.get("Mode").equals("Continuous") && stab.containsKey("AddType")) {
|
if (stab.get("Mode").equals("Continuous") && stab.containsKey("AddType")) {
|
||||||
type = stab.get("AddType");
|
type = stab.get("AddType");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ public class PermanentCreatureAi extends SpellAbilityAi {
|
|||||||
for(Card c : cards) {
|
for(Card c : cards) {
|
||||||
ArrayList<StaticAbility> statics = c.getStaticAbilities();
|
ArrayList<StaticAbility> statics = c.getStaticAbilities();
|
||||||
for(StaticAbility s : statics) {
|
for(StaticAbility s : statics) {
|
||||||
final Map<String, String> stabMap = s.getMapParams();
|
final Map<String, String> stabMap = s.parseParams();
|
||||||
|
|
||||||
if (!stabMap.get("Mode").equals("Continuous")) {
|
if (!stabMap.get("Mode").equals("Continuous")) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ import java.util.*;
|
|||||||
* Provides the matchesValid function to both classes.
|
* Provides the matchesValid function to both classes.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class TriggerReplacementBase {
|
public abstract class CardTraitBase {
|
||||||
|
|
||||||
/** The host card. */
|
/** The host card. */
|
||||||
protected Card hostCard;
|
protected Card hostCard;
|
||||||
@@ -75,6 +75,11 @@ public abstract class TriggerReplacementBase {
|
|||||||
return this.mapParams;
|
return this.mapParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final void setMapParams(Map<String,String> params) {
|
||||||
|
this.mapParams.clear();
|
||||||
|
this.mapParams.putAll(params);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if is intrinsic.
|
* Checks if is intrinsic.
|
||||||
*
|
*
|
||||||
@@ -153,7 +153,7 @@ public class GameAction {
|
|||||||
for (final Trigger trigger : copied.getTriggers()) {
|
for (final Trigger trigger : copied.getTriggers()) {
|
||||||
trigger.setHostCard(copied);
|
trigger.setHostCard(copied);
|
||||||
}
|
}
|
||||||
for (final TriggerReplacementBase repl : copied.getReplacementEffects()) {
|
for (final CardTraitBase repl : copied.getReplacementEffects()) {
|
||||||
repl.setHostCard(copied);
|
repl.setHostCard(copied);
|
||||||
}
|
}
|
||||||
if (c.getName().equals("Skullbriar, the Walking Grave")) {
|
if (c.getName().equals("Skullbriar, the Walking Grave")) {
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import forge.game.spellability.SpellAbility;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
@@ -44,7 +45,7 @@ public class StaticEffect {
|
|||||||
private HashMap<Card, Integer> xValueMap = new HashMap<Card, Integer>();
|
private HashMap<Card, Integer> xValueMap = new HashMap<Card, Integer>();
|
||||||
|
|
||||||
private String chosenType;
|
private String chosenType;
|
||||||
private HashMap<String, String> mapParams = new HashMap<String, String>();
|
private Map<String, String> mapParams = new HashMap<String, String>();
|
||||||
|
|
||||||
// for P/T
|
// for P/T
|
||||||
private final HashMap<Card, String> originalPT = new HashMap<Card, String>();
|
private final HashMap<Card, String> originalPT = new HashMap<Card, String>();
|
||||||
@@ -845,7 +846,7 @@ public class StaticEffect {
|
|||||||
* @param params
|
* @param params
|
||||||
* a HashMap
|
* a HashMap
|
||||||
*/
|
*/
|
||||||
public final void setParams(final HashMap<String, String> params) {
|
public final void setParams(final Map<String, String> params) {
|
||||||
this.mapParams = params;
|
this.mapParams = params;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -854,7 +855,7 @@ public class StaticEffect {
|
|||||||
*
|
*
|
||||||
* @return the params
|
* @return the params
|
||||||
*/
|
*/
|
||||||
public final HashMap<String, String> getParams() {
|
public final Map<String, String> getParams() {
|
||||||
return this.mapParams;
|
return this.mapParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ public class StaticEffects {
|
|||||||
private final List<Card> removeStaticEffect(final StaticEffect se) {
|
private final List<Card> removeStaticEffect(final StaticEffect se) {
|
||||||
final List<Card> affectedCards = se.getAffectedCards();
|
final List<Card> affectedCards = se.getAffectedCards();
|
||||||
final ArrayList<Player> affectedPlayers = se.getAffectedPlayers();
|
final ArrayList<Player> affectedPlayers = se.getAffectedPlayers();
|
||||||
final HashMap<String, String> params = se.getParams();
|
final Map<String, String> params = se.getParams();
|
||||||
|
|
||||||
int powerBonus = 0;
|
int powerBonus = 0;
|
||||||
String addP = "";
|
String addP = "";
|
||||||
@@ -223,7 +223,7 @@ public class StaticEffects {
|
|||||||
for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
|
for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
|
||||||
stA.setTemporarilySuppressed(false);
|
stA.setTemporarilySuppressed(false);
|
||||||
}
|
}
|
||||||
for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) {
|
for (final CardTraitBase rE : affectedCard.getReplacementEffects()) {
|
||||||
rE.setTemporarilySuppressed(false);
|
rE.setTemporarilySuppressed(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -237,7 +237,7 @@ public class AnimateAllEffect extends AnimateEffectBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// give back suppressed replacement effects
|
// give back suppressed replacement effects
|
||||||
for (final TriggerReplacementBase re : removedReplacements) {
|
for (final CardTraitBase re : removedReplacements) {
|
||||||
re.setTemporarilySuppressed(false);
|
re.setTemporarilySuppressed(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package forge.game.ability.effects;
|
package forge.game.ability.effects;
|
||||||
|
|
||||||
import forge.Command;
|
import forge.Command;
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.ability.AbilityFactory;
|
import forge.game.ability.AbilityFactory;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -272,7 +272,7 @@ public class AnimateEffect extends AnimateEffectBase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// give back suppressed replacement effects
|
// give back suppressed replacement effects
|
||||||
for (final TriggerReplacementBase re : removedReplacements) {
|
for (final CardTraitBase re : removedReplacements) {
|
||||||
re.setTemporarilySuppressed(false);
|
re.setTemporarilySuppressed(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class UnattachAllEffect extends SpellAbilityEffect {
|
|||||||
if (o instanceof Card) {
|
if (o instanceof Card) {
|
||||||
final Card c = (Card) o;
|
final Card c = (Card) o;
|
||||||
if (cardToUnattach.isAura()) {
|
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);
|
//AbilityFactoryAttach.handleUnattachAura(cardToUnattach, c, gainControl);
|
||||||
} else if (cardToUnattach.isEquipment()) {
|
} else if (cardToUnattach.isEquipment()) {
|
||||||
if (cardToUnattach.isEquipping() && c.getEquippedBy().contains(cardToUnattach)) {
|
if (cardToUnattach.isEquipping() && c.getEquippedBy().contains(cardToUnattach)) {
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package forge.game.replacement;
|
package forge.game.replacement;
|
||||||
|
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.card.CardFactoryUtil;
|
import forge.game.card.CardFactoryUtil;
|
||||||
@@ -35,7 +35,7 @@ import java.util.Map;
|
|||||||
* TODO: Write javadoc for this type.
|
* TODO: Write javadoc for this type.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public abstract class ReplacementEffect extends TriggerReplacementBase {
|
public abstract class ReplacementEffect extends CardTraitBase {
|
||||||
|
|
||||||
private ReplacementLayer layer = ReplacementLayer.None;
|
private ReplacementLayer layer = ReplacementLayer.None;
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
package forge.game.staticability;
|
package forge.game.staticability;
|
||||||
|
|
||||||
import forge.card.MagicColor;
|
import forge.card.MagicColor;
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.GameEntity;
|
import forge.game.GameEntity;
|
||||||
import forge.game.ability.AbilityUtils;
|
import forge.game.ability.AbilityUtils;
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
@@ -36,44 +37,10 @@ import java.util.Map;
|
|||||||
/**
|
/**
|
||||||
* The Class StaticAbility.
|
* The Class StaticAbility.
|
||||||
*/
|
*/
|
||||||
public class StaticAbility {
|
public class StaticAbility extends CardTraitBase {
|
||||||
|
|
||||||
private Card hostCard = null;
|
|
||||||
|
|
||||||
private HashMap<String, String> params = new HashMap<String, String>();
|
|
||||||
|
|
||||||
private int layer = 0;
|
private int layer = 0;
|
||||||
|
|
||||||
/** The temporarily suppressed. */
|
|
||||||
private boolean temporarilySuppressed = false;
|
|
||||||
|
|
||||||
/** The suppressed. */
|
|
||||||
private final boolean suppressed = false;
|
|
||||||
|
|
||||||
private boolean temporary = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* getHostCard.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link forge.game.card.Card} object.
|
|
||||||
*/
|
|
||||||
public final Card getHostCard() {
|
|
||||||
return this.hostCard;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* <p>
|
|
||||||
* Getter for the field <code>mapParams</code>.
|
|
||||||
* </p>
|
|
||||||
*
|
|
||||||
* @return a {@link java.util.HashMap} object.
|
|
||||||
*/
|
|
||||||
public final HashMap<String, String> getMapParams() {
|
|
||||||
return this.params;
|
|
||||||
}
|
|
||||||
|
|
||||||
// *******************************************************
|
// *******************************************************
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,7 +54,7 @@ public class StaticAbility {
|
|||||||
* a {@link forge.game.card.Card} object.
|
* a {@link forge.game.card.Card} object.
|
||||||
* @return a {@link java.util.HashMap} object.
|
* @return a {@link java.util.HashMap} object.
|
||||||
*/
|
*/
|
||||||
public final HashMap<String, String> getMapParams(final String abString, final Card hostCard) {
|
public final HashMap<String, String> parseParams(final String abString, final Card hostCard) {
|
||||||
final HashMap<String, String> mapParameters = new HashMap<String, String>();
|
final HashMap<String, String> mapParameters = new HashMap<String, String>();
|
||||||
|
|
||||||
if (!(abString.length() > 0)) {
|
if (!(abString.length() > 0)) {
|
||||||
@@ -134,41 +101,41 @@ public class StaticAbility {
|
|||||||
*/
|
*/
|
||||||
public final int generateLayer() {
|
public final int generateLayer() {
|
||||||
|
|
||||||
if (!this.params.get("Mode").equals("Continuous")) {
|
if (!this.mapParams.get("Mode").equals("Continuous")) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("GainControl")) {
|
if (this.mapParams.containsKey("GainControl")) {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("AddType") || this.params.containsKey("RemoveType")
|
if (this.mapParams.containsKey("AddType") || this.mapParams.containsKey("RemoveType")
|
||||||
|| this.params.containsKey("RemoveCardTypes") || this.params.containsKey("RemoveSubTypes")
|
|| this.mapParams.containsKey("RemoveCardTypes") || this.mapParams.containsKey("RemoveSubTypes")
|
||||||
|| this.params.containsKey("RemoveSuperTypes") || this.params.containsKey("RemoveCreatureTypes")) {
|
|| this.mapParams.containsKey("RemoveSuperTypes") || this.mapParams.containsKey("RemoveCreatureTypes")) {
|
||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("AddColor") || this.params.containsKey("RemoveColor")
|
if (this.mapParams.containsKey("AddColor") || this.mapParams.containsKey("RemoveColor")
|
||||||
|| this.params.containsKey("SetColor")) {
|
|| this.mapParams.containsKey("SetColor")) {
|
||||||
return 5;
|
return 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("RemoveAllAbilities") || this.params.containsKey("GainsAbilitiesOf")) {
|
if (this.mapParams.containsKey("RemoveAllAbilities") || this.mapParams.containsKey("GainsAbilitiesOf")) {
|
||||||
return 6; // Layer 6
|
return 6; // Layer 6
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("AddKeyword") || this.params.containsKey("AddAbility")
|
if (this.mapParams.containsKey("AddKeyword") || this.mapParams.containsKey("AddAbility")
|
||||||
|| this.params.containsKey("AddTrigger") || this.params.containsKey("RemoveTriggers")
|
|| this.mapParams.containsKey("AddTrigger") || this.mapParams.containsKey("RemoveTriggers")
|
||||||
|| this.params.containsKey("RemoveKeyword") || this.params.containsKey("AddReplacementEffects")) {
|
|| this.mapParams.containsKey("RemoveKeyword") || this.mapParams.containsKey("AddReplacementEffects")) {
|
||||||
return 7; // Layer 6 (dependent)
|
return 7; // Layer 6 (dependent)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("CharacteristicDefining")) {
|
if (this.mapParams.containsKey("CharacteristicDefining")) {
|
||||||
return 8; // Layer 7a
|
return 8; // Layer 7a
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("AddPower") || this.params.containsKey("AddToughness")
|
if (this.mapParams.containsKey("AddPower") || this.mapParams.containsKey("AddToughness")
|
||||||
|| this.params.containsKey("SetPower") || this.params.containsKey("SetToughness")) {
|
|| this.mapParams.containsKey("SetPower") || this.mapParams.containsKey("SetToughness")) {
|
||||||
return 9; // This is the collection of 7b and 7c
|
return 9; // This is the collection of 7b and 7c
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,8 +151,8 @@ public class StaticAbility {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public final String toString() {
|
public final String toString() {
|
||||||
if (this.params.containsKey("Description") && !this.isSuppressed()) {
|
if (this.mapParams.containsKey("Description") && !this.isSuppressed()) {
|
||||||
return this.params.get("Description").replace("CARDNAME", this.hostCard.getName());
|
return this.mapParams.get("Description").replace("CARDNAME", this.hostCard.getName());
|
||||||
} else {
|
} else {
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
@@ -201,7 +168,7 @@ public class StaticAbility {
|
|||||||
* the host
|
* the host
|
||||||
*/
|
*/
|
||||||
public StaticAbility(final String params, final Card 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.hostCard = host;
|
||||||
this.layer = this.generateLayer();
|
this.layer = this.generateLayer();
|
||||||
}
|
}
|
||||||
@@ -215,9 +182,8 @@ public class StaticAbility {
|
|||||||
* the host
|
* the host
|
||||||
*/
|
*/
|
||||||
public StaticAbility(final HashMap<String, String> params, final Card host) {
|
public StaticAbility(final HashMap<String, String> params, final Card host) {
|
||||||
this.params = new HashMap<String, String>();
|
|
||||||
for (final Map.Entry<String, String> entry : params.entrySet()) {
|
for (final Map.Entry<String, String> entry : params.entrySet()) {
|
||||||
this.params.put(entry.getKey(), entry.getValue());
|
this.mapParams.put(entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
this.layer = this.generateLayer();
|
this.layer = this.generateLayer();
|
||||||
this.hostCard = host;
|
this.hostCard = host;
|
||||||
@@ -234,7 +200,7 @@ public class StaticAbility {
|
|||||||
public final List<Card> applyAbility(final String mode) {
|
public final List<Card> applyAbility(final String mode) {
|
||||||
|
|
||||||
// don't apply the ability if it hasn't got the right 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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -269,7 +235,7 @@ public class StaticAbility {
|
|||||||
final boolean isCombat, final boolean isTest) {
|
final boolean isCombat, final boolean isTest) {
|
||||||
|
|
||||||
// don't apply the ability if it hasn't got the right 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 in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,7 +265,7 @@ public class StaticAbility {
|
|||||||
public final boolean applyAbility(final String mode, final Card card, final Player player) {
|
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
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -336,7 +302,7 @@ public class StaticAbility {
|
|||||||
public final boolean applyAbility(final String mode, final Card card, final SpellAbility spellAbility) {
|
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
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -369,7 +335,7 @@ public class StaticAbility {
|
|||||||
public final void applyAbility(final String mode, final SpellAbility sa, final ManaCostBeingPaid originalCost) {
|
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
|
// 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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -400,7 +366,7 @@ public class StaticAbility {
|
|||||||
public final boolean applyAbility(final String mode, final Card card) {
|
public final boolean applyAbility(final String mode, final Card card) {
|
||||||
|
|
||||||
// don't apply the ability if it hasn't got the right 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 false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -433,7 +399,7 @@ public class StaticAbility {
|
|||||||
public final boolean applyAbility(final String mode, final Card card, final GameEntity target) {
|
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
|
// 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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -449,14 +415,14 @@ public class StaticAbility {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public final Cost getAttackCost(final Card attacker, final GameEntity target) {
|
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 null;
|
||||||
}
|
}
|
||||||
return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target);
|
return StaticAbilityCantAttackBlock.getAttackCost(this, attacker, target);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final Cost getBlockCost(final Card blocker, final Card attacker) {
|
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 null;
|
||||||
}
|
}
|
||||||
return StaticAbilityCantAttackBlock.getBlockCost(this, blocker, attacker);
|
return StaticAbilityCantAttackBlock.getBlockCost(this, blocker, attacker);
|
||||||
@@ -474,9 +440,9 @@ public class StaticAbility {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("EffectZone")) {
|
if (this.mapParams.containsKey("EffectZone")) {
|
||||||
if (!this.params.get("EffectZone").equals("All")
|
if (!this.mapParams.get("EffectZone").equals("All")
|
||||||
&& !ZoneType.listValueOf(this.params.get("EffectZone"))
|
&& !ZoneType.listValueOf(this.mapParams.get("EffectZone"))
|
||||||
.contains(controller.getGame().getZoneOf(this.hostCard).getZoneType())) {
|
.contains(controller.getGame().getZoneOf(this.hostCard).getZoneType())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -486,7 +452,7 @@ public class StaticAbility {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String condition = params.get("Condition");
|
String condition = mapParams.get("Condition");
|
||||||
if (null != condition) {
|
if (null != condition) {
|
||||||
if (condition.equals("Threshold") && !controller.hasThreshold()) return false;
|
if (condition.equals("Threshold") && !controller.hasThreshold()) return false;
|
||||||
if (condition.equals("Hellbent") && !controller.hasHellbent()) 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()) {
|
&& !controller.getOpponent().getAttackedWithCreatureThisTurn()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("Phases")) {
|
if (this.mapParams.containsKey("Phases")) {
|
||||||
List<PhaseType> phases = PhaseType.parseRange(this.params.get("Phases"));
|
List<PhaseType> phases = PhaseType.parseRange(this.mapParams.get("Phases"));
|
||||||
if (!phases.contains(controller.getGame().getPhaseHandler().getPhase())) {
|
if (!phases.contains(controller.getGame().getPhaseHandler().getPhase())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("TopCardOfLibraryIs")) {
|
if (this.mapParams.containsKey("TopCardOfLibraryIs")) {
|
||||||
if (controller.getCardsIn(ZoneType.Library).isEmpty()) {
|
if (controller.getCardsIn(ZoneType.Library).isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final Card topCard = controller.getCardsIn(ZoneType.Library).get(0);
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("CheckSVar")) {
|
if (this.mapParams.containsKey("CheckSVar")) {
|
||||||
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckSVar"), null);
|
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckSVar"), null);
|
||||||
String comparator = "GE1";
|
String comparator = "GE1";
|
||||||
if (this.params.containsKey("SVarCompare")) {
|
if (this.mapParams.containsKey("SVarCompare")) {
|
||||||
comparator = this.params.get("SVarCompare");
|
comparator = this.mapParams.get("SVarCompare");
|
||||||
}
|
}
|
||||||
final String svarOperator = comparator.substring(0, 2);
|
final String svarOperator = comparator.substring(0, 2);
|
||||||
final String svarOperand = comparator.substring(2);
|
final String svarOperand = comparator.substring(2);
|
||||||
@@ -553,11 +519,11 @@ public class StaticAbility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("CheckSecondSVar")) {
|
if (this.mapParams.containsKey("CheckSecondSVar")) {
|
||||||
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckSecondSVar"), null);
|
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckSecondSVar"), null);
|
||||||
String comparator = "GE1";
|
String comparator = "GE1";
|
||||||
if (this.params.containsKey("SecondSVarCompare")) {
|
if (this.mapParams.containsKey("SecondSVarCompare")) {
|
||||||
comparator = this.params.get("SecondSVarCompare");
|
comparator = this.mapParams.get("SecondSVarCompare");
|
||||||
}
|
}
|
||||||
final String svarOperator = comparator.substring(0, 2);
|
final String svarOperator = comparator.substring(0, 2);
|
||||||
final String svarOperand = comparator.substring(2);
|
final String svarOperand = comparator.substring(2);
|
||||||
@@ -569,11 +535,11 @@ public class StaticAbility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("CheckThirdSVar")) {
|
if (this.mapParams.containsKey("CheckThirdSVar")) {
|
||||||
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckThirdSVar"), null);
|
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckThirdSVar"), null);
|
||||||
String comparator = "GE1";
|
String comparator = "GE1";
|
||||||
if (this.params.containsKey("ThirdSVarCompare")) {
|
if (this.mapParams.containsKey("ThirdSVarCompare")) {
|
||||||
comparator = this.params.get("ThirdSVarCompare");
|
comparator = this.mapParams.get("ThirdSVarCompare");
|
||||||
}
|
}
|
||||||
final String svarOperator = comparator.substring(0, 2);
|
final String svarOperator = comparator.substring(0, 2);
|
||||||
final String svarOperand = comparator.substring(2);
|
final String svarOperand = comparator.substring(2);
|
||||||
@@ -585,11 +551,11 @@ public class StaticAbility {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.params.containsKey("CheckFourthSVar")) {
|
if (this.mapParams.containsKey("CheckFourthSVar")) {
|
||||||
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.params.get("CheckFourthSVar"), null);
|
final int sVar = AbilityUtils.calculateAmount(this.hostCard, this.mapParams.get("CheckFourthSVar"), null);
|
||||||
String comparator = "GE1";
|
String comparator = "GE1";
|
||||||
if (this.params.containsKey("FourthSVarCompare")) {
|
if (this.mapParams.containsKey("FourthSVarCompare")) {
|
||||||
comparator = this.params.get("FourthSVarCompare");
|
comparator = this.mapParams.get("FourthSVarCompare");
|
||||||
}
|
}
|
||||||
final String svarOperator = comparator.substring(0, 2);
|
final String svarOperator = comparator.substring(0, 2);
|
||||||
final String svarOperand = comparator.substring(2);
|
final String svarOperand = comparator.substring(2);
|
||||||
@@ -602,24 +568,6 @@ public class StaticAbility {
|
|||||||
return true;
|
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
|
* @return the layer
|
||||||
@@ -635,11 +583,4 @@ public class StaticAbility {
|
|||||||
this.layer = layer;
|
this.layer = layer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTemporarily(boolean b) {
|
|
||||||
this.temporary = b;
|
|
||||||
}
|
|
||||||
public boolean isTemporary() {
|
|
||||||
return this.temporary;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // end class StaticEffectFactory
|
} // end class StaticEffectFactory
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import forge.game.card.CardFactoryUtil;
|
|||||||
import forge.game.cost.Cost;
|
import forge.game.cost.Cost;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_CantBeCast.
|
* The Class StaticAbility_CantBeCast.
|
||||||
@@ -39,7 +40,7 @@ public class StaticAbilityCantAttackBlock {
|
|||||||
* @return a Cost
|
* @return a Cost
|
||||||
*/
|
*/
|
||||||
public static boolean applyCantAttackAbility(final StaticAbility stAb, final Card card, final GameEntity target) {
|
public static boolean applyCantAttackAbility(final StaticAbility stAb, final Card card, final GameEntity target) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
@@ -65,7 +66,7 @@ public class StaticAbilityCantAttackBlock {
|
|||||||
* @return a Cost
|
* @return a Cost
|
||||||
*/
|
*/
|
||||||
public static Cost getAttackCost(final StaticAbility stAb, final Card card, final GameEntity target) {
|
public static Cost getAttackCost(final StaticAbility stAb, final Card card, final GameEntity target) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
@@ -101,7 +102,7 @@ public class StaticAbilityCantAttackBlock {
|
|||||||
* @return a Cost
|
* @return a Cost
|
||||||
*/
|
*/
|
||||||
public static Cost getBlockCost(final StaticAbility stAb, final Card blocker, final GameEntity attacker) {
|
public static Cost getBlockCost(final StaticAbility stAb, final Card blocker, final GameEntity attacker) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import forge.game.zone.ZoneType;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_CantBeCast.
|
* The Class StaticAbility_CantBeCast.
|
||||||
@@ -42,7 +43,7 @@ public class StaticAbilityCantBeCast {
|
|||||||
* @return true, if successful
|
* @return true, if successful
|
||||||
*/
|
*/
|
||||||
public static boolean applyCantBeCastAbility(final StaticAbility stAb, final Card card, final Player activator) {
|
public static boolean applyCantBeCastAbility(final StaticAbility stAb, final Card card, final Player activator) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
@@ -82,7 +83,7 @@ public class StaticAbilityCantBeCast {
|
|||||||
*/
|
*/
|
||||||
public static boolean applyCantBeActivatedAbility(final StaticAbility staticAbility, final Card card,
|
public static boolean applyCantBeActivatedAbility(final StaticAbility staticAbility, final Card card,
|
||||||
final SpellAbility spellAbility) {
|
final SpellAbility spellAbility) {
|
||||||
final HashMap<String, String> params = staticAbility.getMapParams();
|
final Map<String, String> params = staticAbility.getMapParams();
|
||||||
final Card hostCard = staticAbility.getHostCard();
|
final Card hostCard = staticAbility.getHostCard();
|
||||||
final Player activator = spellAbility.getActivatingPlayer();
|
final Player activator = spellAbility.getActivatingPlayer();
|
||||||
|
|
||||||
@@ -119,7 +120,7 @@ public class StaticAbilityCantBeCast {
|
|||||||
* @return true, if successful
|
* @return true, if successful
|
||||||
*/
|
*/
|
||||||
public static boolean applyCantPlayLandAbility(final StaticAbility stAb, final Card card, final Player player) {
|
public static boolean applyCantPlayLandAbility(final StaticAbility stAb, final Card card, final Player player) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import forge.game.spellability.SpellAbility;
|
|||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbilityCantTarget.
|
* The Class StaticAbilityCantTarget.
|
||||||
@@ -42,7 +43,7 @@ public class StaticAbilityCantTarget {
|
|||||||
*/
|
*/
|
||||||
public static boolean applyCantTargetAbility(final StaticAbility staticAbility, final Card card,
|
public static boolean applyCantTargetAbility(final StaticAbility staticAbility, final Card card,
|
||||||
final SpellAbility spellAbility) {
|
final SpellAbility spellAbility) {
|
||||||
final HashMap<String, String> params = staticAbility.getMapParams();
|
final Map<String, String> params = staticAbility.getMapParams();
|
||||||
final Card hostCard = staticAbility.getHostCard();
|
final Card hostCard = staticAbility.getHostCard();
|
||||||
final Card source = spellAbility.getSourceCard();
|
final Card source = spellAbility.getSourceCard();
|
||||||
final Player activator = spellAbility.getActivatingPlayer();
|
final Player activator = spellAbility.getActivatingPlayer();
|
||||||
|
|||||||
@@ -41,10 +41,7 @@ import forge.game.zone.ZoneType;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.commons.lang3.text.WordUtils;
|
import org.apache.commons.lang3.text.WordUtils;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_Continuous.
|
* The Class StaticAbility_Continuous.
|
||||||
@@ -61,7 +58,7 @@ public class StaticAbilityContinuous {
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public static List<Card> applyContinuousAbility(final StaticAbility stAb) {
|
public static List<Card> applyContinuousAbility(final StaticAbility stAb) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
final StaticEffect se = new StaticEffect(hostCard);
|
final StaticEffect se = new StaticEffect(hostCard);
|
||||||
@@ -515,7 +512,7 @@ public class StaticAbilityContinuous {
|
|||||||
final String costcmc = Integer.toString(affectedCard.getCMC());
|
final String costcmc = Integer.toString(affectedCard.getCMC());
|
||||||
s = s.replace("ConvertedManaCost", costcmc);
|
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()) {
|
for (final StaticAbility stA : affectedCard.getStaticAbilities()) {
|
||||||
stA.setTemporarilySuppressed(true);
|
stA.setTemporarilySuppressed(true);
|
||||||
}
|
}
|
||||||
for (final TriggerReplacementBase rE : affectedCard.getReplacementEffects()) {
|
for (final CardTraitBase rE : affectedCard.getReplacementEffects()) {
|
||||||
rE.setTemporarilySuppressed(true);
|
rE.setTemporarilySuppressed(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -544,7 +541,7 @@ public class StaticAbilityContinuous {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ArrayList<Player> getAffectedPlayers(final StaticAbility stAb) {
|
private static ArrayList<Player> getAffectedPlayers(final StaticAbility stAb) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
final Player controller = hostCard.getController();
|
final Player controller = hostCard.getController();
|
||||||
|
|
||||||
@@ -566,7 +563,7 @@ public class StaticAbilityContinuous {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static List<Card> getAffectedCards(final StaticAbility stAb) {
|
private static List<Card> getAffectedCards(final StaticAbility stAb) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
final Game game = hostCard.getGame();
|
final Game game = hostCard.getGame();
|
||||||
final Player controller = hostCard.getController();
|
final Player controller = hostCard.getController();
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import forge.game.zone.ZoneType;
|
|||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_CantBeCast.
|
* The Class StaticAbility_CantBeCast.
|
||||||
@@ -47,7 +48,7 @@ public class StaticAbilityCostChange {
|
|||||||
* a ManaCost
|
* a ManaCost
|
||||||
*/
|
*/
|
||||||
public static void applyRaiseCostAbility(final StaticAbility staticAbility, final SpellAbility sa, final ManaCostBeingPaid manaCost) {
|
public static void applyRaiseCostAbility(final StaticAbility staticAbility, final SpellAbility sa, final ManaCostBeingPaid manaCost) {
|
||||||
final HashMap<String, String> params = staticAbility.getMapParams();
|
final Map<String, String> params = staticAbility.getMapParams();
|
||||||
final Card hostCard = staticAbility.getHostCard();
|
final Card hostCard = staticAbility.getHostCard();
|
||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
final Card card = sa.getSourceCard();
|
final Card card = sa.getSourceCard();
|
||||||
@@ -198,7 +199,7 @@ public class StaticAbilityCostChange {
|
|||||||
if (manaCost.toString().equals("{0}")) {
|
if (manaCost.toString().equals("{0}")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final HashMap<String, String> params = staticAbility.getMapParams();
|
final Map<String, String> params = staticAbility.getMapParams();
|
||||||
final Card hostCard = staticAbility.getHostCard();
|
final Card hostCard = staticAbility.getHostCard();
|
||||||
final Player activator = sa.getActivatingPlayer();
|
final Player activator = sa.getActivatingPlayer();
|
||||||
final Card card = sa.getSourceCard();
|
final Card card = sa.getSourceCard();
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ package forge.game.staticability;
|
|||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_CantBeCast.
|
* The Class StaticAbility_CantBeCast.
|
||||||
@@ -36,7 +37,7 @@ public class StaticAbilityETBTapped {
|
|||||||
* @return true, if successful
|
* @return true, if successful
|
||||||
*/
|
*/
|
||||||
public static boolean applyETBTappedAbility(final StaticAbility stAb, final Card card) {
|
public static boolean applyETBTappedAbility(final StaticAbility stAb, final Card card) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("ValidCard")
|
if (params.containsKey("ValidCard")
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import forge.game.player.Player;
|
|||||||
import forge.game.zone.ZoneType;
|
import forge.game.zone.ZoneType;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_CantBeCast.
|
* The Class StaticAbility_CantBeCast.
|
||||||
@@ -40,7 +41,7 @@ public class StaticAbilityMayLookAt {
|
|||||||
* @return true, if successful
|
* @return true, if successful
|
||||||
*/
|
*/
|
||||||
public static boolean applyMayLookAtAbility(final StaticAbility stAb, final Card card, final Player player) {
|
public static boolean applyMayLookAtAbility(final StaticAbility stAb, final Card card, final Player player) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
|
|
||||||
if (params.containsKey("Affected")
|
if (params.containsKey("Affected")
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import forge.game.card.Card;
|
|||||||
import forge.game.card.CardFactoryUtil;
|
import forge.game.card.CardFactoryUtil;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The Class StaticAbility_PreventDamage.
|
* The Class StaticAbility_PreventDamage.
|
||||||
@@ -45,7 +46,7 @@ public class StaticAbilityPreventDamage {
|
|||||||
*/
|
*/
|
||||||
public static int applyPreventDamageAbility(final StaticAbility stAb, final Card source, final GameEntity target,
|
public static int applyPreventDamageAbility(final StaticAbility stAb, final Card source, final GameEntity target,
|
||||||
final int damage, final boolean isCombat, final boolean isTest) {
|
final int damage, final boolean isCombat, final boolean isTest) {
|
||||||
final HashMap<String, String> params = stAb.getMapParams();
|
final Map<String, String> params = stAb.getMapParams();
|
||||||
final Card hostCard = stAb.getHostCard();
|
final Card hostCard = stAb.getHostCard();
|
||||||
int restDamage = damage;
|
int restDamage = damage;
|
||||||
|
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package forge.game.trigger;
|
package forge.game.trigger;
|
||||||
|
|
||||||
|
import forge.game.CardTraitBase;
|
||||||
import forge.game.Game;
|
import forge.game.Game;
|
||||||
import forge.game.TriggerReplacementBase;
|
|
||||||
import forge.game.card.Card;
|
import forge.game.card.Card;
|
||||||
import forge.game.phase.PhaseHandler;
|
import forge.game.phase.PhaseHandler;
|
||||||
import forge.game.phase.PhaseType;
|
import forge.game.phase.PhaseType;
|
||||||
@@ -41,7 +41,7 @@ import java.util.Map;
|
|||||||
* @author Forge
|
* @author Forge
|
||||||
* @version $Id$
|
* @version $Id$
|
||||||
*/
|
*/
|
||||||
public abstract class Trigger extends TriggerReplacementBase {
|
public abstract class Trigger extends CardTraitBase {
|
||||||
|
|
||||||
/** Constant <code>nextID=0</code>. */
|
/** Constant <code>nextID=0</code>. */
|
||||||
private static int nextID = 0;
|
private static int nextID = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user