diff --git a/.gitattributes b/.gitattributes index 50158bf4446..f7c8a8a69b8 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1116,6 +1116,7 @@ res/cardsfolder/b/bloodied_ghost.txt svneol=native#text/plain res/cardsfolder/b/bloodletter_quill.txt svneol=native#text/plain res/cardsfolder/b/bloodline_keeper_lord_of_lineage.txt -text res/cardsfolder/b/bloodline_shaman.txt -text +res/cardsfolder/b/bloodlord_of_vaasgoth.txt -text res/cardsfolder/b/bloodmark_mentor.txt svneol=native#text/plain res/cardsfolder/b/bloodpyre_elemental.txt svneol=native#text/plain res/cardsfolder/b/bloodrage_vampire.txt svneol=native#text/plain diff --git a/res/cardsfolder/b/bloodlord_of_vaasgoth.txt b/res/cardsfolder/b/bloodlord_of_vaasgoth.txt new file mode 100644 index 00000000000..1bcdb150787 --- /dev/null +++ b/res/cardsfolder/b/bloodlord_of_vaasgoth.txt @@ -0,0 +1,13 @@ +Name:Bloodlord of Vaasgoth +ManaCost:3 B B +Types:Creature Vampire Warrior +PT:3/3 +K:Bloodthirst 3 +K:Flying +T:Mode$ SpellCast | ValidCard$ Creature.Vampire | ValidActivatingPlayer$ You | TriggerZones$ Battlefield | Execute$ BloodPump | TriggerDescription$ Whenever you cast a Vampire creature spell, it gains bloodthirst 3. +SVar:BloodPump:AB$ Animate | Cost$ 0 | Defined$ TriggeredCard | Replacements$ etbBloodthirst | sVars$ VaasgothETB,BloodthirstCounters | Permanent$ True +SVar:etbBloodthirst:Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield | Bloodthirst$ True | ReplaceWith$ VaasgothETB | Description$ Bloodthirst 3 (If an opponent was dealt damage this turn, this creature enters the battlefield with three +1/+1 counters on it.) +SVar:VaasgothETB:AB$ ChangeZone | Cost$ 0 | Hidden$ True | Origin$ All | Destination$ Battlefield | Defined$ ReplacedCard | SubAbility$ BloodthirstCounters +SVar:BloodthirstCounters:DB$ PutCounter | Defined$ Self | CounterType$ P1P1 | CounterNum$ 3 +SVar:Picture:http://www.wizards.com/global/images/magic/general/bloodlord_of_vaasgoth.jpg +Oracle:Bloodthirst 3 (If an opponent was dealt damage this turn, this creature enters the battlefield with three +1/+1 counters on it.)\nFlying\nWhenever you cast a Vampire creature spell, it gains bloodthirst 3. diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 335393630fb..962779248f7 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -8147,7 +8147,7 @@ public class Card extends GameEntity implements Comparable { public void setReplacementEffects(final List res) { this.getCharacteristics().getReplacementEffects().clear(); for (final ReplacementEffect replacementEffect : res) { - if (!replacementEffect.isTemporary()) { + if (replacementEffect.isIntrinsic()) { this.addReplacementEffect(replacementEffect); } } diff --git a/src/main/java/forge/card/ability/effects/AnimateAllEffect.java b/src/main/java/forge/card/ability/effects/AnimateAllEffect.java index 800be3caf6e..0416ddf403d 100644 --- a/src/main/java/forge/card/ability/effects/AnimateAllEffect.java +++ b/src/main/java/forge/card/ability/effects/AnimateAllEffect.java @@ -13,6 +13,7 @@ import forge.card.TriggerReplacementBase; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; import forge.card.replacement.ReplacementEffect; +import forge.card.replacement.ReplacementHandler; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; @@ -100,7 +101,11 @@ public class AnimateAllEffect extends AnimateEffectBase { if (sa.hasParam("Abilities")) { abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); } - + // replacement effects to add to the animated being + final ArrayList replacements = new ArrayList(); + if (sa.hasParam("Replacements")) { + replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(","))); + } // triggers to add to the animated being final ArrayList triggers = new ArrayList(); if (sa.hasParam("Triggers")) { @@ -156,7 +161,15 @@ public class AnimateAllEffect extends AnimateEffectBase { } } } - + // give replacement effects + final ArrayList addedReplacements = new ArrayList(); + if (replacements.size() > 0) { + for (final String s : replacements) { + final String actualReplacement = host.getSVar(s); + final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false); + addedReplacements.add(c.addReplacementEffect(parsedReplacement)); + } + } // Grant triggers final ArrayList addedTriggers = new ArrayList(); if (triggers.size() > 0) { @@ -210,7 +223,7 @@ public class AnimateAllEffect extends AnimateEffectBase { @Override public void run() { - doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, + doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements, colorTimestamp, false, removedAbilities, timestamp); // give back suppressed triggers diff --git a/src/main/java/forge/card/ability/effects/AnimateEffect.java b/src/main/java/forge/card/ability/effects/AnimateEffect.java index 60539cac9a7..207b38b3290 100644 --- a/src/main/java/forge/card/ability/effects/AnimateEffect.java +++ b/src/main/java/forge/card/ability/effects/AnimateEffect.java @@ -12,6 +12,7 @@ import forge.card.TriggerReplacementBase; import forge.card.ability.AbilityFactory; import forge.card.ability.AbilityUtils; import forge.card.replacement.ReplacementEffect; +import forge.card.replacement.ReplacementHandler; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; @@ -117,6 +118,12 @@ public class AnimateEffect extends AnimateEffectBase { abilities.addAll(Arrays.asList(sa.getParam("Abilities").split(","))); } + // replacement effects to add to the animated being + final ArrayList replacements = new ArrayList(); + if (sa.hasParam("Replacements")) { + replacements.addAll(Arrays.asList(sa.getParam("Replacements").split(","))); + } + // triggers to add to the animated being final ArrayList triggers = new ArrayList(); if (sa.hasParam("Triggers")) { @@ -179,6 +186,16 @@ public class AnimateEffect extends AnimateEffectBase { } } + // give replacement effects + final ArrayList addedReplacements = new ArrayList(); + if (replacements.size() > 0) { + for (final String s : replacements) { + final String actualReplacement = source.getSVar(s); + final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, c, false); + addedReplacements.add(c.addReplacementEffect(parsedReplacement)); + } + } + // suppress triggers from the animated card final ArrayList removedTriggers = new ArrayList(); if (sa.hasParam("OverwriteTriggers") || removeAll) { @@ -239,7 +256,7 @@ public class AnimateEffect extends AnimateEffectBase { @Override public void run() { - doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, + doUnanimate(c, sa, finalDesc, hiddenKeywords, addedAbilities, addedTriggers, addedReplacements, colorTimestamp, givesStAbs, removedAbilities, timestamp); // give back suppressed triggers diff --git a/src/main/java/forge/card/ability/effects/AnimateEffectBase.java b/src/main/java/forge/card/ability/effects/AnimateEffectBase.java index ae32b669cae..8ade01a82a1 100644 --- a/src/main/java/forge/card/ability/effects/AnimateEffectBase.java +++ b/src/main/java/forge/card/ability/effects/AnimateEffectBase.java @@ -21,6 +21,7 @@ import java.util.ArrayList; import forge.Card; import forge.card.ability.SpellAbilityEffect; +import forge.card.replacement.ReplacementEffect; import forge.card.spellability.SpellAbility; import forge.card.staticability.StaticAbility; import forge.card.trigger.Trigger; @@ -134,7 +135,8 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { */ void doUnanimate(final Card c, SpellAbility sa, final String colorDesc, final ArrayList hiddenKeywords, final ArrayList addedAbilities, - final ArrayList addedTriggers, final long colorTimestamp, final boolean givesStAbs, + final ArrayList addedTriggers, final ArrayList addedReplacements, + final long colorTimestamp, final boolean givesStAbs, final ArrayList removedAbilities, final long timestamp) { c.removeNewPT(timestamp); @@ -169,6 +171,10 @@ public abstract class AnimateEffectBase extends SpellAbilityEffect { c.removeTrigger(t); } + for (final ReplacementEffect rep : addedReplacements) { + c.getReplacementEffects().remove(rep); + } + // any other unanimate cleanup if (!c.isCreature()) { c.unEquipAllCards(); diff --git a/src/main/java/forge/card/ability/effects/EffectEffect.java b/src/main/java/forge/card/ability/effects/EffectEffect.java index c9ac4d64034..b8189353a02 100644 --- a/src/main/java/forge/card/ability/effects/EffectEffect.java +++ b/src/main/java/forge/card/ability/effects/EffectEffect.java @@ -146,7 +146,7 @@ public class EffectEffect extends SpellAbilityEffect { for (final String s : effectReplacementEffects) { final String actualReplacement = hostCard.getSVar(s); - final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, eff); + final ReplacementEffect parsedReplacement = ReplacementHandler.parseReplacement(actualReplacement, eff, true); eff.addReplacementEffect(parsedReplacement); } } diff --git a/src/main/java/forge/card/cardfactory/CardFactory.java b/src/main/java/forge/card/cardfactory/CardFactory.java index 46350adeef3..4afea7cd8e0 100644 --- a/src/main/java/forge/card/cardfactory/CardFactory.java +++ b/src/main/java/forge/card/cardfactory/CardFactory.java @@ -340,7 +340,7 @@ public class CardFactory { //Planeswalker damage redirection card.addReplacementEffect(ReplacementHandler.parseReplacement("Event$ DamageDone | ActiveZones$ Battlefield | IsCombat$ False | ValidSource$ Card.YouDontCtrl" + " | ValidTarget$ You | Optional$ True | OptionalDecider$ Opponent | ReplaceWith$ DamagePW | Secondary$ True" - + " | AICheckSVar$ DamagePWAI | AISVarCompare$ GT4 | Description$ Redirect damage to " + card.toString(), card)); + + " | AICheckSVar$ DamagePWAI | AISVarCompare$ GT4 | Description$ Redirect damage to " + card.toString(), card, true)); card.setSVar("DamagePW", "AB$DealDamage | Cost$ 0 | Defined$ Self | NumDmg$ DamagePWX | DamageSource$ ReplacedSource | References$ DamagePWX,DamagePWAI"); card.setSVar("DamagePWX", "ReplaceCount$DamageAmount"); card.setSVar("DamagePWAI", "ReplaceCount$DamageAmount/NMinus.DamagePWY"); @@ -400,7 +400,7 @@ public class CardFactory { private static void readCardFace(Card c, ICardFace face) { for(String a : face.getAbilities()) c.addIntrinsicAbility(a); for(String k : face.getKeywords()) c.addIntrinsicKeyword(k); - for(String r : face.getReplacements()) c.addReplacementEffect(ReplacementHandler.parseReplacement(r, c)); + for(String r : face.getReplacements()) c.addReplacementEffect(ReplacementHandler.parseReplacement(r, c, true)); for(String s : face.getStaticAbilities()) c.addStaticAbilityString(s); for(String t : face.getTriggers()) c.addTrigger(TriggerHandler.parseTrigger(t, c, true)); for(Entry v : face.getVariables()) c.setSVar(v.getKey(), v.getValue()); diff --git a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java index fc875603fab..7cb07c564e7 100644 --- a/src/main/java/forge/card/cardfactory/CardFactoryUtil.java +++ b/src/main/java/forge/card/cardfactory/CardFactoryUtil.java @@ -2649,7 +2649,7 @@ public class CardFactoryUtil { } } - ReplacementEffect re = ReplacementHandler.parseReplacement(repEffsb.toString(), card); + ReplacementEffect re = ReplacementHandler.parseReplacement(repEffsb.toString(), card, true); re.setLayer(layer); re.setOverridingAbility(repAb); @@ -2687,7 +2687,7 @@ public class CardFactoryUtil { String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield " + "| ReplaceWith$ ETBCounterSVar | Description$ " + desc + (!extraparams.equals("") ? " | " + extraparams : ""); - ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card); + ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, true); re.setLayer(ReplacementLayer.Other); card.addReplacementEffect(re); @@ -2705,7 +2705,7 @@ public class CardFactoryUtil { String repeffstr = "Event$ Moved | ValidCard$ Card.Self | Destination$ Battlefield " + "| ReplaceWith$ ETBTappedSVar | Description$ CARDNAME enters the battlefield tapped."; - ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card); + ReplacementEffect re = ReplacementHandler.parseReplacement(repeffstr, card, true); re.setLayer(ReplacementLayer.Other); card.addReplacementEffect(re); @@ -3318,7 +3318,7 @@ public class CardFactoryUtil { } if( hasKw ) { - ReplacementEffect re = ReplacementHandler.parseReplacement("Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.EnchantedBy | ReplaceWith$ RegenTA | Secondary$ True | TotemArmor$ True | Description$ Totem armor - " + c, c); + ReplacementEffect re = ReplacementHandler.parseReplacement("Event$ Destroy | ActiveZones$ Battlefield | ValidCard$ Card.EnchantedBy | ReplaceWith$ RegenTA | Secondary$ True | TotemArmor$ True | Description$ Totem armor - " + c, c, true); c.getSVars().put("RegenTA", "AB$ DealDamage | Cost$ 0 | Defined$ ReplacedCard | Remove$ All | SubAbility$ DestroyMe"); c.getSVars().put("DestroyMe", "DB$ Destroy | Defined$ Self"); c.getReplacementEffects().add(re); diff --git a/src/main/java/forge/card/replacement/ReplaceCounter.java b/src/main/java/forge/card/replacement/ReplaceCounter.java index 68266219b78..f182658267d 100644 --- a/src/main/java/forge/card/replacement/ReplaceCounter.java +++ b/src/main/java/forge/card/replacement/ReplaceCounter.java @@ -34,8 +34,8 @@ public class ReplaceCounter extends ReplacementEffect { * @param map the map * @param host the host */ - public ReplaceCounter(Map map, Card host) { - super(map, host); + public ReplaceCounter(Map map, Card host, boolean intrinsic) { + super(map, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceDamage.java b/src/main/java/forge/card/replacement/ReplaceDamage.java index 80961eca088..cd18e7cfe44 100644 --- a/src/main/java/forge/card/replacement/ReplaceDamage.java +++ b/src/main/java/forge/card/replacement/ReplaceDamage.java @@ -36,8 +36,8 @@ public class ReplaceDamage extends ReplacementEffect { * @param map the map * @param host the host */ - public ReplaceDamage(Map map, Card host) { - super(map, host); + public ReplaceDamage(Map map, Card host, boolean intrinsic) { + super(map, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceDestroy.java b/src/main/java/forge/card/replacement/ReplaceDestroy.java index 474bcef83e5..ca5306cfa37 100644 --- a/src/main/java/forge/card/replacement/ReplaceDestroy.java +++ b/src/main/java/forge/card/replacement/ReplaceDestroy.java @@ -34,8 +34,8 @@ public class ReplaceDestroy extends ReplacementEffect { * @param params the params * @param host the host */ - public ReplaceDestroy(final Map params, final Card host) { - super(params, host); + public ReplaceDestroy(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceDiscard.java b/src/main/java/forge/card/replacement/ReplaceDiscard.java index a777eebaecf..9ab6f79268a 100644 --- a/src/main/java/forge/card/replacement/ReplaceDiscard.java +++ b/src/main/java/forge/card/replacement/ReplaceDiscard.java @@ -34,8 +34,8 @@ public class ReplaceDiscard extends ReplacementEffect { * @param params the params * @param host the host */ - public ReplaceDiscard(final Map params, final Card host) { - super(params, host); + public ReplaceDiscard(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceDraw.java b/src/main/java/forge/card/replacement/ReplaceDraw.java index 26f8a6c5d2e..8fa4141d2b4 100644 --- a/src/main/java/forge/card/replacement/ReplaceDraw.java +++ b/src/main/java/forge/card/replacement/ReplaceDraw.java @@ -36,8 +36,8 @@ public class ReplaceDraw extends ReplacementEffect { * @param params the params * @param host the host */ - public ReplaceDraw(final Map params, final Card host) { - super(params, host); + public ReplaceDraw(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceGainLife.java b/src/main/java/forge/card/replacement/ReplaceGainLife.java index b9d377388ff..7ce294c6309 100644 --- a/src/main/java/forge/card/replacement/ReplaceGainLife.java +++ b/src/main/java/forge/card/replacement/ReplaceGainLife.java @@ -34,8 +34,8 @@ public class ReplaceGainLife extends ReplacementEffect { * @param map the map * @param host the host */ - public ReplaceGainLife(Map map, Card host) { - super(map, host); + public ReplaceGainLife(Map map, Card host, boolean intrinsic) { + super(map, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceGameLoss.java b/src/main/java/forge/card/replacement/ReplaceGameLoss.java index bfbfbd5d2ac..66280090466 100644 --- a/src/main/java/forge/card/replacement/ReplaceGameLoss.java +++ b/src/main/java/forge/card/replacement/ReplaceGameLoss.java @@ -16,8 +16,8 @@ public class ReplaceGameLoss extends ReplacementEffect { * @param map the map * @param host the host */ - public ReplaceGameLoss(Map map, Card host) { - super(map, host); + public ReplaceGameLoss(Map map, Card host, boolean intrinsic) { + super(map, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceMoved.java b/src/main/java/forge/card/replacement/ReplaceMoved.java index e91ef715ecb..11d95ab9091 100644 --- a/src/main/java/forge/card/replacement/ReplaceMoved.java +++ b/src/main/java/forge/card/replacement/ReplaceMoved.java @@ -18,8 +18,8 @@ public class ReplaceMoved extends ReplacementEffect { * @param mapParams   HashMap * @param host   Card */ - public ReplaceMoved(final Map mapParams, final Card host) { - super(mapParams, host); + public ReplaceMoved(final Map mapParams, final Card host, final boolean intrinsic) { + super(mapParams, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceSetInMotion.java b/src/main/java/forge/card/replacement/ReplaceSetInMotion.java index ff6d86808ce..493c975c83e 100644 --- a/src/main/java/forge/card/replacement/ReplaceSetInMotion.java +++ b/src/main/java/forge/card/replacement/ReplaceSetInMotion.java @@ -33,8 +33,8 @@ public class ReplaceSetInMotion extends ReplacementEffect { * @param params the params * @param host the host */ - public ReplaceSetInMotion(final Map params, final Card host) { - super(params, host); + public ReplaceSetInMotion(final Map params, final Card host, final boolean intrinsic) { + super(params, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplaceTurnFaceUp.java b/src/main/java/forge/card/replacement/ReplaceTurnFaceUp.java index 2cf9c4ca5f9..43ac3d3a1d4 100644 --- a/src/main/java/forge/card/replacement/ReplaceTurnFaceUp.java +++ b/src/main/java/forge/card/replacement/ReplaceTurnFaceUp.java @@ -17,8 +17,8 @@ public class ReplaceTurnFaceUp extends ReplacementEffect { * @param mapParams   HashMap * @param host   Card */ - public ReplaceTurnFaceUp(final Map mapParams, final Card host) { - super(mapParams, host); + public ReplaceTurnFaceUp(final Map mapParams, final Card host, final boolean intrinsic) { + super(mapParams, host, intrinsic); } /* (non-Javadoc) diff --git a/src/main/java/forge/card/replacement/ReplacementEffect.java b/src/main/java/forge/card/replacement/ReplacementEffect.java index cae9e649c21..e52263dedf8 100644 --- a/src/main/java/forge/card/replacement/ReplacementEffect.java +++ b/src/main/java/forge/card/replacement/ReplacementEffect.java @@ -41,6 +41,9 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { /** The has run. */ private boolean hasRun = false; + /** The is intrinsic. */ + private final boolean intrinsic; + /** * Checks for run. * @@ -61,9 +64,10 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { * @param host * the host */ - public ReplacementEffect(final Map map, final Card host) { + public ReplacementEffect(final Map map, final Card host, final boolean intrinsic) { mapParams = map; this.setHostCard(host); + this.intrinsic = intrinsic; } /** @@ -200,10 +204,11 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { */ public final ReplacementEffect getCopy() { ReplacementType rt = ReplacementType.getTypeFor(this); - ReplacementEffect res = rt.createReplacement(mapParams, hostCard); + ReplacementEffect res = rt.createReplacement(mapParams, hostCard, intrinsic); res.setOverridingAbility(this.getOverridingAbility()); res.setActiveZone(validHostZones); res.setLayer(getLayer()); + res.setTemporary(isTemporary()); return res; } @@ -270,4 +275,12 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { public final boolean isTemporary() { return this.temporary; } + /** + * Checks if is intrinsic. + * + * @return the isIntrinsic + */ + public boolean isIntrinsic() { + return this.intrinsic; + } } diff --git a/src/main/java/forge/card/replacement/ReplacementHandler.java b/src/main/java/forge/card/replacement/ReplacementHandler.java index 46947c61926..5329459f34d 100644 --- a/src/main/java/forge/card/replacement/ReplacementHandler.java +++ b/src/main/java/forge/card/replacement/ReplacementHandler.java @@ -261,10 +261,10 @@ public class ReplacementHandler { * The cards that hosts the replacement effect. * @return A finished instance */ - public static ReplacementEffect parseReplacement(final String repParse, final Card host) { + public static ReplacementEffect parseReplacement(final String repParse, final Card host, final boolean intrinsic) { final Map mapParams = FileSection.parseToMap(repParse, "$", "|"); - return ReplacementHandler.parseReplacement(mapParams, host); + return ReplacementHandler.parseReplacement(mapParams, host, intrinsic); } /** @@ -278,9 +278,9 @@ public class ReplacementHandler { * The card that hosts the replacement effect * @return The finished instance */ - private static ReplacementEffect parseReplacement(final Map mapParams, final Card host) { + private static ReplacementEffect parseReplacement(final Map mapParams, final Card host, final boolean intrinsic) { final ReplacementType rt = ReplacementType.smartValueOf(mapParams.get("Event")); - ReplacementEffect ret = rt.createReplacement(mapParams, host); + ReplacementEffect ret = rt.createReplacement(mapParams, host, intrinsic); String activeZones = mapParams.get("ActiveZones"); if (null != activeZones) { diff --git a/src/main/java/forge/card/replacement/ReplacementType.java b/src/main/java/forge/card/replacement/ReplacementType.java index 03263218cb4..3a76062cabd 100644 --- a/src/main/java/forge/card/replacement/ReplacementType.java +++ b/src/main/java/forge/card/replacement/ReplacementType.java @@ -54,14 +54,14 @@ public enum ReplacementType { * @param intrinsic * @return */ - public ReplacementEffect createReplacement(Map mapParams, Card host) { + public ReplacementEffect createReplacement(Map mapParams, Card host, boolean intrinsic) { @SuppressWarnings("unchecked") Constructor[] cc = (Constructor[]) clasz.getDeclaredConstructors(); for (Constructor c : cc) { Class[] pp = c.getParameterTypes(); if (pp[0].isAssignableFrom(Map.class)) { try { - ReplacementEffect res = c.newInstance(mapParams, host); + ReplacementEffect res = c.newInstance(mapParams, host, intrinsic); return res; } catch (IllegalArgumentException e) { // TODO Auto-generated catch block ignores the exception, but sends it to System.err and probably forge.log. diff --git a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java index 4c143271fb9..08184faec0f 100644 --- a/src/main/java/forge/card/staticability/StaticAbilityContinuous.java +++ b/src/main/java/forge/card/staticability/StaticAbilityContinuous.java @@ -431,7 +431,7 @@ public class StaticAbilityContinuous { // add Replacement effects if (addReplacements != null) { for (String rep : addReplacements) { - final ReplacementEffect actualRep = ReplacementHandler.parseReplacement(rep, affectedCard); + final ReplacementEffect actualRep = ReplacementHandler.parseReplacement(rep, affectedCard, false); affectedCard.addReplacementEffect(actualRep).setTemporary(true);; } }