From fe165f1fd01c6070e64b96a0778597f8d668fa4a Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Thu, 31 Aug 2023 01:15:47 +0200 Subject: [PATCH] Fix Adventures exiling themselves before applying their effects (#10793) * Rework adventures to exiles themself after applying other effects * fix duelist * finalize all adventures * apply review * add card name to error * fix remaining adventures * finalize the last adventures. --- Mage.Sets/src/mage/cards/a/AltarOfBhaal.java | 2 + .../src/mage/cards/a/AmethystDragon.java | 2 + .../src/mage/cards/a/AnimatingFaerie.java | 2 + .../src/mage/cards/a/AquaticAlchemist.java | 2 + .../src/mage/cards/a/ArdenvaleTactician.java | 2 + .../src/mage/cards/b/BeanstalkGiant.java | 2 + Mage.Sets/src/mage/cards/b/BeanstalkWurm.java | 2 + .../src/mage/cards/b/BellowingBruiser.java | 2 + .../src/mage/cards/b/BelunaGrandsquall.java | 2 + .../src/mage/cards/b/BelunasGatekeeper.java | 2 + .../src/mage/cards/b/BesottedKnight.java | 2 + .../src/mage/cards/b/BlessedHippogriff.java | 2 + .../src/mage/cards/b/BonecrusherGiant.java | 2 + .../src/mage/cards/b/BrambleFamiliar.java | 2 + .../src/mage/cards/b/BrazenBorrower.java | 2 + .../src/mage/cards/c/CallousSellSword.java | 2 + .../src/mage/cards/c/CheekyHouseMouse.java | 2 + .../src/mage/cards/c/ColossalBadger.java | 2 + .../src/mage/cards/c/ConceitedWitch.java | 2 + .../src/mage/cards/c/CruelSomnophage.java | 2 + Mage.Sets/src/mage/cards/c/CrystalDragon.java | 2 + Mage.Sets/src/mage/cards/c/CuriousPair.java | 2 + .../src/mage/cards/d/DecadentDragon.java | 2 + .../src/mage/cards/d/DevouringSugarmaw.java | 2 + Mage.Sets/src/mage/cards/d/DreadLinnorm.java | 2 + Mage.Sets/src/mage/cards/e/ElusiveOtter.java | 2 + .../mage/cards/e/EmberethShieldbreaker.java | 2 + Mage.Sets/src/mage/cards/e/EmeraldDragon.java | 2 + Mage.Sets/src/mage/cards/e/Ettercap.java | 2 + Mage.Sets/src/mage/cards/f/FaeOfWishes.java | 3 +- .../src/mage/cards/f/FaerieGuidemother.java | 2 + Mage.Sets/src/mage/cards/f/FangDragon.java | 2 + Mage.Sets/src/mage/cards/f/FellHorseman.java | 1 + .../src/mage/cards/f/FerociousWerefox.java | 2 + .../src/mage/cards/f/FlaxenIntruder.java | 2 + .../src/mage/cards/f/FoulmireKnight.java | 2 + .../src/mage/cards/f/FrolickingFamiliar.java | 2 + Mage.Sets/src/mage/cards/g/GalvanicGiant.java | 13 ++-- .../src/mage/cards/g/GarenbrigCarver.java | 2 + Mage.Sets/src/mage/cards/g/GhostLantern.java | 8 ++- Mage.Sets/src/mage/cards/g/GiantKiller.java | 2 + .../src/mage/cards/g/GingerbreadHunter.java | 2 + Mage.Sets/src/mage/cards/g/GrabbyGiant.java | 2 + Mage.Sets/src/mage/cards/g/GraySlaad.java | 2 + Mage.Sets/src/mage/cards/g/GuardianNaga.java | 2 + .../src/mage/cards/g/GumdropPoisoner.java | 2 + .../src/mage/cards/h/HeartflameDuelist.java | 4 +- .../src/mage/cards/h/HearthElemental.java | 2 + .../src/mage/cards/h/HollowScavenger.java | 2 + .../src/mage/cards/h/HornOfValhalla.java | 8 ++- .../src/mage/cards/h/HornedLochWhale.java | 2 + .../src/mage/cards/h/HypnoticSprite.java | 2 + .../src/mage/cards/i/ImodanesRecruiter.java | 2 + .../mage/cards/i/IntrepidTrufflesnout.java | 4 +- .../src/mage/cards/k/KellanTheFaeBlooded.java | 2 + .../src/mage/cards/l/LonesomeUnicorn.java | 2 + .../src/mage/cards/l/LovestruckBeast.java | 2 + .../src/mage/cards/m/MerchantOfTheVale.java | 2 + .../src/mage/cards/m/MerfolkSecretkeeper.java | 2 + .../src/mage/cards/m/MinecartDaredevil.java | 2 + Mage.Sets/src/mage/cards/m/MonsterManual.java | 2 + Mage.Sets/src/mage/cards/m/MoonshaePixie.java | 2 + .../src/mage/cards/m/MosswoodDreadknight.java | 2 + .../src/mage/cards/m/MurderousRider.java | 5 +- Mage.Sets/src/mage/cards/o/OakhameRanger.java | 2 + .../src/mage/cards/o/ObyrasAttendants.java | 2 + .../src/mage/cards/o/OrderOfMidnight.java | 2 + .../src/mage/cards/p/PegasusGuardian.java | 2 + .../src/mage/cards/p/PicklockPrankster.java | 2 + Mage.Sets/src/mage/cards/p/PicnicRuiner.java | 2 + .../src/mage/cards/p/PollenShieldHare.java | 2 + Mage.Sets/src/mage/cards/q/QueenOfIce.java | 2 + Mage.Sets/src/mage/cards/q/QuestingDruid.java | 2 + .../src/mage/cards/r/RatcatcherTrainee.java | 2 + .../src/mage/cards/r/RealmCloakedGiant.java | 2 + Mage.Sets/src/mage/cards/r/ReaperOfNight.java | 2 + Mage.Sets/src/mage/cards/r/RimrockKnight.java | 2 + .../src/mage/cards/r/RosethornAcolyte.java | 2 + .../src/mage/cards/s/SapphireDragon.java | 2 + Mage.Sets/src/mage/cards/s/ScaldingViper.java | 2 + Mage.Sets/src/mage/cards/s/SeaHag.java | 2 + .../src/mage/cards/s/ShepherdOfTheFlock.java | 2 + .../src/mage/cards/s/ShroudedShepherd.java | 2 + .../src/mage/cards/s/SilverflameSquire.java | 2 + .../src/mage/cards/s/SmittenSwordmaster.java | 2 + .../src/mage/cards/s/SpellscornCoven.java | 2 + .../src/mage/cards/s/StormkeldVanguard.java | 2 + .../src/mage/cards/s/SwordCoastSerpent.java | 2 + Mage.Sets/src/mage/cards/t/TempestHart.java | 2 + .../src/mage/cards/t/ThreadbindClique.java | 2 + Mage.Sets/src/mage/cards/t/TopazDragon.java | 2 + .../src/mage/cards/t/TuinvaleTreefolk.java | 2 + Mage.Sets/src/mage/cards/t/TwiningTwins.java | 2 + Mage.Sets/src/mage/cards/t/TwoHandedAxe.java | 2 + .../src/mage/cards/t/TwoHeadedHunter.java | 2 + .../src/mage/cards/v/VantressTransmuter.java | 2 + .../src/mage/cards/v/VirtueOfCourage.java | 2 + .../src/mage/cards/v/VirtueOfKnowledge.java | 2 + .../src/mage/cards/v/VirtueOfLoyalty.java | 2 + .../src/mage/cards/v/VirtueOfPersistence.java | 2 + .../src/mage/cards/v/VirtueOfStrength.java | 2 + .../src/mage/cards/w/WoodlandAcolyte.java | 2 + .../src/mage/cards/y/YoungBlueDragon.java | 2 + .../src/mage/cards/y/YoungRedDragon.java | 2 + .../single/woe/HeartflameDuelistTest.java | 67 +++++++++++++++++++ .../main/java/mage/cards/AdventureCard.java | 4 ++ .../java/mage/cards/AdventureCardSpell.java | 2 + .../mage/cards/AdventureCardSpellImpl.java | 29 +++++++- 108 files changed, 322 insertions(+), 18 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/single/woe/HeartflameDuelistTest.java diff --git a/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java b/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java index 377da435a53..a2c9fa83abe 100644 --- a/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java +++ b/Mage.Sets/src/mage/cards/a/AltarOfBhaal.java @@ -37,6 +37,8 @@ public final class AltarOfBhaal extends AdventureCard { // Bone Offering // Create a tapped 4/1 black Skeleton creature token with menace. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new SkeletonMenaceToken(), 1, true, false)); + + this.finalizeAdventure(); } private AltarOfBhaal(final AltarOfBhaal card) { diff --git a/Mage.Sets/src/mage/cards/a/AmethystDragon.java b/Mage.Sets/src/mage/cards/a/AmethystDragon.java index b0a66012935..426a3878ac4 100644 --- a/Mage.Sets/src/mage/cards/a/AmethystDragon.java +++ b/Mage.Sets/src/mage/cards/a/AmethystDragon.java @@ -34,6 +34,8 @@ public final class AmethystDragon extends AdventureCard { // Explosive Crystal deals 4 damage divided as you choose among any number of targets. this.getSpellCard().getSpellAbility().addEffect(new DamageMultiEffect(4)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTargetAmount(4)); + + this.finalizeAdventure(); } private AmethystDragon(final AmethystDragon card) { diff --git a/Mage.Sets/src/mage/cards/a/AnimatingFaerie.java b/Mage.Sets/src/mage/cards/a/AnimatingFaerie.java index 26818be72fb..1a50cd38af6 100644 --- a/Mage.Sets/src/mage/cards/a/AnimatingFaerie.java +++ b/Mage.Sets/src/mage/cards/a/AnimatingFaerie.java @@ -52,6 +52,8 @@ public final class AnimatingFaerie extends AdventureCard { CounterType.P1P1.createInstance(4) ).setText(" ")); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private AnimatingFaerie(final AnimatingFaerie card) { diff --git a/Mage.Sets/src/mage/cards/a/AquaticAlchemist.java b/Mage.Sets/src/mage/cards/a/AquaticAlchemist.java index cac0f970e9f..f2287053a34 100644 --- a/Mage.Sets/src/mage/cards/a/AquaticAlchemist.java +++ b/Mage.Sets/src/mage/cards/a/AquaticAlchemist.java @@ -42,6 +42,8 @@ public final class AquaticAlchemist extends AdventureCard { this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard( StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY_FROM_YOUR_GRAVEYARD )); + + this.finalizeAdventure(); } private AquaticAlchemist(final AquaticAlchemist card) { diff --git a/Mage.Sets/src/mage/cards/a/ArdenvaleTactician.java b/Mage.Sets/src/mage/cards/a/ArdenvaleTactician.java index bc14efe0b1a..741b20f3cb3 100644 --- a/Mage.Sets/src/mage/cards/a/ArdenvaleTactician.java +++ b/Mage.Sets/src/mage/cards/a/ArdenvaleTactician.java @@ -31,6 +31,8 @@ public final class ArdenvaleTactician extends AdventureCard { // Tap up to two target creatures. this.getSpellCard().getSpellAbility().addEffect(new TapTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); + + this.finalizeAdventure(); } private ArdenvaleTactician(final ArdenvaleTactician card) { diff --git a/Mage.Sets/src/mage/cards/b/BeanstalkGiant.java b/Mage.Sets/src/mage/cards/b/BeanstalkGiant.java index bc7d80c65c4..9288a9b05ab 100644 --- a/Mage.Sets/src/mage/cards/b/BeanstalkGiant.java +++ b/Mage.Sets/src/mage/cards/b/BeanstalkGiant.java @@ -39,6 +39,8 @@ public final class BeanstalkGiant extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect( new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(StaticFilters.FILTER_CARD_BASIC_LAND)) ); + + this.finalizeAdventure(); } private BeanstalkGiant(final BeanstalkGiant card) { diff --git a/Mage.Sets/src/mage/cards/b/BeanstalkWurm.java b/Mage.Sets/src/mage/cards/b/BeanstalkWurm.java index a923d148c5a..b2d75c0bdee 100644 --- a/Mage.Sets/src/mage/cards/b/BeanstalkWurm.java +++ b/Mage.Sets/src/mage/cards/b/BeanstalkWurm.java @@ -30,6 +30,8 @@ public final class BeanstalkWurm extends AdventureCard { // Plant Beans // You may play an additional land this turn. this.getSpellCard().getSpellAbility().addEffect(new PlayAdditionalLandsControllerEffect(1, Duration.EndOfTurn)); + + this.finalizeAdventure(); } private BeanstalkWurm(final BeanstalkWurm card) { diff --git a/Mage.Sets/src/mage/cards/b/BellowingBruiser.java b/Mage.Sets/src/mage/cards/b/BellowingBruiser.java index 32ea3d751fd..4734e3d0fe4 100644 --- a/Mage.Sets/src/mage/cards/b/BellowingBruiser.java +++ b/Mage.Sets/src/mage/cards/b/BellowingBruiser.java @@ -31,6 +31,8 @@ public final class BellowingBruiser extends AdventureCard { // Up to two target creatures can't block this turn. this.getSpellCard().getSpellAbility().addEffect(new CantBlockTargetEffect(Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); + + this.finalizeAdventure(); } private BellowingBruiser(final BellowingBruiser card) { diff --git a/Mage.Sets/src/mage/cards/b/BelunaGrandsquall.java b/Mage.Sets/src/mage/cards/b/BelunaGrandsquall.java index 2034292c245..e2ffdc20f08 100644 --- a/Mage.Sets/src/mage/cards/b/BelunaGrandsquall.java +++ b/Mage.Sets/src/mage/cards/b/BelunaGrandsquall.java @@ -49,6 +49,8 @@ public final class BelunaGrandsquall extends AdventureCard { // Seek Thrills // Mill seven cards. Then put all cards that have an Adventure from among the milled cards into your hand. this.getSpellCard().getSpellAbility().addEffect(new SeekThrillsEffect()); + + this.finalizeAdventure(); } private BelunaGrandsquall(final BelunaGrandsquall card) { diff --git a/Mage.Sets/src/mage/cards/b/BelunasGatekeeper.java b/Mage.Sets/src/mage/cards/b/BelunasGatekeeper.java index 11d309f2c8f..fd50aad393d 100644 --- a/Mage.Sets/src/mage/cards/b/BelunasGatekeeper.java +++ b/Mage.Sets/src/mage/cards/b/BelunasGatekeeper.java @@ -40,6 +40,8 @@ public final class BelunasGatekeeper extends AdventureCard { // Return target creature you don't control with mana value 3 or less to its owner's hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private BelunasGatekeeper(final BelunasGatekeeper card) { diff --git a/Mage.Sets/src/mage/cards/b/BesottedKnight.java b/Mage.Sets/src/mage/cards/b/BesottedKnight.java index 094d8f5cfe6..52d6c621ff0 100644 --- a/Mage.Sets/src/mage/cards/b/BesottedKnight.java +++ b/Mage.Sets/src/mage/cards/b/BesottedKnight.java @@ -28,6 +28,8 @@ public final class BesottedKnight extends AdventureCard { // Create a Royal Role token attached to target creature you control. this.getSpellCard().getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.ROYAL)); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private BesottedKnight(final BesottedKnight card) { diff --git a/Mage.Sets/src/mage/cards/b/BlessedHippogriff.java b/Mage.Sets/src/mage/cards/b/BlessedHippogriff.java index 1d480e78679..43e60595004 100644 --- a/Mage.Sets/src/mage/cards/b/BlessedHippogriff.java +++ b/Mage.Sets/src/mage/cards/b/BlessedHippogriff.java @@ -49,6 +49,8 @@ public final class BlessedHippogriff extends AdventureCard { // Target creature gains indestructible until end of turn. this.getSpellCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(IndestructibleAbility.getInstance())); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private BlessedHippogriff(final BlessedHippogriff card) { diff --git a/Mage.Sets/src/mage/cards/b/BonecrusherGiant.java b/Mage.Sets/src/mage/cards/b/BonecrusherGiant.java index bd673354f7b..33c743ba440 100644 --- a/Mage.Sets/src/mage/cards/b/BonecrusherGiant.java +++ b/Mage.Sets/src/mage/cards/b/BonecrusherGiant.java @@ -39,6 +39,8 @@ public final class BonecrusherGiant extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DamageCantBePreventedEffect(Duration.EndOfTurn, "Damage can't be prevented this turn")); this.getSpellCard().getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget()); + + this.finalizeAdventure(); } private BonecrusherGiant(final BonecrusherGiant card) { diff --git a/Mage.Sets/src/mage/cards/b/BrambleFamiliar.java b/Mage.Sets/src/mage/cards/b/BrambleFamiliar.java index cd4350ba815..7188cdab4ea 100644 --- a/Mage.Sets/src/mage/cards/b/BrambleFamiliar.java +++ b/Mage.Sets/src/mage/cards/b/BrambleFamiliar.java @@ -56,6 +56,8 @@ public final class BrambleFamiliar extends AdventureCard { // Fetch Quest // Mill seven cards, then put a creature, enchantment, or land card from among cards milled this way onto the battlefield. this.getSpellCard().getSpellAbility().addEffect(new FetchQuestEffect()); + + this.finalizeAdventure(); } private BrambleFamiliar(final BrambleFamiliar card) { diff --git a/Mage.Sets/src/mage/cards/b/BrazenBorrower.java b/Mage.Sets/src/mage/cards/b/BrazenBorrower.java index 97fedec7d90..dc7931f2bdc 100644 --- a/Mage.Sets/src/mage/cards/b/BrazenBorrower.java +++ b/Mage.Sets/src/mage/cards/b/BrazenBorrower.java @@ -49,6 +49,8 @@ public final class BrazenBorrower extends AdventureCard { // Return target nonland permanent an opponent controls to its owner's hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private BrazenBorrower(final BrazenBorrower card) { diff --git a/Mage.Sets/src/mage/cards/c/CallousSellSword.java b/Mage.Sets/src/mage/cards/c/CallousSellSword.java index 2a6da8ea1a8..ced7dc1aa8e 100644 --- a/Mage.Sets/src/mage/cards/c/CallousSellSword.java +++ b/Mage.Sets/src/mage/cards/c/CallousSellSword.java @@ -58,6 +58,8 @@ public final class CallousSellSword extends AdventureCard { this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent().setTargetTag(1)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget(1, 1, filterSecondTarget).setTargetTag(2)); this.getSpellCard().getSpellAbility().addEffect(new CallousSellSwordSacrificeFirstTargetEffect().concatBy("Then")); + + this.finalizeAdventure(); } private CallousSellSword(final CallousSellSword card) { diff --git a/Mage.Sets/src/mage/cards/c/CheekyHouseMouse.java b/Mage.Sets/src/mage/cards/c/CheekyHouseMouse.java index 3e01da005b8..2f01552d890 100644 --- a/Mage.Sets/src/mage/cards/c/CheekyHouseMouse.java +++ b/Mage.Sets/src/mage/cards/c/CheekyHouseMouse.java @@ -40,6 +40,8 @@ public final class CheekyHouseMouse extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new CantBeBlockedTargetEffect(filter, Duration.EndOfTurn) .setText("it can't be blocked by creatures with power 3 or greater this turn")); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private CheekyHouseMouse(final CheekyHouseMouse card) { diff --git a/Mage.Sets/src/mage/cards/c/ColossalBadger.java b/Mage.Sets/src/mage/cards/c/ColossalBadger.java index 21226fe126d..4f6345926ce 100644 --- a/Mage.Sets/src/mage/cards/c/ColossalBadger.java +++ b/Mage.Sets/src/mage/cards/c/ColossalBadger.java @@ -38,6 +38,8 @@ public final class ColossalBadger extends AdventureCard { // Choose target creature. Mill four cards, then put a +1/+1 counter on that creature for each creature card milled this way. this.getSpellCard().getSpellAbility().addEffect(new ColossalBadgerEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private ColossalBadger(final ColossalBadger card) { diff --git a/Mage.Sets/src/mage/cards/c/ConceitedWitch.java b/Mage.Sets/src/mage/cards/c/ConceitedWitch.java index 2dcd4062ccb..ad3d4681af5 100644 --- a/Mage.Sets/src/mage/cards/c/ConceitedWitch.java +++ b/Mage.Sets/src/mage/cards/c/ConceitedWitch.java @@ -32,6 +32,8 @@ public final class ConceitedWitch extends AdventureCard { // Create a Wicked Role token attached to target creature you control. this.getSpellCard().getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.WICKED)); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private ConceitedWitch(final ConceitedWitch card) { diff --git a/Mage.Sets/src/mage/cards/c/CruelSomnophage.java b/Mage.Sets/src/mage/cards/c/CruelSomnophage.java index 3c72746ee0f..271b64dd184 100644 --- a/Mage.Sets/src/mage/cards/c/CruelSomnophage.java +++ b/Mage.Sets/src/mage/cards/c/CruelSomnophage.java @@ -37,6 +37,8 @@ public final class CruelSomnophage extends AdventureCard { // Target player mills four cards. this.getSpellCard().getSpellAbility().addEffect(new MillCardsTargetEffect(4)); this.getSpellCard().getSpellAbility().addTarget(new TargetPlayer()); + + this.finalizeAdventure(); } private CruelSomnophage(final CruelSomnophage card) { diff --git a/Mage.Sets/src/mage/cards/c/CrystalDragon.java b/Mage.Sets/src/mage/cards/c/CrystalDragon.java index 3afe611e52f..f288cf2b4e6 100644 --- a/Mage.Sets/src/mage/cards/c/CrystalDragon.java +++ b/Mage.Sets/src/mage/cards/c/CrystalDragon.java @@ -48,6 +48,8 @@ public final class CrystalDragon extends AdventureCard { // Return target artifact, enchantment, or legendary card from your graveyard to your hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); + + this.finalizeAdventure(); } private CrystalDragon(final CrystalDragon card) { diff --git a/Mage.Sets/src/mage/cards/c/CuriousPair.java b/Mage.Sets/src/mage/cards/c/CuriousPair.java index febc9db70ed..23e1b2105cf 100644 --- a/Mage.Sets/src/mage/cards/c/CuriousPair.java +++ b/Mage.Sets/src/mage/cards/c/CuriousPair.java @@ -26,6 +26,8 @@ public final class CuriousPair extends AdventureCard { // Treats to Share // Create a Food token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken())); + + this.finalizeAdventure(); } private CuriousPair(final CuriousPair card) { diff --git a/Mage.Sets/src/mage/cards/d/DecadentDragon.java b/Mage.Sets/src/mage/cards/d/DecadentDragon.java index 8b299a57983..d152fdbaf41 100644 --- a/Mage.Sets/src/mage/cards/d/DecadentDragon.java +++ b/Mage.Sets/src/mage/cards/d/DecadentDragon.java @@ -51,6 +51,8 @@ public final class DecadentDragon extends AdventureCard { // Exile the top two cards of target opponent's library face down. You may look at and play those cards for as long as they remain exiled. this.getSpellCard().getSpellAbility().addEffect(new ExpensiveTasteEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetOpponent()); + + this.finalizeAdventure(); } private DecadentDragon(final DecadentDragon card) { diff --git a/Mage.Sets/src/mage/cards/d/DevouringSugarmaw.java b/Mage.Sets/src/mage/cards/d/DevouringSugarmaw.java index 4e6bb012ad4..85d472f4152 100644 --- a/Mage.Sets/src/mage/cards/d/DevouringSugarmaw.java +++ b/Mage.Sets/src/mage/cards/d/DevouringSugarmaw.java @@ -67,6 +67,8 @@ public final class DevouringSugarmaw extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new HumanToken())); this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken()) .setText("and a Food token")); + + this.finalizeAdventure(); } private DevouringSugarmaw(final DevouringSugarmaw card) { diff --git a/Mage.Sets/src/mage/cards/d/DreadLinnorm.java b/Mage.Sets/src/mage/cards/d/DreadLinnorm.java index 3d5e287efbe..45ccfbb1b4a 100644 --- a/Mage.Sets/src/mage/cards/d/DreadLinnorm.java +++ b/Mage.Sets/src/mage/cards/d/DreadLinnorm.java @@ -48,6 +48,8 @@ public final class DreadLinnorm extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new UntapTargetEffect().setText("and untap it")); this.getSpellCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(HexproofAbility.getInstance()).setText("It gains hexproof until end of turn")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private DreadLinnorm(final DreadLinnorm card) { diff --git a/Mage.Sets/src/mage/cards/e/ElusiveOtter.java b/Mage.Sets/src/mage/cards/e/ElusiveOtter.java index 0449e668a37..64d7fb88435 100644 --- a/Mage.Sets/src/mage/cards/e/ElusiveOtter.java +++ b/Mage.Sets/src/mage/cards/e/ElusiveOtter.java @@ -45,6 +45,8 @@ public final class ElusiveOtter extends AdventureCard { target.setMinNumberOfTargets(0); target.setMaxNumberOfTargets(Integer.MAX_VALUE); this.getSpellCard().getSpellAbility().addTarget(target); + + this.finalizeAdventure(); } private ElusiveOtter(final ElusiveOtter card) { diff --git a/Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java b/Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java index fe781fc842c..606d5bf7980 100644 --- a/Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java +++ b/Mage.Sets/src/mage/cards/e/EmberethShieldbreaker.java @@ -27,6 +27,8 @@ public final class EmberethShieldbreaker extends AdventureCard { // Destroy target artifact. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetArtifactPermanent()); + + this.finalizeAdventure(); } private EmberethShieldbreaker(final EmberethShieldbreaker card) { diff --git a/Mage.Sets/src/mage/cards/e/EmeraldDragon.java b/Mage.Sets/src/mage/cards/e/EmeraldDragon.java index 0bdb352c23d..70df8e3a339 100644 --- a/Mage.Sets/src/mage/cards/e/EmeraldDragon.java +++ b/Mage.Sets/src/mage/cards/e/EmeraldDragon.java @@ -46,6 +46,8 @@ public final class EmeraldDragon extends AdventureCard { // Counter target activated or triggered ability from a noncreature source. this.getSpellCard().getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetActivatedOrTriggeredAbility(filter)); + + this.finalizeAdventure(); } private EmeraldDragon(final EmeraldDragon card) { diff --git a/Mage.Sets/src/mage/cards/e/Ettercap.java b/Mage.Sets/src/mage/cards/e/Ettercap.java index c3ca78b99d5..dfc21a00fdd 100644 --- a/Mage.Sets/src/mage/cards/e/Ettercap.java +++ b/Mage.Sets/src/mage/cards/e/Ettercap.java @@ -41,6 +41,8 @@ public final class Ettercap extends AdventureCard { // Destroy target creature with flying. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private Ettercap(final Ettercap card) { diff --git a/Mage.Sets/src/mage/cards/f/FaeOfWishes.java b/Mage.Sets/src/mage/cards/f/FaeOfWishes.java index aedcc214f64..a2961205b9d 100644 --- a/Mage.Sets/src/mage/cards/f/FaeOfWishes.java +++ b/Mage.Sets/src/mage/cards/f/FaeOfWishes.java @@ -13,7 +13,6 @@ import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; -import mage.filter.FilterCard; import mage.filter.StaticFilters; import mage.target.common.TargetCardInHand; @@ -46,6 +45,8 @@ public final class FaeOfWishes extends AdventureCard { // You may reveal a noncreature card you own from outside the game and put it into your hand. this.getSpellCard().getSpellAbility().addEffect(new WishEffect(StaticFilters.FILTER_CARD_A_NON_CREATURE)); this.getSpellCard().getSpellAbility().addHint(OpenSideboardHint.instance); + + this.finalizeAdventure(); } private FaeOfWishes(final FaeOfWishes card) { diff --git a/Mage.Sets/src/mage/cards/f/FaerieGuidemother.java b/Mage.Sets/src/mage/cards/f/FaerieGuidemother.java index 24425fc8f13..77a6f7a01d9 100644 --- a/Mage.Sets/src/mage/cards/f/FaerieGuidemother.java +++ b/Mage.Sets/src/mage/cards/f/FaerieGuidemother.java @@ -37,6 +37,8 @@ public final class FaerieGuidemother extends AdventureCard { FlyingAbility.getInstance(), Duration.EndOfTurn ).setText("and gains flying until end of turn")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private FaerieGuidemother(final FaerieGuidemother card) { diff --git a/Mage.Sets/src/mage/cards/f/FangDragon.java b/Mage.Sets/src/mage/cards/f/FangDragon.java index 16db6e29b2d..ba21bbd892b 100644 --- a/Mage.Sets/src/mage/cards/f/FangDragon.java +++ b/Mage.Sets/src/mage/cards/f/FangDragon.java @@ -30,6 +30,8 @@ public final class FangDragon extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DamageAllEffect( 1, StaticFilters.FILTER_CREATURE_YOU_DONT_CONTROL )); + + this.finalizeAdventure(); } private FangDragon(final FangDragon card) { diff --git a/Mage.Sets/src/mage/cards/f/FellHorseman.java b/Mage.Sets/src/mage/cards/f/FellHorseman.java index 749a1dc7a41..fd0eb3f327a 100644 --- a/Mage.Sets/src/mage/cards/f/FellHorseman.java +++ b/Mage.Sets/src/mage/cards/f/FellHorseman.java @@ -36,6 +36,7 @@ public final class FellHorseman extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + this.finalizeAdventure(); } private FellHorseman(final FellHorseman card) { diff --git a/Mage.Sets/src/mage/cards/f/FerociousWerefox.java b/Mage.Sets/src/mage/cards/f/FerociousWerefox.java index 447944da929..2a8282771ec 100644 --- a/Mage.Sets/src/mage/cards/f/FerociousWerefox.java +++ b/Mage.Sets/src/mage/cards/f/FerociousWerefox.java @@ -33,6 +33,8 @@ public final class FerociousWerefox extends AdventureCard { // Create a Monster Role token attached to target creature you control. this.getSpellCard().getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.MONSTER)); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private FerociousWerefox(final FerociousWerefox card) { diff --git a/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java b/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java index 549e8853edf..67f2af3cf32 100644 --- a/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java +++ b/Mage.Sets/src/mage/cards/f/FlaxenIntruder.java @@ -45,6 +45,8 @@ public final class FlaxenIntruder extends AdventureCard { // Welcome Home // Create three 2/2 green Bear creature tokens. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new BearToken(), 3)); + + this.finalizeAdventure(); } private FlaxenIntruder(final FlaxenIntruder card) { diff --git a/Mage.Sets/src/mage/cards/f/FoulmireKnight.java b/Mage.Sets/src/mage/cards/f/FoulmireKnight.java index ed1879a13c0..11df26d2c4f 100644 --- a/Mage.Sets/src/mage/cards/f/FoulmireKnight.java +++ b/Mage.Sets/src/mage/cards/f/FoulmireKnight.java @@ -31,6 +31,8 @@ public final class FoulmireKnight extends AdventureCard { // You draw a card and you lose 1 life. this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).setText("You draw a card")); this.getSpellCard().getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); + + this.finalizeAdventure(); } private FoulmireKnight(final FoulmireKnight card) { diff --git a/Mage.Sets/src/mage/cards/f/FrolickingFamiliar.java b/Mage.Sets/src/mage/cards/f/FrolickingFamiliar.java index fa8a596e236..ed5daa98502 100644 --- a/Mage.Sets/src/mage/cards/f/FrolickingFamiliar.java +++ b/Mage.Sets/src/mage/cards/f/FrolickingFamiliar.java @@ -41,6 +41,8 @@ public final class FrolickingFamiliar extends AdventureCard { // Blow Off Steam deals 1 damage to any target. this.getSpellCard().getSpellAbility().addEffect(new DamageTargetEffect(1)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget()); + + this.finalizeAdventure(); } private FrolickingFamiliar(final FrolickingFamiliar card) { diff --git a/Mage.Sets/src/mage/cards/g/GalvanicGiant.java b/Mage.Sets/src/mage/cards/g/GalvanicGiant.java index f647ab51b2e..67c56fe64b1 100644 --- a/Mage.Sets/src/mage/cards/g/GalvanicGiant.java +++ b/Mage.Sets/src/mage/cards/g/GalvanicGiant.java @@ -1,21 +1,22 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SpellCastControllerTriggeredAbility; import mage.abilities.effects.common.DrawDiscardControllerEffect; import mage.abilities.effects.common.TapTargetEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; +import mage.cards.AdventureCard; +import mage.cards.CardSetInfo; +import mage.constants.CardType; +import mage.constants.ComparisonType; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.FilterSpell; import mage.filter.predicate.mageobject.ManaValuePredicate; import mage.target.common.TargetOpponentsCreaturePermanent; -import mage.cards.AdventureCard; -import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.ComparisonType; + +import java.util.UUID; /** * @@ -46,6 +47,8 @@ public final class GalvanicGiant extends AdventureCard { // Storm Reading // Draw four cards, then discard two cards. this.getSpellCard().getSpellAbility().addEffect(new DrawDiscardControllerEffect(4, 2)); + + this.finalizeAdventure(); } private GalvanicGiant(final GalvanicGiant card) { diff --git a/Mage.Sets/src/mage/cards/g/GarenbrigCarver.java b/Mage.Sets/src/mage/cards/g/GarenbrigCarver.java index 403e453f53e..e3c5190e19a 100644 --- a/Mage.Sets/src/mage/cards/g/GarenbrigCarver.java +++ b/Mage.Sets/src/mage/cards/g/GarenbrigCarver.java @@ -28,6 +28,8 @@ public final class GarenbrigCarver extends AdventureCard { // Target creature gets +2/+2 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private GarenbrigCarver(final GarenbrigCarver card) { diff --git a/Mage.Sets/src/mage/cards/g/GhostLantern.java b/Mage.Sets/src/mage/cards/g/GhostLantern.java index a1172922d36..f5b6e142f4e 100644 --- a/Mage.Sets/src/mage/cards/g/GhostLantern.java +++ b/Mage.Sets/src/mage/cards/g/GhostLantern.java @@ -1,21 +1,21 @@ package mage.cards.g; import mage.abilities.common.DiesCreatureTriggeredAbility; +import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.counter.AddCountersAttachedEffect; import mage.abilities.keyword.EquipAbility; import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Outcome; import mage.constants.SubType; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.target.common.TargetCardInYourGraveyard; +import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; -import mage.abilities.costs.mana.GenericManaCost; -import mage.constants.Outcome; -import mage.target.common.TargetControlledCreaturePermanent; /** * @author TheElk801 @@ -39,6 +39,8 @@ public final class GhostLantern extends AdventureCard { // Return target creature card from your graveyard to your hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + + this.finalizeAdventure(); } private GhostLantern(final GhostLantern card) { diff --git a/Mage.Sets/src/mage/cards/g/GiantKiller.java b/Mage.Sets/src/mage/cards/g/GiantKiller.java index f0d9b71c74b..366388556b1 100644 --- a/Mage.Sets/src/mage/cards/g/GiantKiller.java +++ b/Mage.Sets/src/mage/cards/g/GiantKiller.java @@ -49,6 +49,8 @@ public final class GiantKiller extends AdventureCard { // Destroy target creature with power 4 or greater. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private GiantKiller(final GiantKiller card) { diff --git a/Mage.Sets/src/mage/cards/g/GingerbreadHunter.java b/Mage.Sets/src/mage/cards/g/GingerbreadHunter.java index b4e4099310a..361d500303a 100644 --- a/Mage.Sets/src/mage/cards/g/GingerbreadHunter.java +++ b/Mage.Sets/src/mage/cards/g/GingerbreadHunter.java @@ -32,6 +32,8 @@ public final class GingerbreadHunter extends AdventureCard { // Target creature gets -2/-2 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(-2, -2)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private GingerbreadHunter(final GingerbreadHunter card) { diff --git a/Mage.Sets/src/mage/cards/g/GrabbyGiant.java b/Mage.Sets/src/mage/cards/g/GrabbyGiant.java index 18e2ed327e6..4b17d9d5501 100644 --- a/Mage.Sets/src/mage/cards/g/GrabbyGiant.java +++ b/Mage.Sets/src/mage/cards/g/GrabbyGiant.java @@ -52,6 +52,8 @@ public final class GrabbyGiant extends AdventureCard { // That's Mine // Create a Treasure token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new TreasureToken())); + + this.finalizeAdventure(); } private GrabbyGiant(final GrabbyGiant card) { diff --git a/Mage.Sets/src/mage/cards/g/GraySlaad.java b/Mage.Sets/src/mage/cards/g/GraySlaad.java index beb85c625c2..65142df611b 100644 --- a/Mage.Sets/src/mage/cards/g/GraySlaad.java +++ b/Mage.Sets/src/mage/cards/g/GraySlaad.java @@ -48,6 +48,8 @@ public final class GraySlaad extends AdventureCard { // Entropic Decay // Mill four cards. this.getSpellCard().getSpellAbility().addEffect(new MillCardsControllerEffect(4)); + + this.finalizeAdventure(); } private GraySlaad(final GraySlaad card) { diff --git a/Mage.Sets/src/mage/cards/g/GuardianNaga.java b/Mage.Sets/src/mage/cards/g/GuardianNaga.java index 5e90709c6fd..45b4996c22b 100644 --- a/Mage.Sets/src/mage/cards/g/GuardianNaga.java +++ b/Mage.Sets/src/mage/cards/g/GuardianNaga.java @@ -42,6 +42,8 @@ public final class GuardianNaga extends AdventureCard { // Exile target artifact or enchantment. this.getSpellCard().getSpellAbility().addEffect(new ExileTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); + + this.finalizeAdventure(); } private GuardianNaga(final GuardianNaga card) { diff --git a/Mage.Sets/src/mage/cards/g/GumdropPoisoner.java b/Mage.Sets/src/mage/cards/g/GumdropPoisoner.java index e12310909b6..8fb5f9e9e32 100644 --- a/Mage.Sets/src/mage/cards/g/GumdropPoisoner.java +++ b/Mage.Sets/src/mage/cards/g/GumdropPoisoner.java @@ -46,6 +46,8 @@ public final class GumdropPoisoner extends AdventureCard { // Tempt with Treats // Create a Food token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken())); + + this.finalizeAdventure(); } private GumdropPoisoner(final GumdropPoisoner card) { diff --git a/Mage.Sets/src/mage/cards/h/HeartflameDuelist.java b/Mage.Sets/src/mage/cards/h/HeartflameDuelist.java index 40705d60d53..0569158ee33 100644 --- a/Mage.Sets/src/mage/cards/h/HeartflameDuelist.java +++ b/Mage.Sets/src/mage/cards/h/HeartflameDuelist.java @@ -44,6 +44,8 @@ public final class HeartflameDuelist extends AdventureCard { // Heartflame Slash deals 3 damage to any target. this.getSpellCard().getSpellAbility().addEffect(new DamageTargetEffect(3)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget()); + + this.finalizeAdventure(); } private HeartflameDuelist(final HeartflameDuelist card) { @@ -54,4 +56,4 @@ public final class HeartflameDuelist extends AdventureCard { public HeartflameDuelist copy() { return new HeartflameDuelist(this); } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/h/HearthElemental.java b/Mage.Sets/src/mage/cards/h/HearthElemental.java index b9ef6557b25..8852c97cec2 100644 --- a/Mage.Sets/src/mage/cards/h/HearthElemental.java +++ b/Mage.Sets/src/mage/cards/h/HearthElemental.java @@ -59,6 +59,8 @@ public final class HearthElemental extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DiscardHandControllerEffect()); this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(2) .concatBy(", then")); + + this.finalizeAdventure(); } private HearthElemental(final HearthElemental card) { diff --git a/Mage.Sets/src/mage/cards/h/HollowScavenger.java b/Mage.Sets/src/mage/cards/h/HollowScavenger.java index cdb8e161875..7b2df808ad8 100644 --- a/Mage.Sets/src/mage/cards/h/HollowScavenger.java +++ b/Mage.Sets/src/mage/cards/h/HollowScavenger.java @@ -39,6 +39,8 @@ public final class HollowScavenger extends AdventureCard { // Bakery Raid // Create a Food token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new FoodToken())); + + this.finalizeAdventure(); } private HollowScavenger(final HollowScavenger card) { diff --git a/Mage.Sets/src/mage/cards/h/HornOfValhalla.java b/Mage.Sets/src/mage/cards/h/HornOfValhalla.java index 52573c3bd1e..ff6a69d2d16 100644 --- a/Mage.Sets/src/mage/cards/h/HornOfValhalla.java +++ b/Mage.Sets/src/mage/cards/h/HornOfValhalla.java @@ -1,6 +1,7 @@ package mage.cards.h; import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.dynamicvalue.common.CreaturesYouControlCount; import mage.abilities.dynamicvalue.common.ManacostVariableValue; import mage.abilities.effects.common.CreateTokenEffect; @@ -10,13 +11,12 @@ import mage.abilities.keyword.EquipAbility; import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; +import mage.constants.Outcome; import mage.constants.SubType; import mage.game.permanent.token.SoldierToken; +import mage.target.common.TargetControlledCreaturePermanent; import java.util.UUID; -import mage.abilities.costs.mana.GenericManaCost; -import mage.constants.Outcome; -import mage.target.common.TargetControlledCreaturePermanent; /** * @author TheElk801 @@ -41,6 +41,8 @@ public final class HornOfValhalla extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect( new SoldierToken(), ManacostVariableValue.REGULAR )); + + this.finalizeAdventure(); } private HornOfValhalla(final HornOfValhalla card) { diff --git a/Mage.Sets/src/mage/cards/h/HornedLochWhale.java b/Mage.Sets/src/mage/cards/h/HornedLochWhale.java index 5faba9c245c..b8557446860 100644 --- a/Mage.Sets/src/mage/cards/h/HornedLochWhale.java +++ b/Mage.Sets/src/mage/cards/h/HornedLochWhale.java @@ -54,6 +54,8 @@ public final class HornedLochWhale extends AdventureCard { // The owner of target attacking creature you don't control puts it on the top or bottom of their library. this.getSpellCard().getSpellAbility().addEffect(new PutOnTopOrBottomLibraryTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private HornedLochWhale(final HornedLochWhale card) { diff --git a/Mage.Sets/src/mage/cards/h/HypnoticSprite.java b/Mage.Sets/src/mage/cards/h/HypnoticSprite.java index 205199389c8..517d949625b 100644 --- a/Mage.Sets/src/mage/cards/h/HypnoticSprite.java +++ b/Mage.Sets/src/mage/cards/h/HypnoticSprite.java @@ -39,6 +39,8 @@ public final class HypnoticSprite extends AdventureCard { // Counter target spell with converted mana cost 3 or less. this.getSpellCard().getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetSpell(filter)); + + this.finalizeAdventure(); } private HypnoticSprite(final HypnoticSprite card) { diff --git a/Mage.Sets/src/mage/cards/i/ImodanesRecruiter.java b/Mage.Sets/src/mage/cards/i/ImodanesRecruiter.java index cbc8aae072b..e6cb4070ffa 100644 --- a/Mage.Sets/src/mage/cards/i/ImodanesRecruiter.java +++ b/Mage.Sets/src/mage/cards/i/ImodanesRecruiter.java @@ -44,6 +44,8 @@ public final class ImodanesRecruiter extends AdventureCard { // Train Troops // Create two 2/2 white Knight creature tokens with vigilance. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new KnightToken(), 2)); + + this.finalizeAdventure(); } private ImodanesRecruiter(final ImodanesRecruiter card) { diff --git a/Mage.Sets/src/mage/cards/i/IntrepidTrufflesnout.java b/Mage.Sets/src/mage/cards/i/IntrepidTrufflesnout.java index 2e9acbba457..397eb1f3b63 100644 --- a/Mage.Sets/src/mage/cards/i/IntrepidTrufflesnout.java +++ b/Mage.Sets/src/mage/cards/i/IntrepidTrufflesnout.java @@ -21,7 +21,7 @@ public final class IntrepidTrufflesnout extends AdventureCard { public IntrepidTrufflesnout(UUID ownerId, CardSetInfo setInfo) { super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, new CardType[]{CardType.INSTANT}, "{1}{G}", "Go Hog Wild", "{1}{G}"); - + this.subtype.add(SubType.BOAR); this.power = new MageInt(3); this.toughness = new MageInt(1); @@ -32,6 +32,8 @@ public final class IntrepidTrufflesnout extends AdventureCard { // Target creature gets +2/+2 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private IntrepidTrufflesnout(final IntrepidTrufflesnout card) { diff --git a/Mage.Sets/src/mage/cards/k/KellanTheFaeBlooded.java b/Mage.Sets/src/mage/cards/k/KellanTheFaeBlooded.java index 3879f9458d0..02b416e69e9 100644 --- a/Mage.Sets/src/mage/cards/k/KellanTheFaeBlooded.java +++ b/Mage.Sets/src/mage/cards/k/KellanTheFaeBlooded.java @@ -58,6 +58,8 @@ public final class KellanTheFaeBlooded extends AdventureCard { // Birthright Boon // Search your library for an Aura or Equipment card, reveal it, put it into your hand, then shuffle. this.getSpellCard().getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(auraOrEquipmentCard), true)); + + this.finalizeAdventure(); } private KellanTheFaeBlooded(final KellanTheFaeBlooded card) { diff --git a/Mage.Sets/src/mage/cards/l/LonesomeUnicorn.java b/Mage.Sets/src/mage/cards/l/LonesomeUnicorn.java index fefbe07474b..06839e8b9d8 100644 --- a/Mage.Sets/src/mage/cards/l/LonesomeUnicorn.java +++ b/Mage.Sets/src/mage/cards/l/LonesomeUnicorn.java @@ -29,6 +29,8 @@ public final class LonesomeUnicorn extends AdventureCard { // Rider in Need // Create a 2/2 white Knight creature token with vigilance. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new KnightToken())); + + this.finalizeAdventure(); } private LonesomeUnicorn(final LonesomeUnicorn card) { diff --git a/Mage.Sets/src/mage/cards/l/LovestruckBeast.java b/Mage.Sets/src/mage/cards/l/LovestruckBeast.java index 8c4904ccfb0..753286c5573 100644 --- a/Mage.Sets/src/mage/cards/l/LovestruckBeast.java +++ b/Mage.Sets/src/mage/cards/l/LovestruckBeast.java @@ -40,6 +40,8 @@ public final class LovestruckBeast extends AdventureCard { // Heart's Desire // Create a 1/1 white Human creature token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new HumanToken())); + + this.finalizeAdventure(); } private LovestruckBeast(final LovestruckBeast card) { diff --git a/Mage.Sets/src/mage/cards/m/MerchantOfTheVale.java b/Mage.Sets/src/mage/cards/m/MerchantOfTheVale.java index 0a82b50f9ca..3081351d15d 100644 --- a/Mage.Sets/src/mage/cards/m/MerchantOfTheVale.java +++ b/Mage.Sets/src/mage/cards/m/MerchantOfTheVale.java @@ -39,6 +39,8 @@ public final class MerchantOfTheVale extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DoIfCostPaid( new DrawCardSourceControllerEffect(1), new DiscardCardCost() )); + + this.finalizeAdventure(); } private MerchantOfTheVale(final MerchantOfTheVale card) { diff --git a/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java b/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java index c767db74dcd..2bc600035ad 100644 --- a/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java +++ b/Mage.Sets/src/mage/cards/m/MerfolkSecretkeeper.java @@ -27,6 +27,8 @@ public final class MerfolkSecretkeeper extends AdventureCard { // Target player puts the top four cards of their library into their graveyard. this.getSpellCard().getSpellAbility().addEffect(new MillCardsTargetEffect(4)); this.getSpellCard().getSpellAbility().addTarget(new TargetPlayer()); + + this.finalizeAdventure(); } private MerfolkSecretkeeper(final MerfolkSecretkeeper card) { diff --git a/Mage.Sets/src/mage/cards/m/MinecartDaredevil.java b/Mage.Sets/src/mage/cards/m/MinecartDaredevil.java index 14a36924c26..8c3c00e3e84 100644 --- a/Mage.Sets/src/mage/cards/m/MinecartDaredevil.java +++ b/Mage.Sets/src/mage/cards/m/MinecartDaredevil.java @@ -27,6 +27,8 @@ public final class MinecartDaredevil extends AdventureCard { // Target creature gets +2/+1 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 1)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private MinecartDaredevil(final MinecartDaredevil card) { diff --git a/Mage.Sets/src/mage/cards/m/MonsterManual.java b/Mage.Sets/src/mage/cards/m/MonsterManual.java index be2cb0c7c4a..a1a17bff4b1 100644 --- a/Mage.Sets/src/mage/cards/m/MonsterManual.java +++ b/Mage.Sets/src/mage/cards/m/MonsterManual.java @@ -36,6 +36,8 @@ public final class MonsterManual extends AdventureCard { // Zoological Study // Mill five cards, then return a creature card milled this way to your hand. this.getSpellCard().getSpellAbility().addEffect(new ZoologicalStudyEffect()); + + this.finalizeAdventure(); } private MonsterManual(final MonsterManual card) { diff --git a/Mage.Sets/src/mage/cards/m/MoonshaePixie.java b/Mage.Sets/src/mage/cards/m/MoonshaePixie.java index 77f02135983..c89492d6430 100644 --- a/Mage.Sets/src/mage/cards/m/MoonshaePixie.java +++ b/Mage.Sets/src/mage/cards/m/MoonshaePixie.java @@ -55,6 +55,8 @@ public final class MoonshaePixie extends AdventureCard { this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent( 0, 3, StaticFilters.FILTER_PERMANENT_CREATURES )); + + this.finalizeAdventure(); } private MoonshaePixie(final MoonshaePixie card) { diff --git a/Mage.Sets/src/mage/cards/m/MosswoodDreadknight.java b/Mage.Sets/src/mage/cards/m/MosswoodDreadknight.java index 597c16d2bce..af7a162b883 100644 --- a/Mage.Sets/src/mage/cards/m/MosswoodDreadknight.java +++ b/Mage.Sets/src/mage/cards/m/MosswoodDreadknight.java @@ -39,6 +39,8 @@ public final class MosswoodDreadknight extends AdventureCard { // You draw a card and you lose 1 life. this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); this.getSpellCard().getSpellAbility().addEffect(new LoseLifeSourceControllerEffect(1).concatBy("and")); + + this.finalizeAdventure(); } private MosswoodDreadknight(final MosswoodDreadknight card) { diff --git a/Mage.Sets/src/mage/cards/m/MurderousRider.java b/Mage.Sets/src/mage/cards/m/MurderousRider.java index cc42e69eaa1..845ac4904e4 100644 --- a/Mage.Sets/src/mage/cards/m/MurderousRider.java +++ b/Mage.Sets/src/mage/cards/m/MurderousRider.java @@ -4,14 +4,15 @@ import mage.MageInt; import mage.abilities.common.DiesSourceTriggeredAbility; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.LoseLifeSourceControllerEffect; +import mage.abilities.effects.common.PutOnLibrarySourceEffect; import mage.abilities.keyword.LifelinkAbility; import mage.cards.AdventureCard; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.target.common.TargetCreatureOrPlaneswalker; + import java.util.UUID; -import mage.abilities.effects.common.PutOnLibrarySourceEffect; /** * @author TheElk801 @@ -41,6 +42,8 @@ public final class MurderousRider extends AdventureCard { new LoseLifeSourceControllerEffect(2).setText("You lose 2 life.") ); this.getSpellCard().getSpellAbility().addTarget(new TargetCreatureOrPlaneswalker()); + + this.finalizeAdventure(); } private MurderousRider(final MurderousRider card) { diff --git a/Mage.Sets/src/mage/cards/o/OakhameRanger.java b/Mage.Sets/src/mage/cards/o/OakhameRanger.java index 2402b9eedaf..4f3500f0fff 100644 --- a/Mage.Sets/src/mage/cards/o/OakhameRanger.java +++ b/Mage.Sets/src/mage/cards/o/OakhameRanger.java @@ -36,6 +36,8 @@ public final class OakhameRanger extends AdventureCard { // Bring Back // Create two 1/1 white Human creature tokens. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new HumanToken(), 2)); + + this.finalizeAdventure(); } private OakhameRanger(final OakhameRanger card) { diff --git a/Mage.Sets/src/mage/cards/o/ObyrasAttendants.java b/Mage.Sets/src/mage/cards/o/ObyrasAttendants.java index 766f220abd2..2346b76826f 100644 --- a/Mage.Sets/src/mage/cards/o/ObyrasAttendants.java +++ b/Mage.Sets/src/mage/cards/o/ObyrasAttendants.java @@ -31,6 +31,8 @@ public final class ObyrasAttendants extends AdventureCard { // Target creature gets -4/-0 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(-4, 0)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private ObyrasAttendants(final ObyrasAttendants card) { diff --git a/Mage.Sets/src/mage/cards/o/OrderOfMidnight.java b/Mage.Sets/src/mage/cards/o/OrderOfMidnight.java index 9829efb2a30..7b1d3a339c3 100644 --- a/Mage.Sets/src/mage/cards/o/OrderOfMidnight.java +++ b/Mage.Sets/src/mage/cards/o/OrderOfMidnight.java @@ -36,6 +36,8 @@ public final class OrderOfMidnight extends AdventureCard { // Return target creature card from your graveyard to your hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD)); + + this.finalizeAdventure(); } private OrderOfMidnight(final OrderOfMidnight card) { diff --git a/Mage.Sets/src/mage/cards/p/PegasusGuardian.java b/Mage.Sets/src/mage/cards/p/PegasusGuardian.java index 683623c2a5f..3bd677590dc 100644 --- a/Mage.Sets/src/mage/cards/p/PegasusGuardian.java +++ b/Mage.Sets/src/mage/cards/p/PegasusGuardian.java @@ -42,6 +42,8 @@ public final class PegasusGuardian extends AdventureCard { // Exile target creature you control, then return that card to the battlefield under its owner's control. this.getSpellCard().getSpellAbility().addEffect(new ExileThenReturnTargetEffect(false, true)); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private PegasusGuardian(final PegasusGuardian card) { diff --git a/Mage.Sets/src/mage/cards/p/PicklockPrankster.java b/Mage.Sets/src/mage/cards/p/PicklockPrankster.java index aa6d576adf9..546bb8780d6 100644 --- a/Mage.Sets/src/mage/cards/p/PicklockPrankster.java +++ b/Mage.Sets/src/mage/cards/p/PicklockPrankster.java @@ -45,6 +45,8 @@ public final class PicklockPrankster extends AdventureCard { // Free the Fae // Mill four cards. Then put an instant, sorcery, or Faerie card from among the milled cards into your hand. this.getSpellCard().getSpellAbility().addEffect(new MillThenPutInHandEffect(4, filter)); + + this.finalizeAdventure(); } private PicklockPrankster(final PicklockPrankster card) { diff --git a/Mage.Sets/src/mage/cards/p/PicnicRuiner.java b/Mage.Sets/src/mage/cards/p/PicnicRuiner.java index ea53cb989e0..d7eeb6c0ab7 100644 --- a/Mage.Sets/src/mage/cards/p/PicnicRuiner.java +++ b/Mage.Sets/src/mage/cards/p/PicnicRuiner.java @@ -49,6 +49,8 @@ public final class PicnicRuiner extends AdventureCard { this.getSpellCard().getSpellAbility().addTarget( new TargetCreaturePermanentAmount(3, StaticFilters.FILTER_CONTROLLED_CREATURES) ); + + this.finalizeAdventure(); } private PicnicRuiner(final PicnicRuiner card) { diff --git a/Mage.Sets/src/mage/cards/p/PollenShieldHare.java b/Mage.Sets/src/mage/cards/p/PollenShieldHare.java index e587ab301d6..ca5d47e011e 100644 --- a/Mage.Sets/src/mage/cards/p/PollenShieldHare.java +++ b/Mage.Sets/src/mage/cards/p/PollenShieldHare.java @@ -48,6 +48,8 @@ public final class PollenShieldHare extends AdventureCard { ); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); this.getSpellCard().getSpellAbility().addHint(CreaturesYouControlHint.instance); + + this.finalizeAdventure(); } private PollenShieldHare(final PollenShieldHare card) { diff --git a/Mage.Sets/src/mage/cards/q/QueenOfIce.java b/Mage.Sets/src/mage/cards/q/QueenOfIce.java index 4680279dc98..586a4e5062b 100644 --- a/Mage.Sets/src/mage/cards/q/QueenOfIce.java +++ b/Mage.Sets/src/mage/cards/q/QueenOfIce.java @@ -43,6 +43,8 @@ public final class QueenOfIce extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new DontUntapInControllersNextUntapStepTargetEffect() .setText("It doesn't untap during its controller's next untap step")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private QueenOfIce(final QueenOfIce card) { diff --git a/Mage.Sets/src/mage/cards/q/QuestingDruid.java b/Mage.Sets/src/mage/cards/q/QuestingDruid.java index f3f93b62b9d..fae71344abd 100644 --- a/Mage.Sets/src/mage/cards/q/QuestingDruid.java +++ b/Mage.Sets/src/mage/cards/q/QuestingDruid.java @@ -51,6 +51,8 @@ public final class QuestingDruid extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect( new ExileTopXMayPlayUntilEndOfTurnEffect(2, false, Duration.UntilYourNextEndStep) ); + + this.finalizeAdventure(); } private QuestingDruid(final QuestingDruid card) { diff --git a/Mage.Sets/src/mage/cards/r/RatcatcherTrainee.java b/Mage.Sets/src/mage/cards/r/RatcatcherTrainee.java index c601b54edf2..026a80259da 100644 --- a/Mage.Sets/src/mage/cards/r/RatcatcherTrainee.java +++ b/Mage.Sets/src/mage/cards/r/RatcatcherTrainee.java @@ -39,6 +39,8 @@ public final class RatcatcherTrainee extends AdventureCard { // Pest Problem // Create two 1/1 black Rat creature tokens with "This creature can’t block." this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new RatCantBlockToken(), 2)); + + this.finalizeAdventure(); } private RatcatcherTrainee(final RatcatcherTrainee card) { diff --git a/Mage.Sets/src/mage/cards/r/RealmCloakedGiant.java b/Mage.Sets/src/mage/cards/r/RealmCloakedGiant.java index 3357497396b..368baaad9aa 100644 --- a/Mage.Sets/src/mage/cards/r/RealmCloakedGiant.java +++ b/Mage.Sets/src/mage/cards/r/RealmCloakedGiant.java @@ -37,6 +37,8 @@ public final class RealmCloakedGiant extends AdventureCard { // Cast Off // Destroy all non-Giant creatures. this.getSpellCard().getSpellAbility().addEffect(new DestroyAllEffect(filter)); + + this.finalizeAdventure(); } private RealmCloakedGiant(final RealmCloakedGiant card) { diff --git a/Mage.Sets/src/mage/cards/r/ReaperOfNight.java b/Mage.Sets/src/mage/cards/r/ReaperOfNight.java index 580020f7741..c65a5f356a9 100644 --- a/Mage.Sets/src/mage/cards/r/ReaperOfNight.java +++ b/Mage.Sets/src/mage/cards/r/ReaperOfNight.java @@ -43,6 +43,8 @@ public final class ReaperOfNight extends AdventureCard { // Target opponent discards two cards. this.getSpellCard().getSpellAbility().addEffect(new DiscardTargetEffect(2)); this.getSpellCard().getSpellAbility().addTarget(new TargetOpponent()); + + this.finalizeAdventure(); } private ReaperOfNight(final ReaperOfNight card) { diff --git a/Mage.Sets/src/mage/cards/r/RimrockKnight.java b/Mage.Sets/src/mage/cards/r/RimrockKnight.java index da237fdba34..78142cd1019 100644 --- a/Mage.Sets/src/mage/cards/r/RimrockKnight.java +++ b/Mage.Sets/src/mage/cards/r/RimrockKnight.java @@ -32,6 +32,8 @@ public final class RimrockKnight extends AdventureCard { // Target creature gets +2/+0 until end of turn. this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 0, Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private RimrockKnight(final RimrockKnight card) { diff --git a/Mage.Sets/src/mage/cards/r/RosethornAcolyte.java b/Mage.Sets/src/mage/cards/r/RosethornAcolyte.java index 354131f372f..85a0e393fbc 100644 --- a/Mage.Sets/src/mage/cards/r/RosethornAcolyte.java +++ b/Mage.Sets/src/mage/cards/r/RosethornAcolyte.java @@ -29,6 +29,8 @@ public final class RosethornAcolyte extends AdventureCard { // Seasonal Ritual // Add one mana of any color. this.getSpellCard().getSpellAbility().addEffect(new AddManaOfAnyColorEffect()); + + this.finalizeAdventure(); } private RosethornAcolyte(final RosethornAcolyte card) { diff --git a/Mage.Sets/src/mage/cards/s/SapphireDragon.java b/Mage.Sets/src/mage/cards/s/SapphireDragon.java index 7205adf6626..171fa833aff 100644 --- a/Mage.Sets/src/mage/cards/s/SapphireDragon.java +++ b/Mage.Sets/src/mage/cards/s/SapphireDragon.java @@ -36,6 +36,8 @@ public final class SapphireDragon extends AdventureCard { // Counter target noncreature spell. this.getSpellCard().getSpellAbility().addEffect(new CounterTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetSpell(StaticFilters.FILTER_SPELL_NON_CREATURE)); + + this.finalizeAdventure(); } private SapphireDragon(final SapphireDragon card) { diff --git a/Mage.Sets/src/mage/cards/s/ScaldingViper.java b/Mage.Sets/src/mage/cards/s/ScaldingViper.java index 6c2ef5d5f06..f0e17f5f7fc 100644 --- a/Mage.Sets/src/mage/cards/s/ScaldingViper.java +++ b/Mage.Sets/src/mage/cards/s/ScaldingViper.java @@ -42,6 +42,8 @@ public final class ScaldingViper extends AdventureCard { // Return target nonland permanent to its owner's hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetNonlandPermanent()); + + this.finalizeAdventure(); } private ScaldingViper(final ScaldingViper card) { diff --git a/Mage.Sets/src/mage/cards/s/SeaHag.java b/Mage.Sets/src/mage/cards/s/SeaHag.java index c6d6d00726e..83195cfcbd4 100644 --- a/Mage.Sets/src/mage/cards/s/SeaHag.java +++ b/Mage.Sets/src/mage/cards/s/SeaHag.java @@ -38,6 +38,8 @@ public final class SeaHag extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(1, 0).setText("up to two target creatures each get +1/+0 until end of turn")); this.getSpellCard().getSpellAbility().addEffect(new CantBeBlockedTargetEffect().setText("and can't be blocked this turn")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent(0, 2)); + + this.finalizeAdventure(); } private SeaHag(final SeaHag card) { diff --git a/Mage.Sets/src/mage/cards/s/ShepherdOfTheFlock.java b/Mage.Sets/src/mage/cards/s/ShepherdOfTheFlock.java index 2d08c676f9b..36bc710f50f 100644 --- a/Mage.Sets/src/mage/cards/s/ShepherdOfTheFlock.java +++ b/Mage.Sets/src/mage/cards/s/ShepherdOfTheFlock.java @@ -27,6 +27,8 @@ public final class ShepherdOfTheFlock extends AdventureCard { // Return target permanent you control to its owner’s hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledPermanent()); + + this.finalizeAdventure(); } private ShepherdOfTheFlock(final ShepherdOfTheFlock card) { diff --git a/Mage.Sets/src/mage/cards/s/ShroudedShepherd.java b/Mage.Sets/src/mage/cards/s/ShroudedShepherd.java index ed38ddbaa2e..5bec1e9c473 100644 --- a/Mage.Sets/src/mage/cards/s/ShroudedShepherd.java +++ b/Mage.Sets/src/mage/cards/s/ShroudedShepherd.java @@ -39,6 +39,8 @@ public final class ShroudedShepherd extends AdventureCard { -1, -1, Duration.EndOfTurn, StaticFilters.FILTER_OPPONENTS_PERMANENT_CREATURES, false )); + + this.finalizeAdventure(); } private ShroudedShepherd(final ShroudedShepherd card) { diff --git a/Mage.Sets/src/mage/cards/s/SilverflameSquire.java b/Mage.Sets/src/mage/cards/s/SilverflameSquire.java index 6f0f0b7e8ce..e793aaa9943 100644 --- a/Mage.Sets/src/mage/cards/s/SilverflameSquire.java +++ b/Mage.Sets/src/mage/cards/s/SilverflameSquire.java @@ -30,6 +30,8 @@ public final class SilverflameSquire extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(2, 2, Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addEffect(new UntapTargetEffect().setText("Untap it")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private SilverflameSquire(final SilverflameSquire card) { diff --git a/Mage.Sets/src/mage/cards/s/SmittenSwordmaster.java b/Mage.Sets/src/mage/cards/s/SmittenSwordmaster.java index 673f947b493..d8fc7d58c18 100644 --- a/Mage.Sets/src/mage/cards/s/SmittenSwordmaster.java +++ b/Mage.Sets/src/mage/cards/s/SmittenSwordmaster.java @@ -34,6 +34,8 @@ public final class SmittenSwordmaster extends AdventureCard { // Curry Favor // You gain X life and each opponent loses X life, where X is the number of Knights you control. this.getSpellCard().getSpellAbility().addEffect(new CurryFavorEffect()); + + this.finalizeAdventure(); } private SmittenSwordmaster(final SmittenSwordmaster card) { diff --git a/Mage.Sets/src/mage/cards/s/SpellscornCoven.java b/Mage.Sets/src/mage/cards/s/SpellscornCoven.java index e6284d78be1..db2111635bc 100644 --- a/Mage.Sets/src/mage/cards/s/SpellscornCoven.java +++ b/Mage.Sets/src/mage/cards/s/SpellscornCoven.java @@ -37,6 +37,8 @@ public final class SpellscornCoven extends AdventureCard { // Return target spell to its owner's hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetSpell()); + + this.finalizeAdventure(); } private SpellscornCoven(final SpellscornCoven card) { diff --git a/Mage.Sets/src/mage/cards/s/StormkeldVanguard.java b/Mage.Sets/src/mage/cards/s/StormkeldVanguard.java index 41173a7c381..7d07adb4961 100644 --- a/Mage.Sets/src/mage/cards/s/StormkeldVanguard.java +++ b/Mage.Sets/src/mage/cards/s/StormkeldVanguard.java @@ -32,6 +32,8 @@ public final class StormkeldVanguard extends AdventureCard { // Destroy target artifact or enchantment. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(StaticFilters.FILTER_PERMANENT_ARTIFACT_OR_ENCHANTMENT)); + + this.finalizeAdventure(); } private StormkeldVanguard(final StormkeldVanguard card) { diff --git a/Mage.Sets/src/mage/cards/s/SwordCoastSerpent.java b/Mage.Sets/src/mage/cards/s/SwordCoastSerpent.java index 699a6d0dba4..1a12aa1277a 100644 --- a/Mage.Sets/src/mage/cards/s/SwordCoastSerpent.java +++ b/Mage.Sets/src/mage/cards/s/SwordCoastSerpent.java @@ -43,6 +43,8 @@ public final class SwordCoastSerpent extends AdventureCard { // Return target creature to its owner's hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private SwordCoastSerpent(final SwordCoastSerpent card) { diff --git a/Mage.Sets/src/mage/cards/t/TempestHart.java b/Mage.Sets/src/mage/cards/t/TempestHart.java index aeede346fd3..eb7275e9151 100644 --- a/Mage.Sets/src/mage/cards/t/TempestHart.java +++ b/Mage.Sets/src/mage/cards/t/TempestHart.java @@ -46,6 +46,8 @@ public final class TempestHart extends AdventureCard { // Scan the Clouds // Draw two cards, then discard two cards. this.getSpellCard().getSpellAbility().addEffect(new DrawDiscardControllerEffect(2, 2)); + + this.finalizeAdventure(); } private TempestHart(final TempestHart card) { diff --git a/Mage.Sets/src/mage/cards/t/ThreadbindClique.java b/Mage.Sets/src/mage/cards/t/ThreadbindClique.java index 66a1e6161a4..be9d1580212 100644 --- a/Mage.Sets/src/mage/cards/t/ThreadbindClique.java +++ b/Mage.Sets/src/mage/cards/t/ThreadbindClique.java @@ -39,6 +39,8 @@ public final class ThreadbindClique extends AdventureCard { // Destroy target tapped creature. this.getSpellCard().getSpellAbility().addEffect(new DestroyTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetPermanent(filter)); + + this.finalizeAdventure(); } private ThreadbindClique(final ThreadbindClique card) { diff --git a/Mage.Sets/src/mage/cards/t/TopazDragon.java b/Mage.Sets/src/mage/cards/t/TopazDragon.java index c86ddc1e025..a22459a0453 100644 --- a/Mage.Sets/src/mage/cards/t/TopazDragon.java +++ b/Mage.Sets/src/mage/cards/t/TopazDragon.java @@ -37,6 +37,8 @@ public final class TopazDragon extends AdventureCard { DeathtouchAbility.getInstance(), Duration.EndOfTurn, StaticFilters.FILTER_CONTROLLED_CREATURES )); + + this.finalizeAdventure(); } private TopazDragon(final TopazDragon card) { diff --git a/Mage.Sets/src/mage/cards/t/TuinvaleTreefolk.java b/Mage.Sets/src/mage/cards/t/TuinvaleTreefolk.java index ba0d79dc7be..af756d0ef43 100644 --- a/Mage.Sets/src/mage/cards/t/TuinvaleTreefolk.java +++ b/Mage.Sets/src/mage/cards/t/TuinvaleTreefolk.java @@ -28,6 +28,8 @@ public final class TuinvaleTreefolk extends AdventureCard { // Put two +1/+1 counters on target creature. this.getSpellCard().getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(2))); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private TuinvaleTreefolk(final TuinvaleTreefolk card) { diff --git a/Mage.Sets/src/mage/cards/t/TwiningTwins.java b/Mage.Sets/src/mage/cards/t/TwiningTwins.java index 4df5cfcbe58..6d0f5b5a8ce 100644 --- a/Mage.Sets/src/mage/cards/t/TwiningTwins.java +++ b/Mage.Sets/src/mage/cards/t/TwiningTwins.java @@ -51,6 +51,8 @@ public final class TwiningTwins extends AdventureCard { // Exile target nontoken creature. Return it to the battlefield under its owner’s control at the beginning of the next end step. this.getSpellCard().getSpellAbility().addEffect(new TwiningTwinsEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent(StaticFilters.FILTER_CREATURE_NON_TOKEN)); + + this.finalizeAdventure(); } private TwiningTwins(final TwiningTwins card) { diff --git a/Mage.Sets/src/mage/cards/t/TwoHandedAxe.java b/Mage.Sets/src/mage/cards/t/TwoHandedAxe.java index 8831602e875..c85ddb11e74 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHandedAxe.java +++ b/Mage.Sets/src/mage/cards/t/TwoHandedAxe.java @@ -40,6 +40,8 @@ public final class TwoHandedAxe extends AdventureCard { // Target creature you control gains double strike until end of turn. this.getSpellCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance())); this.getSpellCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); + + this.finalizeAdventure(); } private TwoHandedAxe(final TwoHandedAxe card) { diff --git a/Mage.Sets/src/mage/cards/t/TwoHeadedHunter.java b/Mage.Sets/src/mage/cards/t/TwoHeadedHunter.java index 11a05ff4ded..276bbd86d6d 100644 --- a/Mage.Sets/src/mage/cards/t/TwoHeadedHunter.java +++ b/Mage.Sets/src/mage/cards/t/TwoHeadedHunter.java @@ -31,6 +31,8 @@ public final class TwoHeadedHunter extends AdventureCard { // Target creature gains double strike until end of turn. this.getSpellCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance())); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private TwoHeadedHunter(final TwoHeadedHunter card) { diff --git a/Mage.Sets/src/mage/cards/v/VantressTransmuter.java b/Mage.Sets/src/mage/cards/v/VantressTransmuter.java index 15be8954c72..891d5517c47 100644 --- a/Mage.Sets/src/mage/cards/v/VantressTransmuter.java +++ b/Mage.Sets/src/mage/cards/v/VantressTransmuter.java @@ -32,6 +32,8 @@ public final class VantressTransmuter extends AdventureCard { this.getSpellCard().getSpellAbility().addEffect(new CreateRoleAttachedTargetEffect(RoleType.CURSED) .setText("create a Cursed Role token attached to it")); this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); + + this.finalizeAdventure(); } private VantressTransmuter(final VantressTransmuter card) { diff --git a/Mage.Sets/src/mage/cards/v/VirtueOfCourage.java b/Mage.Sets/src/mage/cards/v/VirtueOfCourage.java index f685f3fc207..250cf653aaa 100644 --- a/Mage.Sets/src/mage/cards/v/VirtueOfCourage.java +++ b/Mage.Sets/src/mage/cards/v/VirtueOfCourage.java @@ -29,6 +29,8 @@ public final class VirtueOfCourage extends AdventureCard { // Embereth Blaze deals 2 damage to any target. this.getSpellCard().getSpellAbility().addEffect(new DamageTargetEffect(2)); this.getSpellCard().getSpellAbility().addTarget(new TargetAnyTarget()); + + this.finalizeAdventure(); } private VirtueOfCourage(final VirtueOfCourage card) { diff --git a/Mage.Sets/src/mage/cards/v/VirtueOfKnowledge.java b/Mage.Sets/src/mage/cards/v/VirtueOfKnowledge.java index beaba06d0cc..14a450b82e0 100644 --- a/Mage.Sets/src/mage/cards/v/VirtueOfKnowledge.java +++ b/Mage.Sets/src/mage/cards/v/VirtueOfKnowledge.java @@ -34,6 +34,8 @@ public final class VirtueOfKnowledge extends AdventureCard { // Copy target activated or triggered ability you control. You may choose new targets for the copy. this.getSpellCard().getSpellAbility().addEffect(new CopyTargetStackAbilityEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetActivatedOrTriggeredAbility(filter)); + + this.finalizeAdventure(); } private VirtueOfKnowledge(final VirtueOfKnowledge card) { diff --git a/Mage.Sets/src/mage/cards/v/VirtueOfLoyalty.java b/Mage.Sets/src/mage/cards/v/VirtueOfLoyalty.java index 4c074802599..ad177c01478 100644 --- a/Mage.Sets/src/mage/cards/v/VirtueOfLoyalty.java +++ b/Mage.Sets/src/mage/cards/v/VirtueOfLoyalty.java @@ -33,6 +33,8 @@ public final class VirtueOfLoyalty extends AdventureCard { // Ardenvale Fealty // Create a 2/2 white Knight creature token with vigilance. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new KnightToken())); + + this.finalizeAdventure(); } private VirtueOfLoyalty(final VirtueOfLoyalty card) { diff --git a/Mage.Sets/src/mage/cards/v/VirtueOfPersistence.java b/Mage.Sets/src/mage/cards/v/VirtueOfPersistence.java index c2fcb021ad2..b2d0edccc40 100644 --- a/Mage.Sets/src/mage/cards/v/VirtueOfPersistence.java +++ b/Mage.Sets/src/mage/cards/v/VirtueOfPersistence.java @@ -39,6 +39,8 @@ public final class VirtueOfPersistence extends AdventureCard { this.getSpellCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); this.getSpellCard().getSpellAbility().addEffect(new BoostTargetEffect(-3, -3, Duration.EndOfTurn)); this.getSpellCard().getSpellAbility().addEffect(new GainLifeEffect(2)); + + this.finalizeAdventure(); } private VirtueOfPersistence(final VirtueOfPersistence card) { diff --git a/Mage.Sets/src/mage/cards/v/VirtueOfStrength.java b/Mage.Sets/src/mage/cards/v/VirtueOfStrength.java index 942cad0a89b..ab1dad65d67 100644 --- a/Mage.Sets/src/mage/cards/v/VirtueOfStrength.java +++ b/Mage.Sets/src/mage/cards/v/VirtueOfStrength.java @@ -46,6 +46,8 @@ public final class VirtueOfStrength extends AdventureCard { // Return target creature or land card from your graveyard to your hand. this.getSpellCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); + + this.finalizeAdventure(); } private VirtueOfStrength(final VirtueOfStrength card) { diff --git a/Mage.Sets/src/mage/cards/w/WoodlandAcolyte.java b/Mage.Sets/src/mage/cards/w/WoodlandAcolyte.java index 8063e0e1fd7..f41b4250ec2 100644 --- a/Mage.Sets/src/mage/cards/w/WoodlandAcolyte.java +++ b/Mage.Sets/src/mage/cards/w/WoodlandAcolyte.java @@ -36,6 +36,8 @@ public final class WoodlandAcolyte extends AdventureCard { // Put target permanent card from your graveyard on top of your library. this.getSpellCard().getSpellAbility().addEffect(new PutOnLibraryTargetEffect(true)); this.getSpellCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard(filter)); + + this.finalizeAdventure(); } private WoodlandAcolyte(final WoodlandAcolyte card) { diff --git a/Mage.Sets/src/mage/cards/y/YoungBlueDragon.java b/Mage.Sets/src/mage/cards/y/YoungBlueDragon.java index 1520a028131..941e3cf2ae1 100644 --- a/Mage.Sets/src/mage/cards/y/YoungBlueDragon.java +++ b/Mage.Sets/src/mage/cards/y/YoungBlueDragon.java @@ -30,6 +30,8 @@ public final class YoungBlueDragon extends AdventureCard { // Scry 1, then draw a card. this.getSpellCard().getSpellAbility().addEffect(new ScryEffect(1, false)); this.getSpellCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1).concatBy(", then")); + + this.finalizeAdventure(); } private YoungBlueDragon(final YoungBlueDragon card) { diff --git a/Mage.Sets/src/mage/cards/y/YoungRedDragon.java b/Mage.Sets/src/mage/cards/y/YoungRedDragon.java index 4c5d6389095..3cf109b0206 100644 --- a/Mage.Sets/src/mage/cards/y/YoungRedDragon.java +++ b/Mage.Sets/src/mage/cards/y/YoungRedDragon.java @@ -33,6 +33,8 @@ public final class YoungRedDragon extends AdventureCard { // Bathe in Gold // Create a Treasure token. this.getSpellCard().getSpellAbility().addEffect(new CreateTokenEffect(new TreasureToken())); + + this.finalizeAdventure(); } private YoungRedDragon(final YoungRedDragon card) { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/HeartflameDuelistTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/HeartflameDuelistTest.java new file mode 100644 index 00000000000..277316c2598 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/woe/HeartflameDuelistTest.java @@ -0,0 +1,67 @@ + +package org.mage.test.cards.single.woe; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author Susucr + */ +public class HeartflameDuelistTest extends CardTestPlayerBase { + + /** + * Heartflame Duelist {1}{W} + * Creature — Human Knight + * Instant and sorcery spells you control have lifelink. + * 3/1 + *

+ * // + * Heartflame Slash {2}{R} + * Instant — Adventure + * Heartflame Slash deals 3 damage to any target. + */ + private final String duelist = "Heartflame Duelist"; + + @Test + public void lifelinkOnPlayer() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, duelist, 1); + addCard(Zone.HAND, playerA, duelist, 1); + + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Heartflame Slash", playerB); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20 + 3); + assertLife(playerB, 20 - 3); + assertPermanentCount(playerA, duelist, 1); + assertExileCount(playerA, duelist, 1); + } + + @Test + public void lifelinkOnPermanent() { + setStrictChooseMode(true); + + addCard(Zone.BATTLEFIELD, playerA, duelist, 1); + addCard(Zone.HAND, playerA, duelist, 1); + + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 3); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Heartflame Slash", duelist); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20 + 3); + assertLife(playerB, 20); + assertPermanentCount(playerA, duelist, 0); + assertExileCount(playerA, duelist, 1); + assertGraveyardCount(playerA, duelist, 1); + } +} \ No newline at end of file diff --git a/Mage/src/main/java/mage/cards/AdventureCard.java b/Mage/src/main/java/mage/cards/AdventureCard.java index 3f556598b9d..c35257b159b 100644 --- a/Mage/src/main/java/mage/cards/AdventureCard.java +++ b/Mage/src/main/java/mage/cards/AdventureCard.java @@ -26,6 +26,10 @@ public abstract class AdventureCard extends CardImpl { this.spellCard = new AdventureCardSpellImpl(ownerId, setInfo, adventureName, typesSpell, costsSpell, this); } + public void finalizeAdventure() { + spellCard.finalizeAdventure(); + } + public AdventureCard(AdventureCard card) { super(card); this.spellCard = card.getSpellCard().copy(); diff --git a/Mage/src/main/java/mage/cards/AdventureCardSpell.java b/Mage/src/main/java/mage/cards/AdventureCardSpell.java index c274c54aa9a..27f14c5493a 100644 --- a/Mage/src/main/java/mage/cards/AdventureCardSpell.java +++ b/Mage/src/main/java/mage/cards/AdventureCardSpell.java @@ -7,4 +7,6 @@ public interface AdventureCardSpell extends SubCard { @Override AdventureCardSpell copy(); + + void finalizeAdventure(); } diff --git a/Mage/src/main/java/mage/cards/AdventureCardSpellImpl.java b/Mage/src/main/java/mage/cards/AdventureCardSpellImpl.java index d5f78346b38..47a01b819f6 100644 --- a/Mage/src/main/java/mage/cards/AdventureCardSpellImpl.java +++ b/Mage/src/main/java/mage/cards/AdventureCardSpellImpl.java @@ -35,6 +35,12 @@ public class AdventureCardSpellImpl extends CardImpl implements AdventureCardSpe this.adventureCardParent = adventureCardParent; } + public void finalizeAdventure() { + if (spellAbility instanceof AdventureCardSpellAbility) { + ((AdventureCardSpellAbility) spellAbility).finalizeAdventure(); + } + } + protected AdventureCardSpellImpl(final AdventureCardSpellImpl card) { super(card); this.adventureCardParent = card.adventureCardParent; @@ -100,18 +106,35 @@ public class AdventureCardSpellImpl extends CardImpl implements AdventureCardSpe class AdventureCardSpellAbility extends SpellAbility { - String nameFull; + private String nameFull; + private boolean finalized = false; public AdventureCardSpellAbility(final SpellAbility baseSpellAbility, String adventureName, CardType[] cardTypes, String costs) { super(baseSpellAbility); this.setName(cardTypes, adventureName, costs); - this.addEffect(ExileAdventureSpellEffect.getInstance()); this.setCardName(adventureName); } + // The exile effect needs to be added last. + public void finalizeAdventure() { + if (finalized) { + throw new IllegalStateException("Wrong code usage. " + + "Adventure (" + cardName + ") " + + "need to call finalizeAdventure() exactly once."); + } + this.addEffect(ExileAdventureSpellEffect.getInstance()); + this.finalized = true; + } + protected AdventureCardSpellAbility(final AdventureCardSpellAbility ability) { super(ability); this.nameFull = ability.nameFull; + if (!ability.finalized) { + throw new IllegalStateException("Wrong code usage. " + + "Adventure (" + cardName + ") " + + "need to call finalizeAdventure() at the very end of the card's constructor."); + } + this.finalized = true; } @Override @@ -155,7 +178,7 @@ class AdventureCardSpellAbility extends SpellAbility { } @Override - public SpellAbility copy() { + public AdventureCardSpellAbility copy() { return new AdventureCardSpellAbility(this); } } \ No newline at end of file