refactored flashback to remove unnecessary timing rule argument

This commit is contained in:
Evan Kranzler 2021-09-11 18:08:35 -04:00
parent 05e80e3a02
commit d93475a5bb
145 changed files with 192 additions and 234 deletions

View file

@ -25,7 +25,7 @@ public final class AbandonThePost extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{R}")));
} }
private AbandonThePost(final AbandonThePost card) { private AbandonThePost(final AbandonThePost card) {

View file

@ -26,7 +26,7 @@ public final class AcornHarvest extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new SquirrelToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new SquirrelToken(), 2));
// Flashback-{1}{G} - Pay 3 life. // Flashback-{1}{G} - Pay 3 life.
FlashbackAbility ability = new FlashbackAbility(new ManaCostsImpl("{1}{G}"), TimingRule.SORCERY); FlashbackAbility ability = new FlashbackAbility(this, new ManaCostsImpl("{1}{G}"));
ability.addCost(new PayLifeCost(3)); ability.addCost(new PayLifeCost(3));
this.addAbility(ability); this.addAbility(ability);

View file

@ -27,7 +27,7 @@ public final class AncestralTribute extends CardImpl {
this.getSpellAbility().addEffect(new GainLifeEffect((new CardsInControllerGraveyardCount(new FilterCard(), 2)))); this.getSpellAbility().addEffect(new GainLifeEffect((new CardsInControllerGraveyardCount(new FilterCard(), 2))));
// Flashback {9}{W}{W}{W} // Flashback {9}{W}{W}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{9}{W}{W}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{9}{W}{W}{W}")));
} }

View file

@ -23,7 +23,7 @@ public final class AncientGrudge extends CardImpl {
this.getSpellAbility().addTarget(new TargetArtifactPermanent()); this.getSpellAbility().addTarget(new TargetArtifactPermanent());
// Flashback {G} // Flashback {G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{G}")));
} }
private AncientGrudge(final AncientGrudge card) { private AncientGrudge(final AncientGrudge card) {

View file

@ -42,7 +42,7 @@ public final class AngelfireIgnition extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {2}{R}{W} // Flashback {2}{R}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{2}{R}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{2}{R}{W}")));
} }
private AngelfireIgnition(final AngelfireIgnition card) { private AngelfireIgnition(final AngelfireIgnition card) {

View file

@ -32,7 +32,7 @@ public final class ArcaneInfusion extends CardImpl {
"Put the rest on the bottom of your library in a random order.")); "Put the rest on the bottom of your library in a random order."));
// Flashback {3}{U}{R} // Flashback {3}{U}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{U}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{U}{R}")));
} }
private ArcaneInfusion(final ArcaneInfusion card) { private ArcaneInfusion(final ArcaneInfusion card) {

View file

@ -23,7 +23,7 @@ public final class ArmyOfTheDamned extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), 13, true, false)); this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), 13, true, false));
// Flashback {7}{B}{B}{B} // Flashback {7}{B}{B}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{B}{B}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{B}{B}{B}")));
} }
private ArmyOfTheDamned(final ArmyOfTheDamned card) { private ArmyOfTheDamned(final ArmyOfTheDamned card) {

View file

@ -25,7 +25,7 @@ public final class ArtfulDodge extends CardImpl {
this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect()); this.getSpellAbility().addEffect(new CantBeBlockedTargetEffect());
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {U} // Flashback {U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{U}")));
} }
private ArtfulDodge(final ArtfulDodge card) { private ArtfulDodge(final ArtfulDodge card) {

View file

@ -93,15 +93,7 @@ class BackdraftHellkiteEffect extends ContinuousEffectImpl {
if (card == null) { if (card == null) {
return; return;
} }
FlashbackAbility ability = null; FlashbackAbility ability = new FlashbackAbility(card, card.getManaCost());
if (card.isInstant(game)) {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.INSTANT);
} else if (card.isSorcery(game)) {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.SORCERY);
}
if (ability == null) {
return;
}
ability.setSourceId(cardId); ability.setSourceId(cardId);
ability.setControllerId(card.getOwnerId()); ability.setControllerId(card.getOwnerId());
game.getState().addOtherAbility(card, ability); game.getState().addOtherAbility(card, ability);

View file

@ -27,7 +27,7 @@ public final class BashToBits extends CardImpl {
Target target = new TargetArtifactPermanent(); Target target = new TargetArtifactPermanent();
this.getSpellAbility().addTarget(target); this.getSpellAbility().addTarget(target);
// Flashback {4}{R}{R} // Flashback {4}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{R}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{4}{R}{R}")));
} }
private BashToBits(final BashToBits card) { private BashToBits(final BashToBits card) {

View file

@ -37,7 +37,7 @@ public final class BattleScreech extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new BirdToken(), 2));
// Flashback-Tap three untapped white creatures you control. // Flashback-Tap three untapped white creatures you control.
this.addAbility(new FlashbackAbility(new TapTargetCost(new TargetControlledCreaturePermanent(3,3, filter, true)), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new TapTargetCost(new TargetControlledCreaturePermanent(3,3, filter, true))));
} }
private BattleScreech(final BattleScreech card) { private BattleScreech(final BattleScreech card) {

View file

@ -24,7 +24,7 @@ public final class BeastAttack extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new BeastToken2())); this.getSpellAbility().addEffect(new CreateTokenEffect(new BeastToken2()));
// Flashback {2}{G}{G}{G} // Flashback {2}{G}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{G}{G}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{G}{G}{G}")));
} }
private BeastAttack(final BeastAttack card) { private BeastAttack(final BeastAttack card) {

View file

@ -35,7 +35,7 @@ public final class BlastFromThePast extends CardImpl {
// Kicker {2}{R} // Kicker {2}{R}
this.addAbility(new KickerAbility("{2}{R}")); this.addAbility(new KickerAbility("{2}{R}"));
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{R}")));
// Buyback {4}{R} // Buyback {4}{R}
this.addAbility(new BuybackAbility("{4}{R}")); this.addAbility(new BuybackAbility("{4}{R}"));

View file

@ -24,7 +24,7 @@ public final class BumpInTheNight extends CardImpl {
this.getSpellAbility().addTarget(new TargetOpponent()); this.getSpellAbility().addTarget(new TargetOpponent());
// Flashback {5}{R} // Flashback {5}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{R}")));
} }
private BumpInTheNight(final BumpInTheNight card) { private BumpInTheNight(final BumpInTheNight card) {

View file

@ -25,7 +25,7 @@ public final class BurningOil extends CardImpl {
this.getSpellAbility().addTarget(new TargetAttackingOrBlockingCreature()); this.getSpellAbility().addTarget(new TargetAttackingOrBlockingCreature());
this.getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellAbility().addEffect(new DamageTargetEffect(3));
// Flashback {3}{W} // Flashback {3}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{W}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{W}")));
} }
private BurningOil(final BurningOil card) { private BurningOil(final BurningOil card) {

View file

@ -12,7 +12,6 @@ import mage.cards.CardSetInfo;
import mage.cards.Cards; import mage.cards.Cards;
import mage.constants.CardType; import mage.constants.CardType;
import mage.constants.Outcome; import mage.constants.Outcome;
import mage.constants.TimingRule;
import mage.filter.StaticFilters; import mage.filter.StaticFilters;
import mage.game.Game; import mage.game.Game;
import mage.players.Player; import mage.players.Player;
@ -36,9 +35,9 @@ public final class CabalTherapy extends CardImpl {
this.getSpellAbility().addEffect(new CabalTherapyEffect()); this.getSpellAbility().addEffect(new CabalTherapyEffect());
// Flashback-Sacrifice a creature. // Flashback-Sacrifice a creature.
this.addAbility(new FlashbackAbility( this.addAbility(new FlashbackAbility(this, new SacrificeTargetCost(
new SacrificeTargetCost(new TargetControlledCreaturePermanent(1, 1, StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT, true)), new TargetControlledCreaturePermanent(StaticFilters.FILTER_CONTROLLED_CREATURE_SHORT_TEXT)
TimingRule.SORCERY)); )));
} }
private CabalTherapy(final CabalTherapy card) { private CabalTherapy(final CabalTherapy card) {

View file

@ -24,7 +24,7 @@ public final class CacklingCounterpart extends CardImpl {
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// Flashback {5}{U}{U} // Flashback {5}{U}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{U}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{U}{U}")));
} }
private CacklingCounterpart(final CacklingCounterpart card) { private CacklingCounterpart(final CacklingCounterpart card) {

View file

@ -28,7 +28,7 @@ public final class CalibratedBlast extends CardImpl {
this.getSpellAbility().addEffect(new CalibratedBlastEffect()); this.getSpellAbility().addEffect(new CalibratedBlastEffect());
// Flashback {3}{R}{R} // Flashback {3}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{R}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{R}{R}")));
} }
private CalibratedBlast(final CalibratedBlast card) { private CalibratedBlast(final CalibratedBlast card) {

View file

@ -24,7 +24,7 @@ public final class CallOfTheHerd extends CardImpl {
// Create a 3/3 green Elephant creature token. // Create a 3/3 green Elephant creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken())); this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken()));
// Flashback {3}{G} // Flashback {3}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{G}")));
} }
private CallOfTheHerd(final CallOfTheHerd card) { private CallOfTheHerd(final CallOfTheHerd card) {

View file

@ -26,7 +26,7 @@ public final class CanopyClaws extends CardImpl {
this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new LoseAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {G} // Flashback {G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{G}")));
} }
private CanopyClaws(final CanopyClaws card) { private CanopyClaws(final CanopyClaws card) {

View file

@ -44,7 +44,7 @@ public final class CantStayAway extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter));
// Flashback {3}{W}{B} // Flashback {3}{W}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{W}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{W}{B}")));
} }
private CantStayAway(final CantStayAway card) { private CantStayAway(final CantStayAway card) {

View file

@ -26,7 +26,7 @@ public final class ChainersEdict extends CardImpl {
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
// Flashback {5}{B}{B} // Flashback {5}{B}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{B}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{B}{B}")));
} }
private ChainersEdict(final ChainersEdict card) { private ChainersEdict(final ChainersEdict card) {

View file

@ -25,7 +25,7 @@ public final class ChatterOfTheSquirrel extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new SquirrelToken())); this.getSpellAbility().addEffect(new CreateTokenEffect(new SquirrelToken()));
// Flashback {1}{G} // Flashback {1}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{G}")));
} }
private ChatterOfTheSquirrel(final ChatterOfTheSquirrel card) { private ChatterOfTheSquirrel(final ChatterOfTheSquirrel card) {

View file

@ -23,7 +23,7 @@ public final class ChillOfForeboding extends CardImpl {
this.getSpellAbility().addEffect(new MillCardsEachPlayerEffect(5, TargetController.ANY)); this.getSpellAbility().addEffect(new MillCardsEachPlayerEffect(5, TargetController.ANY));
// Flashback {7}{U} // Flashback {7}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{U}")));
} }
private ChillOfForeboding(final ChillOfForeboding card) { private ChillOfForeboding(final ChillOfForeboding card) {

View file

@ -26,7 +26,7 @@ public final class CoffinPurge extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInGraveyard()); this.getSpellAbility().addTarget(new TargetCardInGraveyard());
// Flashback {B} // Flashback {B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{B}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{B}")));
} }
private CoffinPurge(final CoffinPurge card) { private CoffinPurge(final CoffinPurge card) {

View file

@ -33,7 +33,7 @@ public final class Conflagrate extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue)); this.getSpellAbility().addTarget(new TargetAnyTargetAmount(xValue));
// Flashback-{R}{R}, Discard X cards. // Flashback-{R}{R}, Discard X cards.
Ability ability = new FlashbackAbility(new ManaCostsImpl("{R}{R}"), TimingRule.SORCERY); Ability ability = new FlashbackAbility(this, new ManaCostsImpl("{R}{R}"));
ability.addCost(new DiscardXTargetCost(new FilterCard("cards"))); ability.addCost(new DiscardXTargetCost(new FilterCard("cards")));
this.addAbility(ability); this.addAbility(ability);

View file

@ -38,7 +38,7 @@ public final class CorpseCobble extends CardImpl {
this.getSpellAbility().addEffect(new CorpseCobbleEffect()); this.getSpellAbility().addEffect(new CorpseCobbleEffect());
// Flashback {3}{U}{B} // Flashback {3}{U}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{U}{B}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{U}{B}")));
} }
private CorpseCobble(final CorpseCobble card) { private CorpseCobble(final CorpseCobble card) {

View file

@ -37,7 +37,7 @@ public final class CrawlFromTheCellar extends CardImpl {
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 1, filter, false)); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent(0, 1, filter, false));
// Flashback {3}{B} // Flashback {3}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{B}")));
} }
private CrawlFromTheCellar(final CrawlFromTheCellar card) { private CrawlFromTheCellar(final CrawlFromTheCellar card) {

View file

@ -33,7 +33,7 @@ public final class CreepingRenaissance extends CardImpl {
this.getSpellAbility().addEffect(new CreepingRenaissanceEffect()); this.getSpellAbility().addEffect(new CreepingRenaissanceEffect());
// Flashback {5}{G}{G} // Flashback {5}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{G}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{G}{G}")));
} }
private CreepingRenaissance(final CreepingRenaissance card) { private CreepingRenaissance(final CreepingRenaissance card) {

View file

@ -28,7 +28,7 @@ public final class CripplingFatigue extends CardImpl {
this.getSpellAbility().addEffect(new BoostTargetEffect(-2, -2, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new BoostTargetEffect(-2, -2, Duration.EndOfTurn));
// Flashback-{1}{B}, Pay 3 life // Flashback-{1}{B}, Pay 3 life
Ability ability = new FlashbackAbility(new ManaCostsImpl("{1}{B}"), TimingRule.SORCERY); Ability ability = new FlashbackAbility(this, new ManaCostsImpl("{1}{B}"));
ability.addCost(new PayLifeCost(3)); ability.addCost(new PayLifeCost(3));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -42,7 +42,7 @@ public final class CroakingCounterpart extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(filter));
// Flashback {3}{G}{U} // Flashback {3}{G}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{G}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{G}{U}")));
} }
private CroakingCounterpart(final CroakingCounterpart card) { private CroakingCounterpart(final CroakingCounterpart card) {

View file

@ -23,7 +23,7 @@ public final class CrushOfWurms extends CardImpl {
// Put three 6/6 green Wurm creature tokens onto the battlefield. // Put three 6/6 green Wurm creature tokens onto the battlefield.
this.getSpellAbility().addEffect(new CreateTokenEffect(new WurmToken(), 3)); this.getSpellAbility().addEffect(new CreateTokenEffect(new WurmToken(), 3));
// Flashback {9}{G}{G}{G} // Flashback {9}{G}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{9}{G}{G}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{9}{G}{G}{G}")));
} }
private CrushOfWurms(final CrushOfWurms card) { private CrushOfWurms(final CrushOfWurms card) {

View file

@ -33,7 +33,7 @@ public final class DeadlyAllure extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {G} // Flashback {G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{G}")));
} }

View file

@ -26,7 +26,7 @@ public final class DeepAnalysis extends CardImpl {
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
// Flashback-{1}{U}, Pay 3 life. // Flashback-{1}{U}, Pay 3 life.
FlashbackAbility ability = new FlashbackAbility(new ManaCostsImpl("{1}{U}"), TimingRule.SORCERY); FlashbackAbility ability = new FlashbackAbility(this, new ManaCostsImpl("{1}{U}"));
ability.addCost(new PayLifeCost(3)); ability.addCost(new PayLifeCost(3));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -26,7 +26,7 @@ public final class DeepReconnaissance extends CardImpl {
// Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library. // Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true)); this.getSpellAbility().addEffect(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND), true, true));
// Flashback {4}{G} // Flashback {4}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{4}{G}")));
} }
private DeepReconnaissance(final DeepReconnaissance card) { private DeepReconnaissance(final DeepReconnaissance card) {

View file

@ -26,7 +26,7 @@ public final class DefyGravity extends CardImpl {
this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn)); this.getSpellAbility().addEffect(new GainAbilityTargetEffect(FlyingAbility.getInstance(), Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {U} // Flashback {U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{U}")));
} }
private DefyGravity(final DefyGravity card) { private DefyGravity(final DefyGravity card) {

View file

@ -25,7 +25,7 @@ public final class Dematerialize extends CardImpl {
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetPermanent()); this.getSpellAbility().addTarget(new TargetPermanent());
// Flashback {5}{U}{U} // Flashback {5}{U}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{U}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{U}{U}")));
} }
private Dematerialize(final Dematerialize card) { private Dematerialize(final Dematerialize card) {

View file

@ -29,7 +29,7 @@ public final class DesperateRavings extends CardImpl {
// Draw two cards, then discard a card at random. // Draw two cards, then discard a card at random.
this.getSpellAbility().addEffect(new DesperateRavingsEffect()); this.getSpellAbility().addEffect(new DesperateRavingsEffect());
// Flashback {2}{U} // Flashback {2}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{U}")));
} }
private DesperateRavings(final DesperateRavings card) { private DesperateRavings(final DesperateRavings card) {

View file

@ -26,7 +26,7 @@ public final class DevilsPlay extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR)); this.getSpellAbility().addEffect(new DamageTargetEffect(ManacostVariableValue.REGULAR));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Flashback {X}{R}{R}{R} // Flashback {X}{R}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{X}{R}{R}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{X}{R}{R}{R}")));
} }
private DevilsPlay(final DevilsPlay card) { private DevilsPlay(final DevilsPlay card) {

View file

@ -50,7 +50,7 @@ public final class DireStrainRampage extends CardImpl {
this.getSpellAbility().addTarget(new TargetPermanent(filter)); this.getSpellAbility().addTarget(new TargetPermanent(filter));
// Flashback {3}{R}{G} // Flashback {3}{R}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{R}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{R}{G}")));
} }
private DireStrainRampage(final DireStrainRampage card) { private DireStrainRampage(final DireStrainRampage card) {

View file

@ -37,7 +37,7 @@ public final class DiregrafRebirth extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
// Flashback {5}{B}{G} // Flashback {5}{B}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{5}{B}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{5}{B}{G}")));
} }
private DiregrafRebirth(final DiregrafRebirth card) { private DiregrafRebirth(final DiregrafRebirth card) {

View file

@ -35,7 +35,7 @@ public final class DivineReckoning extends CardImpl {
this.getSpellAbility().addEffect(new DivineReckoningEffect()); this.getSpellAbility().addEffect(new DivineReckoningEffect());
// Flashback {5}{W}{W} // Flashback {5}{W}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{W}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{W}{W}")));
} }
private DivineReckoning(final DivineReckoning card) { private DivineReckoning(final DivineReckoning card) {

View file

@ -1,7 +1,5 @@
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -23,17 +21,20 @@ import mage.game.events.DamageEvent;
import mage.game.events.GameEvent; import mage.game.events.GameEvent;
import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCardInYourGraveyard;
import java.util.UUID;
/** /**
*
* @author emerald000 * @author emerald000
*/ */
public final class DralnuLichLord extends CardImpl { public final class DralnuLichLord extends CardImpl {
private static final FilterCard filter = new FilterCard("instant or sorcery card in your graveyard"); private static final FilterCard filter = new FilterCard("instant or sorcery card in your graveyard");
static { static {
filter.add(Predicates.or( filter.add(Predicates.or(
CardType.INSTANT.getPredicate(), CardType.INSTANT.getPredicate(),
CardType.SORCERY.getPredicate())); CardType.SORCERY.getPredicate()
));
} }
public DralnuLichLord(UUID ownerId, CardSetInfo setInfo) { public DralnuLichLord(UUID ownerId, CardSetInfo setInfo) {
@ -46,10 +47,10 @@ public final class DralnuLichLord extends CardImpl {
this.toughness = new MageInt(3); this.toughness = new MageInt(3);
// If damage would be dealt to Dralnu, Lich Lord, sacrifice that many permanents instead. // If damage would be dealt to Dralnu, Lich Lord, sacrifice that many permanents instead.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DralnuLichLordReplacementEffect())); this.addAbility(new SimpleStaticAbility(new DralnuLichLordReplacementEffect()));
// {tap}: Target instant or sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost. // {tap}: Target instant or sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DralnuLichLordFlashbackEffect(), new TapSourceCost()); Ability ability = new SimpleActivatedAbility(new DralnuLichLordFlashbackEffect(), new TapSourceCost());
ability.addTarget(new TargetCardInYourGraveyard(filter)); ability.addTarget(new TargetCardInYourGraveyard(filter));
this.addAbility(ability); this.addAbility(ability);
} }
@ -117,13 +118,7 @@ class DralnuLichLordFlashbackEffect extends ContinuousEffectImpl {
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Card card = game.getCard(targetPointer.getFirst(game, source)); Card card = game.getCard(targetPointer.getFirst(game, source));
if (card != null) { if (card != null) {
FlashbackAbility ability; FlashbackAbility ability = new FlashbackAbility(card, card.getManaCost());
if (card.isInstant(game)) {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.INSTANT);
}
else {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.SORCERY);
}
ability.setSourceId(card.getId()); ability.setSourceId(card.getId());
ability.setControllerId(card.getOwnerId()); ability.setControllerId(card.getOwnerId());
game.getState().addOtherAbility(card, ability); game.getState().addOtherAbility(card, ability);

View file

@ -30,7 +30,7 @@ public final class DreadReturn extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD));
// Flashback-Sacrifice three creatures. // Flashback-Sacrifice three creatures.
this.addAbility(new FlashbackAbility(new SacrificeTargetCost(new TargetControlledPermanent(3, filter)), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new SacrificeTargetCost(new TargetControlledPermanent(3, filter))));
} }
private DreadReturn(final DreadReturn card) { private DreadReturn(final DreadReturn card) {

View file

@ -25,7 +25,7 @@ public final class DreamTwist extends CardImpl {
this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3)); this.getSpellAbility().addEffect(new PutLibraryIntoGraveTargetEffect(3));
// Flashback {1}{U} // Flashback {1}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{U}")));
} }
private DreamTwist(final DreamTwist card) { private DreamTwist(final DreamTwist card) {

View file

@ -24,7 +24,7 @@ public final class DryadsRevival extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard()); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard());
// Flashback {4}{G} // Flashback {4}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{4}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{4}{G}")));
} }
private DryadsRevival(final DryadsRevival card) { private DryadsRevival(final DryadsRevival card) {

View file

@ -25,7 +25,7 @@ public final class EarthRift extends CardImpl {
this.getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellAbility().addEffect(new DestroyTargetEffect());
this.getSpellAbility().addTarget(new TargetLandPermanent()); this.getSpellAbility().addTarget(new TargetLandPermanent());
// Flashback {5}{R}{R} // Flashback {5}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{R}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{R}{R}")));
} }
private EarthRift(final EarthRift card) { private EarthRift(final EarthRift card) {

View file

@ -27,7 +27,7 @@ public final class EchoOfEons extends CardImpl {
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Flashback {2}{U} // Flashback {2}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{U}")));
} }
private EchoOfEons(final EchoOfEons card) { private EchoOfEons(final EchoOfEons card) {

View file

@ -26,7 +26,7 @@ public final class ElectricRevelation extends CardImpl {
this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2)); this.getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2));
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{R}")));
} }
private ElectricRevelation(final ElectricRevelation card) { private ElectricRevelation(final ElectricRevelation card) {

View file

@ -24,7 +24,7 @@ public final class ElephantAmbush extends CardImpl {
// Create a 3/3 green Elephant creature token. // Create a 3/3 green Elephant creature token.
this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken())); this.getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken()));
// Flashback {6}{G}{G} // Flashback {6}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{6}{G}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{6}{G}{G}")));
} }
private ElephantAmbush(final ElephantAmbush card) { private ElephantAmbush(final ElephantAmbush card) {

View file

@ -26,7 +26,7 @@ public final class Embolden extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTargetAmount(4)); this.getSpellAbility().addTarget(new TargetAnyTargetAmount(4));
// Flashback {1}{W} // Flashback {1}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{W}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{W}")));
} }

View file

@ -28,7 +28,7 @@ public final class EngulfingFlames extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
this.getSpellAbility().addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "It")); this.getSpellAbility().addEffect(new CantRegenerateTargetEffect(Duration.EndOfTurn, "It"));
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{R}")));
} }
private EngulfingFlames(final EngulfingFlames card) { private EngulfingFlames(final EngulfingFlames card) {

View file

@ -26,7 +26,7 @@ public final class FaithfulMending extends CardImpl {
this.getSpellAbility().addEffect(new DiscardControllerEffect(2).concatBy(", then")); this.getSpellAbility().addEffect(new DiscardControllerEffect(2).concatBy(", then"));
// Flashback {1}{W}{U} // Flashback {1}{W}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{1}{W}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{W}{U}")));
} }
private FaithfulMending(final FaithfulMending card) { private FaithfulMending(final FaithfulMending card) {

View file

@ -23,7 +23,7 @@ public final class FaithlessLooting extends CardImpl {
// Draw two cards, then discard two cards. // Draw two cards, then discard two cards.
this.getSpellAbility().addEffect(new DrawDiscardControllerEffect(2,2)); this.getSpellAbility().addEffect(new DrawDiscardControllerEffect(2,2));
// Flashback {2}{R} // Flashback {2}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{R}")));
} }
private FaithlessLooting(final FaithlessLooting card) { private FaithlessLooting(final FaithlessLooting card) {

View file

@ -26,7 +26,7 @@ public final class FeelingOfDread extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
// Flashback {1}{U} // Flashback {1}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{U}")));
} }
private FeelingOfDread(final FeelingOfDread card) { private FeelingOfDread(final FeelingOfDread card) {

View file

@ -25,7 +25,7 @@ public final class FerventDenial extends CardImpl {
this.getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellAbility().addEffect(new CounterTargetEffect());
this.getSpellAbility().addTarget(new TargetSpell()); this.getSpellAbility().addTarget(new TargetSpell());
// Flashback {5}{U}{U} // Flashback {5}{U}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{U}{U}"),TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{U}{U}")));
} }
private FerventDenial(final FerventDenial card) { private FerventDenial(final FerventDenial card) {

View file

@ -25,7 +25,7 @@ public final class Firebolt extends CardImpl {
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Flashback {4}{R} // Flashback {4}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{4}{R}")));
} }
private Firebolt(final Firebolt card) { private Firebolt(final Firebolt card) {

View file

@ -41,7 +41,7 @@ public final class FirecatBlitz extends CardImpl {
this.getSpellAbility().addEffect(new FirecatBlitzEffect()); this.getSpellAbility().addEffect(new FirecatBlitzEffect());
// Flashback-{R}{R}, Sacrifice X Mountains. // Flashback-{R}{R}, Sacrifice X Mountains.
Ability ability = new FlashbackAbility(new SacrificeXTargetCost(filter), TimingRule.SORCERY); Ability ability = new FlashbackAbility(this, new SacrificeXTargetCost(filter));
ability.addManaCost(new ManaCostsImpl("{R}{R}")); ability.addManaCost(new ManaCostsImpl("{R}{R}"));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -25,7 +25,7 @@ public final class FiresOfUndeath extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellAbility().addEffect(new DamageTargetEffect(2));
// Flashback {5}{B} // Flashback {5}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{B}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{B}")));
} }
private FiresOfUndeath(final FiresOfUndeath card) { private FiresOfUndeath(final FiresOfUndeath card) {

View file

@ -24,7 +24,7 @@ public final class FlaringPain extends CardImpl {
// Damage can't be prevented this turn. // Damage can't be prevented this turn.
this.getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn, "Damage can't be prevented this turn", false, false)); this.getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn, "Damage can't be prevented this turn", false, false));
// Flashback {R} // Flashback {R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{R}")));
} }
private FlaringPain(final FlaringPain card) { private FlaringPain(final FlaringPain card) {

View file

@ -38,7 +38,7 @@ public final class FlashOfDefiance extends CardImpl {
this.getSpellAbility().addEffect(new CantBlockAllEffect(filter, Duration.EndOfTurn)); this.getSpellAbility().addEffect(new CantBlockAllEffect(filter, Duration.EndOfTurn));
// Flashback-{1}{R}, Pay 3 life. // Flashback-{1}{R}, Pay 3 life.
Ability ability = new FlashbackAbility(new ManaCostsImpl("{1}{R}"), TimingRule.SORCERY); Ability ability = new FlashbackAbility(this, new ManaCostsImpl("{1}{R}"));
ability.addCost(new PayLifeCost(3)); ability.addCost(new PayLifeCost(3));
this.addAbility(ability); this.addAbility(ability);
} }

View file

@ -37,7 +37,7 @@ public final class FlashOfInsight extends CardImpl {
this.getSpellAbility().addEffect(new FlashOfInsightEffect()); this.getSpellAbility().addEffect(new FlashOfInsightEffect());
// Flashback-{1}{U}, Exile X blue cards from your graveyard. // Flashback-{1}{U}, Exile X blue cards from your graveyard.
Ability ability = new FlashbackAbility(new ManaCostsImpl("{1}{U}"), TimingRule.INSTANT); Ability ability = new FlashbackAbility(this, new ManaCostsImpl("{1}{U}"));
FilterCard filter = new FilterCard("blue cards from your graveyard"); FilterCard filter = new FilterCard("blue cards from your graveyard");
filter.add(new ColorPredicate(ObjectColor.BLUE)); filter.add(new ColorPredicate(ObjectColor.BLUE));
filter.add(Predicates.not(new CardIdPredicate(getId()))); filter.add(Predicates.not(new CardIdPredicate(getId())));

View file

@ -25,7 +25,7 @@ public final class FolkMedicine extends CardImpl {
DynamicValue amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE); DynamicValue amount = new PermanentsOnBattlefieldCount(StaticFilters.FILTER_CONTROLLED_CREATURE);
this.getSpellAbility().addEffect(new GainLifeEffect(amount)); this.getSpellAbility().addEffect(new GainLifeEffect(amount));
// Flashback {1}{W} // Flashback {1}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{W}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{W}")));
} }
private FolkMedicine(final FolkMedicine card) { private FolkMedicine(final FolkMedicine card) {

View file

@ -26,7 +26,7 @@ public final class ForbiddenAlchemy extends CardImpl {
StaticFilters.FILTER_CARD, Zone.GRAVEYARD, false, false, false, Zone.HAND, false)); StaticFilters.FILTER_CARD, Zone.GRAVEYARD, false, false, false, Zone.HAND, false));
// Flashback {6}{B} // Flashback {6}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{6}{B}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{6}{B}")));
} }
private ForbiddenAlchemy(final ForbiddenAlchemy card) { private ForbiddenAlchemy(final ForbiddenAlchemy card) {

View file

@ -29,7 +29,7 @@ public final class GalvanicIteration extends CardImpl {
this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new GalvanicIterationAbility())); this.getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new GalvanicIterationAbility()));
// Flashback {1}{U}{R} // Flashback {1}{U}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{1}{U}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{U}{R}")));
} }
private GalvanicIteration(final GalvanicIteration card) { private GalvanicIteration(final GalvanicIteration card) {

View file

@ -41,7 +41,7 @@ public final class GazeOfJustice extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {5}{W} // Flashback {5}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{W}")));
} }
private GazeOfJustice(final GazeOfJustice card) { private GazeOfJustice(final GazeOfJustice card) {

View file

@ -25,7 +25,7 @@ public final class Geistflame extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{R}")));
} }
private Geistflame(final Geistflame card) { private Geistflame(final Geistflame card) {

View file

@ -39,7 +39,7 @@ public final class GhoulcallersHarvest extends CardImpl {
this.getSpellAbility().addHint(hint); this.getSpellAbility().addHint(hint);
// Flashback {3}{B}{G} // Flashback {3}{B}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{B}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{B}{G}")));
} }
private GhoulcallersHarvest(final GhoulcallersHarvest card) { private GhoulcallersHarvest(final GhoulcallersHarvest card) {

View file

@ -26,7 +26,7 @@ public final class GnawToTheBone extends CardImpl {
this.getSpellAbility().addEffect(new GainLifeEffect(value)); this.getSpellAbility().addEffect(new GainLifeEffect(value));
// Flashback {2}{G} // Flashback {2}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{G}")));
} }
private GnawToTheBone(final GnawToTheBone card) { private GnawToTheBone(final GnawToTheBone card) {

View file

@ -26,7 +26,7 @@ public final class GraspOfPhantoms extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {7}{U} // Flashback {7}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{U}")));
} }
private GraspOfPhantoms(final GraspOfPhantoms card) { private GraspOfPhantoms(final GraspOfPhantoms card) {

View file

@ -33,7 +33,7 @@ public final class GrizzlyFate extends CardImpl {
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Flashback {5}{G}{G} // Flashback {5}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{G}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{G}{G}")));
} }
private GrizzlyFate(final GrizzlyFate card) { private GrizzlyFate(final GrizzlyFate card) {

View file

@ -31,7 +31,7 @@ public final class HomesteadCourage extends CardImpl {
this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellAbility().addTarget(new TargetControlledCreaturePermanent());
// Flashback {W} // Flashback {W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{W}")));
} }
private HomesteadCourage(final HomesteadCourage card) { private HomesteadCourage(final HomesteadCourage card) {

View file

@ -36,7 +36,7 @@ public final class HowlingGale extends CardImpl {
effect.setText("and each player"); effect.setText("and each player");
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Flashback {1}{G} // Flashback {1}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{G}")));
} }
private HowlingGale(final HowlingGale card) { private HowlingGale(final HowlingGale card) {

View file

@ -31,7 +31,7 @@ public final class HungryForMore extends CardImpl {
this.getSpellAbility().addEffect(new HungryForMoreEffect()); this.getSpellAbility().addEffect(new HungryForMoreEffect());
// Flashback {1}{B}{R} // Flashback {1}{B}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{1}{B}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{1}{B}{R}")));
} }
private HungryForMore(final HungryForMore card) { private HungryForMore(final HungryForMore card) {

View file

@ -28,7 +28,7 @@ public final class IgniteTheFuture extends CardImpl {
this.getSpellAbility().addEffect(new IgniteTheFutureEffect()); this.getSpellAbility().addEffect(new IgniteTheFutureEffect());
// Flashback {7}{R} // Flashback {7}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{R}")));
} }
private IgniteTheFuture(final IgniteTheFuture card) { private IgniteTheFuture(final IgniteTheFuture card) {

View file

@ -37,7 +37,7 @@ public final class IncreasingAmbition extends CardImpl {
)); ));
// Flashback {7}{B} // Flashback {7}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{B}")));
} }
private IncreasingAmbition(final IncreasingAmbition card) { private IncreasingAmbition(final IncreasingAmbition card) {

View file

@ -29,7 +29,7 @@ public final class IncreasingConfusion extends CardImpl {
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
// Flashback {X}{U} // Flashback {X}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{X}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{X}{U}")));
} }
private IncreasingConfusion(final IncreasingConfusion card) { private IncreasingConfusion(final IncreasingConfusion card) {

View file

@ -29,7 +29,7 @@ public final class IncreasingDevotion extends CardImpl {
this.getSpellAbility().addEffect(new IncreasingDevotionEffect()); this.getSpellAbility().addEffect(new IncreasingDevotionEffect());
// Flashback {7}{W}{W} // Flashback {7}{W}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{W}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{W}{W}")));
} }
private IncreasingDevotion(final IncreasingDevotion card) { private IncreasingDevotion(final IncreasingDevotion card) {

View file

@ -30,7 +30,7 @@ public final class IncreasingSavagery extends CardImpl {
this.getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellAbility().addTarget(new TargetCreaturePermanent());
// Flashback {5}{G}{G} // Flashback {5}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{G}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{G}{G}")));
} }
private IncreasingSavagery(final IncreasingSavagery card) { private IncreasingSavagery(final IncreasingSavagery card) {

View file

@ -41,7 +41,7 @@ public final class IncreasingVengeance extends CardImpl {
this.getSpellAbility().addTarget(target); this.getSpellAbility().addTarget(target);
// Flashback {3}{R}{R} // Flashback {3}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{R}{R}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{R}{R}")));
} }
private IncreasingVengeance(final IncreasingVengeance card) { private IncreasingVengeance(final IncreasingVengeance card) {

View file

@ -23,7 +23,7 @@ public final class JoinTheDance extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new HumanToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new HumanToken(), 2));
// Flashback {3}{G}{W} // Flashback {3}{G}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{3}{G}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{3}{G}{W}")));
} }
private JoinTheDance(final JoinTheDance card) { private JoinTheDance(final JoinTheDance card) {

View file

@ -28,7 +28,7 @@ public final class Kaleidoscorch extends CardImpl {
this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE); this.getSpellAbility().setAbilityWord(AbilityWord.CONVERGE);
// Flashback {4}{R} // Flashback {4}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl<>("{4}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{4}{R}")));
} }
private Kaleidoscorch(final Kaleidoscorch card) { private Kaleidoscorch(final Kaleidoscorch card) {

View file

@ -26,7 +26,7 @@ public final class KrosanReclamation extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(2)); this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(2));
// Flashback {1}{G} // Flashback {1}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{G}")));
} }
private KrosanReclamation(final KrosanReclamation card) { private KrosanReclamation(final KrosanReclamation card) {

View file

@ -34,7 +34,7 @@ public final class LavaDart extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
// Flashback-Sacrifice a Mountain. // Flashback-Sacrifice a Mountain.
this.addAbility(new FlashbackAbility(new SacrificeTargetCost(new TargetControlledPermanent(filter)), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new SacrificeTargetCost(new TargetControlledPermanent(filter))));
} }
private LavaDart(final LavaDart card) { private LavaDart(final LavaDart card) {

View file

@ -104,9 +104,7 @@ class LierDiscipleOfTheDrownedFlashbackEffect extends ContinuousEffectImpl {
return false; return false;
} }
for (Card card : player.getGraveyard().getCards(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game)) { for (Card card : player.getGraveyard().getCards(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game)) {
Ability ability = new FlashbackAbility( Ability ability = new FlashbackAbility(card, card.getManaCost());
card.getManaCost(), card.isInstant(game) ? TimingRule.INSTANT : TimingRule.SORCERY
);
ability.setSourceId(card.getId()); ability.setSourceId(card.getId());
ability.setControllerId(card.getOwnerId()); ability.setControllerId(card.getOwnerId());
game.getState().addOtherAbility(card, ability); game.getState().addOtherAbility(card, ability);

View file

@ -33,7 +33,7 @@ public final class LightningSurge extends CardImpl {
this.getSpellAbility().addEffect(effect); this.getSpellAbility().addEffect(effect);
// Flashback {5}{R}{R} // Flashback {5}{R}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{R}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{R}{R}")));
} }
private LightningSurge(final LightningSurge card) { private LightningSurge(final LightningSurge card) {

View file

@ -23,7 +23,7 @@ public final class LingeringSouls extends CardImpl {
// Create two 1/1 white Spirit creature tokens with flying. // Create two 1/1 white Spirit creature tokens with flying.
this.getSpellAbility().addEffect(new CreateTokenEffect(new SpiritWhiteToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new SpiritWhiteToken(), 2));
// Flashback {1}{B} // Flashback {1}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{1}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{1}{B}")));
} }
private LingeringSouls(final LingeringSouls card) { private LingeringSouls(final LingeringSouls card) {

View file

@ -36,7 +36,7 @@ public final class MarshalingCry extends CardImpl {
this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}"))); this.addAbility(new CyclingAbility(new ManaCostsImpl("{2}")));
// Flashback {3}{W} // Flashback {3}{W}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{W}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{W}")));
} }
private MarshalingCry(final MarshalingCry card) { private MarshalingCry(final MarshalingCry card) {

View file

@ -31,7 +31,7 @@ public final class MassDiminish extends CardImpl {
this.getSpellAbility().addTarget(new TargetPlayer()); this.getSpellAbility().addTarget(new TargetPlayer());
// Flashback {3}{U} // Flashback {3}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{U}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{U}")));
} }
private MassDiminish(final MassDiminish card) { private MassDiminish(final MassDiminish card) {

View file

@ -26,7 +26,7 @@ public final class MemorysJourney extends CardImpl {
this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(3)); this.getSpellAbility().addTarget(new TargetCardInTargetPlayersGraveyard(3));
// Flashback {G} // Flashback {G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{G}")));
} }
private MemorysJourney(final MemorysJourney card) { private MemorysJourney(final MemorysJourney card) {

View file

@ -24,7 +24,7 @@ public final class MoanOfTheUnhallowed extends CardImpl {
this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), 2)); this.getSpellAbility().addEffect(new CreateTokenEffect(new ZombieToken(), 2));
// Flashback {5}{B}{B} // Flashback {5}{B}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{B}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{B}{B}")));
} }
private MoanOfTheUnhallowed(final MoanOfTheUnhallowed card) { private MoanOfTheUnhallowed(final MoanOfTheUnhallowed card) {

View file

@ -26,7 +26,7 @@ public final class MomentaryBlink extends CardImpl {
this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false)); this.getSpellAbility().addEffect(new ReturnToBattlefieldUnderOwnerControlTargetEffect(false, false));
// Flashback {3}{U} // Flashback {3}{U}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{U}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{U}")));
} }
private MomentaryBlink(final MomentaryBlink card) { private MomentaryBlink(final MomentaryBlink card) {

View file

@ -24,7 +24,7 @@ public final class MomentsPeace extends CardImpl {
this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true)); this.getSpellAbility().addEffect(new PreventAllDamageByAllPermanentsEffect(Duration.EndOfTurn, true));
// Flashback {2}{G} // Flashback {2}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{G}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{G}")));
} }
private MomentsPeace(final MomentsPeace card) { private MomentsPeace(final MomentsPeace card) {

View file

@ -27,7 +27,7 @@ public final class MorbidHunger extends CardImpl {
this.getSpellAbility().addTarget(new TargetAnyTarget()); this.getSpellAbility().addTarget(new TargetAnyTarget());
this.getSpellAbility().addEffect(new GainLifeEffect(3)); this.getSpellAbility().addEffect(new GainLifeEffect(3));
// Flashback {7}{B}{B} // Flashback {7}{B}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{7}{B}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{7}{B}{B}")));
} }

View file

@ -24,7 +24,7 @@ public final class MorgueTheft extends CardImpl {
this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE));
// Flashback {4}{B} // Flashback {4}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{B}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{4}{B}")));
} }

View file

@ -34,7 +34,7 @@ public final class MysticRetrieval extends CardImpl {
this.getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellAbility().addEffect(new ReturnToHandTargetEffect());
this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); this.getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter));
// Flashback {2}{R} // Flashback {2}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{2}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{2}{R}")));
} }
private MysticRetrieval(final MysticRetrieval card) { private MysticRetrieval(final MysticRetrieval card) {

View file

@ -37,7 +37,7 @@ public final class MysticalTeachings extends CardImpl {
// Search your library for an instant card or a card with flash, reveal it, and put it into your hand. Then shuffle your library. // Search your library for an instant card or a card with flash, reveal it, and put it into your hand. Then shuffle your library.
this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true)); this.getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true));
// Flashback {5}{B} // Flashback {5}{B}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{5}{B}"), TimingRule.INSTANT)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{5}{B}")));
} }
private MysticalTeachings(final MysticalTeachings card) { private MysticalTeachings(final MysticalTeachings card) {

View file

@ -26,7 +26,7 @@ public final class NightbirdsClutches extends CardImpl {
this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)); this.getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn));
this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); this.getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2));
// Flashback {3}{R} // Flashback {3}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{3}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{3}{R}")));
} }
private NightbirdsClutches(final NightbirdsClutches card) { private NightbirdsClutches(final NightbirdsClutches card) {

View file

@ -31,7 +31,7 @@ public final class ParallelEvolution extends CardImpl {
this.getSpellAbility().addEffect(new ParallelEvolutionEffect()); this.getSpellAbility().addEffect(new ParallelEvolutionEffect());
// Flashback {4}{G}{G}{G} // Flashback {4}{G}{G}{G}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{G}{G}{G}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl("{4}{G}{G}{G}")));
} }
private ParallelEvolution(final ParallelEvolution card) { private ParallelEvolution(final ParallelEvolution card) {

View file

@ -22,12 +22,11 @@ public final class PastInFlames extends CardImpl {
public PastInFlames(UUID ownerId, CardSetInfo setInfo) { public PastInFlames(UUID ownerId, CardSetInfo setInfo) {
super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}"); super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{R}");
// Each instant and sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost. // Each instant and sorcery card in your graveyard gains flashback until end of turn. The flashback cost is equal to its mana cost.
this.getSpellAbility().addEffect(new PastInFlamesEffect()); this.getSpellAbility().addEffect(new PastInFlamesEffect());
// Flashback {4}{R} // Flashback {4}{R}
this.addAbility(new FlashbackAbility(new ManaCostsImpl("{4}{R}"), TimingRule.SORCERY)); this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{4}{R}")));
} }
@ -73,25 +72,18 @@ class PastInFlamesEffect extends ContinuousEffectImpl {
@Override @Override
public boolean apply(Game game, Ability source) { public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId()); Player player = game.getPlayer(source.getControllerId());
if (player != null) { if (player == null) {
return false;
}
player.getGraveyard().stream().filter((cardId) -> (affectedObjectList.contains(new MageObjectReference(cardId, game)))).forEachOrdered((cardId) -> { player.getGraveyard().stream().filter((cardId) -> (affectedObjectList.contains(new MageObjectReference(cardId, game)))).forEachOrdered((cardId) -> {
Card card = game.getCard(cardId); Card card = game.getCard(cardId);
if (card != null) { if (card != null) {
FlashbackAbility ability = null; FlashbackAbility ability = new FlashbackAbility(card, card.getManaCost());
if (card.isInstant(game)) {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.INSTANT);
} else if (card.isSorcery(game)) {
ability = new FlashbackAbility(card.getManaCost(), TimingRule.SORCERY);
}
if (ability != null) {
ability.setSourceId(cardId); ability.setSourceId(cardId);
ability.setControllerId(card.getOwnerId()); ability.setControllerId(card.getOwnerId());
game.getState().addOtherAbility(card, ability); game.getState().addOtherAbility(card, ability);
} }
}
}); });
return true; return true;
} }
return false;
}
} }

Some files were not shown because too many files have changed in this diff Show more