diff --git a/Mage.Sets/src/mage/sets/avacynrestored/ArcaneMelee.java b/Mage.Sets/src/mage/sets/avacynrestored/ArcaneMelee.java
index 4601143cde1..83605b77b65 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/ArcaneMelee.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/ArcaneMelee.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/avacynrestored/HeraldOfWar.java b/Mage.Sets/src/mage/sets/avacynrestored/HeraldOfWar.java
index 91797abbf19..a4b8b09d863 100644
--- a/Mage.Sets/src/mage/sets/avacynrestored/HeraldOfWar.java
+++ b/Mage.Sets/src/mage/sets/avacynrestored/HeraldOfWar.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KentaroTheSmilingCat.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KentaroTheSmilingCat.java
index a1de1054379..8453f863634 100644
--- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/KentaroTheSmilingCat.java
+++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/KentaroTheSmilingCat.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/HeroOfIroas.java b/Mage.Sets/src/mage/sets/bornofthegods/HeroOfIroas.java
index 4b509a2ffdd..6d9e91d654d 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/HeroOfIroas.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/HeroOfIroas.java
@@ -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)));
// Heroic - 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())));
}
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/MarshmistTitan.java b/Mage.Sets/src/mage/sets/bornofthegods/MarshmistTitan.java
index aa977229118..2ff017cc130 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/MarshmistTitan.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/MarshmistTitan.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/bornofthegods/Ragemonger.java b/Mage.Sets/src/mage/sets/bornofthegods/Ragemonger.java
index 522d329e26d..92b42db698c 100644
--- a/Mage.Sets/src/mage/sets/bornofthegods/Ragemonger.java
+++ b/Mage.Sets/src/mage/sets/bornofthegods/Ragemonger.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/LongForgottenGohei.java b/Mage.Sets/src/mage/sets/championsofkamigawa/LongForgottenGohei.java
index df55e532b14..0627a8c8fff 100644
--- a/Mage.Sets/src/mage/sets/championsofkamigawa/LongForgottenGohei.java
+++ b/Mage.Sets/src/mage/sets/championsofkamigawa/LongForgottenGohei.java
@@ -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)));
}
diff --git a/Mage.Sets/src/mage/sets/commander/AnimarSoulOfElements.java b/Mage.Sets/src/mage/sets/commander/AnimarSoulOfElements.java
index 3c663c97ea7..ea891aa902c 100644
--- a/Mage.Sets/src/mage/sets/commander/AnimarSoulOfElements.java
+++ b/Mage.Sets/src/mage/sets/commander/AnimarSoulOfElements.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/darkascension/ThaliaGuardianOfThraben.java b/Mage.Sets/src/mage/sets/darkascension/ThaliaGuardianOfThraben.java
index 96bddfea246..4385c9cbdec 100644
--- a/Mage.Sets/src/mage/sets/darkascension/ThaliaGuardianOfThraben.java
+++ b/Mage.Sets/src/mage/sets/darkascension/ThaliaGuardianOfThraben.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/darksteel/Trinisphere.java b/Mage.Sets/src/mage/sets/darksteel/Trinisphere.java
index 00fbc826d1e..9d9dbde0f33 100644
--- a/Mage.Sets/src/mage/sets/darksteel/Trinisphere.java
+++ b/Mage.Sets/src/mage/sets/darksteel/Trinisphere.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/CouncilOfTheAbsolute.java b/Mage.Sets/src/mage/sets/dragonsmaze/CouncilOfTheAbsolute.java
index cf0952a407f..91b8204886e 100644
--- a/Mage.Sets/src/mage/sets/dragonsmaze/CouncilOfTheAbsolute.java
+++ b/Mage.Sets/src/mage/sets/dragonsmaze/CouncilOfTheAbsolute.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/fallenempires/Derelor.java b/Mage.Sets/src/mage/sets/fallenempires/Derelor.java
index a7a81f20f6a..c5977aa2a92 100644
--- a/Mage.Sets/src/mage/sets/fallenempires/Derelor.java
+++ b/Mage.Sets/src/mage/sets/fallenempires/Derelor.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/futuresight/CentaurOmenreader.java b/Mage.Sets/src/mage/sets/futuresight/CentaurOmenreader.java
index e04621f7ee6..48dc1bb0f97 100644
--- a/Mage.Sets/src/mage/sets/futuresight/CentaurOmenreader.java
+++ b/Mage.Sets/src/mage/sets/futuresight/CentaurOmenreader.java
@@ -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);
}
diff --git a/Mage.Sets/src/mage/sets/innistrad/HeartlessSummoning.java b/Mage.Sets/src/mage/sets/innistrad/HeartlessSummoning.java
index 9c51530c56d..373ecd4c20c 100644
--- a/Mage.Sets/src/mage/sets/innistrad/HeartlessSummoning.java
+++ b/Mage.Sets/src/mage/sets/innistrad/HeartlessSummoning.java
@@ -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)));
diff --git a/Mage.Sets/src/mage/sets/innistrad/RooftopStorm.java b/Mage.Sets/src/mage/sets/innistrad/RooftopStorm.java
index c7fd2e0a983..1a061928fc7 100644
--- a/Mage.Sets/src/mage/sets/innistrad/RooftopStorm.java
+++ b/Mage.Sets/src/mage/sets/innistrad/RooftopStorm.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/BattlefieldThaumaturge.java b/Mage.Sets/src/mage/sets/journeyintonyx/BattlefieldThaumaturge.java
index 2fed4c52a73..8ce6cf6c9db 100644
--- a/Mage.Sets/src/mage/sets/journeyintonyx/BattlefieldThaumaturge.java
+++ b/Mage.Sets/src/mage/sets/journeyintonyx/BattlefieldThaumaturge.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/OppressiveRays.java b/Mage.Sets/src/mage/sets/journeyintonyx/OppressiveRays.java
index 9c3f45f649b..d3086385bd8 100644
--- a/Mage.Sets/src/mage/sets/journeyintonyx/OppressiveRays.java
+++ b/Mage.Sets/src/mage/sets/journeyintonyx/OppressiveRays.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/lorwyn/StinkdrinkerDaredevil.java b/Mage.Sets/src/mage/sets/lorwyn/StinkdrinkerDaredevil.java
index d43e94bbacc..f8c1dbaeaa9 100644
--- a/Mage.Sets/src/mage/sets/lorwyn/StinkdrinkerDaredevil.java
+++ b/Mage.Sets/src/mage/sets/lorwyn/StinkdrinkerDaredevil.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/magic2013/Omniscience.java b/Mage.Sets/src/mage/sets/magic2013/Omniscience.java
index 5f6b1516c29..bb88a9303f4 100644
--- a/Mage.Sets/src/mage/sets/magic2013/Omniscience.java
+++ b/Mage.Sets/src/mage/sets/magic2013/Omniscience.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/magic2014/WardenOfEvosIsle.java b/Mage.Sets/src/mage/sets/magic2014/WardenOfEvosIsle.java
index 2d212f3cfac..8378301f826 100644
--- a/Mage.Sets/src/mage/sets/magic2014/WardenOfEvosIsle.java
+++ b/Mage.Sets/src/mage/sets/magic2014/WardenOfEvosIsle.java
@@ -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)));
}
diff --git a/Mage.Sets/src/mage/sets/modernmasters/GrandArbiterAugustinIV.java b/Mage.Sets/src/mage/sets/modernmasters/GrandArbiterAugustinIV.java
index 005c6c85429..bea60c4c3a4 100644
--- a/Mage.Sets/src/mage/sets/modernmasters/GrandArbiterAugustinIV.java
+++ b/Mage.Sets/src/mage/sets/modernmasters/GrandArbiterAugustinIV.java
@@ -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()));
}
diff --git a/Mage.Sets/src/mage/sets/morningtide/BallyrushBanneret.java b/Mage.Sets/src/mage/sets/morningtide/BallyrushBanneret.java
index f4a6d315ac8..b8b3a605f68 100644
--- a/Mage.Sets/src/mage/sets/morningtide/BallyrushBanneret.java
+++ b/Mage.Sets/src/mage/sets/morningtide/BallyrushBanneret.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/morningtide/BoskBanneret.java b/Mage.Sets/src/mage/sets/morningtide/BoskBanneret.java
index 6d67167f63a..0ba0da8b9a5 100644
--- a/Mage.Sets/src/mage/sets/morningtide/BoskBanneret.java
+++ b/Mage.Sets/src/mage/sets/morningtide/BoskBanneret.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/morningtide/BrighthearthBanneret.java b/Mage.Sets/src/mage/sets/morningtide/BrighthearthBanneret.java
index 0db6f83ab08..943980a7d47 100644
--- a/Mage.Sets/src/mage/sets/morningtide/BrighthearthBanneret.java
+++ b/Mage.Sets/src/mage/sets/morningtide/BrighthearthBanneret.java
@@ -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}")));
}
diff --git a/Mage.Sets/src/mage/sets/morningtide/FrogtosserBanneret.java b/Mage.Sets/src/mage/sets/morningtide/FrogtosserBanneret.java
index 75e0d5cc4e2..633e47c5f33 100644
--- a/Mage.Sets/src/mage/sets/morningtide/FrogtosserBanneret.java
+++ b/Mage.Sets/src/mage/sets/morningtide/FrogtosserBanneret.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/morningtide/StonybrookBanneret.java b/Mage.Sets/src/mage/sets/morningtide/StonybrookBanneret.java
index 0c4e3f044bf..50203acecca 100644
--- a/Mage.Sets/src/mage/sets/morningtide/StonybrookBanneret.java
+++ b/Mage.Sets/src/mage/sets/morningtide/StonybrookBanneret.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/ninthedition/DefenseGrid.java b/Mage.Sets/src/mage/sets/ninthedition/DefenseGrid.java
index 8442198e26c..5163ce36c46 100644
--- a/Mage.Sets/src/mage/sets/ninthedition/DefenseGrid.java
+++ b/Mage.Sets/src/mage/sets/ninthedition/DefenseGrid.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/onslaught/DreamChisel.java b/Mage.Sets/src/mage/sets/onslaught/DreamChisel.java
index 46891ce8066..674f8e469d5 100644
--- a/Mage.Sets/src/mage/sets/onslaught/DreamChisel.java
+++ b/Mage.Sets/src/mage/sets/onslaught/DreamChisel.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/planechase/UndeadWarchief.java b/Mage.Sets/src/mage/sets/planechase/UndeadWarchief.java
index c337dbdd901..dee313f626c 100644
--- a/Mage.Sets/src/mage/sets/planechase/UndeadWarchief.java
+++ b/Mage.Sets/src/mage/sets/planechase/UndeadWarchief.java
@@ -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)));
}
diff --git a/Mage.Sets/src/mage/sets/planechase2012/ElderwoodScion.java b/Mage.Sets/src/mage/sets/planechase2012/ElderwoodScion.java
index 58a6ed6af6e..8b6f9cb1d6b 100644
--- a/Mage.Sets/src/mage/sets/planechase2012/ElderwoodScion.java
+++ b/Mage.Sets/src/mage/sets/planechase2012/ElderwoodScion.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/planeshift/NightscapeFamiliar.java b/Mage.Sets/src/mage/sets/planeshift/NightscapeFamiliar.java
index 082399d7081..2606249a922 100644
--- a/Mage.Sets/src/mage/sets/planeshift/NightscapeFamiliar.java
+++ b/Mage.Sets/src/mage/sets/planeshift/NightscapeFamiliar.java
@@ -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}")));
}
diff --git a/Mage.Sets/src/mage/sets/planeshift/SunscapeFamiliar.java b/Mage.Sets/src/mage/sets/planeshift/SunscapeFamiliar.java
index b401144ccbe..99df462a023 100644
--- a/Mage.Sets/src/mage/sets/planeshift/SunscapeFamiliar.java
+++ b/Mage.Sets/src/mage/sets/planeshift/SunscapeFamiliar.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/planeshift/ThornscapeFamiliar.java b/Mage.Sets/src/mage/sets/planeshift/ThornscapeFamiliar.java
index e213fb4e650..cc3bb12ddf2 100644
--- a/Mage.Sets/src/mage/sets/planeshift/ThornscapeFamiliar.java
+++ b/Mage.Sets/src/mage/sets/planeshift/ThornscapeFamiliar.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/planeshift/ThunderscapeFamiliar.java b/Mage.Sets/src/mage/sets/planeshift/ThunderscapeFamiliar.java
index 2cfb1bf3569..94e6c5daac5 100644
--- a/Mage.Sets/src/mage/sets/planeshift/ThunderscapeFamiliar.java
+++ b/Mage.Sets/src/mage/sets/planeshift/ThunderscapeFamiliar.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/prophecy/AvatarOfHope.java b/Mage.Sets/src/mage/sets/prophecy/AvatarOfHope.java
index c273e23d10c..2bde2c397c4 100644
--- a/Mage.Sets/src/mage/sets/prophecy/AvatarOfHope.java
+++ b/Mage.Sets/src/mage/sets/prophecy/AvatarOfHope.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/ravnika/SuppressionField.java b/Mage.Sets/src/mage/sets/ravnika/SuppressionField.java
index 98e0f68c649..382c352e84f 100644
--- a/Mage.Sets/src/mage/sets/ravnika/SuppressionField.java
+++ b/Mage.Sets/src/mage/sets/ravnika/SuppressionField.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/GoblinElectromancer.java b/Mage.Sets/src/mage/sets/returntoravnica/GoblinElectromancer.java
index 6ff88f7868c..66a9d0323c2 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/GoblinElectromancer.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/GoblinElectromancer.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java
index 94b6fa04fc5..aaa879761e3 100644
--- a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java
+++ b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/TrainingGrounds.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/TrainingGrounds.java
index c863226485b..2e27dfd92cf 100644
--- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/TrainingGrounds.java
+++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/TrainingGrounds.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/SemblanceAnvil.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/SemblanceAnvil.java
index ca182ba05db..c7a05c7f746 100644
--- a/Mage.Sets/src/mage/sets/scarsofmirrodin/SemblanceAnvil.java
+++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/SemblanceAnvil.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/scourge/DaruWarchief.java b/Mage.Sets/src/mage/sets/scourge/DaruWarchief.java
index 2a5f633886a..2f1c34fa56f 100644
--- a/Mage.Sets/src/mage/sets/scourge/DaruWarchief.java
+++ b/Mage.Sets/src/mage/sets/scourge/DaruWarchief.java
@@ -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)));
}
diff --git a/Mage.Sets/src/mage/sets/scourge/DragonspeakerShaman.java b/Mage.Sets/src/mage/sets/scourge/DragonspeakerShaman.java
index c5e9d7ec7bd..8f5ae781828 100644
--- a/Mage.Sets/src/mage/sets/scourge/DragonspeakerShaman.java
+++ b/Mage.Sets/src/mage/sets/scourge/DragonspeakerShaman.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/scourge/GoblinWarchief.java b/Mage.Sets/src/mage/sets/scourge/GoblinWarchief.java
index 671d0220290..bc518d03083 100644
--- a/Mage.Sets/src/mage/sets/scourge/GoblinWarchief.java
+++ b/Mage.Sets/src/mage/sets/scourge/GoblinWarchief.java
@@ -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)));
}
diff --git a/Mage.Sets/src/mage/sets/scourge/KrosanWarchief.java b/Mage.Sets/src/mage/sets/scourge/KrosanWarchief.java
index 195a052436d..87b6e645b99 100644
--- a/Mage.Sets/src/mage/sets/scourge/KrosanWarchief.java
+++ b/Mage.Sets/src/mage/sets/scourge/KrosanWarchief.java
@@ -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(),
diff --git a/Mage.Sets/src/mage/sets/shardsofalara/EtheriumSculptor.java b/Mage.Sets/src/mage/sets/shardsofalara/EtheriumSculptor.java
index 799d2412922..1274cccc9b6 100644
--- a/Mage.Sets/src/mage/sets/shardsofalara/EtheriumSculptor.java
+++ b/Mage.Sets/src/mage/sets/shardsofalara/EtheriumSculptor.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/tempest/EmeraldMedallion.java b/Mage.Sets/src/mage/sets/tempest/EmeraldMedallion.java
index 152f3f03a4e..74c5514ff39 100644
--- a/Mage.Sets/src/mage/sets/tempest/EmeraldMedallion.java
+++ b/Mage.Sets/src/mage/sets/tempest/EmeraldMedallion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/tempest/JetMedallion.java b/Mage.Sets/src/mage/sets/tempest/JetMedallion.java
index 0e43c880e35..9d9f8977939 100644
--- a/Mage.Sets/src/mage/sets/tempest/JetMedallion.java
+++ b/Mage.Sets/src/mage/sets/tempest/JetMedallion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/tempest/PearlMedallion.java b/Mage.Sets/src/mage/sets/tempest/PearlMedallion.java
index abe08bc3a05..340f0990841 100644
--- a/Mage.Sets/src/mage/sets/tempest/PearlMedallion.java
+++ b/Mage.Sets/src/mage/sets/tempest/PearlMedallion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/tempest/RubyMedallion.java b/Mage.Sets/src/mage/sets/tempest/RubyMedallion.java
index d0c3b718742..12eedba4284 100644
--- a/Mage.Sets/src/mage/sets/tempest/RubyMedallion.java
+++ b/Mage.Sets/src/mage/sets/tempest/RubyMedallion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/tempest/SapphireMedallion.java b/Mage.Sets/src/mage/sets/tempest/SapphireMedallion.java
index cb7a4e8a679..888f93b7f5a 100644
--- a/Mage.Sets/src/mage/sets/tempest/SapphireMedallion.java
+++ b/Mage.Sets/src/mage/sets/tempest/SapphireMedallion.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/timeshifted/StormscapeFamiliar.java b/Mage.Sets/src/mage/sets/timeshifted/StormscapeFamiliar.java
index bb657e6e697..81c2a71a84b 100644
--- a/Mage.Sets/src/mage/sets/timeshifted/StormscapeFamiliar.java
+++ b/Mage.Sets/src/mage/sets/timeshifted/StormscapeFamiliar.java
@@ -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) {
diff --git a/Mage.Sets/src/mage/sets/timespiral/LocketOfYesterdays.java b/Mage.Sets/src/mage/sets/timespiral/LocketOfYesterdays.java
index e3db5ce3f8c..f58d010281e 100644
--- a/Mage.Sets/src/mage/sets/timespiral/LocketOfYesterdays.java
+++ b/Mage.Sets/src/mage/sets/timespiral/LocketOfYesterdays.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/worldwake/EyeOfUgin.java b/Mage.Sets/src/mage/sets/worldwake/EyeOfUgin.java
index 7d4f5ac59d4..a28c43d2241 100644
--- a/Mage.Sets/src/mage/sets/worldwake/EyeOfUgin.java
+++ b/Mage.Sets/src/mage/sets/worldwake/EyeOfUgin.java
@@ -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),
diff --git a/Mage.Sets/src/mage/sets/worldwake/LodestoneGolem.java b/Mage.Sets/src/mage/sets/worldwake/LodestoneGolem.java
index 93315d6062e..d749047a133 100644
--- a/Mage.Sets/src/mage/sets/worldwake/LodestoneGolem.java
+++ b/Mage.Sets/src/mage/sets/worldwake/LodestoneGolem.java
@@ -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;
diff --git a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java
index eccf39bbd73..1c3c8e56100 100644
--- a/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java
+++ b/Mage.Sets/src/mage/sets/worldwake/StoneIdolTrap.java
@@ -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;
diff --git a/Mage/src/mage/abilities/abilityword/StriveAbility.java b/Mage/src/mage/abilities/abilityword/StriveAbility.java
index a7786d06c5b..404933fde23 100644
--- a/Mage/src/mage/abilities/abilityword/StriveAbility.java
+++ b/Mage/src/mage/abilities/abilityword/StriveAbility.java
@@ -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;
diff --git a/Mage/src/mage/abilities/effects/common/AffinityEffect.java b/Mage/src/mage/abilities/effects/common/AffinityEffect.java
index 8f2f8ed48a7..9192985a294 100644
--- a/Mage/src/mage/abilities/effects/common/AffinityEffect.java
+++ b/Mage/src/mage/abilities/effects/common/AffinityEffect.java
@@ -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;
diff --git a/Mage/src/mage/abilities/effects/common/cost/CommanderCostModification.java b/Mage/src/mage/abilities/effects/common/cost/CommanderCostModification.java
index ece6b7c1efe..73cb10d7700 100644
--- a/Mage/src/mage/abilities/effects/common/cost/CommanderCostModification.java
+++ b/Mage/src/mage/abilities/effects/common/cost/CommanderCostModification.java
@@ -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;
diff --git a/Mage/src/mage/abilities/effects/CostModificationEffectImpl.java b/Mage/src/mage/abilities/effects/common/cost/CostModificationEffectImpl.java
similarity index 92%
rename from Mage/src/mage/abilities/effects/CostModificationEffectImpl.java
rename to Mage/src/mage/abilities/effects/common/cost/CostModificationEffectImpl.java
index 94bd493044a..7792856ccdf 100644
--- a/Mage/src/mage/abilities/effects/CostModificationEffectImpl.java
+++ b/Mage/src/mage/abilities/effects/common/cost/CostModificationEffectImpl.java
@@ -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;
}
+
}
diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java
index 563351163a5..c617a4cf249 100644
--- a/Mage/src/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java
+++ b/Mage/src/mage/abilities/effects/common/cost/SpellCostReductionSourceEffect.java
@@ -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;
diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementAllEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementAllEffect.java
index 5b2e0a856fa..fdb878a3aaf 100644
--- a/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementAllEffect.java
+++ b/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementAllEffect.java
@@ -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;
}
diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreaseEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementControllerEffect.java
similarity index 74%
rename from Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreaseEffect.java
rename to Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementControllerEffect.java
index 55b6138c834..b7be2f76718 100644
--- a/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreaseEffect.java
+++ b/Mage/src/mage/abilities/effects/common/cost/SpellsCostIncreasementControllerEffect.java
@@ -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 manaCostsToIncrease = null;
- public SpellsCostIncreaseEffect(FilterSpell filter, ManaCosts manaCostsToReduce) {
+ public SpellsCostIncreasementControllerEffect(FilterCard filter, ManaCosts 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);
}
}
diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
index 730a87643de..6447efcce1f 100644
--- a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
+++ b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionAllEffect.java
@@ -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;
}
diff --git a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionEffect.java b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
similarity index 73%
rename from Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionEffect.java
rename to Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
index 71914c8f653..6e408fe2151 100644
--- a/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionEffect.java
+++ b/Mage/src/mage/abilities/effects/common/cost/SpellsCostReductionControllerEffect.java
@@ -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 manaCostsToReduce = null;
- public SpellsCostReductionEffect(FilterSpell filter, ManaCosts manaCostsToReduce) {
+ public SpellsCostReductionControllerEffect(FilterCard filter, ManaCosts 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);
}
}
diff --git a/Mage/src/mage/abilities/keyword/FlashbackAbility.java b/Mage/src/mage/abilities/keyword/FlashbackAbility.java
index 1284d38c71d..49488cc43ad 100644
--- a/Mage/src/mage/abilities/keyword/FlashbackAbility.java
+++ b/Mage/src/mage/abilities/keyword/FlashbackAbility.java
@@ -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()) {
diff --git a/Mage/src/mage/abilities/keyword/OfferingAbility.java b/Mage/src/mage/abilities/keyword/OfferingAbility.java
index ef996712a8d..a0218a9a4d4 100644
--- a/Mage/src/mage/abilities/keyword/OfferingAbility.java
+++ b/Mage/src/mage/abilities/keyword/OfferingAbility.java
@@ -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;