From 2406faec63fadfbae4a5d3b05c3af938e205e107 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Fri, 27 Jun 2014 15:59:18 +0200 Subject: [PATCH] * Flashback - Fixed that costs reduction and increasement works correctly for flashbacked spells. --- .../mage/sets/avacynrestored/ArcaneMelee.java | 2 +- .../mage/sets/avacynrestored/HeraldOfWar.java | 2 +- .../KentaroTheSmilingCat.java | 2 +- .../mage/sets/bornofthegods/HeroOfIroas.java | 8 ++--- .../sets/bornofthegods/MarshmistTitan.java | 2 +- .../mage/sets/bornofthegods/Ragemonger.java | 8 ++--- .../LongForgottenGohei.java | 8 ++--- .../sets/commander/AnimarSoulOfElements.java | 2 +- .../ThaliaGuardianOfThraben.java | 2 +- .../src/mage/sets/darksteel/Trinisphere.java | 2 +- .../dragonsmaze/CouncilOfTheAbsolute.java | 2 +- .../src/mage/sets/fallenempires/Derelor.java | 8 ++--- .../sets/futuresight/CentaurOmenreader.java | 12 +++---- .../sets/innistrad/HeartlessSummoning.java | 6 ++-- .../src/mage/sets/innistrad/RooftopStorm.java | 2 +- .../BattlefieldThaumaturge.java | 2 +- .../sets/journeyintonyx/OppressiveRays.java | 2 +- .../sets/lorwyn/StinkdrinkerDaredevil.java | 7 ++-- .../src/mage/sets/magic2013/Omniscience.java | 2 +- .../mage/sets/magic2014/WardenOfEvosIsle.java | 7 ++-- .../modernmasters/GrandArbiterAugustinIV.java | 14 ++++---- .../sets/morningtide/BallyrushBanneret.java | 8 ++--- .../mage/sets/morningtide/BoskBanneret.java | 8 ++--- .../morningtide/BrighthearthBanneret.java | 8 ++--- .../sets/morningtide/FrogtosserBanneret.java | 8 ++--- .../sets/morningtide/StonybrookBanneret.java | 8 ++--- .../mage/sets/ninthedition/DefenseGrid.java | 2 +- .../src/mage/sets/onslaught/DreamChisel.java | 8 ++--- .../mage/sets/planechase/UndeadWarchief.java | 6 ++-- .../sets/planechase2012/ElderwoodScion.java | 2 +- .../sets/planeshift/NightscapeFamiliar.java | 8 ++--- .../sets/planeshift/SunscapeFamiliar.java | 7 ++-- .../sets/planeshift/ThornscapeFamiliar.java | 8 ++--- .../sets/planeshift/ThunderscapeFamiliar.java | 8 ++--- .../src/mage/sets/prophecy/AvatarOfHope.java | 2 +- .../mage/sets/ravnika/SuppressionField.java | 2 +- .../returntoravnica/GoblinElectromancer.java | 8 ++--- .../returntoravnica/RakdosLordOfRiots.java | 2 +- .../riseoftheeldrazi/TrainingGrounds.java | 2 +- .../sets/scarsofmirrodin/SemblanceAnvil.java | 2 +- .../src/mage/sets/scourge/DaruWarchief.java | 8 ++--- .../sets/scourge/DragonspeakerShaman.java | 8 ++--- .../src/mage/sets/scourge/GoblinWarchief.java | 10 +++--- .../src/mage/sets/scourge/KrosanWarchief.java | 8 ++--- .../sets/shardsofalara/EtheriumSculptor.java | 8 ++--- .../mage/sets/tempest/EmeraldMedallion.java | 8 ++--- .../src/mage/sets/tempest/JetMedallion.java | 8 ++--- .../src/mage/sets/tempest/PearlMedallion.java | 8 ++--- .../src/mage/sets/tempest/RubyMedallion.java | 8 ++--- .../mage/sets/tempest/SapphireMedallion.java | 7 ++-- .../sets/timeshifted/StormscapeFamiliar.java | 8 ++--- .../sets/timespiral/LocketOfYesterdays.java | 2 +- .../src/mage/sets/worldwake/EyeOfUgin.java | 8 ++--- .../mage/sets/worldwake/LodestoneGolem.java | 2 +- .../mage/sets/worldwake/StoneIdolTrap.java | 2 +- .../abilities/abilityword/StriveAbility.java | 2 +- .../effects/common/AffinityEffect.java | 2 +- .../cost/CommanderCostModification.java | 1 - .../cost}/CostModificationEffectImpl.java | 11 +++++-- .../cost/SpellCostReductionSourceEffect.java | 1 - .../cost/SpellsCostIncreasementAllEffect.java | 15 ++++++--- ...ellsCostIncreasementControllerEffect.java} | 33 +++++++++++-------- .../cost/SpellsCostReductionAllEffect.java | 14 +++++--- ... SpellsCostReductionControllerEffect.java} | 33 +++++++++++-------- .../abilities/keyword/FlashbackAbility.java | 2 +- .../abilities/keyword/OfferingAbility.java | 2 +- 66 files changed, 230 insertions(+), 198 deletions(-) rename Mage/src/mage/abilities/effects/{ => common/cost}/CostModificationEffectImpl.java (92%) rename Mage/src/mage/abilities/effects/common/cost/{SpellsCostIncreaseEffect.java => SpellsCostIncreasementControllerEffect.java} (74%) rename Mage/src/mage/abilities/effects/common/cost/{SpellsCostReductionEffect.java => SpellsCostReductionControllerEffect.java} (73%) 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;