* Flashback - Fixed that costs reduction and increasement works correctly for flashbacked spells.

This commit is contained in:
LevelX2 2014-06-27 15:59:18 +02:00
parent d84076ba40
commit 2406faec63
66 changed files with 230 additions and 198 deletions

View file

@ -31,7 +31,7 @@ import mage.constants.*;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.Card;

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.AttacksTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.FlyingAbility;

View file

@ -32,7 +32,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.BushidoAbility;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -30,7 +30,7 @@ package mage.sets.bornofthegods;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.HeroicAbility;
import mage.cards.CardImpl;
@ -38,7 +38,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.counters.CounterType;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
/**
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class HeroOfIroas extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Aura spells");
private static final FilterCard filter = new FilterCard("Aura spells");
static {
filter.add(new SubtypePredicate("Aura"));
}
@ -63,7 +63,7 @@ public class HeroOfIroas extends CardImpl {
this.toughness = new MageInt(2);
// Aura spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// <i>Heroic</i> - Whenever you cast a spell that targets Hero of Iroas, put a +1/+1 counter on Hero of Iroas.
this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance())));
}

View file

@ -34,7 +34,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.dynamicvalue.common.DevotionCount;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.ColoredManaSymbol;

View file

@ -31,12 +31,12 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
/**
@ -45,7 +45,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class Ragemonger extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Minotaur spells");
private static final FilterCard filter = new FilterCard("Minotaur spells");
static {
filter.add(new SubtypePredicate("Minotaur"));
}
@ -62,7 +62,7 @@ public class Ragemonger extends CardImpl {
this.toughness = new MageInt(3);
// Minotaur spells you cast cost {B}{R} less to cast. This effect reduces only the amount of colored mana you pay.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, new ManaCostsImpl("{B}{R}"))));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, new ManaCostsImpl("{B}{R}"))));
}
public Ragemonger(final Ragemonger card) {

View file

@ -37,9 +37,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -50,7 +50,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
public class LongForgottenGohei extends CardImpl {
private static final FilterSpell arcaneFilter = new FilterSpell("Arcane spells");
private static final FilterCard arcaneFilter = new FilterCard("Arcane spells");
private static final FilterCreaturePermanent spiritFilter = new FilterCreaturePermanent("Spirit creatures");
static {
@ -62,7 +62,7 @@ public class LongForgottenGohei extends CardImpl {
super(ownerId, 261, "Long-Forgotten Gohei", Rarity.RARE, new CardType[]{CardType.ARTIFACT}, "{3}");
this.expansionSetCode = "CHK";
// Arcane spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(arcaneFilter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(arcaneFilter, 1)));
// Spirit creatures you control get +1/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield, spiritFilter, false)));
}

View file

@ -34,7 +34,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.ProtectionAbility;

View file

@ -32,7 +32,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -31,7 +31,7 @@ import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -40,7 +40,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.AsEntersBattlefieldAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.keyword.FlashbackAbility;

View file

@ -32,12 +32,12 @@ import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.cost.SpellsCostIncreaseEffect;
import mage.abilities.effects.common.cost.SpellsCostIncreasementControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
/**
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class Derelor extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Black spells");
private static final FilterCard filter = new FilterCard("Black spells");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
@ -62,7 +62,7 @@ public class Derelor extends CardImpl {
this.toughness = new MageInt(4);
// Black spells you cast cost {B} more to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostIncreaseEffect(filter, new ManaCostsImpl("B"))));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostIncreasementControllerEffect(filter, new ManaCostsImpl("B"))));
}
public Derelor(final Derelor card) {

View file

@ -31,12 +31,12 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.CardTypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
@ -47,7 +47,7 @@ import mage.game.permanent.Permanent;
*/
public class CentaurOmenreader extends CardImpl {
private static final FilterSpell filter = new FilterSpell("creature spells");
private static final FilterCard filter = new FilterCard("creature spells");
static {
filter.add(new CardTypePredicate(CardType.CREATURE));
}
@ -77,14 +77,14 @@ public class CentaurOmenreader extends CardImpl {
}
}
class CentaurOmenreaderSpellsCostReductionEffect extends SpellsCostReductionEffect {
class CentaurOmenreaderSpellsCostReductionEffect extends SpellsCostReductionControllerEffect {
public CentaurOmenreaderSpellsCostReductionEffect(FilterSpell filter) {
public CentaurOmenreaderSpellsCostReductionEffect(FilterCard filter) {
super(filter, 2);
staticText = "As long as {this} is tapped, creature spells you cast cost {2} less to cast";
}
protected CentaurOmenreaderSpellsCostReductionEffect(SpellsCostReductionEffect effect) {
protected CentaurOmenreaderSpellsCostReductionEffect(SpellsCostReductionControllerEffect effect) {
super(effect);
}

View file

@ -30,13 +30,13 @@ package mage.sets.innistrad;
import java.util.UUID;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.common.FilterCreatureSpell;
import mage.filter.common.FilterCreatureCard;
/**
*
@ -51,7 +51,7 @@ public class HeartlessSummoning extends CardImpl {
this.color.setBlack(true);
// Creature spells you cast cost {2} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(new FilterCreatureSpell("Creature spells"), 2)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(new FilterCreatureCard("Creature spells"), 2)));
// Creatures you control get -1/-1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(-1, -1, Duration.WhileOnBattlefield)));

View file

@ -32,7 +32,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.Card;

View file

@ -34,7 +34,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.continious.GainAbilitySourceEffect;
import mage.abilities.keyword.HeroicAbility;
import mage.abilities.keyword.HexproofAbility;

View file

@ -33,7 +33,7 @@ import mage.abilities.ActivatedAbility;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.ReplacementEffectImpl;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.keyword.EnchantAbility;

View file

@ -33,8 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -44,7 +45,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class StinkdrinkerDaredevil extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Giant spells");
private static final FilterCard filter = new FilterCard("Giant spells");
static {
filter.add(new SubtypePredicate("Giant"));
@ -61,7 +62,7 @@ public class StinkdrinkerDaredevil extends CardImpl {
this.toughness = new MageInt(3);
// Giant spells you cast cost {2} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 2)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 2)));
}
public StinkdrinkerDaredevil(final StinkdrinkerDaredevil card) {

View file

@ -30,7 +30,7 @@ package mage.sets.magic2013;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.Card;

View file

@ -30,12 +30,13 @@ package mage.sets.magic2014;
import java.util.UUID;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.filter.FilterCard;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.AbilityPredicate;
import mage.filter.predicate.mageobject.CardTypePredicate;
@ -46,7 +47,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
*/
public class WardenOfEvosIsle extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Creature spells with flying");
private static final FilterCard filter = new FilterCard("Creature spells with flying");
static {
filter.add(new CardTypePredicate(CardType.CREATURE));
filter.add(new AbilityPredicate(FlyingAbility.class));
@ -65,7 +66,7 @@ public class WardenOfEvosIsle extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// Creature spells with flying you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}

View file

@ -38,12 +38,12 @@ import mage.ObjectColor;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.game.Game;
import mage.util.CardUtil;
@ -54,8 +54,8 @@ import mage.util.CardUtil;
*/
public class GrandArbiterAugustinIV extends CardImpl {
private static final FilterSpell filterWhite = new FilterSpell("White spells");
private static final FilterSpell filterBlue = new FilterSpell("Blue spells");
private static final FilterCard filterWhite = new FilterCard("White spells");
private static final FilterCard filterBlue = new FilterCard("Blue spells");
static {
filterWhite.add(new ColorPredicate(ObjectColor.WHITE));
filterBlue.add(new ColorPredicate(ObjectColor.BLUE));
@ -74,9 +74,9 @@ public class GrandArbiterAugustinIV extends CardImpl {
this.toughness = new MageInt(3);
// White spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filterWhite, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterWhite, 1)));
// Blue spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filterBlue, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterBlue, 1)));
// Spells your opponents cast cost {1} more to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GrandArbiterAugustinIVCostIncreaseEffect()));
}

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -45,7 +45,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class BallyrushBanneret extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Kithkin spells and Soldier spells");
private static final FilterCard filter = new FilterCard("Kithkin spells and Soldier spells");
static {
filter.add(Predicates.or(
@ -64,7 +64,7 @@ public class BallyrushBanneret extends CardImpl {
this.toughness = new MageInt(1);
// Kithkin spells and Soldier spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public BallyrushBanneret(final BallyrushBanneret card) {

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -45,7 +45,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class BoskBanneret extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Treefolk spells and Shaman spells");
private static final FilterCard filter = new FilterCard("Treefolk spells and Shaman spells");
static {
filter.add(Predicates.or(
@ -64,7 +64,7 @@ public class BoskBanneret extends CardImpl {
this.toughness = new MageInt(3);
// Treefolk spells and Shaman spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public BoskBanneret(final BoskBanneret card) {

View file

@ -34,10 +34,10 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.ReinforceAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class BrighthearthBanneret extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Elemental spells and Warrior spells");
private static final FilterCard filter = new FilterCard("Elemental spells and Warrior spells");
static {
filter.add(Predicates.or(
@ -66,7 +66,7 @@ public class BrighthearthBanneret extends CardImpl {
this.toughness = new MageInt(1);
// Elemental spells and Warrior spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// Reinforce 1-{1}{R}
this.addAbility(new ReinforceAbility(1, new ManaCostsImpl("{1}{R}")));
}

View file

@ -33,10 +33,10 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class FrogtosserBanneret extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Goblin spells and Rogue spells");
private static final FilterCard filter = new FilterCard("Goblin spells and Rogue spells");
static {
filter.add(Predicates.or(
@ -67,7 +67,7 @@ public class FrogtosserBanneret extends CardImpl {
// Haste
this.addAbility(HasteAbility.getInstance());
// Goblin spells and Rogue spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public FrogtosserBanneret(final FrogtosserBanneret card) {

View file

@ -33,10 +33,10 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.IslandwalkAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class StonybrookBanneret extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Merfolk spells and Wizard spells");
private static final FilterCard filter = new FilterCard("Merfolk spells and Wizard spells");
static {
filter.add(Predicates.or(
@ -67,7 +67,7 @@ public class StonybrookBanneret extends CardImpl {
// Islandwalk
this.addAbility(new IslandwalkAbility());
// Merfolk spells and Wizard spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public StonybrookBanneret(final StonybrookBanneret card) {

View file

@ -32,7 +32,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.CardImpl;

View file

@ -32,9 +32,9 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.Zone;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.common.FilterCreatureSpell;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.other.FaceDownPredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.other.FaceDownPredicate;
*/
public class DreamChisel extends CardImpl {
private static final FilterCreatureSpell filter = new FilterCreatureSpell("Face-down creature spells");
private static final FilterCreatureCard filter = new FilterCreatureCard("Face-down creature spells");
static {
filter.add(new FaceDownPredicate());
@ -54,7 +54,7 @@ public class DreamChisel extends CardImpl {
this.expansionSetCode = "ONS";
// Face-down creature spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public DreamChisel(final DreamChisel card) {

View file

@ -35,7 +35,7 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
import mage.filter.FilterSpell;
@ -48,7 +48,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class UndeadWarchief extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Zombie spells");
private static final FilterCard filter = new FilterCard("Zombie spells");
private static final FilterCreaturePermanent filterCreatures = new FilterCreaturePermanent("Zombie creatures");
static {
@ -66,7 +66,7 @@ public class UndeadWarchief extends CardImpl {
this.toughness = new MageInt(1);
// Zombie spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// Zombie creatures you control get +2/+1.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 1, Duration.WhileOnBattlefield, filterCreatures, false)));
}

View file

@ -34,7 +34,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.LifelinkAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -37,9 +37,9 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.RegenerateSourceEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -49,7 +49,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class NightscapeFamiliar extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Blue spells and red spells");
private static final FilterCard filter = new FilterCard("Blue spells and red spells");
static {
filter.add(Predicates.or(
@ -67,7 +67,7 @@ public class NightscapeFamiliar extends CardImpl {
this.toughness = new MageInt(1);
// Blue spells and red spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// {1}{B}: Regenerate Nightscape Familiar.
this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{B}")));
}

View file

@ -34,9 +34,10 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.DefenderAbility;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -47,7 +48,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class SunscapeFamiliar extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Green spells and blue spells");
private static final FilterCard filter = new FilterCard("Green spells and blue spells");
static {
filter.add(Predicates.or(
@ -67,7 +68,7 @@ public class SunscapeFamiliar extends CardImpl {
// Defender
this.addAbility(DefenderAbility.getInstance());
// Green spells and blue spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public SunscapeFamiliar(final SunscapeFamiliar card) {

View file

@ -34,9 +34,9 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class ThornscapeFamiliar extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Red spells and white spells");
private static final FilterCard filter = new FilterCard("Red spells and white spells");
static {
filter.add(Predicates.or(
@ -64,7 +64,7 @@ public class ThornscapeFamiliar extends CardImpl {
this.toughness = new MageInt(1);
// Red spells and white spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public ThornscapeFamiliar(final ThornscapeFamiliar card) {

View file

@ -34,10 +34,10 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.FirstStrikeAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class ThunderscapeFamiliar extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Black spells and green spells");
private static final FilterCard filter = new FilterCard("Black spells and green spells");
static {
filter.add(Predicates.or(
@ -67,7 +67,7 @@ public class ThunderscapeFamiliar extends CardImpl {
// First strike
this.addAbility(FirstStrikeAbility.getInstance());
// Black spells and green spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public ThunderscapeFamiliar(final ThunderscapeFamiliar card) {

View file

@ -36,7 +36,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.AdjustingSourceCosts;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.common.combat.CanBlockAdditionalCreatureEffect;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.FlyingAbility;

View file

@ -32,7 +32,7 @@ import mage.abilities.Ability;
import mage.abilities.ActivatedAbility;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.mana.ManaAbility;
import mage.cards.CardImpl;
import mage.constants.CardType;

View file

@ -33,10 +33,10 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.CardTypePredicate;
@ -46,7 +46,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
*/
public class GoblinElectromancer extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Instant and sorcery spells");
private static final FilterCard filter = new FilterCard("Instant and sorcery spells");
static {
filter.add(Predicates.or(
new CardTypePredicate(CardType.INSTANT),
@ -66,7 +66,7 @@ public class GoblinElectromancer extends CardImpl {
this.toughness = new MageInt(2);
// Instant and sorcery spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public GoblinElectromancer(final GoblinElectromancer card) {

View file

@ -34,7 +34,7 @@ import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.CostImpl;
import mage.abilities.dynamicvalue.common.OpponentsLostLifeCount;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.FlyingAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -35,7 +35,7 @@ import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.ActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.CardImpl;
import mage.choices.ChoiceImpl;
import mage.constants.CardType;

View file

@ -32,7 +32,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;

View file

@ -35,9 +35,9 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.BoostControlledEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class DaruWarchief extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Soldier spells");
private static final FilterCard filter = new FilterCard("Soldier spells");
private static final FilterCreaturePermanent filterCreatures = new FilterCreaturePermanent("Soldier creatures");
static {
@ -66,7 +66,7 @@ public class DaruWarchief extends CardImpl {
this.toughness = new MageInt(1);
// Soldier spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// Soldier creatures you control get +1/+2.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 2, Duration.WhileOnBattlefield, filterCreatures, false)));
}

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.SubtypePredicate;
/**
@ -44,7 +44,7 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class DragonspeakerShaman extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Dragon spells");
private static final FilterCard filter = new FilterCard("Dragon spells");
static {
filter.add(new SubtypePredicate("Dragon"));
@ -62,7 +62,7 @@ public class DragonspeakerShaman extends CardImpl {
this.toughness = new MageInt(2);
// Dragon spells you cast cost {2} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 2)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 2)));
}
public DragonspeakerShaman(final DragonspeakerShaman card) {

View file

@ -35,10 +35,10 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continious.GainAbilityControlledEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.HasteAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -48,11 +48,11 @@ import mage.filter.predicate.mageobject.SubtypePredicate;
*/
public class GoblinWarchief extends CardImpl {
private static final FilterSpell filterSpells = new FilterSpell("Goblin spells");
private static final FilterCard filterSpells = new FilterCard("Goblin spells");
private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("Goblins");
static {
filter.add(new SubtypePredicate("Goblin"));
filterSpells.add(new SubtypePredicate("Goblin"));
filter.add(new SubtypePredicate("Goblin"));
}
@ -66,7 +66,7 @@ public class GoblinWarchief extends CardImpl {
this.toughness = new MageInt(2);
// Goblin spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filterSpells, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterSpells, 1)));
// Goblin creatures you control have haste.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, filter, false)));
}

View file

@ -36,9 +36,9 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.RegenerateTargetEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.target.Target;
@ -50,7 +50,7 @@ import mage.target.common.TargetCreaturePermanent;
*/
public class KrosanWarchief extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Beast spells");
private static final FilterCard filter = new FilterCard("Beast spells");
private static final FilterCreaturePermanent filterTarget = new FilterCreaturePermanent("Beast");
static {
@ -68,7 +68,7 @@ public class KrosanWarchief extends CardImpl {
this.toughness = new MageInt(2);
// Beast spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
// {1}{G}: Regenerate target Beast.
SimpleActivatedAbility ability = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new RegenerateTargetEffect(),

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.MageInt;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.CardTypePredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.CardTypePredicate;
* @author North
*/
public class EtheriumSculptor extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Artifact spells");
private static final FilterCard filter = new FilterCard("Artifact spells");
static {
filter.add(new CardTypePredicate(CardType.ARTIFACT));
}
@ -59,7 +59,7 @@ public class EtheriumSculptor extends CardImpl {
this.toughness = new MageInt(2);
// Artifact spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public EtheriumSculptor(final EtheriumSculptor card) {

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class EmeraldMedallion extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Green spells");
private static final FilterCard filter = new FilterCard("Green spells");
static {
filter.add(new ColorPredicate(ObjectColor.GREEN));
@ -54,7 +54,7 @@ public class EmeraldMedallion extends CardImpl {
this.expansionSetCode = "TMP";
// Green spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public EmeraldMedallion(final EmeraldMedallion card) {

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class JetMedallion extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Black spells");
private static final FilterCard filter = new FilterCard("Black spells");
static {
filter.add(new ColorPredicate(ObjectColor.BLACK));
@ -54,7 +54,7 @@ public class JetMedallion extends CardImpl {
this.expansionSetCode = "TMP";
// Black spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public JetMedallion(final JetMedallion card) {

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class PearlMedallion extends CardImpl {
private static final FilterSpell filter = new FilterSpell("White spells");
private static final FilterCard filter = new FilterCard("White spells");
static {
filter.add(new ColorPredicate(ObjectColor.WHITE));
@ -54,7 +54,7 @@ public class PearlMedallion extends CardImpl {
this.expansionSetCode = "TMP";
// White spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public PearlMedallion(final PearlMedallion card) {

View file

@ -33,9 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.mageobject.ColorPredicate;
/**
@ -43,7 +43,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class RubyMedallion extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Red spells");
private static final FilterCard filter = new FilterCard("Red spells");
static {
filter.add(new ColorPredicate(ObjectColor.RED));
@ -54,7 +54,7 @@ public class RubyMedallion extends CardImpl {
this.expansionSetCode = "TMP";
// Red spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public RubyMedallion(final RubyMedallion card) {

View file

@ -33,8 +33,9 @@ import mage.constants.Rarity;
import mage.constants.Zone;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.cards.CardImpl;
import mage.filter.FilterCard;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -43,7 +44,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class SapphireMedallion extends CardImpl {
private static final FilterSpell filter = new FilterSpell("Blue spells");
private static final FilterCard filter = new FilterCard("Blue spells");
static {
filter.add(new ColorPredicate(ObjectColor.BLUE));
@ -54,7 +55,7 @@ public class SapphireMedallion extends CardImpl {
this.expansionSetCode = "TMP";
// Blue spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public SapphireMedallion(final SapphireMedallion card) {

View file

@ -34,10 +34,10 @@ import mage.constants.Zone;
import mage.MageInt;
import mage.ObjectColor;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.keyword.FlyingAbility;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -47,7 +47,7 @@ import mage.filter.predicate.mageobject.ColorPredicate;
*/
public class StormscapeFamiliar extends CardImpl {
private static final FilterSpell filter = new FilterSpell("White spells and black spells");
private static final FilterCard filter = new FilterCard("White spells and black spells");
static {
filter.add(Predicates.or(
@ -67,7 +67,7 @@ public class StormscapeFamiliar extends CardImpl {
// Flying
this.addAbility(FlyingAbility.getInstance());
// White spells and black spells you cast cost {1} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filter, 1)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1)));
}
public StormscapeFamiliar(final StormscapeFamiliar card) {

View file

@ -34,7 +34,7 @@ import mage.MageObject;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.Card;

View file

@ -37,10 +37,10 @@ import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.common.cost.SpellsCostReductionEffect;
import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect;
import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect;
import mage.cards.CardImpl;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.filter.common.FilterCreatureCard;
import mage.filter.predicate.mageobject.ColorlessPredicate;
import mage.filter.predicate.mageobject.SubtypePredicate;
@ -53,7 +53,7 @@ import mage.target.common.TargetCardInLibrary;
public class EyeOfUgin extends CardImpl {
private static final FilterCreatureCard filter = new FilterCreatureCard("colorless creature card");
private static final FilterSpell filterSpells = new FilterSpell("Colorless Eldrazi spells");
private static final FilterCard filterSpells = new FilterCard("Colorless Eldrazi spells");
static {
filter.add(new ColorlessPredicate());
@ -67,7 +67,7 @@ public class EyeOfUgin extends CardImpl {
this.supertype.add("Legendary");
// Colorless Eldrazi spells you cast cost {2} less to cast.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionEffect(filterSpells, 2)));
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterSpells, 2)));
// {7}, {tap}: Search your library for a colorless creature card, reveal it, and put it into your hand. Then shuffle your library.
Ability searchAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD,
new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true),

View file

@ -33,7 +33,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.abilities.keyword.RetraceAbility;
import mage.cards.Card;

View file

@ -34,7 +34,7 @@ import mage.abilities.DelayedTriggeredAbility;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.common.delayed.AtEndOfTurnDelayedTriggeredAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.ExileTargetEffect;
import mage.abilities.keyword.FlashbackAbility;

View file

@ -32,7 +32,7 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;

View file

@ -3,7 +3,7 @@ package mage.abilities.effects.common;
import mage.Mana;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;

View file

@ -31,7 +31,6 @@ import java.util.UUID;
import mage.abilities.Ability;
import mage.abilities.common.CastCommanderAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;

View file

@ -26,14 +26,19 @@
* or implied, of BetaSteward_at_googlemail.com.
*/
package mage.abilities.effects;
package mage.abilities.effects.common.cost;
import mage.constants.Duration;
import mage.constants.EffectType;
import mage.constants.Outcome;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.CostModificationEffect;
import mage.cards.Card;
import mage.constants.CostModificationType;
import mage.game.Game;
import mage.game.stack.Spell;
/**
* Simple implementation of a {@link CostModificationEffect} offering simplified
@ -67,10 +72,10 @@ public abstract class CostModificationEffectImpl extends ContinuousEffectImpl im
*/
@Override
public final boolean apply ( Game game, Ability source ) { return false; }
@Override
public CostModificationType getModificationType(){
return this.modificationType;
}
}

View file

@ -33,7 +33,6 @@ import mage.abilities.SpellAbility;
import mage.abilities.condition.Condition;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;

View file

@ -29,14 +29,13 @@ package mage.abilities.effects.common.cost;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.cards.Card;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.util.CardUtil;
/**
@ -73,9 +72,15 @@ public class SpellsCostIncreasementAllEffect extends CostModificationEffectImpl
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if ((abilityToModify instanceof SpellAbility || abilityToModify instanceof FlashbackAbility)) {
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
if (abilityToModify instanceof SpellAbility) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
if (spell != null) {
return this.filter.match(spell, game);
} else {
// used at least for flashback ability because Flashback ability doesn't use stack
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
}
}
return false;
}

View file

@ -31,11 +31,11 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.cards.Card;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.util.CardUtil;
@ -44,13 +44,13 @@ import mage.util.CardUtil;
*
* @author Quercitron
*/
public class SpellsCostIncreaseEffect extends CostModificationEffectImpl {
public class SpellsCostIncreasementControllerEffect extends CostModificationEffectImpl {
private final FilterSpell filter;
private final FilterCard filter;
private final int amount;
private ManaCosts<ManaCost> manaCostsToIncrease = null;
public SpellsCostIncreaseEffect(FilterSpell filter, ManaCosts<ManaCost> manaCostsToReduce) {
public SpellsCostIncreasementControllerEffect(FilterCard filter, ManaCosts<ManaCost> manaCostsToReduce) {
super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST);
this.filter = filter;
this.amount = 0;
@ -65,7 +65,7 @@ public class SpellsCostIncreaseEffect extends CostModificationEffectImpl {
this.staticText = sb.toString();
}
public SpellsCostIncreaseEffect(FilterSpell filter, int amount) {
public SpellsCostIncreasementControllerEffect(FilterCard filter, int amount) {
super(Duration.WhileOnBattlefield, Outcome.Detriment, CostModificationType.INCREASE_COST);
this.filter = filter;
this.amount = amount;
@ -75,7 +75,7 @@ public class SpellsCostIncreaseEffect extends CostModificationEffectImpl {
this.staticText = sb.toString();
}
protected SpellsCostIncreaseEffect(SpellsCostIncreaseEffect effect) {
protected SpellsCostIncreasementControllerEffect(SpellsCostIncreasementControllerEffect effect) {
super(effect);
this.filter = effect.filter;
this.amount = effect.amount;
@ -94,16 +94,23 @@ public class SpellsCostIncreaseEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if ((abilityToModify instanceof SpellAbility)
&& abilityToModify.getControllerId().equals(source.getControllerId())) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
return spell != null && this.filter.match(spell, game);
if (abilityToModify instanceof SpellAbility) {
if (abilityToModify.getControllerId().equals(source.getControllerId())) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
if (spell != null) {
return this.filter.match(spell, game);
} else {
// used at least for flashback ability because Flashback ability doesn't use stack
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
}
}
}
return false;
}
@Override
public SpellsCostIncreaseEffect copy() {
return new SpellsCostIncreaseEffect(this);
public SpellsCostIncreasementControllerEffect copy() {
return new SpellsCostIncreasementControllerEffect(this);
}
}

View file

@ -29,7 +29,6 @@ package mage.abilities.effects.common.cost;
import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.keyword.FlashbackAbility;
import mage.cards.Card;
import mage.constants.CostModificationType;
@ -37,6 +36,7 @@ import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.util.CardUtil;
/**
@ -73,9 +73,15 @@ public class SpellsCostReductionAllEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if ((abilityToModify instanceof SpellAbility || abilityToModify instanceof FlashbackAbility)) {
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
if (abilityToModify instanceof SpellAbility) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
if (spell != null) {
return this.filter.match(spell, game);
} else {
// used at least for flashback ability because Flashback ability doesn't use stack
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
}
}
return false;
}

View file

@ -31,11 +31,11 @@ import mage.abilities.Ability;
import mage.abilities.SpellAbility;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.cards.Card;
import mage.constants.CostModificationType;
import mage.constants.Duration;
import mage.constants.Outcome;
import mage.filter.FilterSpell;
import mage.filter.FilterCard;
import mage.game.Game;
import mage.game.stack.Spell;
import mage.util.CardUtil;
@ -44,14 +44,14 @@ import mage.util.CardUtil;
*
* @author North
*/
public class SpellsCostReductionEffect extends CostModificationEffectImpl {
public class SpellsCostReductionControllerEffect extends CostModificationEffectImpl {
private final FilterSpell filter;
private final FilterCard filter;
private final int amount;
private ManaCosts<ManaCost> manaCostsToReduce = null;
public SpellsCostReductionEffect(FilterSpell filter, ManaCosts<ManaCost> manaCostsToReduce) {
public SpellsCostReductionControllerEffect(FilterCard filter, ManaCosts<ManaCost> manaCostsToReduce) {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
this.filter = filter;
this.amount = 0;
@ -67,7 +67,7 @@ public class SpellsCostReductionEffect extends CostModificationEffectImpl {
}
public SpellsCostReductionEffect(FilterSpell filter, int amount) {
public SpellsCostReductionControllerEffect(FilterCard filter, int amount) {
super(Duration.WhileOnBattlefield, Outcome.Benefit, CostModificationType.REDUCE_COST);
this.filter = filter;
this.amount = amount;
@ -77,7 +77,7 @@ public class SpellsCostReductionEffect extends CostModificationEffectImpl {
this.staticText = sb.toString();
}
protected SpellsCostReductionEffect(SpellsCostReductionEffect effect) {
protected SpellsCostReductionControllerEffect(SpellsCostReductionControllerEffect effect) {
super(effect);
this.filter = effect.filter;
this.amount = effect.amount;
@ -96,16 +96,23 @@ public class SpellsCostReductionEffect extends CostModificationEffectImpl {
@Override
public boolean applies(Ability abilityToModify, Ability source, Game game) {
if ((abilityToModify instanceof SpellAbility)
&& abilityToModify.getControllerId().equals(source.getControllerId())) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
return spell != null && this.filter.match(spell, game);
if (abilityToModify instanceof SpellAbility) {
if (abilityToModify.getControllerId().equals(source.getControllerId())) {
Spell spell = (Spell) game.getStack().getStackObject(abilityToModify.getId());
if (spell != null) {
return this.filter.match(spell, game);
} else {
// used at least for flashback ability because Flashback ability doesn't use stack
Card sourceCard = game.getCard(abilityToModify.getSourceId());
return sourceCard != null && this.filter.match(sourceCard, game);
}
}
}
return false;
}
@Override
public SpellsCostReductionEffect copy() {
return new SpellsCostReductionEffect(this);
public SpellsCostReductionControllerEffect copy() {
return new SpellsCostReductionControllerEffect(this);
}
}

View file

@ -175,7 +175,7 @@ class FlashbackEffect extends OneShotEffect {
int amount = source.getManaCostsToPay().getX();
if (amount == 0) {
// add variable cost like Discard X cards to get the X value to the spell
// because there is currently no way to set the x value in anotehr way, it#s set for the
// because there is currently no way to set the x value in anotehr way, it's set for the
// x mana value to be known by the spell
for (Cost cost:source.getCosts()) {
if (cost instanceof VariableCost && cost.isPaid()) {

View file

@ -40,7 +40,7 @@ import mage.abilities.StaticAbility;
import mage.abilities.costs.mana.ManaCost;
import mage.abilities.costs.mana.ManaCosts;
import mage.abilities.effects.AsThoughEffectImpl;
import mage.abilities.effects.CostModificationEffectImpl;
import mage.abilities.effects.common.cost.CostModificationEffectImpl;
import mage.cards.Card;
import mage.constants.CostModificationType;
import mage.filter.common.FilterControlledCreaturePermanent;