mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-15 10:18: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/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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1201,7 +1201,7 @@ public class ComputerUtil {
|
||||
for (final Card c : all) {
|
||||
if (c.isEquipment()) {
|
||||
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")
|
||||
&& params.get("AddKeyword").contains("Haste") && c.getEquippingCard() == null) {
|
||||
return true;
|
||||
|
||||
@@ -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<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||
for (final Card card : cardList) {
|
||||
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")) {
|
||||
continue;
|
||||
}
|
||||
@@ -1054,7 +1054,7 @@ public class ComputerUtilCombat {
|
||||
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||
for (final Card card : cardList) {
|
||||
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")) {
|
||||
continue;
|
||||
}
|
||||
@@ -1220,7 +1220,7 @@ public class ComputerUtilCombat {
|
||||
final List<Card> cardList = game.getCardsIn(ZoneType.Battlefield);
|
||||
for (final Card card : cardList) {
|
||||
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")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -154,7 +154,7 @@ public class AttachAi extends SpellAbilityAi {
|
||||
String type = "";
|
||||
|
||||
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")) {
|
||||
type = stab.get("AddType");
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ public class PermanentCreatureAi extends SpellAbilityAi {
|
||||
for(Card c : cards) {
|
||||
ArrayList<StaticAbility> statics = c.getStaticAbilities();
|
||||
for(StaticAbility s : statics) {
|
||||
final Map<String, String> stabMap = s.getMapParams();
|
||||
final Map<String, String> stabMap = s.parseParams();
|
||||
|
||||
if (!stabMap.get("Mode").equals("Continuous")) {
|
||||
continue;
|
||||
|
||||
@@ -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<String,String> params) {
|
||||
this.mapParams.clear();
|
||||
this.mapParams.putAll(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is intrinsic.
|
||||
*
|
||||
@@ -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")) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@@ -44,7 +45,7 @@ public class StaticEffect {
|
||||
private HashMap<Card, Integer> xValueMap = new HashMap<Card, Integer>();
|
||||
|
||||
private String chosenType;
|
||||
private HashMap<String, String> mapParams = new HashMap<String, String>();
|
||||
private Map<String, String> mapParams = new HashMap<String, String>();
|
||||
|
||||
// for P/T
|
||||
private final HashMap<Card, String> originalPT = new HashMap<Card, String>();
|
||||
@@ -845,7 +846,7 @@ public class StaticEffect {
|
||||
* @param params
|
||||
* a HashMap
|
||||
*/
|
||||
public final void setParams(final HashMap<String, String> params) {
|
||||
public final void setParams(final Map<String, String> params) {
|
||||
this.mapParams = params;
|
||||
}
|
||||
|
||||
@@ -854,7 +855,7 @@ public class StaticEffect {
|
||||
*
|
||||
* @return the params
|
||||
*/
|
||||
public final HashMap<String, String> getParams() {
|
||||
public final Map<String, String> getParams() {
|
||||
return this.mapParams;
|
||||
}
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ public class StaticEffects {
|
||||
private final List<Card> removeStaticEffect(final StaticEffect se) {
|
||||
final List<Card> affectedCards = se.getAffectedCards();
|
||||
final ArrayList<Player> affectedPlayers = se.getAffectedPlayers();
|
||||
final HashMap<String, String> params = se.getParams();
|
||||
final Map<String, String> 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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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<String, String> params = new HashMap<String, String>();
|
||||
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;
|
||||
|
||||
/**
|
||||
* <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.
|
||||
* @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>();
|
||||
|
||||
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<String, String> params, final Card host) {
|
||||
this.params = new HashMap<String, String>();
|
||||
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.hostCard = host;
|
||||
@@ -234,7 +200,7 @@ public class StaticAbility {
|
||||
public final List<Card> 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<PhaseType> phases = PhaseType.parseRange(this.params.get("Phases"));
|
||||
if (this.mapParams.containsKey("Phases")) {
|
||||
List<PhaseType> 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
|
||||
|
||||
@@ -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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> 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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> 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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
|
||||
if (params.containsKey("ValidCard")
|
||||
|
||||
@@ -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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> 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<String, String> params = staticAbility.getMapParams();
|
||||
final Map<String, String> 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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
|
||||
if (params.containsKey("ValidCard")
|
||||
|
||||
@@ -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<String, String> params = staticAbility.getMapParams();
|
||||
final Map<String, String> params = staticAbility.getMapParams();
|
||||
final Card hostCard = staticAbility.getHostCard();
|
||||
final Card source = spellAbility.getSourceCard();
|
||||
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.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<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 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<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 Player controller = hostCard.getController();
|
||||
|
||||
@@ -566,7 +563,7 @@ public class StaticAbilityContinuous {
|
||||
}
|
||||
|
||||
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 Game game = hostCard.getGame();
|
||||
final Player controller = hostCard.getController();
|
||||
|
||||
@@ -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<String, String> params = staticAbility.getMapParams();
|
||||
final Map<String, String> 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<String, String> params = staticAbility.getMapParams();
|
||||
final Map<String, String> params = staticAbility.getMapParams();
|
||||
final Card hostCard = staticAbility.getHostCard();
|
||||
final Player activator = sa.getActivatingPlayer();
|
||||
final Card card = sa.getSourceCard();
|
||||
|
||||
@@ -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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
|
||||
if (params.containsKey("ValidCard")
|
||||
|
||||
@@ -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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
|
||||
if (params.containsKey("Affected")
|
||||
|
||||
@@ -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<String, String> params = stAb.getMapParams();
|
||||
final Map<String, String> params = stAb.getMapParams();
|
||||
final Card hostCard = stAb.getHostCard();
|
||||
int restDamage = damage;
|
||||
|
||||
|
||||
@@ -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 <code>nextID=0</code>. */
|
||||
private static int nextID = 0;
|
||||
|
||||
Reference in New Issue
Block a user