From af3bd24f033c6a13df3cdad8ce9792621079b5be Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 21 May 2021 07:52:08 -0400 Subject: [PATCH] [MH2] Implemented Grief --- Mage.Sets/src/mage/cards/a/Aethersnipe.java | 2 +- Mage.Sets/src/mage/cards/b/Briarhorn.java | 2 +- Mage.Sets/src/mage/cards/c/Cloudthresher.java | 2 +- Mage.Sets/src/mage/cards/d/Dawnfluke.java | 2 +- Mage.Sets/src/mage/cards/f/Faultgrinder.java | 2 +- Mage.Sets/src/mage/cards/g/Glarewielder.java | 2 +- Mage.Sets/src/mage/cards/g/Grief.java | 65 +++++++++++++++++++ Mage.Sets/src/mage/cards/i/IngotChewer.java | 2 +- .../src/mage/cards/i/InnerFlameAcolyte.java | 2 +- Mage.Sets/src/mage/cards/m/Meadowboon.java | 2 +- Mage.Sets/src/mage/cards/m/Mournwhelk.java | 2 +- Mage.Sets/src/mage/cards/m/Mulldrifter.java | 2 +- Mage.Sets/src/mage/cards/n/Nevermaker.java | 2 +- .../src/mage/cards/n/NightIncarnate.java | 2 +- Mage.Sets/src/mage/cards/o/Offalsnout.java | 2 +- Mage.Sets/src/mage/cards/r/Reveillark.java | 2 +- Mage.Sets/src/mage/cards/s/Shriekmaw.java | 2 +- Mage.Sets/src/mage/cards/s/Slithermuse.java | 2 +- Mage.Sets/src/mage/cards/s/Spitebellows.java | 2 +- Mage.Sets/src/mage/cards/u/Unmask.java | 20 +++--- Mage.Sets/src/mage/cards/v/Vesperlark.java | 2 +- .../src/mage/cards/w/WalkerOfTheGrove.java | 2 +- Mage.Sets/src/mage/cards/w/Wispmare.java | 2 +- Mage.Sets/src/mage/sets/ModernHorizons2.java | 1 + .../mage/abilities/keyword/EvokeAbility.java | 33 +++++----- 25 files changed, 110 insertions(+), 51 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/g/Grief.java diff --git a/Mage.Sets/src/mage/cards/a/Aethersnipe.java b/Mage.Sets/src/mage/cards/a/Aethersnipe.java index 6823b0336e5..6df1bf9c85e 100644 --- a/Mage.Sets/src/mage/cards/a/Aethersnipe.java +++ b/Mage.Sets/src/mage/cards/a/Aethersnipe.java @@ -34,7 +34,7 @@ public final class Aethersnipe extends CardImpl { this.addAbility(ability); // Evoke {1}{U}{U} - this.addAbility(new EvokeAbility(this, "{1}{U}{U}")); + this.addAbility(new EvokeAbility("{1}{U}{U}")); } private Aethersnipe(final Aethersnipe card) { diff --git a/Mage.Sets/src/mage/cards/b/Briarhorn.java b/Mage.Sets/src/mage/cards/b/Briarhorn.java index de1eba5a5fc..d9a617a1196 100644 --- a/Mage.Sets/src/mage/cards/b/Briarhorn.java +++ b/Mage.Sets/src/mage/cards/b/Briarhorn.java @@ -35,7 +35,7 @@ public final class Briarhorn extends CardImpl { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); // Evoke {1}{G} - this.addAbility(new EvokeAbility(this, "{1}{G}")); + this.addAbility(new EvokeAbility("{1}{G}")); } private Briarhorn(final Briarhorn card) { diff --git a/Mage.Sets/src/mage/cards/c/Cloudthresher.java b/Mage.Sets/src/mage/cards/c/Cloudthresher.java index 57c3d941b4b..0139ffd66e9 100644 --- a/Mage.Sets/src/mage/cards/c/Cloudthresher.java +++ b/Mage.Sets/src/mage/cards/c/Cloudthresher.java @@ -45,7 +45,7 @@ public final class Cloudthresher extends CardImpl { ability.addEffect(new DamagePlayersEffect(2)); this.addAbility(ability); // Evoke {2}{G}{G} - this.addAbility(new EvokeAbility(this, "{2}{G}{G}")); + this.addAbility(new EvokeAbility("{2}{G}{G}")); } private Cloudthresher(final Cloudthresher card) { diff --git a/Mage.Sets/src/mage/cards/d/Dawnfluke.java b/Mage.Sets/src/mage/cards/d/Dawnfluke.java index d3bb8e1382c..fde83612acc 100644 --- a/Mage.Sets/src/mage/cards/d/Dawnfluke.java +++ b/Mage.Sets/src/mage/cards/d/Dawnfluke.java @@ -37,7 +37,7 @@ public final class Dawnfluke extends CardImpl { ability.addTarget(target); this.addAbility(ability); // Evoke {W} - this.addAbility(new EvokeAbility(this, "{W}")); + this.addAbility(new EvokeAbility("{W}")); } private Dawnfluke(final Dawnfluke card) { diff --git a/Mage.Sets/src/mage/cards/f/Faultgrinder.java b/Mage.Sets/src/mage/cards/f/Faultgrinder.java index 59e38c2a6e4..8c4787b864a 100644 --- a/Mage.Sets/src/mage/cards/f/Faultgrinder.java +++ b/Mage.Sets/src/mage/cards/f/Faultgrinder.java @@ -37,7 +37,7 @@ public final class Faultgrinder extends CardImpl { this.addAbility(ability); // Evoke {4}{R} - this.addAbility(new EvokeAbility(this, "{4}{R}")); + this.addAbility(new EvokeAbility("{4}{R}")); } private Faultgrinder(final Faultgrinder card) { diff --git a/Mage.Sets/src/mage/cards/g/Glarewielder.java b/Mage.Sets/src/mage/cards/g/Glarewielder.java index a86dd127a2b..01f1024d527 100644 --- a/Mage.Sets/src/mage/cards/g/Glarewielder.java +++ b/Mage.Sets/src/mage/cards/g/Glarewielder.java @@ -36,7 +36,7 @@ public final class Glarewielder extends CardImpl { ability.addTarget(new TargetCreaturePermanent(0, 2)); this.addAbility(ability); // Evoke {1}{R} - this.addAbility(new EvokeAbility(this, "{1}{R}")); + this.addAbility(new EvokeAbility("{1}{R}")); } private Glarewielder(final Glarewielder card) { diff --git a/Mage.Sets/src/mage/cards/g/Grief.java b/Mage.Sets/src/mage/cards/g/Grief.java new file mode 100644 index 00000000000..d0ac0eef647 --- /dev/null +++ b/Mage.Sets/src/mage/cards/g/Grief.java @@ -0,0 +1,65 @@ +package mage.cards.g; + +import mage.MageInt; +import mage.ObjectColor; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTriggeredAbility; +import mage.abilities.costs.common.ExileFromHandCost; +import mage.abilities.effects.common.discard.DiscardCardYouChooseTargetEffect; +import mage.abilities.keyword.EvokeAbility; +import mage.abilities.keyword.MenaceAbility; +import mage.cards.CardImpl; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.SubType; +import mage.constants.TargetController; +import mage.filter.FilterCard; +import mage.filter.StaticFilters; +import mage.filter.predicate.mageobject.ColorPredicate; +import mage.target.common.TargetCardInHand; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class Grief extends CardImpl { + + private static final FilterCard filter = new FilterCard("a black card from your hand"); + + static { + filter.add(new ColorPredicate(ObjectColor.BLACK)); + } + + public Grief(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); + + this.subtype.add(SubType.ELEMENTAL); + this.subtype.add(SubType.INCARNATION); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Menace + this.addAbility(new MenaceAbility()); + + // When Grief enters the battlefield, target opponent reveals their hand. You choose a nonland card from it. That player discards that card. + Ability ability = new EntersBattlefieldTriggeredAbility( + new DiscardCardYouChooseTargetEffect(StaticFilters.FILTER_CARD_NON_LAND, TargetController.OPPONENT) + ); + ability.addTarget(new TargetOpponent()); + this.addAbility(ability); + + // Evoke—Exile a black card from your hand. + this.addAbility(new EvokeAbility(new ExileFromHandCost(new TargetCardInHand(filter)))); + } + + private Grief(final Grief card) { + super(card); + } + + @Override + public Grief copy() { + return new Grief(this); + } +} diff --git a/Mage.Sets/src/mage/cards/i/IngotChewer.java b/Mage.Sets/src/mage/cards/i/IngotChewer.java index 3c0d87e156b..b9b1836554a 100644 --- a/Mage.Sets/src/mage/cards/i/IngotChewer.java +++ b/Mage.Sets/src/mage/cards/i/IngotChewer.java @@ -33,7 +33,7 @@ public final class IngotChewer extends CardImpl { ability.addTarget(target); this.addAbility(ability); // Evoke {R} - this.addAbility(new EvokeAbility(this, "{R}")); + this.addAbility(new EvokeAbility("{R}")); } private IngotChewer(final IngotChewer card) { diff --git a/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java b/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java index f3f8e307451..6f45e6c334b 100644 --- a/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java +++ b/Mage.Sets/src/mage/cards/i/InnerFlameAcolyte.java @@ -38,7 +38,7 @@ public final class InnerFlameAcolyte extends CardImpl { this.addAbility(ability); // Evoke {R} - this.addAbility(new EvokeAbility(this, "{R}")); + this.addAbility(new EvokeAbility("{R}")); } private InnerFlameAcolyte(final InnerFlameAcolyte card) { diff --git a/Mage.Sets/src/mage/cards/m/Meadowboon.java b/Mage.Sets/src/mage/cards/m/Meadowboon.java index c8b5a278e0f..c3aef5db485 100644 --- a/Mage.Sets/src/mage/cards/m/Meadowboon.java +++ b/Mage.Sets/src/mage/cards/m/Meadowboon.java @@ -37,7 +37,7 @@ public final class Meadowboon extends CardImpl { ability.addTarget(new TargetPlayer()); this.addAbility(ability); // Evoke {3}{W} - this.addAbility(new EvokeAbility(this, "{3}{W}")); + this.addAbility(new EvokeAbility("{3}{W}")); } private Meadowboon(final Meadowboon card) { diff --git a/Mage.Sets/src/mage/cards/m/Mournwhelk.java b/Mage.Sets/src/mage/cards/m/Mournwhelk.java index 6778cad7262..f857f8b7e4b 100644 --- a/Mage.Sets/src/mage/cards/m/Mournwhelk.java +++ b/Mage.Sets/src/mage/cards/m/Mournwhelk.java @@ -31,7 +31,7 @@ public final class Mournwhelk extends CardImpl { ability.addTarget(new TargetPlayer()); this.addAbility(ability); // Evoke {3}{B} - this.addAbility(new EvokeAbility(this, "{3}{B}")); + this.addAbility(new EvokeAbility("{3}{B}")); } private Mournwhelk(final Mournwhelk card) { diff --git a/Mage.Sets/src/mage/cards/m/Mulldrifter.java b/Mage.Sets/src/mage/cards/m/Mulldrifter.java index 88964abeef4..52fcb17c4d0 100644 --- a/Mage.Sets/src/mage/cards/m/Mulldrifter.java +++ b/Mage.Sets/src/mage/cards/m/Mulldrifter.java @@ -30,7 +30,7 @@ public final class Mulldrifter extends CardImpl { // When Mulldrifter enters the battlefield, draw two cards. this.addAbility(new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(2))); // Evoke {2}{U} - this.addAbility(new EvokeAbility(this, "{2}{U}")); + this.addAbility(new EvokeAbility("{2}{U}")); } private Mulldrifter(final Mulldrifter card) { diff --git a/Mage.Sets/src/mage/cards/n/Nevermaker.java b/Mage.Sets/src/mage/cards/n/Nevermaker.java index 0bd6a8a68cd..4d317b0a3e5 100644 --- a/Mage.Sets/src/mage/cards/n/Nevermaker.java +++ b/Mage.Sets/src/mage/cards/n/Nevermaker.java @@ -37,7 +37,7 @@ public final class Nevermaker extends CardImpl { this.addAbility(ability); // Evoke {3}{U} - this.addAbility(new EvokeAbility(this, "{3}{U}")); + this.addAbility(new EvokeAbility("{3}{U}")); } private Nevermaker(final Nevermaker card) { diff --git a/Mage.Sets/src/mage/cards/n/NightIncarnate.java b/Mage.Sets/src/mage/cards/n/NightIncarnate.java index bed9e82ce92..555db4d87ed 100644 --- a/Mage.Sets/src/mage/cards/n/NightIncarnate.java +++ b/Mage.Sets/src/mage/cards/n/NightIncarnate.java @@ -34,7 +34,7 @@ public final class NightIncarnate extends CardImpl { )); // Evoke {3}{B} - this.addAbility(new EvokeAbility(this, "{3}{B}")); + this.addAbility(new EvokeAbility("{3}{B}")); } diff --git a/Mage.Sets/src/mage/cards/o/Offalsnout.java b/Mage.Sets/src/mage/cards/o/Offalsnout.java index 9a0300a94c8..ce3d6c5675c 100644 --- a/Mage.Sets/src/mage/cards/o/Offalsnout.java +++ b/Mage.Sets/src/mage/cards/o/Offalsnout.java @@ -36,7 +36,7 @@ public final class Offalsnout extends CardImpl { ability.addTarget(target); this.addAbility(ability); // Evoke {B} - this.addAbility(new EvokeAbility(this, "{B}")); + this.addAbility(new EvokeAbility("{B}")); } private Offalsnout(final Offalsnout card) { diff --git a/Mage.Sets/src/mage/cards/r/Reveillark.java b/Mage.Sets/src/mage/cards/r/Reveillark.java index e7dc662a6d6..1bee1fb5f25 100644 --- a/Mage.Sets/src/mage/cards/r/Reveillark.java +++ b/Mage.Sets/src/mage/cards/r/Reveillark.java @@ -42,7 +42,7 @@ public final class Reveillark extends CardImpl { ability.addTarget(new TargetCardInYourGraveyard(0,2,filter)); this.addAbility(ability); // Evoke {5}{W} - this.addAbility(new EvokeAbility(this, "{5}{W}")); + this.addAbility(new EvokeAbility("{5}{W}")); } private Reveillark(final Reveillark card) { diff --git a/Mage.Sets/src/mage/cards/s/Shriekmaw.java b/Mage.Sets/src/mage/cards/s/Shriekmaw.java index d232e90c6db..f8d144380a1 100644 --- a/Mage.Sets/src/mage/cards/s/Shriekmaw.java +++ b/Mage.Sets/src/mage/cards/s/Shriekmaw.java @@ -49,7 +49,7 @@ public final class Shriekmaw extends CardImpl { this.addAbility(ability); // Evoke {1}{B} (You may cast this spell for its evoke cost. If you do, it's sacrificed when it enters the battlefield.) - this.addAbility(new EvokeAbility(this, "{1}{B}")); + this.addAbility(new EvokeAbility("{1}{B}")); } private Shriekmaw(final Shriekmaw card) { diff --git a/Mage.Sets/src/mage/cards/s/Slithermuse.java b/Mage.Sets/src/mage/cards/s/Slithermuse.java index 48d4613c218..20618815588 100644 --- a/Mage.Sets/src/mage/cards/s/Slithermuse.java +++ b/Mage.Sets/src/mage/cards/s/Slithermuse.java @@ -34,7 +34,7 @@ public final class Slithermuse extends CardImpl { // When Slithermuse leaves the battlefield, choose an opponent. If that player has more cards in hand than you, draw cards equal to the difference. this.addAbility(new LeavesBattlefieldTriggeredAbility(new SlithermuseEffect(), false)); // Evoke {3}{U} - this.addAbility(new EvokeAbility(this, "{3}{U}")); + this.addAbility(new EvokeAbility("{3}{U}")); } private Slithermuse(final Slithermuse card) { diff --git a/Mage.Sets/src/mage/cards/s/Spitebellows.java b/Mage.Sets/src/mage/cards/s/Spitebellows.java index dda1f3f6839..5bb46f90190 100644 --- a/Mage.Sets/src/mage/cards/s/Spitebellows.java +++ b/Mage.Sets/src/mage/cards/s/Spitebellows.java @@ -31,7 +31,7 @@ public final class Spitebellows extends CardImpl { ability.addTarget(new TargetCreaturePermanent()); this.addAbility(ability); // Evoke {1}{R}{R} - this.addAbility(new EvokeAbility(this, "{1}{R}{R}")); + this.addAbility(new EvokeAbility("{1}{R}{R}")); } private Spitebellows(final Spitebellows card) { diff --git a/Mage.Sets/src/mage/cards/u/Unmask.java b/Mage.Sets/src/mage/cards/u/Unmask.java index 675d2efd33d..debad117470 100644 --- a/Mage.Sets/src/mage/cards/u/Unmask.java +++ b/Mage.Sets/src/mage/cards/u/Unmask.java @@ -1,7 +1,5 @@ - package mage.cards.u; -import java.util.UUID; import mage.ObjectColor; import mage.abilities.costs.AlternativeCostSourceAbility; import mage.abilities.costs.common.ExileFromHandCost; @@ -11,35 +9,33 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.TargetController; import mage.filter.FilterCard; -import mage.filter.predicate.Predicates; +import mage.filter.StaticFilters; import mage.filter.predicate.mageobject.ColorPredicate; import mage.target.TargetPlayer; import mage.target.common.TargetCardInHand; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Unmask extends CardImpl { private static final FilterCard filter = new FilterCard("a black card from your hand"); - private static final FilterCard filterNonLand = new FilterCard("nonland card"); static { - filterNonLand.add(Predicates.not(CardType.LAND.getPredicate())); filter.add(new ColorPredicate(ObjectColor.BLACK)); } - - public Unmask(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}"); + public Unmask(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}"); // You may exile a black card from your hand rather than pay Unmask's mana cost. - this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(filter)))); - + this.addAbility(new AlternativeCostSourceAbility(new ExileFromHandCost(new TargetCardInHand(filter)))); + // Target player reveals their hand. You choose a nonland card from it. That player discards that card. this.getSpellAbility().addTarget(new TargetPlayer()); - this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(filterNonLand, TargetController.ANY)); + this.getSpellAbility().addEffect(new DiscardCardYouChooseTargetEffect(StaticFilters.FILTER_CARD_NON_LAND, TargetController.ANY)); } private Unmask(final Unmask card) { diff --git a/Mage.Sets/src/mage/cards/v/Vesperlark.java b/Mage.Sets/src/mage/cards/v/Vesperlark.java index 5140cff4f97..9af75646a2e 100644 --- a/Mage.Sets/src/mage/cards/v/Vesperlark.java +++ b/Mage.Sets/src/mage/cards/v/Vesperlark.java @@ -48,7 +48,7 @@ public final class Vesperlark extends CardImpl { this.addAbility(ability); // Evoke {1}{W} - this.addAbility(new EvokeAbility(this, "{1}{W}")); + this.addAbility(new EvokeAbility("{1}{W}")); } private Vesperlark(final Vesperlark card) { diff --git a/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java b/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java index 73513f9c1a3..98f5d3eba23 100644 --- a/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java +++ b/Mage.Sets/src/mage/cards/w/WalkerOfTheGrove.java @@ -28,7 +28,7 @@ public final class WalkerOfTheGrove extends CardImpl { // When Walker of the Grove leaves the battlefield, create a 4/4 green Elemental creature token. this.addAbility(new LeavesBattlefieldTriggeredAbility(new CreateTokenEffect(new WalkerOfTheGroveToken(), 1), false)); // Evoke {4}{G} - this.addAbility(new EvokeAbility(this, "{4}{G}")); + this.addAbility(new EvokeAbility("{4}{G}")); } private WalkerOfTheGrove(final WalkerOfTheGrove card) { diff --git a/Mage.Sets/src/mage/cards/w/Wispmare.java b/Mage.Sets/src/mage/cards/w/Wispmare.java index f2f80d7eb34..b6007fb528c 100644 --- a/Mage.Sets/src/mage/cards/w/Wispmare.java +++ b/Mage.Sets/src/mage/cards/w/Wispmare.java @@ -34,7 +34,7 @@ public final class Wispmare extends CardImpl { ability.addTarget(new TargetEnchantmentPermanent()); this.addAbility(ability); // Evoke {W} - this.addAbility(new EvokeAbility(this, "{W}")); + this.addAbility(new EvokeAbility("{W}")); } private Wispmare(final Wispmare card) { diff --git a/Mage.Sets/src/mage/sets/ModernHorizons2.java b/Mage.Sets/src/mage/sets/ModernHorizons2.java index b6b2fbcd012..88cd2df65e7 100644 --- a/Mage.Sets/src/mage/sets/ModernHorizons2.java +++ b/Mage.Sets/src/mage/sets/ModernHorizons2.java @@ -33,6 +33,7 @@ public final class ModernHorizons2 extends ExpansionSet { cards.add(new SetCardInfo("Counterspell", 267, Rarity.UNCOMMON, mage.cards.c.Counterspell.class)); cards.add(new SetCardInfo("Diamond Lion", 225, Rarity.RARE, mage.cards.d.DiamondLion.class)); cards.add(new SetCardInfo("Flametongue Yearling", 125, Rarity.UNCOMMON, mage.cards.f.FlametongueYearling.class)); + cards.add(new SetCardInfo("Grief", 87, Rarity.MYTHIC, mage.cards.g.Grief.class)); cards.add(new SetCardInfo("Marsh Flats", 248, Rarity.RARE, mage.cards.m.MarshFlats.class)); cards.add(new SetCardInfo("Misty Rainforest", 250, Rarity.RARE, mage.cards.m.MistyRainforest.class)); cards.add(new SetCardInfo("Rishadan Dockhand", 59, Rarity.RARE, mage.cards.r.RishadanDockhand.class)); diff --git a/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java b/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java index e0f285d0fc0..0b2631ffb09 100644 --- a/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/EvokeAbility.java @@ -1,20 +1,11 @@ - package mage.abilities.keyword; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; import mage.abilities.Ability; import mage.abilities.SpellAbility; import mage.abilities.StaticAbility; import mage.abilities.common.EntersBattlefieldTriggeredAbility; import mage.abilities.condition.common.EvokedCondition; -import mage.abilities.costs.AlternativeCost2; -import mage.abilities.costs.AlternativeCost2Impl; -import mage.abilities.costs.AlternativeSourceCosts; -import mage.abilities.costs.Cost; -import mage.abilities.costs.Costs; -import mage.abilities.costs.CostsImpl; +import mage.abilities.costs.*; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.common.SacrificeSourceEffect; @@ -24,8 +15,11 @@ import mage.constants.Zone; import mage.game.Game; import mage.players.Player; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; + /** - * * @author LevelX2 */ public class EvokeAbility extends StaticAbility implements AlternativeSourceCosts { @@ -38,17 +32,20 @@ public class EvokeAbility extends StaticAbility implements AlternativeSourceCost // needed to check activation status, if card changes zone after casting it private int zoneChangeCounter = 0; - public EvokeAbility(Card card, String manaString) { + public EvokeAbility(String manaString) { + this(new ManaCostsImpl<>(manaString)); + } + + public EvokeAbility(Cost cost) { super(Zone.ALL, null); name = EVOKE_KEYWORD; - this.addEvokeCost(manaString); + this.addEvokeCost(cost); Ability ability = new ConditionalInterveningIfTriggeredAbility(new EntersBattlefieldTriggeredAbility(new SacrificeSourceEffect()), EvokedCondition.instance, "Sacrifice {this} when it enters the battlefield and was evoked."); ability.setRuleVisible(false); addSubAbility(ability); - } - public EvokeAbility(final EvokeAbility ability) { + private EvokeAbility(final EvokeAbility ability) { super(ability); this.evokeCosts.addAll(ability.evokeCosts); this.zoneChangeCounter = ability.zoneChangeCounter; @@ -59,8 +56,8 @@ public class EvokeAbility extends StaticAbility implements AlternativeSourceCost return new EvokeAbility(this); } - public final AlternativeCost2 addEvokeCost(String manaString) { - AlternativeCost2 evokeCost = new AlternativeCost2Impl(EVOKE_KEYWORD, REMINDER_TEXT, new ManaCostsImpl(manaString)); + public final AlternativeCost2 addEvokeCost(Cost cost) { + AlternativeCost2 evokeCost = new AlternativeCost2Impl<>(EVOKE_KEYWORD, REMINDER_TEXT, cost); evokeCosts.add(evokeCost); return evokeCost; } @@ -102,7 +99,7 @@ public class EvokeAbility extends StaticAbility implements AlternativeSourceCost activateEvoke(evokeCost, game); ability.getManaCostsToPay().clear(); ability.getCosts().clear(); - for (Iterator it = ((Costs) evokeCost).iterator(); it.hasNext();) { + for (Iterator it = ((Costs) evokeCost).iterator(); it.hasNext(); ) { Cost cost = (Cost) it.next(); if (cost instanceof ManaCostsImpl) { ability.getManaCostsToPay().add((ManaCostsImpl) cost.copy());