From 689b93d0058e512eca3abf31cb3b3616be29aa7a Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Fri, 21 Apr 2023 11:02:57 +0400 Subject: [PATCH] Refactor: improved choose cards method to use source param (fixed NPE like #10233, #9974 and other bugs with choose cards) --- .../src/mage/cards/a/AethermagesTouch.java | 2 +- Mage.Sets/src/mage/cards/a/Aetherspouts.java | 4 +-- .../src/mage/cards/a/AgonizingMemories.java | 2 +- .../src/mage/cards/a/AgonizingRemorse.java | 2 +- Mage.Sets/src/mage/cards/a/AladdinsLamp.java | 2 +- .../src/mage/cards/a/AllureOfTheUnknown.java | 2 +- .../src/mage/cards/a/AmassTheComponents.java | 2 +- .../src/mage/cards/a/AminatousAugury.java | 2 +- .../src/mage/cards/a/AncestralKnowledge.java | 2 +- Mage.Sets/src/mage/cards/a/AoTheDawnSky.java | 2 +- .../src/mage/cards/a/ArachnusSpinner.java | 2 +- .../src/mage/cards/a/ArmoredSkyhunter.java | 2 +- .../src/mage/cards/a/AshiokNightmareMuse.java | 2 +- Mage.Sets/src/mage/cards/a/AshnodsCylix.java | 2 +- .../src/mage/cards/a/AtraxaGrandUnifier.java | 2 +- .../mage/cards/a/AtrisOracleOfHalfTruths.java | 2 +- .../src/mage/cards/a/AuthorOfShadows.java | 2 +- .../src/mage/cards/b/BalshanBeguiler.java | 2 +- Mage.Sets/src/mage/cards/b/Bamboozle.java | 2 +- Mage.Sets/src/mage/cards/b/BloodForBones.java | 4 +-- .../src/mage/cards/b/BoneyardParley.java | 2 +- .../src/mage/cards/b/BoonweaverGiant.java | 4 +-- Mage.Sets/src/mage/cards/b/BoosterTutor.java | 2 +- Mage.Sets/src/mage/cards/b/BoreasCharger.java | 2 +- .../src/mage/cards/b/BountyOfSkemfar.java | 4 +-- Mage.Sets/src/mage/cards/b/BrainMaggot.java | 2 +- .../src/mage/cards/b/BreachTheMultiverse.java | 2 +- .../src/mage/cards/b/BrilliantUltimatum.java | 2 +- Mage.Sets/src/mage/cards/b/Browse.java | 2 +- .../mage/cards/b/BrunaLightOfAlabaster.java | 4 +-- .../src/mage/cards/c/CallToTheKindred.java | 2 +- .../mage/cards/c/CapriciousHellraiser.java | 2 +- Mage.Sets/src/mage/cards/c/CauldronsGift.java | 2 +- Mage.Sets/src/mage/cards/c/CheckForTraps.java | 2 +- Mage.Sets/src/mage/cards/c/ChromeCourier.java | 2 +- .../mage/cards/c/CitystalkerConnoisseur.java | 2 +- Mage.Sets/src/mage/cards/c/CloneShell.java | 2 +- .../src/mage/cards/c/CongregationAtDawn.java | 2 +- .../src/mage/cards/c/ConspiracyTheorist.java | 2 +- .../src/mage/cards/c/ContagiousVorrac.java | 2 +- .../src/mage/cards/c/CorpseAppraiser.java | 2 +- Mage.Sets/src/mage/cards/c/CovetousUrge.java | 4 +-- Mage.Sets/src/mage/cards/c/CreepingDread.java | 4 +-- Mage.Sets/src/mage/cards/c/CruelFate.java | 2 +- Mage.Sets/src/mage/cards/c/Cultivate.java | 2 +- .../src/mage/cards/c/CunningAbduction.java | 2 +- .../src/mage/cards/c/CurrencyConverter.java | 2 +- Mage.Sets/src/mage/cards/c/CustodiSquire.java | 2 +- .../src/mage/cards/d/DarkSupplicant.java | 4 +-- Mage.Sets/src/mage/cards/d/DeadlyBrew.java | 2 +- Mage.Sets/src/mage/cards/d/DeathOrGlory.java | 2 +- Mage.Sets/src/mage/cards/d/DeathsOasis.java | 2 +- .../src/mage/cards/d/DeliverUntoEvil.java | 2 +- .../src/mage/cards/d/DescentIntoMadness.java | 2 +- Mage.Sets/src/mage/cards/d/DesecratorHag.java | 2 +- .../src/mage/cards/d/DimensionalBreach.java | 2 +- .../src/mage/cards/d/DimirMachinations.java | 2 +- .../src/mage/cards/d/DiscordantDirge.java | 2 +- .../mage/cards/d/DiscoverTheImpossible.java | 2 +- .../src/mage/cards/d/DjeruAndHazoret.java | 2 +- Mage.Sets/src/mage/cards/d/Doomsday.java | 2 +- .../mage/cards/d/DranaTheLastBloodchief.java | 2 +- Mage.Sets/src/mage/cards/d/DredgeTheMire.java | 2 +- .../src/mage/cards/d/DubiousChallenge.java | 4 +-- .../mage/cards/e/EcologicalAppreciation.java | 4 +-- .../src/mage/cards/e/EerieUltimatum.java | 2 +- Mage.Sets/src/mage/cards/e/EliteArcanist.java | 2 +- .../src/mage/cards/e/EliteSpellbinder.java | 2 +- .../src/mage/cards/e/EllywickTumblestrum.java | 2 +- .../src/mage/cards/e/ElspethResplendent.java | 2 +- .../src/mage/cards/e/EmergentUltimatum.java | 2 +- .../src/mage/cards/e/EtherealForager.java | 2 +- Mage.Sets/src/mage/cards/e/Evershrike.java | 2 +- .../mage/cards/e/ExperimentalOverload.java | 2 +- .../src/mage/cards/e/ExpressiveIteration.java | 6 ++--- Mage.Sets/src/mage/cards/e/Extortion.java | 2 +- Mage.Sets/src/mage/cards/e/ExtractBrain.java | 2 +- Mage.Sets/src/mage/cards/e/EyeOfTheStorm.java | 2 +- Mage.Sets/src/mage/cards/e/EyeOfYawgmoth.java | 2 +- .../mage/cards/f/FeldonRonomExcavator.java | 2 +- Mage.Sets/src/mage/cards/f/FinalParting.java | 2 +- Mage.Sets/src/mage/cards/f/FireProphecy.java | 2 +- Mage.Sets/src/mage/cards/f/ForkInTheRoad.java | 2 +- Mage.Sets/src/mage/cards/f/FortunesFavor.java | 2 +- .../src/mage/cards/g/GateToTheAfterlife.java | 4 +-- Mage.Sets/src/mage/cards/g/GenesisHydra.java | 2 +- Mage.Sets/src/mage/cards/g/GenesisWave.java | 2 +- .../src/mage/cards/g/GiftOfTheGargantuan.java | 2 +- Mage.Sets/src/mage/cards/g/GiftsUngiven.java | 2 +- .../src/mage/cards/g/GishathSunsAvatar.java | 2 +- .../cards/g/GlacianPowerstoneEngineer.java | 2 +- .../src/mage/cards/g/GontiLordOfLuxury.java | 2 +- Mage.Sets/src/mage/cards/g/GuildFeud.java | 2 +- .../src/mage/cards/g/GyrudaDoomOfDepths.java | 2 +- .../src/mage/cards/h/HarperRecruiter.java | 2 +- .../src/mage/cards/h/HelmOfObedience.java | 2 +- Mage.Sets/src/mage/cards/h/HolyAvenger.java | 2 +- Mage.Sets/src/mage/cards/h/HowlpackPiper.java | 2 +- .../src/mage/cards/h/HurkylMasterWizard.java | 2 +- .../src/mage/cards/i/IlhargTheRazeBoar.java | 2 +- .../mage/cards/i/IndustrialAdvancement.java | 2 +- Mage.Sets/src/mage/cards/i/IntoTheFire.java | 2 +- Mage.Sets/src/mage/cards/i/Intuition.java | 2 +- .../src/mage/cards/i/InvasionOfAlara.java | 2 +- .../src/mage/cards/i/InvasionOfGobakhan.java | 2 +- .../src/mage/cards/i/InvasionOfTarkir.java | 2 +- .../src/mage/cards/i/InventiveIteration.java | 2 +- .../src/mage/cards/i/IsochronScepter.java | 2 +- Mage.Sets/src/mage/cards/j/JalumGrifter.java | 2 +- Mage.Sets/src/mage/cards/j/JaradsOrders.java | 2 +- .../src/mage/cards/j/JestersScepter.java | 2 +- .../mage/cards/j/JourneyToTheLostCity.java | 2 +- Mage.Sets/src/mage/cards/j/Juxtapose.java | 16 +++++------ .../src/mage/cards/k/KaaliaZenithSeeker.java | 2 +- .../src/mage/cards/k/KairiTheSwirlingSky.java | 2 +- .../src/mage/cards/k/KamahlsDruidicVow.java | 2 +- .../src/mage/cards/k/KarnLivingLegacy.java | 2 +- .../mage/cards/k/KaylasReconstruction.java | 2 +- .../src/mage/cards/k/KeldonFlamesage.java | 2 +- .../src/mage/cards/k/KitesailFreebooter.java | 2 +- .../src/mage/cards/k/KnightErrantOfEos.java | 2 +- Mage.Sets/src/mage/cards/k/KnowledgePool.java | 2 +- Mage.Sets/src/mage/cards/k/KodamasReach.java | 2 +- .../mage/cards/k/KotoseTheSilentSpider.java | 4 +-- .../cards/k/KroxaTitanOfDeathsHunger.java | 2 +- Mage.Sets/src/mage/cards/l/LatNamsLegacy.java | 2 +- .../mage/cards/l/LonisCryptozoologist.java | 2 +- Mage.Sets/src/mage/cards/l/LostHours.java | 2 +- .../src/mage/cards/m/MagmaticChanneler.java | 2 +- .../src/mage/cards/m/MajesticGenesis.java | 2 +- .../src/mage/cards/m/ManifoldInsights.java | 2 +- .../mage/cards/m/MasterOfPredicaments.java | 2 +- Mage.Sets/src/mage/cards/m/MemoryLeak.java | 2 +- Mage.Sets/src/mage/cards/m/MesmericFiend.java | 2 +- Mage.Sets/src/mage/cards/m/MindMaggots.java | 2 +- Mage.Sets/src/mage/cards/m/MindWarp.java | 2 +- .../src/mage/cards/m/MindleechGhoul.java | 2 +- .../src/mage/cards/m/MinnWilyIllusionist.java | 2 +- .../mage/cards/m/MishraArtificerProdigy.java | 4 +-- .../src/mage/cards/m/MishrasResearchDesk.java | 2 +- .../src/mage/cards/m/MitoticManipulation.java | 2 +- Mage.Sets/src/mage/cards/m/MomentOfTruth.java | 6 ++--- Mage.Sets/src/mage/cards/m/Monomania.java | 2 +- Mage.Sets/src/mage/cards/m/MonsterManual.java | 2 +- .../src/mage/cards/m/MoorlandRescuer.java | 2 +- .../cards/m/MuzzioVisionaryArchitect.java | 2 +- .../src/mage/cards/m/MythosOfBrokkos.java | 2 +- .../src/mage/cards/n/NahirisWarcrafting.java | 2 +- Mage.Sets/src/mage/cards/n/NavigationOrb.java | 2 +- Mage.Sets/src/mage/cards/n/Necromentia.java | 6 ++--- Mage.Sets/src/mage/cards/n/NeverHappened.java | 2 +- .../src/mage/cards/n/NicolBolasDragonGod.java | 2 +- Mage.Sets/src/mage/cards/n/NightTerrors.java | 2 +- Mage.Sets/src/mage/cards/n/Nightsnare.java | 2 +- .../src/mage/cards/n/NineFingersKeene.java | 2 +- .../src/mage/cards/n/NissasEncouragement.java | 2 +- .../src/mage/cards/n/NivMizzetReborn.java | 2 +- .../mage/cards/o/OKagachiMadeManifest.java | 2 +- Mage.Sets/src/mage/cards/o/OwlbearCub.java | 2 +- .../src/mage/cards/p/PainfulMemories.java | 2 +- .../src/mage/cards/p/PanopticMirror.java | 2 +- .../src/mage/cards/p/PendantOfProsperity.java | 2 +- Mage.Sets/src/mage/cards/p/Peregrination.java | 2 +- .../src/mage/cards/p/PerishTheThought.java | 2 +- .../src/mage/cards/p/PhyrexianGrimoire.java | 2 +- .../src/mage/cards/p/PhyrexianPortal.java | 4 +-- Mage.Sets/src/mage/cards/p/PickTheBrain.java | 2 +- .../src/mage/cards/p/PlungeIntoDarkness.java | 2 +- Mage.Sets/src/mage/cards/p/ProteusStaff.java | 2 +- .../src/mage/cards/p/PrototypePortal.java | 2 +- .../src/mage/cards/p/PsychicIntrusion.java | 4 +-- .../src/mage/cards/p/PsychicSurgery.java | 2 +- Mage.Sets/src/mage/cards/p/PsychicTheft.java | 2 +- .../src/mage/cards/p/PsychoticEpisode.java | 2 +- .../src/mage/cards/q/QueenKaylaBinKroog.java | 2 +- .../src/mage/cards/r/RakdosAugermage.java | 2 +- Mage.Sets/src/mage/cards/r/Ransack.java | 2 +- .../cards/r/RealmbreakerTheInvasionTree.java | 2 +- .../src/mage/cards/r/RealmsUncharted.java | 2 +- .../src/mage/cards/r/ReckonerShakedown.java | 2 +- .../src/mage/cards/r/ResearchDevelopment.java | 2 +- Mage.Sets/src/mage/cards/r/RevealingEye.java | 2 +- .../src/mage/cards/r/ReversalOfFortune.java | 2 +- .../src/mage/cards/r/RevivingVapors.java | 2 +- Mage.Sets/src/mage/cards/r/RofellossGift.java | 2 +- .../src/mage/cards/r/RootweaverDruid.java | 2 +- Mage.Sets/src/mage/cards/r/RunedCrown.java | 4 +-- .../src/mage/cards/s/SaheelisDirective.java | 2 +- Mage.Sets/src/mage/cards/s/SealedFate.java | 2 +- Mage.Sets/src/mage/cards/s/SeeBeyond.java | 2 +- .../src/mage/cards/s/SelectiveAdaptation.java | 4 +-- .../src/mage/cards/s/SelvalasStampede.java | 2 +- .../src/mage/cards/s/SemblanceAnvil.java | 2 +- Mage.Sets/src/mage/cards/s/ShadowKin.java | 2 +- .../src/mage/cards/s/ShiftyDoppelganger.java | 2 +- .../mage/cards/s/ShrineOfPiercingVision.java | 2 +- Mage.Sets/src/mage/cards/s/SiphonInsight.java | 2 +- .../src/mage/cards/s/SistersOfStoneDeath.java | 2 +- .../src/mage/cards/s/SkyclavePlunder.java | 2 +- Mage.Sets/src/mage/cards/s/SmeltingVat.java | 2 +- Mage.Sets/src/mage/cards/s/SoulFoundry.java | 2 +- .../src/mage/cards/s/SpectersShriek.java | 2 +- Mage.Sets/src/mage/cards/s/Spellbinder.java | 2 +- .../src/mage/cards/s/SplitTheSpoils.java | 2 +- .../src/mage/cards/s/StreamOfThought.java | 2 +- .../mage/cards/s/StrefanMaurerProgenitor.java | 2 +- .../src/mage/cards/s/StruggleForSanity.java | 4 +-- Mage.Sets/src/mage/cards/s/SummonersEgg.java | 2 +- Mage.Sets/src/mage/cards/t/TajuruParagon.java | 2 +- .../mage/cards/t/TakenumaAbandonedMire.java | 2 +- Mage.Sets/src/mage/cards/t/TalarasBane.java | 2 +- Mage.Sets/src/mage/cards/t/Tariff.java | 6 ++--- .../src/mage/cards/t/TayamLuminousEnigma.java | 2 +- Mage.Sets/src/mage/cards/t/Technomancer.java | 2 +- Mage.Sets/src/mage/cards/t/TectonicGiant.java | 2 +- Mage.Sets/src/mage/cards/t/TellingTime.java | 8 +++--- Mage.Sets/src/mage/cards/t/ThassasOracle.java | 2 +- .../src/mage/cards/t/TheDragonKamiReborn.java | 2 +- .../src/mage/cards/t/TheFirstTyrannicWar.java | 2 +- .../src/mage/cards/t/TheGrandEvolution.java | 2 +- Mage.Sets/src/mage/cards/t/TheWorldSpell.java | 2 +- Mage.Sets/src/mage/cards/t/ThiefOfSanity.java | 2 +- .../src/mage/cards/t/ThievesAuction.java | 2 +- Mage.Sets/src/mage/cards/t/ThoughtPrison.java | 2 +- .../src/mage/cards/t/ThoughtpickerWitch.java | 2 +- Mage.Sets/src/mage/cards/t/ThrullSurgeon.java | 2 +- .../src/mage/cards/t/TidehollowSculler.java | 2 +- .../src/mage/cards/t/TraumaticRevelation.java | 2 +- .../src/mage/cards/t/TreacherousUrge.java | 2 +- Mage.Sets/src/mage/cards/t/TruthOrTale.java | 4 +-- .../src/mage/cards/t/TurntimberSymbiosis.java | 2 +- .../src/mage/cards/t/TymaretCallsTheDead.java | 2 +- .../mage/cards/u/UltraMagnusTactician.java | 2 +- Mage.Sets/src/mage/cards/u/UnmooredEgo.java | 6 ++--- .../mage/cards/u/UvildaDeanOfPerfection.java | 2 +- .../src/mage/cards/v/ValakutAwakening.java | 2 +- .../src/mage/cards/v/ValkiGodOfLies.java | 4 +-- .../src/mage/cards/v/VendilionClique.java | 2 +- .../src/mage/cards/v/VerdantMastery.java | 4 +-- .../cards/v/VivienChampionOfTheWilds.java | 2 +- .../src/mage/cards/v/VivienOnTheHunt.java | 2 +- Mage.Sets/src/mage/cards/v/ViviensArkbow.java | 2 +- .../src/mage/cards/v/ViviensInvocation.java | 2 +- Mage.Sets/src/mage/cards/v/VoidMaw.java | 2 +- Mage.Sets/src/mage/cards/v/VolcanicSpite.java | 2 +- .../src/mage/cards/v/VolrathsDungeon.java | 2 +- .../src/mage/cards/w/WanderingArchaic.java | 2 +- .../src/mage/cards/w/WatchersOfTheDead.java | 2 +- .../src/mage/cards/w/WildfireDevils.java | 2 +- .../mage/cards/w/WinotaJoinerOfForces.java | 2 +- Mage.Sets/src/mage/cards/w/WordOfCommand.java | 2 +- .../src/mage/cards/w/WorldlyCounsel.java | 2 +- Mage.Sets/src/mage/cards/w/WrennAndSeven.java | 2 +- Mage.Sets/src/mage/cards/w/WuSpy.java | 2 +- .../src/mage/cards/x/XenagosTheReveler.java | 2 +- .../mage/cards/y/YouFindSomePrisoners.java | 2 +- .../mage/cards/z/ZaraRenegadeRecruiter.java | 2 +- .../CastCardFromOutsideTheGameEffect.java | 2 +- .../common/DrawDiscardOneOfThemEffect.java | 2 +- ...xileCardYouChooseTargetOpponentEffect.java | 2 +- .../common/MillThenPutInHandEffect.java | 2 +- ...romOneOfTwoZonesOntoBattlefieldEffect.java | 2 +- .../common/RevealAndSeparatePilesEffect.java | 2 +- .../abilities/effects/common/WishEffect.java | 2 +- .../DiscardCardYouChooseTargetEffect.java | 2 +- ...SearchLibraryGraveyardPutInHandEffect.java | 2 +- ...raryGraveyardPutOntoBattlefieldEffect.java | 2 +- ...LibraryGraveyardWithLessMVPutIntoPlay.java | 2 +- ...dHandLibraryForCardNameAndExileEffect.java | 6 ++--- .../effects/keyword/FatesealEffect.java | 2 +- .../abilities/keyword/CascadeAbility.java | 2 +- .../abilities/keyword/HideawayAbility.java | 2 +- .../mage/abilities/keyword/RippleAbility.java | 2 +- Mage/src/main/java/mage/cards/CardImpl.java | 2 +- .../src/main/java/mage/game/ZonesHandler.java | 27 ++++++++++--------- .../dungeons/DungeonOfTheMadMageDungeon.java | 2 +- .../command/dungeons/UndercityDungeon.java | 2 +- Mage/src/main/java/mage/players/Player.java | 4 --- .../main/java/mage/players/PlayerImpl.java | 12 ++++----- Mage/src/main/java/mage/util/CardUtil.java | 2 +- 280 files changed, 341 insertions(+), 342 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AethermagesTouch.java b/Mage.Sets/src/mage/cards/a/AethermagesTouch.java index ad47780bb23..274a72a17a9 100644 --- a/Mage.Sets/src/mage/cards/a/AethermagesTouch.java +++ b/Mage.Sets/src/mage/cards/a/AethermagesTouch.java @@ -67,7 +67,7 @@ class AethermagesTouchEffect extends OneShotEffect { FilterCreatureCard filter = new FilterCreatureCard("a creature card to put onto the battlefield"); controller.revealCards(sourceObject.getIdName(), cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, filter); - if (cards.count(filter, game) > 0 && controller.choose(outcome, cards, target, game)) { + if (cards.count(filter, game) > 0 && controller.choose(outcome, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/a/Aetherspouts.java b/Mage.Sets/src/mage/cards/a/Aetherspouts.java index 453fcf0091f..3b1ff006ad2 100644 --- a/Mage.Sets/src/mage/cards/a/Aetherspouts.java +++ b/Mage.Sets/src/mage/cards/a/Aetherspouts.java @@ -110,7 +110,7 @@ class AetherspoutsEffect extends OneShotEffect { if (!player.canRespond()) { return false; } - player.choose(Outcome.Neutral, cards, target, game); + player.choose(Outcome.Neutral, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); @@ -147,7 +147,7 @@ class AetherspoutsEffect extends OneShotEffect { } target = new TargetCard(Zone.BATTLEFIELD, new FilterCard("order to put on bottom of library (last chosen will be bottommost card)")); while (player.canRespond() && cards.size() > 1) { - player.choose(Outcome.Neutral, cards, target, game); + player.choose(Outcome.Neutral, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { diff --git a/Mage.Sets/src/mage/cards/a/AgonizingMemories.java b/Mage.Sets/src/mage/cards/a/AgonizingMemories.java index 9b6f7fbceb7..3f27588c6ff 100644 --- a/Mage.Sets/src/mage/cards/a/AgonizingMemories.java +++ b/Mage.Sets/src/mage/cards/a/AgonizingMemories.java @@ -72,7 +72,7 @@ class AgonizingMemoriesEffect extends OneShotEffect { private void chooseCardInHandAndPutOnTopOfLibrary(Game game, Ability source, Player you, Player targetPlayer) { if (!targetPlayer.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard("card to put on the top of library (last chosen will be on top)")); - if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) { + if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, source, game)) { Card card = targetPlayer.getHand().get(target.getFirstTarget(), game); if (card != null) { targetPlayer.moveCardToLibraryWithInfo(card, source, game, Zone.HAND, true, false); diff --git a/Mage.Sets/src/mage/cards/a/AgonizingRemorse.java b/Mage.Sets/src/mage/cards/a/AgonizingRemorse.java index c145723ff02..9a39cf935c4 100644 --- a/Mage.Sets/src/mage/cards/a/AgonizingRemorse.java +++ b/Mage.Sets/src/mage/cards/a/AgonizingRemorse.java @@ -81,7 +81,7 @@ class AgonizingRemorseEffect extends OneShotEffect { target.setNotTarget(true); cards = opponent.getGraveyard(); } - if (controller.choose(outcome, cards, target, game)) { + if (controller.choose(outcome, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/a/AladdinsLamp.java b/Mage.Sets/src/mage/cards/a/AladdinsLamp.java index b99bbb73082..679ef7abfe2 100644 --- a/Mage.Sets/src/mage/cards/a/AladdinsLamp.java +++ b/Mage.Sets/src/mage/cards/a/AladdinsLamp.java @@ -70,7 +70,7 @@ class AladdinsLampEffect extends ReplacementEffectImpl { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, source.getManaCostsToPay().getX())); controller.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to stay at the top of library")); - if (controller.choose(outcome, cards, target, game)) { + if (controller.choose(outcome, cards, target, source, game)) { cards.remove(target.getFirstTarget()); } controller.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/a/AllureOfTheUnknown.java b/Mage.Sets/src/mage/cards/a/AllureOfTheUnknown.java index 662e298721f..7d476e3894e 100644 --- a/Mage.Sets/src/mage/cards/a/AllureOfTheUnknown.java +++ b/Mage.Sets/src/mage/cards/a/AllureOfTheUnknown.java @@ -77,7 +77,7 @@ class AllureOfTheUnknownEffect extends OneShotEffect { return false; } TargetCard targetCard = new TargetCardInLibrary(StaticFilters.FILTER_CARD_A_NON_LAND); - opponent.choose(Outcome.Exile, cards, targetCard, game); + opponent.choose(Outcome.Exile, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (player.moveCards(card, Zone.EXILED, source, game) && card != null diff --git a/Mage.Sets/src/mage/cards/a/AmassTheComponents.java b/Mage.Sets/src/mage/cards/a/AmassTheComponents.java index 8c8c778d802..05c85f87507 100644 --- a/Mage.Sets/src/mage/cards/a/AmassTheComponents.java +++ b/Mage.Sets/src/mage/cards/a/AmassTheComponents.java @@ -68,7 +68,7 @@ class AmassTheComponentsEffect extends OneShotEffect { FilterCard filter = new FilterCard("card from your hand to put on the bottom of your library"); TargetCard target = new TargetCard(Zone.HAND, filter); - if (player.choose(Outcome.Detriment, player.getHand(), target, game)) { + if (player.choose(Outcome.Detriment, player.getHand(), target, source, game)) { Card card = player.getHand().get(target.getFirstTarget(), game); if (card != null) { return player.putCardsOnBottomOfLibrary(card, game, source, true); diff --git a/Mage.Sets/src/mage/cards/a/AminatousAugury.java b/Mage.Sets/src/mage/cards/a/AminatousAugury.java index 796887be04d..573e5513dc1 100644 --- a/Mage.Sets/src/mage/cards/a/AminatousAugury.java +++ b/Mage.Sets/src/mage/cards/a/AminatousAugury.java @@ -102,7 +102,7 @@ class AminatousAuguryEffect extends OneShotEffect { if (cardsToCast.count(StaticFilters.FILTER_CARD_LAND, game) > 0) { if (controller.chooseUse(Outcome.PutLandInPlay, "Put a land from among the exiled cards into play?", source, game)) { - if (controller.choose(Outcome.PutLandInPlay, cardsToCast, target, game)) { + if (controller.choose(Outcome.PutLandInPlay, cardsToCast, target, source, game)) { Card card = cardsToCast.get(target.getFirstTarget(), game); if (card != null) { cardsToCast.remove(card); diff --git a/Mage.Sets/src/mage/cards/a/AncestralKnowledge.java b/Mage.Sets/src/mage/cards/a/AncestralKnowledge.java index dcc3c9f5e98..791a9520c69 100644 --- a/Mage.Sets/src/mage/cards/a/AncestralKnowledge.java +++ b/Mage.Sets/src/mage/cards/a/AncestralKnowledge.java @@ -71,7 +71,7 @@ class AncestralKnowledgeEffect extends OneShotEffect { if (!cards.isEmpty()) { controller.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, new FilterCard("cards to exile")); - controller.choose(Outcome.Exile, cards, target, game); + controller.choose(Outcome.Exile, cards, target, source, game); Cards toExile = new CardsImpl(target.getTargets()); controller.moveCards(toExile, Zone.EXILED, source, game); cards.removeAll(toExile); diff --git a/Mage.Sets/src/mage/cards/a/AoTheDawnSky.java b/Mage.Sets/src/mage/cards/a/AoTheDawnSky.java index 67953334731..b42a1741e72 100644 --- a/Mage.Sets/src/mage/cards/a/AoTheDawnSky.java +++ b/Mage.Sets/src/mage/cards/a/AoTheDawnSky.java @@ -100,7 +100,7 @@ class AoTheDawnSkyEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 7)); TargetCard target = new AoTheDawnSkyTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); cards.retainZone(Zone.LIBRARY, game); player.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java b/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java index 661bd4aea3a..acc37db9fc8 100644 --- a/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java +++ b/Mage.Sets/src/mage/cards/a/ArachnusSpinner.java @@ -98,7 +98,7 @@ class ArachnusSpinnerEffect extends OneShotEffect { Card card = null; if (controller.chooseUse(Outcome.Neutral, "Search your graveyard for Arachnus Web?", source, game)) { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/a/ArmoredSkyhunter.java b/Mage.Sets/src/mage/cards/a/ArmoredSkyhunter.java index 9c20073645b..a01fdea34a7 100644 --- a/Mage.Sets/src/mage/cards/a/ArmoredSkyhunter.java +++ b/Mage.Sets/src/mage/cards/a/ArmoredSkyhunter.java @@ -87,7 +87,7 @@ class ArmoredSkyhunterEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); TargetCardInLibrary targetCard = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, targetCard, game); + player.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card == null) { return player.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java b/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java index 3576c4eb1e7..0775bb7840b 100644 --- a/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java +++ b/Mage.Sets/src/mage/cards/a/AshiokNightmareMuse.java @@ -86,7 +86,7 @@ class AshiokNightmareMuseBounceEffect extends OneShotEffect { return true; } TargetCardInHand target = new TargetCardInHand(); - if (!player.choose(outcome, player.getHand(), target, game)) { + if (!player.choose(outcome, player.getHand(), target, source, game)) { return false; } return player.moveCards(game.getCard(target.getFirstTarget()), Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/a/AshnodsCylix.java b/Mage.Sets/src/mage/cards/a/AshnodsCylix.java index b5d661d4ac1..0ef37717fda 100644 --- a/Mage.Sets/src/mage/cards/a/AshnodsCylix.java +++ b/Mage.Sets/src/mage/cards/a/AshnodsCylix.java @@ -72,7 +72,7 @@ class AshnodsCylixEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 3)); player.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put on top of your library")); - if (player.choose(Outcome.Benefit, cards, target, game)) { + if (player.choose(Outcome.Benefit, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/a/AtraxaGrandUnifier.java b/Mage.Sets/src/mage/cards/a/AtraxaGrandUnifier.java index 73da1e6530a..78cf7605413 100644 --- a/Mage.Sets/src/mage/cards/a/AtraxaGrandUnifier.java +++ b/Mage.Sets/src/mage/cards/a/AtraxaGrandUnifier.java @@ -87,7 +87,7 @@ class AtraxaGrandUnifierEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 10)); player.revealCards(source, cards, game); TargetCard target = new AtraxaGrandUnifierTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); player.moveCardsToHandWithInfo(toHand, source, game, true); cards.retainZone(Zone.LIBRARY, game); diff --git a/Mage.Sets/src/mage/cards/a/AtrisOracleOfHalfTruths.java b/Mage.Sets/src/mage/cards/a/AtrisOracleOfHalfTruths.java index 4b131130bf0..eb54b10785d 100644 --- a/Mage.Sets/src/mage/cards/a/AtrisOracleOfHalfTruths.java +++ b/Mage.Sets/src/mage/cards/a/AtrisOracleOfHalfTruths.java @@ -83,7 +83,7 @@ class AtrisOracleOfHalfTruthsEffect extends OneShotEffect { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 3)); TargetCard target = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, filter); - targetOpponent.choose(outcome, cards, target, game); + targetOpponent.choose(outcome, cards, target, source, game); Cards faceDownPile = new CardsImpl(target.getTargets()); cards.removeAll(target.getTargets()); controller.revealCards(sourceObject.getIdName() + " - cards in face-up pile", cards, game); diff --git a/Mage.Sets/src/mage/cards/a/AuthorOfShadows.java b/Mage.Sets/src/mage/cards/a/AuthorOfShadows.java index 312f79a7e8c..7ac2fd7e37c 100644 --- a/Mage.Sets/src/mage/cards/a/AuthorOfShadows.java +++ b/Mage.Sets/src/mage/cards/a/AuthorOfShadows.java @@ -88,7 +88,7 @@ class AuthorOfShadowsEffect extends OneShotEffect { TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD_A_NON_LAND); target.setNotTarget(true); - controller.choose(outcome, cards, target, game); + controller.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return true; diff --git a/Mage.Sets/src/mage/cards/b/BalshanBeguiler.java b/Mage.Sets/src/mage/cards/b/BalshanBeguiler.java index 1b26b36a457..9cd8b8cb98f 100644 --- a/Mage.Sets/src/mage/cards/b/BalshanBeguiler.java +++ b/Mage.Sets/src/mage/cards/b/BalshanBeguiler.java @@ -78,7 +78,7 @@ class BalshanBeguilerEffect extends OneShotEffect { } player.revealCards(source, cards, game); TargetCard target = new TargetCardInLibrary(); - if (you.choose(Outcome.Benefit, cards, target, game)) { + if (you.choose(Outcome.Benefit, cards, target, source, game)) { Card card = player.getLibrary().getCard(target.getFirstTarget(), game); you.moveCards(card, Zone.GRAVEYARD, source, game); } diff --git a/Mage.Sets/src/mage/cards/b/Bamboozle.java b/Mage.Sets/src/mage/cards/b/Bamboozle.java index 38c9b5bc2c3..78c6a9da487 100644 --- a/Mage.Sets/src/mage/cards/b/Bamboozle.java +++ b/Mage.Sets/src/mage/cards/b/Bamboozle.java @@ -69,7 +69,7 @@ class BamboozleEffect extends OneShotEffect { } targetPlayer.revealCards("Bamboozle Reveal", putOnTopLibrary, game); TargetCard target = new TargetCard(2, Zone.LIBRARY, new FilterCard("2 cards out of this stack to put into their graveyard")); - if (controller.choose(Outcome.Discard, putOnTopLibrary, target, game)) { + if (controller.choose(Outcome.Discard, putOnTopLibrary, target, source, game)) { for (UUID cardId : target.getTargets()) { putInGraveyard.add(game.getCard(cardId)); putOnTopLibrary.remove(game.getCard(cardId)); diff --git a/Mage.Sets/src/mage/cards/b/BloodForBones.java b/Mage.Sets/src/mage/cards/b/BloodForBones.java index cbfe5992e9e..20532cf4c5f 100644 --- a/Mage.Sets/src/mage/cards/b/BloodForBones.java +++ b/Mage.Sets/src/mage/cards/b/BloodForBones.java @@ -76,14 +76,14 @@ class BloodForBonesEffect extends OneShotEffect { return false; } TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter); - if (player.choose(outcome, player.getGraveyard(), target, game)) { + if (player.choose(outcome, player.getGraveyard(), target, source, game)) { player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); } if (player.getGraveyard().getCards(game).stream().noneMatch(card -> card.isCreature(game))) { return true; } target = new TargetCardInYourGraveyard(filter2); - if (player.choose(outcome, player.getGraveyard(), target, game)) { + if (player.choose(outcome, player.getGraveyard(), target, source, game)) { player.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game); } return true; diff --git a/Mage.Sets/src/mage/cards/b/BoneyardParley.java b/Mage.Sets/src/mage/cards/b/BoneyardParley.java index 24ae9d6aec0..42fe93d72a5 100644 --- a/Mage.Sets/src/mage/cards/b/BoneyardParley.java +++ b/Mage.Sets/src/mage/cards/b/BoneyardParley.java @@ -84,7 +84,7 @@ class BoneyardParleyEffect extends OneShotEffect { if (opponent != null) { TargetCard targetCards = new TargetCard(0, cards.size(), Zone.EXILED, new FilterCard("cards to put in the first pile")); List pile1 = new ArrayList<>(); - if (opponent.choose(Outcome.Neutral, cards, targetCards, game)) { + if (opponent.choose(Outcome.Neutral, cards, targetCards, source, game)) { List targets = targetCards.getTargets(); for (UUID targetId : targets) { Card card = cards.get(targetId, game); diff --git a/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java b/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java index e0fa1b145ab..f9782089c14 100644 --- a/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java +++ b/Mage.Sets/src/mage/cards/b/BoonweaverGiant.java @@ -84,7 +84,7 @@ class BoonweaverGiantEffect extends OneShotEffect { // Choose card from graveyard if (controller.chooseUse(Outcome.Neutral, "Search your graveyard for an Aura card?", source, game)) { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } @@ -92,7 +92,7 @@ class BoonweaverGiantEffect extends OneShotEffect { // Choose card from your hand if (card == null && controller.chooseUse(Outcome.Neutral, "Search your Hand for an Aura card?", source, game)) { TargetCardInHand target = new TargetCardInHand(filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/b/BoosterTutor.java b/Mage.Sets/src/mage/cards/b/BoosterTutor.java index d3889ec5534..1b7d11eec4c 100644 --- a/Mage.Sets/src/mage/cards/b/BoosterTutor.java +++ b/Mage.Sets/src/mage/cards/b/BoosterTutor.java @@ -91,7 +91,7 @@ class BoosterTutorEffect extends OneShotEffect { game.loadCards(cardsToLoad, controller.getId()); CardsImpl cards = new CardsImpl(); cards.addAll(boosterPack); - if (controller.choose(Outcome.Benefit, cards, targetCard, game)) { + if (controller.choose(Outcome.Benefit, cards, targetCard, source, game)) { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/b/BoreasCharger.java b/Mage.Sets/src/mage/cards/b/BoreasCharger.java index b84fa7fddae..33258982989 100644 --- a/Mage.Sets/src/mage/cards/b/BoreasCharger.java +++ b/Mage.Sets/src/mage/cards/b/BoreasCharger.java @@ -122,7 +122,7 @@ class BoreasChargerEffect extends OneShotEffect { } TargetCard target3 = new TargetCard(Zone.LIBRARY, filter3); Card cardToBattlefield = null; - if (controller.choose(outcome, cardsToHand, target3, game)) { + if (controller.choose(outcome, cardsToHand, target3, source, game)) { cardToBattlefield = cardsToHand.get(target2.getFirstTarget(), game); cardsToHand.remove(cardToBattlefield); } diff --git a/Mage.Sets/src/mage/cards/b/BountyOfSkemfar.java b/Mage.Sets/src/mage/cards/b/BountyOfSkemfar.java index ed088be5899..03729cb3666 100644 --- a/Mage.Sets/src/mage/cards/b/BountyOfSkemfar.java +++ b/Mage.Sets/src/mage/cards/b/BountyOfSkemfar.java @@ -71,7 +71,7 @@ class BountyOfSkemfarEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); player.revealCards(source, cards, game); TargetCard target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_LAND); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card land = cards.get(target.getFirstTarget(), game); if (land != null) { player.moveCards( @@ -81,7 +81,7 @@ class BountyOfSkemfarEffect extends OneShotEffect { } cards.removeIf(uuid -> game.getState().getZone(uuid) != Zone.LIBRARY); target = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card elf = cards.get(target.getFirstTarget(), game); if (elf != null) { player.moveCardToHandWithInfo(elf, source, game, true); diff --git a/Mage.Sets/src/mage/cards/b/BrainMaggot.java b/Mage.Sets/src/mage/cards/b/BrainMaggot.java index 61fcf2cccb8..108af829b73 100644 --- a/Mage.Sets/src/mage/cards/b/BrainMaggot.java +++ b/Mage.Sets/src/mage/cards/b/BrainMaggot.java @@ -82,7 +82,7 @@ class BrainMaggotExileEffect extends OneShotEffect { FilterCard filter = new FilterNonlandCard("nonland card to exile"); TargetCard target = new TargetCard(Zone.HAND, filter); - if (opponent.getHand().count(filter, game) > 0 && controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (opponent.getHand().count(filter, game) > 0 && controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); // If source permanent leaves the battlefield before its triggered ability resolves, the target card won't be exiled. if (card != null && game.getState().getZone(source.getSourceId()) == Zone.BATTLEFIELD) { diff --git a/Mage.Sets/src/mage/cards/b/BreachTheMultiverse.java b/Mage.Sets/src/mage/cards/b/BreachTheMultiverse.java index fac2a975b7a..9b0aa6cf403 100644 --- a/Mage.Sets/src/mage/cards/b/BreachTheMultiverse.java +++ b/Mage.Sets/src/mage/cards/b/BreachTheMultiverse.java @@ -87,7 +87,7 @@ class BreachTheMultiverseEffect extends OneShotEffect { } target.clearChosen(); target.withChooseHint("from " + player.getName() + "'s graveyard"); - controller.choose(Outcome.PutCreatureInPlay, player.getGraveyard(), target, game); + controller.choose(Outcome.PutCreatureInPlay, player.getGraveyard(), target, source, game); cards.add(target.getFirstTarget()); } return controller.moveCards(cards, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/b/BrilliantUltimatum.java b/Mage.Sets/src/mage/cards/b/BrilliantUltimatum.java index 21308bfd4c0..58f0828bc47 100644 --- a/Mage.Sets/src/mage/cards/b/BrilliantUltimatum.java +++ b/Mage.Sets/src/mage/cards/b/BrilliantUltimatum.java @@ -77,7 +77,7 @@ class BrilliantUltimatumEffect extends OneShotEffect { Cards pile1 = new CardsImpl(); List pileOne = new ArrayList<>(); List pileTwo = new ArrayList<>(); - if (opponent.choose(Outcome.Neutral, pile2, target, game)) { + if (opponent.choose(Outcome.Neutral, pile2, target, source, game)) { List targets = target.getTargets(); for (UUID targetId : targets) { Card card = pile2.get(targetId, game); diff --git a/Mage.Sets/src/mage/cards/b/Browse.java b/Mage.Sets/src/mage/cards/b/Browse.java index 1a671b892f3..83bf00152b3 100644 --- a/Mage.Sets/src/mage/cards/b/Browse.java +++ b/Mage.Sets/src/mage/cards/b/Browse.java @@ -63,7 +63,7 @@ class BrowseEffect extends OneShotEffect { if (!cards.isEmpty()) { controller.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put in your hand")); - if (controller.choose(Outcome.Benefit, cards, target, game)) { + if (controller.choose(Outcome.Benefit, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/b/BrunaLightOfAlabaster.java b/Mage.Sets/src/mage/cards/b/BrunaLightOfAlabaster.java index 9a6da1ee603..6db0c8fce8a 100644 --- a/Mage.Sets/src/mage/cards/b/BrunaLightOfAlabaster.java +++ b/Mage.Sets/src/mage/cards/b/BrunaLightOfAlabaster.java @@ -121,7 +121,7 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect { && countHand > 0 && controller.chooseUse(Outcome.Benefit, "Attach an Aura from your hand?", source, game)) { TargetCard targetAura = new TargetCard(Zone.HAND, filterAuraCard); - if (!controller.choose(Outcome.Benefit, controller.getHand(), targetAura, game)) { continue; } + if (!controller.choose(Outcome.Benefit, controller.getHand(), targetAura, source, game)) { continue; } Card aura = game.getCard(targetAura.getFirstTarget()); if (aura == null) { continue; } @@ -139,7 +139,7 @@ class BrunaLightOfAlabasterEffect extends OneShotEffect { && countGraveyard > 0 && controller.chooseUse(Outcome.Benefit, "Attach an Aura from your graveyard?", source, game)) { TargetCard targetAura = new TargetCard(Zone.GRAVEYARD, filterAuraCard); - if (!controller.choose(Outcome.Benefit, controller.getGraveyard(), targetAura, game)) { continue; } + if (!controller.choose(Outcome.Benefit, controller.getGraveyard(), targetAura, source, game)) { continue; } Card aura = game.getCard(targetAura.getFirstTarget()); if (aura == null) { continue; } diff --git a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java index 614e841f523..4b2ff37cf46 100644 --- a/Mage.Sets/src/mage/cards/c/CallToTheKindred.java +++ b/Mage.Sets/src/mage/cards/c/CallToTheKindred.java @@ -92,7 +92,7 @@ class CallToTheKindredEffect extends OneShotEffect { if (cards.count(filter, game) > 0) { TargetCard target = new TargetCardInLibrary(0, 1, filter); - controller.choose(Outcome.PutCreatureInPlay, cards, target, game); + controller.choose(Outcome.PutCreatureInPlay, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/c/CapriciousHellraiser.java b/Mage.Sets/src/mage/cards/c/CapriciousHellraiser.java index db43681949c..9a45be55285 100644 --- a/Mage.Sets/src/mage/cards/c/CapriciousHellraiser.java +++ b/Mage.Sets/src/mage/cards/c/CapriciousHellraiser.java @@ -84,7 +84,7 @@ class CapriciousHellraiserEffect extends OneShotEffect { controller.moveCards(toExile, Zone.EXILED, source, game); if (cardsToChooseFrom.size() > 0) { TargetCard targetCard = new TargetCard(1, Zone.EXILED, StaticFilters.FILTER_CARD); - controller.choose(Outcome.Copy, cardsToChooseFrom, targetCard, game); + controller.choose(Outcome.Copy, cardsToChooseFrom, targetCard, source, game); Card cardToCopy = game.getCard(targetCard.getTargets().get(0)); if (cardToCopy == null) { return true; diff --git a/Mage.Sets/src/mage/cards/c/CauldronsGift.java b/Mage.Sets/src/mage/cards/c/CauldronsGift.java index 4539c51228a..3f44992546e 100644 --- a/Mage.Sets/src/mage/cards/c/CauldronsGift.java +++ b/Mage.Sets/src/mage/cards/c/CauldronsGift.java @@ -76,7 +76,7 @@ class CauldronsGiftEffect extends OneShotEffect { } TargetCard target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return false; } Card card = game.getCard(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/c/CheckForTraps.java b/Mage.Sets/src/mage/cards/c/CheckForTraps.java index d523ba6a8bd..f41719005ac 100644 --- a/Mage.Sets/src/mage/cards/c/CheckForTraps.java +++ b/Mage.Sets/src/mage/cards/c/CheckForTraps.java @@ -70,7 +70,7 @@ class CheckForTrapsEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_NON_LAND); target.setNotTarget(true); boolean opponentLoseLife = false; - if (controller.choose(outcome, opponent.getHand(), target, game)) { + if (controller.choose(outcome, opponent.getHand(), target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/c/ChromeCourier.java b/Mage.Sets/src/mage/cards/c/ChromeCourier.java index 54429c7404f..81caf8472be 100644 --- a/Mage.Sets/src/mage/cards/c/ChromeCourier.java +++ b/Mage.Sets/src/mage/cards/c/ChromeCourier.java @@ -83,7 +83,7 @@ class ChromeCourierEffect extends OneShotEffect { default: TargetCard target = new TargetCardInLibrary(); target.withChooseHint("to hand"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = cards.get(target.getFirstTarget(), game); } player.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/c/CitystalkerConnoisseur.java b/Mage.Sets/src/mage/cards/c/CitystalkerConnoisseur.java index 746a87e1ac8..caf2d439d7f 100644 --- a/Mage.Sets/src/mage/cards/c/CitystalkerConnoisseur.java +++ b/Mage.Sets/src/mage/cards/c/CitystalkerConnoisseur.java @@ -94,7 +94,7 @@ class CitystalkerConnoisseurEffect extends OneShotEffect { return true; } TargetCardInHand target = new TargetCardInHand(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.discard(cards.get(target.getFirstTarget(), game), false, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/c/CloneShell.java b/Mage.Sets/src/mage/cards/c/CloneShell.java index 95bf49d9189..d792ace2ba3 100644 --- a/Mage.Sets/src/mage/cards/c/CloneShell.java +++ b/Mage.Sets/src/mage/cards/c/CloneShell.java @@ -69,7 +69,7 @@ class CloneShellEffect extends OneShotEffect { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 4)); if (!cards.isEmpty()) { TargetCard target1 = new TargetCard(Zone.LIBRARY, filter1); - if (controller.choose(Outcome.Benefit, cards, target1, game)) { + if (controller.choose(Outcome.Benefit, cards, target1, source, game)) { Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/c/CongregationAtDawn.java b/Mage.Sets/src/mage/cards/c/CongregationAtDawn.java index d1d604e46f5..06104469f73 100644 --- a/Mage.Sets/src/mage/cards/c/CongregationAtDawn.java +++ b/Mage.Sets/src/mage/cards/c/CongregationAtDawn.java @@ -77,7 +77,7 @@ class CongregationAtDawnEffect extends OneShotEffect { TargetCard targetToLib = new TargetCard(Zone.LIBRARY, new FilterCard(textTop)); while (revealed.size() > 1 && controller.canRespond()) { - controller.choose(Outcome.Neutral, revealed, targetToLib, game); + controller.choose(Outcome.Neutral, revealed, targetToLib, source, game); Card card = revealed.get(targetToLib.getFirstTarget(), game); if (card != null) { revealed.remove(card); diff --git a/Mage.Sets/src/mage/cards/c/ConspiracyTheorist.java b/Mage.Sets/src/mage/cards/c/ConspiracyTheorist.java index 5b8bd309e17..4db4c23b124 100644 --- a/Mage.Sets/src/mage/cards/c/ConspiracyTheorist.java +++ b/Mage.Sets/src/mage/cards/c/ConspiracyTheorist.java @@ -123,7 +123,7 @@ class ConspiracyTheoristEffect extends OneShotEffect { boolean validTarget = cards.stream() .anyMatch(card -> target.canTarget(card, game)); if (validTarget && controller.chooseUse(Outcome.Benefit, "Exile a card?", source, game)) { - if (controller.choose(Outcome.Benefit, cards, target, game)) { + if (controller.choose(Outcome.Benefit, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null && controller.moveCards(card, Zone.EXILED, source, game)) { // you may cast it this turn diff --git a/Mage.Sets/src/mage/cards/c/ContagiousVorrac.java b/Mage.Sets/src/mage/cards/c/ContagiousVorrac.java index 5c4b019d254..d373bd49b18 100644 --- a/Mage.Sets/src/mage/cards/c/ContagiousVorrac.java +++ b/Mage.Sets/src/mage/cards/c/ContagiousVorrac.java @@ -73,7 +73,7 @@ class ContagiousVorracEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 4)); TargetCard target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_LAND); - player.choose(Outcome.DrawCard, cards, target, game); + player.choose(Outcome.DrawCard, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.revealCards(source, new CardsImpl(card), game); diff --git a/Mage.Sets/src/mage/cards/c/CorpseAppraiser.java b/Mage.Sets/src/mage/cards/c/CorpseAppraiser.java index 356eab6dd42..11fc60936a6 100644 --- a/Mage.Sets/src/mage/cards/c/CorpseAppraiser.java +++ b/Mage.Sets/src/mage/cards/c/CorpseAppraiser.java @@ -83,7 +83,7 @@ class CorpseAppraiserEffect extends OneShotEffect { return true; } TargetCard target = new TargetCardInLibrary(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(cards.get(target.getFirstTarget(), game), Zone.HAND, source, game); cards.retainZone(Zone.LIBRARY, game); player.moveCards(cards, Zone.GRAVEYARD, source, game); diff --git a/Mage.Sets/src/mage/cards/c/CovetousUrge.java b/Mage.Sets/src/mage/cards/c/CovetousUrge.java index f75edb60c0a..afd556bedd1 100644 --- a/Mage.Sets/src/mage/cards/c/CovetousUrge.java +++ b/Mage.Sets/src/mage/cards/c/CovetousUrge.java @@ -76,10 +76,10 @@ class CovetousUrgeEffect extends OneShotEffect { return true; } target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_A_NON_LAND); - controller.choose(Outcome.Exile, player.getHand(), target, game); + controller.choose(Outcome.Exile, player.getHand(), target, source, game); } else { target = new TargetCard(Zone.GRAVEYARD, StaticFilters.FILTER_CARD_A_NON_LAND); - controller.choose(Outcome.Exile, player.getGraveyard(), target, game); + controller.choose(Outcome.Exile, player.getGraveyard(), target, source, game); } // use same player's zone for all Covetous Urge instances diff --git a/Mage.Sets/src/mage/cards/c/CreepingDread.java b/Mage.Sets/src/mage/cards/c/CreepingDread.java index 1f2d0a2b421..a5d4bea56f2 100644 --- a/Mage.Sets/src/mage/cards/c/CreepingDread.java +++ b/Mage.Sets/src/mage/cards/c/CreepingDread.java @@ -76,7 +76,7 @@ class CreepingDreadEffect extends OneShotEffect { if(!controller.getHand().isEmpty()) { TargetCard controllerTarget = new TargetCard(Zone.HAND, new FilterCard()); - if(controller.choose(Outcome.Discard, controller.getHand(), controllerTarget, game)) { + if(controller.choose(Outcome.Discard, controller.getHand(), controllerTarget, source, game)) { Card card = controller.getHand().get(controllerTarget.getFirstTarget(), game); if (card != null) { typesChosen = new HashSet<>(card.getCardType(game)); @@ -91,7 +91,7 @@ class CreepingDreadEffect extends OneShotEffect { // opponent discards a card - if it is same card type as controller, add to opponentsAffected if(opponent != null && !opponent.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard()); - if(opponent.choose(Outcome.Discard, opponent.getHand(), target, game)) { + if(opponent.choose(Outcome.Discard, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { if (!typesChosen.isEmpty()) { diff --git a/Mage.Sets/src/mage/cards/c/CruelFate.java b/Mage.Sets/src/mage/cards/c/CruelFate.java index 6c5a44dbaa6..44ca1a3084c 100644 --- a/Mage.Sets/src/mage/cards/c/CruelFate.java +++ b/Mage.Sets/src/mage/cards/c/CruelFate.java @@ -69,7 +69,7 @@ class CruelFateEffect extends OneShotEffect { return controller.moveCards(cards, Zone.GRAVEYARD, source, game); } TargetCard targetCard = new TargetCardInLibrary(); - controller.choose(outcome, cards, targetCard, game); + controller.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.GRAVEYARD, source, game); diff --git a/Mage.Sets/src/mage/cards/c/Cultivate.java b/Mage.Sets/src/mage/cards/c/Cultivate.java index 48fe88af542..8f54a7e5298 100644 --- a/Mage.Sets/src/mage/cards/c/Cultivate.java +++ b/Mage.Sets/src/mage/cards/c/Cultivate.java @@ -74,7 +74,7 @@ class CultivateEffect extends OneShotEffect { controller.revealCards(sourceObject.getIdName(), revealed, game); if (target.getTargets().size() == 2) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, revealed, target2, game); + controller.choose(Outcome.Benefit, revealed, target2, source, game); Card card = revealed.get(target2.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.BATTLEFIELD, source, game, true, false, false, null); diff --git a/Mage.Sets/src/mage/cards/c/CunningAbduction.java b/Mage.Sets/src/mage/cards/c/CunningAbduction.java index 8346b21c01a..dd487f39ea3 100644 --- a/Mage.Sets/src/mage/cards/c/CunningAbduction.java +++ b/Mage.Sets/src/mage/cards/c/CunningAbduction.java @@ -75,7 +75,7 @@ class CunningAbductionExileEffect extends OneShotEffect { Card card = null; if (cardsHand > 0) { TargetCard target = new TargetCard(Zone.HAND, filter); - if (controller.choose(Outcome.Benefit, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Benefit, opponent.getHand(), target, source, game)) { card = opponent.getHand().get(target.getFirstTarget(), game); } } diff --git a/Mage.Sets/src/mage/cards/c/CurrencyConverter.java b/Mage.Sets/src/mage/cards/c/CurrencyConverter.java index 1f68fc71078..4ab44451afc 100644 --- a/Mage.Sets/src/mage/cards/c/CurrencyConverter.java +++ b/Mage.Sets/src/mage/cards/c/CurrencyConverter.java @@ -117,7 +117,7 @@ class CurrencyConverterTokenEffect extends OneShotEffect { Card card; if (exileZone.size() > 1) { TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD); - player.choose(outcome, exileZone, target, game); + player.choose(outcome, exileZone, target, source, game); card = exileZone.get(target.getFirstTarget(), game); } else { card = exileZone.getRandom(game); diff --git a/Mage.Sets/src/mage/cards/c/CustodiSquire.java b/Mage.Sets/src/mage/cards/c/CustodiSquire.java index 7482f8be3d4..a49bf541210 100644 --- a/Mage.Sets/src/mage/cards/c/CustodiSquire.java +++ b/Mage.Sets/src/mage/cards/c/CustodiSquire.java @@ -111,7 +111,7 @@ class CustodiSquireVote extends VoteHandler { TargetCardInGraveyard target = new TargetCardInGraveyard(filter); target.withChooseHint(voteInfo + " (from graveyard to hand)"); target.setNotTarget(true); - decidingPlayer.choose(Outcome.ReturnToHand, controller.getGraveyard(), target, game); + decidingPlayer.choose(Outcome.ReturnToHand, controller.getGraveyard(), target, source, game); return controller.getGraveyard().get(target.getFirstTarget(), game); } diff --git a/Mage.Sets/src/mage/cards/d/DarkSupplicant.java b/Mage.Sets/src/mage/cards/d/DarkSupplicant.java index 2ec6c3789ce..9a5c149e6d8 100644 --- a/Mage.Sets/src/mage/cards/d/DarkSupplicant.java +++ b/Mage.Sets/src/mage/cards/d/DarkSupplicant.java @@ -89,7 +89,7 @@ class DarkSupplicantEffect extends OneShotEffect { // Graveyard check if (controller.chooseUse(Outcome.Benefit, "Search your graveyard for Scion of Darkness?", source, game)) { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(1, 1, filter, true); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (controller.choose(outcome, controller.getGraveyard(), target, source, game)) { selectedCard = game.getCard(target.getFirstTarget()); } } @@ -97,7 +97,7 @@ class DarkSupplicantEffect extends OneShotEffect { if (selectedCard == null && controller.chooseUse(Outcome.Benefit, "Search your hand for Scion of Darkness?", source, game)) { TargetCardInHand target = new TargetCardInHand(0, 1, filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, source, game)) { if (!target.getTargets().isEmpty()) { selectedCard = game.getCard(target.getFirstTarget()); } diff --git a/Mage.Sets/src/mage/cards/d/DeadlyBrew.java b/Mage.Sets/src/mage/cards/d/DeadlyBrew.java index 0f9db1d9a64..dae32ade18f 100644 --- a/Mage.Sets/src/mage/cards/d/DeadlyBrew.java +++ b/Mage.Sets/src/mage/cards/d/DeadlyBrew.java @@ -109,7 +109,7 @@ class DeadlyBrewEffect extends OneShotEffect { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard( 0, 1, StaticFilters.FILTER_CARD_PERMANENT, true ); - controller.choose(outcome, yourGrave, target, game); + controller.choose(outcome, yourGrave, target, source, game); Card card = controller.getGraveyard().get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/d/DeathOrGlory.java b/Mage.Sets/src/mage/cards/d/DeathOrGlory.java index 59e7f718353..3dbd81d7129 100644 --- a/Mage.Sets/src/mage/cards/d/DeathOrGlory.java +++ b/Mage.Sets/src/mage/cards/d/DeathOrGlory.java @@ -63,7 +63,7 @@ class DeathOrGloryEffect extends OneShotEffect { if (!cards.isEmpty()) { TargetCard targetCards = new TargetCard(0, cards.size(), Zone.GRAVEYARD, new FilterCard("cards to put in the first pile")); List pile1 = new ArrayList<>(); - if (controller.choose(Outcome.Neutral, cards, targetCards, game)) { + if (controller.choose(Outcome.Neutral, cards, targetCards, source, game)) { List targets = targetCards.getTargets(); for (UUID targetId : targets) { Card card = cards.get(targetId, game); diff --git a/Mage.Sets/src/mage/cards/d/DeathsOasis.java b/Mage.Sets/src/mage/cards/d/DeathsOasis.java index 8c5ed08aef5..87a307e3418 100644 --- a/Mage.Sets/src/mage/cards/d/DeathsOasis.java +++ b/Mage.Sets/src/mage/cards/d/DeathsOasis.java @@ -130,7 +130,7 @@ class DeathsOasisEffect extends OneShotEffect { } TargetCard target = new TargetCardInYourGraveyard(filter); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return false; } return player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/d/DeliverUntoEvil.java b/Mage.Sets/src/mage/cards/d/DeliverUntoEvil.java index 4a3deaba67c..aa64db0bbd2 100644 --- a/Mage.Sets/src/mage/cards/d/DeliverUntoEvil.java +++ b/Mage.Sets/src/mage/cards/d/DeliverUntoEvil.java @@ -93,7 +93,7 @@ class DeliverUntoEvilEffect extends OneShotEffect { return false; } TargetCard targetCard = new TargetCardInGraveyard(Math.min(2, cards.size()), filter2); - if (!opponent.choose(outcome, cards, targetCard, game)) { + if (!opponent.choose(outcome, cards, targetCard, source, game)) { return false; } cards.removeAll(targetCard.getTargets()); diff --git a/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java b/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java index 3bbcf50039d..2ec8a7ea919 100644 --- a/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java +++ b/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java @@ -175,7 +175,7 @@ class DescentIntoMadnessEffect extends OneShotEffect { } filterInHand.add(Predicates.not(Predicates.or(uuidPredicates))); if (targetInHand.canChoose(player.getId(), source, game) && - player.choose(Outcome.Exile, player.getHand(), targetInHand, game)) { + player.choose(Outcome.Exile, player.getHand(), targetInHand, source, game)) { Card card = player.getHand().get(targetInHand.getFirstTarget(), game); if (card != null) { diff --git a/Mage.Sets/src/mage/cards/d/DesecratorHag.java b/Mage.Sets/src/mage/cards/d/DesecratorHag.java index d10c71c2986..744ca8a1579 100644 --- a/Mage.Sets/src/mage/cards/d/DesecratorHag.java +++ b/Mage.Sets/src/mage/cards/d/DesecratorHag.java @@ -86,7 +86,7 @@ class DesecratorHagEffect extends OneShotEffect { return true; } if (cards.size() > 1 - && you.choose(Outcome.DrawCard, cards, target, game)) { + && you.choose(Outcome.DrawCard, cards, target, source, game)) { if (target != null) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { diff --git a/Mage.Sets/src/mage/cards/d/DimensionalBreach.java b/Mage.Sets/src/mage/cards/d/DimensionalBreach.java index f8e8000a1e1..daa8c6f7ca7 100644 --- a/Mage.Sets/src/mage/cards/d/DimensionalBreach.java +++ b/Mage.Sets/src/mage/cards/d/DimensionalBreach.java @@ -164,7 +164,7 @@ class DimensionalBreachReturnEffect extends OneShotEffect { if (cards.size() > 1) { TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD); target.setNotTarget(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); cards.clear(); cards.add(target.getFirstTarget()); } diff --git a/Mage.Sets/src/mage/cards/d/DimirMachinations.java b/Mage.Sets/src/mage/cards/d/DimirMachinations.java index 6c46599f49a..b1b9f5775b8 100644 --- a/Mage.Sets/src/mage/cards/d/DimirMachinations.java +++ b/Mage.Sets/src/mage/cards/d/DimirMachinations.java @@ -71,7 +71,7 @@ class DimirMachinationsEffect extends OneShotEffect { if (!cards.isEmpty()) { controller.lookAtCards(source, null, cards, game); TargetCard targetExile = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, new FilterCard("cards to exile")); - if (controller.choose(Outcome.Exile, cards, targetExile, game)) { + if (controller.choose(Outcome.Exile, cards, targetExile, source, game)) { Cards toExile = new CardsImpl(targetExile.getTargets()); controller.moveCards(toExile, Zone.EXILED, source, game); cards.removeAll(toExile); diff --git a/Mage.Sets/src/mage/cards/d/DiscordantDirge.java b/Mage.Sets/src/mage/cards/d/DiscordantDirge.java index 908df03e1df..fc837732405 100644 --- a/Mage.Sets/src/mage/cards/d/DiscordantDirge.java +++ b/Mage.Sets/src/mage/cards/d/DiscordantDirge.java @@ -83,7 +83,7 @@ class DiscordantDirgeEffect extends OneShotEffect { controller.lookAtCards(targetOpponent.getName() + " hand", targetOpponent.getHand(), game); TargetCard target = new TargetCard(0, verseCounters, Zone.HAND, new FilterCard()); target.setNotTarget(true); - if (!controller.choose(Outcome.Benefit, targetOpponent.getHand(), target, game)) { + if (!controller.choose(Outcome.Benefit, targetOpponent.getHand(), target, source, game)) { return false; } targetOpponent.discard(new CardsImpl(target.getTargets()), false, source, game); diff --git a/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java b/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java index b4c8cb159a2..5c0e253b2c5 100644 --- a/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java +++ b/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java @@ -76,7 +76,7 @@ class DiscoverTheImpossibleEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInLibrary(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { player.putCardsOnBottomOfLibrary(card, game, source, false); diff --git a/Mage.Sets/src/mage/cards/d/DjeruAndHazoret.java b/Mage.Sets/src/mage/cards/d/DjeruAndHazoret.java index fb4dea66ea1..06b6a2e595a 100644 --- a/Mage.Sets/src/mage/cards/d/DjeruAndHazoret.java +++ b/Mage.Sets/src/mage/cards/d/DjeruAndHazoret.java @@ -94,7 +94,7 @@ class DjeruAndHazoretEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); TargetCard target = new TargetCardInLibrary(0, 1, filter); - player.choose(Outcome.PlayForFree, cards, target, game); + player.choose(Outcome.PlayForFree, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/d/Doomsday.java b/Mage.Sets/src/mage/cards/d/Doomsday.java index 1d54a5a9b7e..14eee4b2f73 100644 --- a/Mage.Sets/src/mage/cards/d/Doomsday.java +++ b/Mage.Sets/src/mage/cards/d/Doomsday.java @@ -68,7 +68,7 @@ class DoomsdayEffect extends OneShotEffect { int number = Math.min(5, allCards.size()); TargetCard target = new TargetCard(number, number, Zone.ALL, new FilterCard()); - if (controller.choose(Outcome.Benefit, allCards, target, game)) { + if (controller.choose(Outcome.Benefit, allCards, target, source, game)) { Cards toLibrary = new CardsImpl(target.getTargets()); allCards.removeAll(toLibrary); // Exile the rest diff --git a/Mage.Sets/src/mage/cards/d/DranaTheLastBloodchief.java b/Mage.Sets/src/mage/cards/d/DranaTheLastBloodchief.java index 0fe69d4ed48..5142e363e6d 100644 --- a/Mage.Sets/src/mage/cards/d/DranaTheLastBloodchief.java +++ b/Mage.Sets/src/mage/cards/d/DranaTheLastBloodchief.java @@ -93,7 +93,7 @@ class DranaTheLastBloodchiefEffect extends OneShotEffect { } TargetCard target = new TargetCardInGraveyard(filter); target.setNotTarget(true); - player.choose(outcome, controller.getGraveyard(), target, game); + player.choose(outcome, controller.getGraveyard(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/d/DredgeTheMire.java b/Mage.Sets/src/mage/cards/d/DredgeTheMire.java index 59b99dbc239..9c061c2b959 100644 --- a/Mage.Sets/src/mage/cards/d/DredgeTheMire.java +++ b/Mage.Sets/src/mage/cards/d/DredgeTheMire.java @@ -70,7 +70,7 @@ class DredgeTheMireEffect extends OneShotEffect { } TargetCard target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE_YOUR_GRAVEYARD); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { continue; } cards.add(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/d/DubiousChallenge.java b/Mage.Sets/src/mage/cards/d/DubiousChallenge.java index 2ab05390386..a29e3e1c809 100644 --- a/Mage.Sets/src/mage/cards/d/DubiousChallenge.java +++ b/Mage.Sets/src/mage/cards/d/DubiousChallenge.java @@ -65,7 +65,7 @@ class DubiousChallengeEffect extends OneShotEffect { topCards.addAll(controller.getLibrary().getTopCards(game, 10)); controller.lookAtCards(sourceObject.getIdName(), topCards, game); TargetCard targetCreatures = new TargetCard(0, 2, Zone.LIBRARY, StaticFilters.FILTER_CARD_CREATURE); - controller.choose(outcome, topCards, targetCreatures, game); + controller.choose(outcome, topCards, targetCreatures, source, game); Cards exiledCards = new CardsImpl(targetCreatures.getTargets()); if (!exiledCards.isEmpty()) { controller.moveCards(exiledCards, Zone.EXILED, source, game); @@ -75,7 +75,7 @@ class DubiousChallengeEffect extends OneShotEffect { TargetCard targetOpponentCreature = new TargetCard(0, 1, Zone.EXILED, StaticFilters.FILTER_CARD_CREATURE); DubiousChallengeMoveToBattlefieldEffect opponentEffect = (DubiousChallengeMoveToBattlefieldEffect) source.getEffects().get(1); DubiousChallengeMoveToBattlefieldEffect controllerEffect = (DubiousChallengeMoveToBattlefieldEffect) source.getEffects().get(2); - if (opponent.choose(outcome, exiledCards, targetOpponentCreature, game)) { + if (opponent.choose(outcome, exiledCards, targetOpponentCreature, source, game)) { Card card = game.getCard(targetOpponentCreature.getFirstTarget()); if (card != null) { opponentEffect.setPlayerAndCards(opponent, new CardsImpl(card)); diff --git a/Mage.Sets/src/mage/cards/e/EcologicalAppreciation.java b/Mage.Sets/src/mage/cards/e/EcologicalAppreciation.java index 2af61be2533..9a65355bb72 100644 --- a/Mage.Sets/src/mage/cards/e/EcologicalAppreciation.java +++ b/Mage.Sets/src/mage/cards/e/EcologicalAppreciation.java @@ -104,7 +104,7 @@ class EcologicalAppreciationEffect extends OneShotEffect { }; targetCardsInGY.setNotTarget(true); targetCardsInGY.withChooseHint("Step 2 of 2: Search graveyard"); - player.choose(Outcome.PutCreatureInPlay, player.getGraveyard(), targetCardsInGY, game); + player.choose(Outcome.PutCreatureInPlay, player.getGraveyard(), targetCardsInGY, source, game); cards.addAll(targetCardsInGY.getTargets()); cards.removeIf(uuid -> { Zone zone = game.getState().getZone(uuid); @@ -120,7 +120,7 @@ class EcologicalAppreciationEffect extends OneShotEffect { if (opponent != null) { TargetCard chosenCards = new TargetCard(2, Zone.ALL, StaticFilters.FILTER_CARD); chosenCards.setNotTarget(true); - opponent.choose(outcome, cards, chosenCards, game); + opponent.choose(outcome, cards, chosenCards, source, game); Cards toShuffle = new CardsImpl(chosenCards.getTargets().stream() .map(game::getCard) .collect(Collectors.toList())); diff --git a/Mage.Sets/src/mage/cards/e/EerieUltimatum.java b/Mage.Sets/src/mage/cards/e/EerieUltimatum.java index a36bfdeef37..0ecd4db232b 100644 --- a/Mage.Sets/src/mage/cards/e/EerieUltimatum.java +++ b/Mage.Sets/src/mage/cards/e/EerieUltimatum.java @@ -66,7 +66,7 @@ class EerieUltimatumEffect extends OneShotEffect { return false; } TargetCard target = new EerieUltimatumTarget(); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return false; } return player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/e/EliteArcanist.java b/Mage.Sets/src/mage/cards/e/EliteArcanist.java index 0920407de73..1abd9544b56 100644 --- a/Mage.Sets/src/mage/cards/e/EliteArcanist.java +++ b/Mage.Sets/src/mage/cards/e/EliteArcanist.java @@ -104,7 +104,7 @@ class EliteArcanistImprintEffect extends OneShotEffect { if (player != null && !player.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, filter); if (target.canChoose(source.getControllerId(), source, game) - && player.choose(Outcome.Benefit, player.getHand(), target, game)) { + && player.choose(Outcome.Benefit, player.getHand(), target, source, game)) { Card card = player.getHand().get(target.getFirstTarget(), game); if (card != null) { card.moveToExile(source.getSourceId(), "Elite Arcanist", source, game); diff --git a/Mage.Sets/src/mage/cards/e/EliteSpellbinder.java b/Mage.Sets/src/mage/cards/e/EliteSpellbinder.java index 883038e3b90..bb83a86abf5 100644 --- a/Mage.Sets/src/mage/cards/e/EliteSpellbinder.java +++ b/Mage.Sets/src/mage/cards/e/EliteSpellbinder.java @@ -81,7 +81,7 @@ class EliteSpellbinderEffect extends OneShotEffect { TargetCard target = new TargetCardInHand( 0, 1, StaticFilters.FILTER_CARD_A_NON_LAND ); - controller.choose(outcome, opponent.getHand(), target, game); + controller.choose(outcome, opponent.getHand(), target, source, game); Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java b/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java index f85be8f7636..ea672771cc8 100644 --- a/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java +++ b/Mage.Sets/src/mage/cards/e/EllywickTumblestrum.java @@ -76,7 +76,7 @@ class EllywickTumblestrumEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); TargetCardInLibrary target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { player.revealCards(source, new CardsImpl(card), game); diff --git a/Mage.Sets/src/mage/cards/e/ElspethResplendent.java b/Mage.Sets/src/mage/cards/e/ElspethResplendent.java index 4d385c004d9..76ea9c6b616 100644 --- a/Mage.Sets/src/mage/cards/e/ElspethResplendent.java +++ b/Mage.Sets/src/mage/cards/e/ElspethResplendent.java @@ -132,7 +132,7 @@ class ElspethResplendentLookEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 7)); TargetCard target = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java index 39d140b8e3b..254546b61ad 100644 --- a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java +++ b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java @@ -97,7 +97,7 @@ class EmergentUltimatumEffect extends OneShotEffect { } TargetCardInExile targetCardInExile = new TargetCardInExile(StaticFilters.FILTER_CARD); targetCardInExile.setNotTarget(true); - opponent.choose(outcome, cards, targetCardInExile, game); + opponent.choose(outcome, cards, targetCardInExile, source, game); Card toShuffle = game.getCard(targetCardInExile.getFirstTarget()); if (toShuffle != null) { player.putCardsOnBottomOfLibrary(toShuffle, game, source, false); diff --git a/Mage.Sets/src/mage/cards/e/EtherealForager.java b/Mage.Sets/src/mage/cards/e/EtherealForager.java index d39ba59c8c7..2ee7ce2064a 100644 --- a/Mage.Sets/src/mage/cards/e/EtherealForager.java +++ b/Mage.Sets/src/mage/cards/e/EtherealForager.java @@ -85,7 +85,7 @@ class EtherealForagerEffect extends OneShotEffect { } TargetCard targetCard = new TargetCardInExile(0, 1, StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, null, true); ; - player.choose(Outcome.DrawCard, delvedCards, targetCard, game); + player.choose(Outcome.DrawCard, delvedCards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card == null || !player.moveCards(card, Zone.HAND, source, game)) { return false; diff --git a/Mage.Sets/src/mage/cards/e/Evershrike.java b/Mage.Sets/src/mage/cards/e/Evershrike.java index d0779b42ed2..951bbab2dae 100644 --- a/Mage.Sets/src/mage/cards/e/Evershrike.java +++ b/Mage.Sets/src/mage/cards/e/Evershrike.java @@ -97,7 +97,7 @@ class EvershrikeEffect extends OneShotEffect { int count = controller.getHand().count(filterAuraCard, game); if (count > 0 && controller.chooseUse(Outcome.Benefit, "Put an Aura card from your hand onto the battlefield attached to " + evershrikeCard.getIdName() + "?", source, game)) { TargetCard targetAura = new TargetCard(Zone.HAND, filterAuraCard); - if (controller.choose(Outcome.Benefit, controller.getHand(), targetAura, game)) { + if (controller.choose(Outcome.Benefit, controller.getHand(), targetAura, source, game)) { Card aura = game.getCard(targetAura.getFirstTarget()); if (aura != null) { game.getState().setValue("attachTo:" + aura.getId(), evershrikePermanent); diff --git a/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java b/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java index b9e69b9f42b..46c152bb144 100644 --- a/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java +++ b/Mage.Sets/src/mage/cards/e/ExperimentalOverload.java @@ -72,7 +72,7 @@ class ExperimentalOverloadEffect extends OneShotEffect { TargetCard target = new TargetCardInYourGraveyard( 0, 1, StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, true ); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); return player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); } } diff --git a/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java b/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java index 58ce134c353..983ec9c9359 100644 --- a/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java +++ b/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java @@ -72,7 +72,7 @@ class ExpressiveIterationEffect extends OneShotEffect { cards.size() == 3 ? 1 : 0, 1, StaticFilters.FILTER_CARD ); target.withChooseHint("To put into your hand"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.HAND, source, game); @@ -85,7 +85,7 @@ class ExpressiveIterationEffect extends OneShotEffect { cards.size() == 2 ? 1 : 0, 1, StaticFilters.FILTER_CARD ); target.withChooseHint("To put on the bottom of your library"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); if (card != null) { player.putCardsOnBottomOfLibrary(card, game, source, false); @@ -96,7 +96,7 @@ class ExpressiveIterationEffect extends OneShotEffect { } target = new TargetCardInLibrary(); target.withChooseHint("To exile (you may play it this turn)"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); if (card == null) { return true; diff --git a/Mage.Sets/src/mage/cards/e/Extortion.java b/Mage.Sets/src/mage/cards/e/Extortion.java index 45257f02b65..a772a90ff91 100644 --- a/Mage.Sets/src/mage/cards/e/Extortion.java +++ b/Mage.Sets/src/mage/cards/e/Extortion.java @@ -60,7 +60,7 @@ class ExtortionEffect extends OneShotEffect { you.lookAtCards("Discard", targetPlayer.getHand(), game); TargetCard target = new TargetCardInHand(0, 2, StaticFilters.FILTER_CARD_CARDS); target.setNotTarget(true); - you.choose(Outcome.Discard, targetPlayer.getHand(), target, game); + you.choose(Outcome.Discard, targetPlayer.getHand(), target, source, game); targetPlayer.discard(new CardsImpl(target.getTargets()), false, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/e/ExtractBrain.java b/Mage.Sets/src/mage/cards/e/ExtractBrain.java index b216be93128..9f856ddb1b0 100644 --- a/Mage.Sets/src/mage/cards/e/ExtractBrain.java +++ b/Mage.Sets/src/mage/cards/e/ExtractBrain.java @@ -68,7 +68,7 @@ class ExtractBrainEffect extends OneShotEffect { TargetCardInHand target = new TargetCardInHand( Math.min(opponent.getHand().size(), xValue), StaticFilters.FILTER_CARD ); - opponent.choose(Outcome.Detriment, opponent.getHand(), target, game); + opponent.choose(Outcome.Detriment, opponent.getHand(), target, source, game); Cards cards = new CardsImpl(target.getTargets()); controller.lookAtCards(source, null, cards, game); CardUtil.castSpellWithAttributesForFree(controller, source, game, cards, StaticFilters.FILTER_CARD); diff --git a/Mage.Sets/src/mage/cards/e/EyeOfTheStorm.java b/Mage.Sets/src/mage/cards/e/EyeOfTheStorm.java index 36273b7f0c7..d7aad9803a3 100644 --- a/Mage.Sets/src/mage/cards/e/EyeOfTheStorm.java +++ b/Mage.Sets/src/mage/cards/e/EyeOfTheStorm.java @@ -147,7 +147,7 @@ class EyeOfTheStormEffect1 extends OneShotEffect { cardToCopy = copiedCards.getCards(game).iterator().next(); } else { TargetCard target = new TargetCard(1, Zone.EXILED, new FilterCard("card to copy")); - spellController.choose(Outcome.Copy, copiedCards, target, game); + spellController.choose(Outcome.Copy, copiedCards, target, source, game); cardToCopy = copiedCards.get(target.getFirstTarget(), game); copiedCards.remove(cardToCopy); } diff --git a/Mage.Sets/src/mage/cards/e/EyeOfYawgmoth.java b/Mage.Sets/src/mage/cards/e/EyeOfYawgmoth.java index f92407aa795..85c47275aab 100644 --- a/Mage.Sets/src/mage/cards/e/EyeOfYawgmoth.java +++ b/Mage.Sets/src/mage/cards/e/EyeOfYawgmoth.java @@ -83,7 +83,7 @@ class EyeOfYawgmothEffect extends OneShotEffect { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, power)); controller.revealCards(source, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put into your hand")); - if (controller.choose(Outcome.DrawCard, cards, target, game)) { + if (controller.choose(Outcome.DrawCard, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/f/FeldonRonomExcavator.java b/Mage.Sets/src/mage/cards/f/FeldonRonomExcavator.java index 7b451fd4f50..4b74975cec5 100644 --- a/Mage.Sets/src/mage/cards/f/FeldonRonomExcavator.java +++ b/Mage.Sets/src/mage/cards/f/FeldonRonomExcavator.java @@ -88,7 +88,7 @@ class FeldonRonomExcavatorEffect extends OneShotEffect { default: TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD); target.setNotTarget(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); } if (card != null) { diff --git a/Mage.Sets/src/mage/cards/f/FinalParting.java b/Mage.Sets/src/mage/cards/f/FinalParting.java index 3310134b2fe..c4d9d20f235 100644 --- a/Mage.Sets/src/mage/cards/f/FinalParting.java +++ b/Mage.Sets/src/mage/cards/f/FinalParting.java @@ -70,7 +70,7 @@ class FinalPartingEffect extends OneShotEffect { } if (target.getTargets().size() == 2) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, searched, target2, game); + controller.choose(Outcome.Benefit, searched, target2, source, game); Card card = searched.get(target2.getFirstTarget(), game); controller.moveCards(card, Zone.HAND, source, game); searched.remove(card); diff --git a/Mage.Sets/src/mage/cards/f/FireProphecy.java b/Mage.Sets/src/mage/cards/f/FireProphecy.java index 39271caee10..2c9e488c09a 100644 --- a/Mage.Sets/src/mage/cards/f/FireProphecy.java +++ b/Mage.Sets/src/mage/cards/f/FireProphecy.java @@ -68,7 +68,7 @@ class FireProphecyEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/f/ForkInTheRoad.java b/Mage.Sets/src/mage/cards/f/ForkInTheRoad.java index 83382ba1a24..0cfc9f351a0 100644 --- a/Mage.Sets/src/mage/cards/f/ForkInTheRoad.java +++ b/Mage.Sets/src/mage/cards/f/ForkInTheRoad.java @@ -78,7 +78,7 @@ class ForkInTheRoadEffect extends OneShotEffect { controller.revealCards(sourceObject.getIdName(), revealed, game); if (!target.getTargets().isEmpty()) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, revealed, target2, game); + controller.choose(Outcome.Benefit, revealed, target2, source, game); Card card = revealed.get(target2.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/f/FortunesFavor.java b/Mage.Sets/src/mage/cards/f/FortunesFavor.java index cbbb4d4c469..cc7019b49d2 100644 --- a/Mage.Sets/src/mage/cards/f/FortunesFavor.java +++ b/Mage.Sets/src/mage/cards/f/FortunesFavor.java @@ -67,7 +67,7 @@ class FortunesFavorEffect extends OneShotEffect { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 4)); TargetCard target = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, new FilterCard("cards for the face-down pile")); - targetOpponent.choose(outcome, cards, target, game); + targetOpponent.choose(outcome, cards, target, source, game); Cards faceDownPile = new CardsImpl(target.getTargets()); cards.removeAll(target.getTargets()); controller.revealCards(sourceObject.getIdName() + " - cards in face-up pile", cards, game); diff --git a/Mage.Sets/src/mage/cards/g/GateToTheAfterlife.java b/Mage.Sets/src/mage/cards/g/GateToTheAfterlife.java index e53e8d36d9d..97d3d86625f 100644 --- a/Mage.Sets/src/mage/cards/g/GateToTheAfterlife.java +++ b/Mage.Sets/src/mage/cards/g/GateToTheAfterlife.java @@ -97,14 +97,14 @@ class GateToTheAfterlifeEffect extends OneShotEffect { // Graveyard check if (controller.chooseUse(Outcome.Benefit, "Search your graveyard for " + cardName + "?", source, game)) { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(1, 1, filter, true); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (controller.choose(outcome, controller.getGraveyard(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } // Hand check if (card == null && controller.chooseUse(Outcome.Benefit, "Search your hand for " + cardName + "?", source, game)) { TargetCardInHand target = new TargetCardInHand(0, 1, filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/g/GenesisHydra.java b/Mage.Sets/src/mage/cards/g/GenesisHydra.java index fd9e56ba7f7..0fe11bd83eb 100644 --- a/Mage.Sets/src/mage/cards/g/GenesisHydra.java +++ b/Mage.Sets/src/mage/cards/g/GenesisHydra.java @@ -81,7 +81,7 @@ class GenesisHydraPutOntoBattlefieldEffect extends OneShotEffect { TargetCard target1 = new TargetCard(Zone.LIBRARY, filter); target1.setRequired(false); if (cards.count(filter, source.getSourceId(), source, game) > 0) { - if (controller.choose(Outcome.PutCardInPlay, cards, target1, game)) { + if (controller.choose(Outcome.PutCardInPlay, cards, target1, source, game)) { Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/g/GenesisWave.java b/Mage.Sets/src/mage/cards/g/GenesisWave.java index f809721ebca..5adbb477f92 100644 --- a/Mage.Sets/src/mage/cards/g/GenesisWave.java +++ b/Mage.Sets/src/mage/cards/g/GenesisWave.java @@ -67,7 +67,7 @@ class GenesisWaveEffect extends OneShotEffect { filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue + 1)); TargetCard target1 = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, filter); target1.setNotTarget(true); - controller.choose(Outcome.PutCardInPlay, cards, target1, game); + controller.choose(Outcome.PutCardInPlay, cards, target1, source, game); Cards toBattlefield = new CardsImpl(target1.getTargets()); cards.removeAll(toBattlefield); controller.moveCards(toBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, false, null); diff --git a/Mage.Sets/src/mage/cards/g/GiftOfTheGargantuan.java b/Mage.Sets/src/mage/cards/g/GiftOfTheGargantuan.java index 3060031d1bc..b2c3f564c49 100644 --- a/Mage.Sets/src/mage/cards/g/GiftOfTheGargantuan.java +++ b/Mage.Sets/src/mage/cards/g/GiftOfTheGargantuan.java @@ -64,7 +64,7 @@ class GiftOfTheGargantuanEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 4)); TargetCard target = new GiftOfTheGargantuanTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(); toHand.addAll(target.getTargets()); player.revealCards(source, toHand, game); diff --git a/Mage.Sets/src/mage/cards/g/GiftsUngiven.java b/Mage.Sets/src/mage/cards/g/GiftsUngiven.java index bd5b87deb8a..c15b3e3c8ea 100644 --- a/Mage.Sets/src/mage/cards/g/GiftsUngiven.java +++ b/Mage.Sets/src/mage/cards/g/GiftsUngiven.java @@ -83,7 +83,7 @@ class GiftsUngivenEffect extends OneShotEffect { Cards cardsToKeep = new CardsImpl(); cardsToKeep.addAll(cards); TargetCard targetDiscard = new TargetCard(2, Zone.LIBRARY, filter2); - if (opponent.choose(Outcome.Discard, cards, targetDiscard, game)) { + if (opponent.choose(Outcome.Discard, cards, targetDiscard, source, game)) { cardsToKeep.removeIf(targetDiscard.getTargets()::contains); cards.removeAll(cardsToKeep); } diff --git a/Mage.Sets/src/mage/cards/g/GishathSunsAvatar.java b/Mage.Sets/src/mage/cards/g/GishathSunsAvatar.java index 7722687cada..68a0c21249a 100644 --- a/Mage.Sets/src/mage/cards/g/GishathSunsAvatar.java +++ b/Mage.Sets/src/mage/cards/g/GishathSunsAvatar.java @@ -91,7 +91,7 @@ class GishathSunsAvatarEffect extends OneShotEffect { filter.add(SubType.DINOSAUR.getPredicate()); TargetCard target1 = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, filter); target1.setNotTarget(true); - controller.choose(Outcome.PutCardInPlay, cards, target1, game); + controller.choose(Outcome.PutCardInPlay, cards, target1, source, game); Cards toBattlefield = new CardsImpl(target1.getTargets()); cards.removeAll(toBattlefield); controller.moveCards(toBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, false, null); diff --git a/Mage.Sets/src/mage/cards/g/GlacianPowerstoneEngineer.java b/Mage.Sets/src/mage/cards/g/GlacianPowerstoneEngineer.java index ca751d63529..d4d64a9c2c6 100644 --- a/Mage.Sets/src/mage/cards/g/GlacianPowerstoneEngineer.java +++ b/Mage.Sets/src/mage/cards/g/GlacianPowerstoneEngineer.java @@ -95,7 +95,7 @@ class GlacianPowerstoneEngineerEffect extends OneShotEffect { return false; } TargetCard targetCard = new TargetCardInLibrary(1, StaticFilters.FILTER_CARD); - player.choose(outcome, cards, targetCard, game); + player.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card != null && player.moveCards(card, Zone.HAND, source, game)) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java b/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java index 669690eb3ee..a877e7a3635 100644 --- a/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java +++ b/Mage.Sets/src/mage/cards/g/GontiLordOfLuxury.java @@ -87,7 +87,7 @@ class GontiLordOfLuxuryEffect extends OneShotEffect { Cards topCards = new CardsImpl(); topCards.addAll(opponent.getLibrary().getTopCards(game, 4)); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to exile")); - controller.choose(outcome, topCards, target, game); + controller.choose(outcome, topCards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { controller.putCardsOnBottomOfLibrary(topCards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/g/GuildFeud.java b/Mage.Sets/src/mage/cards/g/GuildFeud.java index bbcb48241b6..a4303f3aa07 100644 --- a/Mage.Sets/src/mage/cards/g/GuildFeud.java +++ b/Mage.Sets/src/mage/cards/g/GuildFeud.java @@ -76,7 +76,7 @@ class GuildFeudEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCreatureCard( "creature card to put on the battlefield")); - if (player.choose(Outcome.PutCreatureInPlay, topThreeCards, target, game)) { + if (player.choose(Outcome.PutCreatureInPlay, topThreeCards, target, source, game)) { creatureToBattlefield = topThreeCards.get(target.getFirstTarget(), game); if (creatureToBattlefield != null) { topThreeCards.remove(creatureToBattlefield); diff --git a/Mage.Sets/src/mage/cards/g/GyrudaDoomOfDepths.java b/Mage.Sets/src/mage/cards/g/GyrudaDoomOfDepths.java index 1a50dbc0ba5..af6660738ef 100644 --- a/Mage.Sets/src/mage/cards/g/GyrudaDoomOfDepths.java +++ b/Mage.Sets/src/mage/cards/g/GyrudaDoomOfDepths.java @@ -117,7 +117,7 @@ class GyrudaDoomOfDepthsEffect extends OneShotEffect { // the creature card chosen can be in any zone, not just the graveyard TargetCard targetCard = new TargetCard(0, 1, Zone.ALL, filter); targetCard.setNotTarget(true); - controller.choose(outcome, cards, targetCard, game); + controller.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); return card != null && controller.moveCards(card, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/h/HarperRecruiter.java b/Mage.Sets/src/mage/cards/h/HarperRecruiter.java index 38f3154dcac..6d5d55b9c56 100644 --- a/Mage.Sets/src/mage/cards/h/HarperRecruiter.java +++ b/Mage.Sets/src/mage/cards/h/HarperRecruiter.java @@ -76,7 +76,7 @@ class HarperRecruiterEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 4)); TargetCard target = new HarperRecruiterTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); player.revealCards(source, toHand, game); player.moveCards(toHand, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/h/HelmOfObedience.java b/Mage.Sets/src/mage/cards/h/HelmOfObedience.java index b9ea7eea0db..04b7c80c17a 100644 --- a/Mage.Sets/src/mage/cards/h/HelmOfObedience.java +++ b/Mage.Sets/src/mage/cards/h/HelmOfObedience.java @@ -96,7 +96,7 @@ class HelmOfObedienceEffect extends OneShotEffect { default: TargetCardInGraveyard target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE); target.setNotTarget(true); - controller.choose(Outcome.PutCreatureInPlay, cards, target, game); + controller.choose(Outcome.PutCreatureInPlay, cards, target, source, game); card = game.getCard(target.getFirstTarget()); } Permanent permanent = source.getSourcePermanentIfItStillExists(game); diff --git a/Mage.Sets/src/mage/cards/h/HolyAvenger.java b/Mage.Sets/src/mage/cards/h/HolyAvenger.java index 16de1b37805..49bdca8ce87 100644 --- a/Mage.Sets/src/mage/cards/h/HolyAvenger.java +++ b/Mage.Sets/src/mage/cards/h/HolyAvenger.java @@ -84,7 +84,7 @@ class HolyAvengerEffect extends OneShotEffect { filter.add(SubType.AURA.getPredicate()); filter.add(new AuraCardCanAttachToPermanentId(permanent.getId())); TargetCardInHand target = new TargetCardInHand(0, 1, filter); - player.choose(Outcome.PutCardInPlay, player.getHand(), target, game); + player.choose(Outcome.PutCardInPlay, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/h/HowlpackPiper.java b/Mage.Sets/src/mage/cards/h/HowlpackPiper.java index e70c753569c..37ad6c14dd9 100644 --- a/Mage.Sets/src/mage/cards/h/HowlpackPiper.java +++ b/Mage.Sets/src/mage/cards/h/HowlpackPiper.java @@ -86,7 +86,7 @@ class HowlpackPiperEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/h/HurkylMasterWizard.java b/Mage.Sets/src/mage/cards/h/HurkylMasterWizard.java index ec5e2d1dd4d..44e9d7eae82 100644 --- a/Mage.Sets/src/mage/cards/h/HurkylMasterWizard.java +++ b/Mage.Sets/src/mage/cards/h/HurkylMasterWizard.java @@ -92,7 +92,7 @@ class HurkylMasterWizardEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 5)); player.revealCards(source, cards, game); TargetCard target = new HurkylMasterWizardTarget(source, game); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); player.moveCardsToHandWithInfo(toHand, source, game, true); cards.retainZone(Zone.LIBRARY, game); diff --git a/Mage.Sets/src/mage/cards/i/IlhargTheRazeBoar.java b/Mage.Sets/src/mage/cards/i/IlhargTheRazeBoar.java index 25a75accab5..bb77ef083c2 100644 --- a/Mage.Sets/src/mage/cards/i/IlhargTheRazeBoar.java +++ b/Mage.Sets/src/mage/cards/i/IlhargTheRazeBoar.java @@ -81,7 +81,7 @@ class IlhargTheRazeBoarEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_CREATURE); - if (!player.choose(outcome, player.getHand(), target, game)) { + if (!player.choose(outcome, player.getHand(), target, source, game)) { return false; } Card card = game.getCard(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/i/IndustrialAdvancement.java b/Mage.Sets/src/mage/cards/i/IndustrialAdvancement.java index 4483f7805d9..79ed2672766 100644 --- a/Mage.Sets/src/mage/cards/i/IndustrialAdvancement.java +++ b/Mage.Sets/src/mage/cards/i/IndustrialAdvancement.java @@ -84,7 +84,7 @@ class IndustrialAdvancementEffect extends OneShotEffect { TargetCard targetCard = new TargetCardInLibrary( 0, 1, StaticFilters.FILTER_CARD_CREATURE ); - player.choose(outcome, cards, targetCard, game); + player.choose(outcome, cards, targetCard, source, game); player.moveCards(game.getCard(targetCard.getFirstTarget()), Zone.BATTLEFIELD, source, game); cards.retainZone(Zone.LIBRARY, game); player.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/i/IntoTheFire.java b/Mage.Sets/src/mage/cards/i/IntoTheFire.java index b71d1fc5bbc..038d942938f 100644 --- a/Mage.Sets/src/mage/cards/i/IntoTheFire.java +++ b/Mage.Sets/src/mage/cards/i/IntoTheFire.java @@ -81,7 +81,7 @@ class IntoTheFireEffect extends OneShotEffect { TargetCard targetCard = new TargetCardInHand( 0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_CARDS ); - player.choose(outcome, player.getHand(), targetCard, game); + player.choose(outcome, player.getHand(), targetCard, source, game); Cards cards = new CardsImpl(targetCard.getTargets()); player.putCardsOnBottomOfLibrary(cards, game, source, true); player.drawCards(cards.size() + 1, source, game); diff --git a/Mage.Sets/src/mage/cards/i/Intuition.java b/Mage.Sets/src/mage/cards/i/Intuition.java index 9099e98745b..67036319ed3 100644 --- a/Mage.Sets/src/mage/cards/i/Intuition.java +++ b/Mage.Sets/src/mage/cards/i/Intuition.java @@ -84,7 +84,7 @@ class IntuitionEffect extends SearchEffect { TargetCard targetCard = new TargetCard(Zone.LIBRARY, new FilterCard()); - while (!opponent.choose(Outcome.Neutral, cards, targetCard, game)) { + while (!opponent.choose(Outcome.Neutral, cards, targetCard, source, game)) { if (!opponent.canRespond()) { return false; } diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfAlara.java b/Mage.Sets/src/mage/cards/i/InvasionOfAlara.java index 078087f0f1c..5788cfee4e2 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfAlara.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfAlara.java @@ -91,7 +91,7 @@ class InvasionOfAlaraEffect extends OneShotEffect { if (castable.size() > 1) { TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD); target.setNotTarget(true); - player.choose(outcome, castable, target, game); + player.choose(outcome, castable, target, source, game); player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); } else { player.moveCards(castable, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfGobakhan.java b/Mage.Sets/src/mage/cards/i/InvasionOfGobakhan.java index cb5e65bd964..633c0038f06 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfGobakhan.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfGobakhan.java @@ -81,7 +81,7 @@ class InvasionOfGobakhanEffect extends OneShotEffect { TargetCard target = new TargetCardInHand( 0, 1, StaticFilters.FILTER_CARD_A_NON_LAND ); - controller.choose(outcome, opponent.getHand(), target, game); + controller.choose(outcome, opponent.getHand(), target, source, game); Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java b/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java index 90a2d8592a1..c75e07bea0f 100644 --- a/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java +++ b/Mage.Sets/src/mage/cards/i/InvasionOfTarkir.java @@ -86,7 +86,7 @@ class InvasionOfTarkirEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(0, Integer.MAX_VALUE, filter); - player.choose(Outcome.Benefit, player.getHand(), target, game); + player.choose(Outcome.Benefit, player.getHand(), target, source, game); Cards cards = new CardsImpl(target.getTargets()); player.revealCards(source, cards, game); ReflexiveTriggeredAbility ability = new ReflexiveTriggeredAbility( diff --git a/Mage.Sets/src/mage/cards/i/InventiveIteration.java b/Mage.Sets/src/mage/cards/i/InventiveIteration.java index dcbcf504cd1..cde84af6097 100644 --- a/Mage.Sets/src/mage/cards/i/InventiveIteration.java +++ b/Mage.Sets/src/mage/cards/i/InventiveIteration.java @@ -95,7 +95,7 @@ class InventiveIterationEffect extends OneShotEffect { default: TargetCard target = new TargetCardInYourGraveyard(StaticFilters.FILTER_CARD_ARTIFACT); target.setNotTarget(true); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); card = game.getCard(target.getFirstTarget()); } player.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/i/IsochronScepter.java b/Mage.Sets/src/mage/cards/i/IsochronScepter.java index dc454a3b565..1d8f5ad4467 100644 --- a/Mage.Sets/src/mage/cards/i/IsochronScepter.java +++ b/Mage.Sets/src/mage/cards/i/IsochronScepter.java @@ -81,7 +81,7 @@ class IsochronScepterImprintEffect extends OneShotEffect { if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, filter); if (target.canChoose(source.getControllerId(), source, game) - && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { + && controller.choose(Outcome.Benefit, controller.getHand(), target, source, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardsToExile(card, source, game, true, source.getSourceId(), diff --git a/Mage.Sets/src/mage/cards/j/JalumGrifter.java b/Mage.Sets/src/mage/cards/j/JalumGrifter.java index 19dff8ee7da..9856dfd2ebb 100644 --- a/Mage.Sets/src/mage/cards/j/JalumGrifter.java +++ b/Mage.Sets/src/mage/cards/j/JalumGrifter.java @@ -117,7 +117,7 @@ class JalumGrifterEffect extends OneShotEffect { TargetCard targetCard = new TargetCard(Zone.HAND, new FilterCard()); CardsImpl cards = new CardsImpl(); cards.addAll(shellGamePile); - if (opponent.choose(Outcome.Sacrifice, cards, targetCard, game)) { + if (opponent.choose(Outcome.Sacrifice, cards, targetCard, source, game)) { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { card.setFaceDown(false, game); diff --git a/Mage.Sets/src/mage/cards/j/JaradsOrders.java b/Mage.Sets/src/mage/cards/j/JaradsOrders.java index 264b79f361d..1ef436e6b2d 100644 --- a/Mage.Sets/src/mage/cards/j/JaradsOrders.java +++ b/Mage.Sets/src/mage/cards/j/JaradsOrders.java @@ -71,7 +71,7 @@ class JaradsOrdersEffect extends OneShotEffect { controller.revealCards("Jarad's Orders", revealed, game); if (target.getTargets().size() == 2) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, revealed, target2, game); + controller.choose(Outcome.Benefit, revealed, target2, source, game); Card card = revealed.get(target2.getFirstTarget(), game); controller.moveCards(card, Zone.HAND, source, game); revealed.remove(card); diff --git a/Mage.Sets/src/mage/cards/j/JestersScepter.java b/Mage.Sets/src/mage/cards/j/JestersScepter.java index c99529d0226..2d7c6f8805b 100644 --- a/Mage.Sets/src/mage/cards/j/JestersScepter.java +++ b/Mage.Sets/src/mage/cards/j/JestersScepter.java @@ -158,7 +158,7 @@ class JestersScepterCost extends CostImpl { Cards cards = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, ability)); if (cards != null && !cards.isEmpty() - && controller.choose(Outcome.Benefit, cards, target, game)) { + && controller.choose(Outcome.Benefit, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { if (controller.moveCardToGraveyardWithInfo(card, source, game, Zone.EXILED)) { diff --git a/Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java b/Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java index 7192314f079..3148def803d 100644 --- a/Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java +++ b/Mage.Sets/src/mage/cards/j/JourneyToTheLostCity.java @@ -96,7 +96,7 @@ class JourneyToTheLostCityEffect extends RollDieWithResultTableEffect { if (amount <= 9) { TargetCard target = new TargetCardInExile(0, 1, StaticFilters.FILTER_CARD_LAND, null); target.setNotTarget(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); return card != null && player.moveCards(card, Zone.BATTLEFIELD, source, game); } diff --git a/Mage.Sets/src/mage/cards/j/Juxtapose.java b/Mage.Sets/src/mage/cards/j/Juxtapose.java index 236ee8147d7..66cf7ca6c75 100644 --- a/Mage.Sets/src/mage/cards/j/Juxtapose.java +++ b/Mage.Sets/src/mage/cards/j/Juxtapose.java @@ -79,8 +79,8 @@ class JuxtaposeEffect extends ContinuousEffectImpl { Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); if (you != null && targetPlayer != null) { - Permanent permanent1 = chooseOnePermanentsWithTheHighestCMC(game, you, filter); - Permanent permanent2 = chooseOnePermanentsWithTheHighestCMC(game, targetPlayer, filter); + Permanent permanent1 = chooseOnePermanentsWithTheHighestCMC(you, filter, source, game); + Permanent permanent2 = chooseOnePermanentsWithTheHighestCMC(targetPlayer, filter, source, game); if (permanent1 != null && permanent2 != null) { // exchange works only for two different controllers @@ -131,12 +131,12 @@ class JuxtaposeEffect extends ContinuousEffectImpl { return true; } - private Permanent chooseOnePermanentsWithTheHighestCMC(Game game, Player player, FilterPermanent filter) { - List permanents = getPermanentsWithTheHighestCMC(game, player.getId(), filter); - return chooseOnePermanent(game, player, permanents); + private Permanent chooseOnePermanentsWithTheHighestCMC(Player player, FilterPermanent filter, Ability source, Game game) { + List permanents = getPermanentsWithTheHighestCMC(player.getId(), filter, source, game); + return chooseOnePermanent(player, permanents, source, game); } - private List getPermanentsWithTheHighestCMC(Game game, UUID playerId, FilterPermanent filter) { + private List getPermanentsWithTheHighestCMC(UUID playerId, FilterPermanent filter, Ability source, Game game) { List permanents = game.getBattlefield().getAllActivePermanents(filter, playerId, game); int highestCMC = -1; for (Permanent permanent : permanents) { @@ -153,7 +153,7 @@ class JuxtaposeEffect extends ContinuousEffectImpl { return result; } - private Permanent chooseOnePermanent(Game game, Player player, List permanents) { + private Permanent chooseOnePermanent(Player player, List permanents, Ability source, Game game) { Permanent permanent = null; if (permanents.size() == 1) { permanent = permanents.iterator().next(); @@ -164,7 +164,7 @@ class JuxtaposeEffect extends ContinuousEffectImpl { } TargetCard targetCard = new TargetCard(Zone.BATTLEFIELD, new FilterCard()); - if (player.choose(Outcome.Benefit, cards, targetCard, game)) { + if (player.choose(Outcome.Benefit, cards, targetCard, source, game)) { permanent = game.getPermanent(targetCard.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/k/KaaliaZenithSeeker.java b/Mage.Sets/src/mage/cards/k/KaaliaZenithSeeker.java index bac92417d14..94ec5f60946 100644 --- a/Mage.Sets/src/mage/cards/k/KaaliaZenithSeeker.java +++ b/Mage.Sets/src/mage/cards/k/KaaliaZenithSeeker.java @@ -98,7 +98,7 @@ class KaaliaZenithSeekerEffect extends OneShotEffect { Cards toHand = new CardsImpl(); for (CreatureFinder creatureFinder : CreatureFinder.values()) { TargetCard targetCard = creatureFinder.getTarget(); - if (player.choose(outcome, cards, targetCard, game)) { + if (player.choose(outcome, cards, targetCard, source, game)) { toHand.addAll(targetCard.getTargets()); } } diff --git a/Mage.Sets/src/mage/cards/k/KairiTheSwirlingSky.java b/Mage.Sets/src/mage/cards/k/KairiTheSwirlingSky.java index 580602ee6f6..08573dfaa15 100644 --- a/Mage.Sets/src/mage/cards/k/KairiTheSwirlingSky.java +++ b/Mage.Sets/src/mage/cards/k/KairiTheSwirlingSky.java @@ -133,7 +133,7 @@ class KairiTheSwirlingSkyEffect extends OneShotEffect { 0, 2, StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY ); target.setNotTarget(true); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); return player.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game); } } diff --git a/Mage.Sets/src/mage/cards/k/KamahlsDruidicVow.java b/Mage.Sets/src/mage/cards/k/KamahlsDruidicVow.java index bf0ab36d674..54fb6727b26 100644 --- a/Mage.Sets/src/mage/cards/k/KamahlsDruidicVow.java +++ b/Mage.Sets/src/mage/cards/k/KamahlsDruidicVow.java @@ -80,7 +80,7 @@ class KamahlsDruidicVowEffect extends OneShotEffect { )); TargetCard target1 = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, filter); target1.setNotTarget(true); - controller.choose(Outcome.PutCardInPlay, cards, target1, game); + controller.choose(Outcome.PutCardInPlay, cards, target1, source, game); Cards toBattlefield = new CardsImpl(target1.getTargets()); cards.removeAll(toBattlefield); controller.moveCards(toBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, false, null); diff --git a/Mage.Sets/src/mage/cards/k/KarnLivingLegacy.java b/Mage.Sets/src/mage/cards/k/KarnLivingLegacy.java index eec9659600f..f18a6ac1686 100644 --- a/Mage.Sets/src/mage/cards/k/KarnLivingLegacy.java +++ b/Mage.Sets/src/mage/cards/k/KarnLivingLegacy.java @@ -86,7 +86,7 @@ class KarnLivingLegacyEffect extends OneShotEffect { return true; } TargetCard target = new TargetCardInLibrary(StaticFilters.FILTER_CARD); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { player.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/k/KaylasReconstruction.java b/Mage.Sets/src/mage/cards/k/KaylasReconstruction.java index 80835278dd0..09fcd342a7b 100644 --- a/Mage.Sets/src/mage/cards/k/KaylasReconstruction.java +++ b/Mage.Sets/src/mage/cards/k/KaylasReconstruction.java @@ -78,7 +78,7 @@ class KaylasReconstructionEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 7)); TargetCardInLibrary target = new TargetCardInLibrary(0, source.getManaCostsToPay().getX(), filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toBattlefield = new CardsImpl(target.getTargets()); player.moveCards(toBattlefield, Zone.BATTLEFIELD, source, game); cards.retainZone(Zone.LIBRARY, game); diff --git a/Mage.Sets/src/mage/cards/k/KeldonFlamesage.java b/Mage.Sets/src/mage/cards/k/KeldonFlamesage.java index 5b984f69fbd..c1225fca4aa 100644 --- a/Mage.Sets/src/mage/cards/k/KeldonFlamesage.java +++ b/Mage.Sets/src/mage/cards/k/KeldonFlamesage.java @@ -85,7 +85,7 @@ class KeldonFlamesageEffect extends OneShotEffect { ); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, power + 1)); TargetCard target = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { player.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/k/KitesailFreebooter.java b/Mage.Sets/src/mage/cards/k/KitesailFreebooter.java index 7a869b41754..d06a321f11f 100644 --- a/Mage.Sets/src/mage/cards/k/KitesailFreebooter.java +++ b/Mage.Sets/src/mage/cards/k/KitesailFreebooter.java @@ -93,7 +93,7 @@ class KitesailFreebooterExileEffect extends OneShotEffect { FilterCard filter = new FilterNonlandCard("noncreature, nonland card to exile"); filter.add(Predicates.not(CardType.CREATURE.getPredicate())); TargetCard target = new TargetCard(Zone.HAND, filter); - if (opponent.getHand().count(filter, game) > 0 && controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (opponent.getHand().count(filter, game) > 0 && controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); // If source permanent leaves the battlefield before its triggered ability resolves, the target card won't be exiled. if (card != null && game.getState().getZone(source.getSourceId()) == Zone.BATTLEFIELD) { diff --git a/Mage.Sets/src/mage/cards/k/KnightErrantOfEos.java b/Mage.Sets/src/mage/cards/k/KnightErrantOfEos.java index 4e20b8e121f..58a7cde1e09 100644 --- a/Mage.Sets/src/mage/cards/k/KnightErrantOfEos.java +++ b/Mage.Sets/src/mage/cards/k/KnightErrantOfEos.java @@ -100,7 +100,7 @@ class KnightErrantOfEosEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); TargetCard target = new TargetCardInLibrary(0, 2, filter); - player.choose(Outcome.DrawCard, cards, target, game); + player.choose(Outcome.DrawCard, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); player.revealCards(source, toHand, game); player.moveCards(toHand, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/k/KnowledgePool.java b/Mage.Sets/src/mage/cards/k/KnowledgePool.java index 213ab9caccd..5201e006110 100644 --- a/Mage.Sets/src/mage/cards/k/KnowledgePool.java +++ b/Mage.Sets/src/mage/cards/k/KnowledgePool.java @@ -170,7 +170,7 @@ class KnowledgePoolExileAndPlayEffect extends OneShotEffect { TargetCardInExile target = new TargetCardInExile(0, 1, filter, source.getSourceId()); target.setNotTarget(true); - if (!spellController.choose(Outcome.PlayForFree, game.getExile().getExileZone(exileZoneId), target, game)) { + if (!spellController.choose(Outcome.PlayForFree, game.getExile().getExileZone(exileZoneId), target, source, game)) { // Player chose to not cast any ofthe spells return true; } diff --git a/Mage.Sets/src/mage/cards/k/KodamasReach.java b/Mage.Sets/src/mage/cards/k/KodamasReach.java index 78b073b8f9b..f158d4be8aa 100644 --- a/Mage.Sets/src/mage/cards/k/KodamasReach.java +++ b/Mage.Sets/src/mage/cards/k/KodamasReach.java @@ -78,7 +78,7 @@ class KodamasReachEffect extends OneShotEffect { controller.revealCards(sourceObject.getIdName(), revealed, game); if (target.getTargets().size() == 2) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, revealed, target2, game); + controller.choose(Outcome.Benefit, revealed, target2, source, game); Card card = revealed.get(target2.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.BATTLEFIELD, source, game, true, false, false, null); diff --git a/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java b/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java index fab60486d65..09469c3a737 100644 --- a/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java +++ b/Mage.Sets/src/mage/cards/k/KotoseTheSilentSpider.java @@ -103,12 +103,12 @@ class KotoseTheSilentSpiderEffect extends OneShotEffect { filter.add(new NamePredicate(card.getName())); TargetCardInGraveyard targetCardInGraveyard = new TargetCardInGraveyard(0, Integer.MAX_VALUE, filter); - controller.choose(outcome, opponent.getGraveyard(), targetCardInGraveyard, game); + controller.choose(outcome, opponent.getGraveyard(), targetCardInGraveyard, source, game); cards.addAll(targetCardInGraveyard.getTargets()); filter.setMessage("cards named " + card.getName() + " from " + opponent.getName() + "'s hand"); TargetCardInHand targetCardInHand = new TargetCardInHand(0, Integer.MAX_VALUE, filter); - controller.choose(outcome, opponent.getHand(), targetCardInHand, game); + controller.choose(outcome, opponent.getHand(), targetCardInHand, source, game); cards.addAll(targetCardInHand.getTargets()); filter.setMessage("cards named " + card.getName() + " from " + opponent.getName() + "'s library"); diff --git a/Mage.Sets/src/mage/cards/k/KroxaTitanOfDeathsHunger.java b/Mage.Sets/src/mage/cards/k/KroxaTitanOfDeathsHunger.java index 8ec9977e8b6..9f603b7fd06 100644 --- a/Mage.Sets/src/mage/cards/k/KroxaTitanOfDeathsHunger.java +++ b/Mage.Sets/src/mage/cards/k/KroxaTitanOfDeathsHunger.java @@ -118,7 +118,7 @@ class KroxaTitanOfDeathsHungerDiscardEffect extends OneShotEffect { return; } TargetCard target = new TargetCardInHand(1, StaticFilters.FILTER_CARD); - player.choose(Outcome.Discard, player.getHand(), target, game); + player.choose(Outcome.Discard, player.getHand(), target, source, game); cards.add(target.getFirstTarget()); }); Set playerSet = new HashSet(); diff --git a/Mage.Sets/src/mage/cards/l/LatNamsLegacy.java b/Mage.Sets/src/mage/cards/l/LatNamsLegacy.java index af9d453689d..323a0cd0108 100644 --- a/Mage.Sets/src/mage/cards/l/LatNamsLegacy.java +++ b/Mage.Sets/src/mage/cards/l/LatNamsLegacy.java @@ -57,7 +57,7 @@ class LatNamsLegacyEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null && !controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard("card to shuffle into your library")); - controller.choose(Outcome.Detriment, controller.getHand(), target, game); + controller.choose(Outcome.Detriment, controller.getHand(), target, source, game); Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { boolean successful = controller.moveCards(card, Zone.LIBRARY, source, game); diff --git a/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java b/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java index 160277e2647..d5473389316 100644 --- a/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java +++ b/Mage.Sets/src/mage/cards/l/LonisCryptozoologist.java @@ -102,7 +102,7 @@ class LonisCryptozoologistEffect extends OneShotEffect { filter.add(Predicates.not(CardType.LAND.getPredicate())); filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue + 1)); TargetCard target = new TargetCard(Zone.LIBRARY, filter); - if (controller.choose(outcome, cards, target, game)) { + if (controller.choose(outcome, cards, target, source, game)) { Card selectedCard = game.getCard(target.getFirstTarget()); if (selectedCard != null) { cards.remove(selectedCard); diff --git a/Mage.Sets/src/mage/cards/l/LostHours.java b/Mage.Sets/src/mage/cards/l/LostHours.java index c4299761ac0..172b1c5f543 100644 --- a/Mage.Sets/src/mage/cards/l/LostHours.java +++ b/Mage.Sets/src/mage/cards/l/LostHours.java @@ -65,7 +65,7 @@ class LostHoursEffect extends OneShotEffect { targetPlayer.revealCards(source, targetPlayer.getHand(), game); if (targetPlayer.getHand().size() > 0) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard(StaticFilters.FILTER_CARD_A_NON_LAND)); - if (controller.choose(Outcome.Discard, targetPlayer.getHand(), target, game)) { + if (controller.choose(Outcome.Discard, targetPlayer.getHand(), target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { targetPlayer.putCardOnTopXOfLibrary(card, game, source, 3, true); diff --git a/Mage.Sets/src/mage/cards/m/MagmaticChanneler.java b/Mage.Sets/src/mage/cards/m/MagmaticChanneler.java index 817506c2d05..9edc1582de8 100644 --- a/Mage.Sets/src/mage/cards/m/MagmaticChanneler.java +++ b/Mage.Sets/src/mage/cards/m/MagmaticChanneler.java @@ -101,7 +101,7 @@ class MagmaticChannelerExileEffect extends OneShotEffect { card = cards.getRandom(game); } else { TargetCard targetCard = new TargetCardInExile(StaticFilters.FILTER_CARD, null); - player.choose(outcome, cards, targetCard, game); + player.choose(outcome, cards, targetCard, source, game); card = game.getCard(targetCard.getFirstTarget()); } if (card == null) { diff --git a/Mage.Sets/src/mage/cards/m/MajesticGenesis.java b/Mage.Sets/src/mage/cards/m/MajesticGenesis.java index 9a5c9cad34d..ed6effe3c5a 100644 --- a/Mage.Sets/src/mage/cards/m/MajesticGenesis.java +++ b/Mage.Sets/src/mage/cards/m/MajesticGenesis.java @@ -72,7 +72,7 @@ class MajesticGenesisEffect extends OneShotEffect { 0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_PERMANENT ); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); cards.retainZone(Zone.LIBRARY, game); player.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/m/ManifoldInsights.java b/Mage.Sets/src/mage/cards/m/ManifoldInsights.java index 91df1311899..9920d28d55a 100644 --- a/Mage.Sets/src/mage/cards/m/ManifoldInsights.java +++ b/Mage.Sets/src/mage/cards/m/ManifoldInsights.java @@ -75,7 +75,7 @@ class ManifoldInsightsEffect extends OneShotEffect { Player opponent = game.getPlayer(playerId); if (opponent != null && !topLib.getCards(StaticFilters.FILTER_CARD_NON_LAND, game).isEmpty()) { TargetCard target = new TargetCard(Zone.LIBRARY, StaticFilters.FILTER_CARD_NON_LAND); - if (opponent.choose(Outcome.Detriment, topLib, target, game)) { + if (opponent.choose(Outcome.Detriment, topLib, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { topLib.remove(card); diff --git a/Mage.Sets/src/mage/cards/m/MasterOfPredicaments.java b/Mage.Sets/src/mage/cards/m/MasterOfPredicaments.java index 9674342e0c3..84c6830731b 100644 --- a/Mage.Sets/src/mage/cards/m/MasterOfPredicaments.java +++ b/Mage.Sets/src/mage/cards/m/MasterOfPredicaments.java @@ -78,7 +78,7 @@ class MasterOfPredicamentsEffect extends OneShotEffect { Card cardFromHand = null; if (controller.getHand().size() > 1) { TargetCard target = new TargetCardInHand(new FilterCard()); - if (controller.choose(Outcome.PlayForFree, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PlayForFree, controller.getHand(), target, source, game)) { cardFromHand = game.getCard(target.getFirstTarget()); } } else { diff --git a/Mage.Sets/src/mage/cards/m/MemoryLeak.java b/Mage.Sets/src/mage/cards/m/MemoryLeak.java index f8bc683397e..b300749ff62 100644 --- a/Mage.Sets/src/mage/cards/m/MemoryLeak.java +++ b/Mage.Sets/src/mage/cards/m/MemoryLeak.java @@ -85,7 +85,7 @@ class MemoryLeakEffect extends OneShotEffect { target.setNotTarget(true); cards = opponent.getGraveyard(); } - if (controller.choose(outcome, cards, target, game)) { + if (controller.choose(outcome, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/m/MesmericFiend.java b/Mage.Sets/src/mage/cards/m/MesmericFiend.java index 1373a9378d1..f4db4cb1d0b 100644 --- a/Mage.Sets/src/mage/cards/m/MesmericFiend.java +++ b/Mage.Sets/src/mage/cards/m/MesmericFiend.java @@ -82,7 +82,7 @@ class MesmericFiendExileEffect extends OneShotEffect { && sourcePermanent != null) { opponent.revealCards(sourcePermanent.getName(), opponent.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, new FilterNonlandCard("nonland card to exile")); - if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); diff --git a/Mage.Sets/src/mage/cards/m/MindMaggots.java b/Mage.Sets/src/mage/cards/m/MindMaggots.java index d6b8eebd2d6..2b31fcdc3b5 100644 --- a/Mage.Sets/src/mage/cards/m/MindMaggots.java +++ b/Mage.Sets/src/mage/cards/m/MindMaggots.java @@ -71,7 +71,7 @@ class MindMaggotsEffect extends OneShotEffect { return false; } TargetCard target = new TargetDiscard(0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_CREATURE, controller.getId()); - controller.choose(outcome, controller.getHand(), target, game); + controller.choose(outcome, controller.getHand(), target, source, game); int counters = controller.discard(new CardsImpl(target.getTargets()), false, source, game).size() * 2; Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent == null || counters < 1) { diff --git a/Mage.Sets/src/mage/cards/m/MindWarp.java b/Mage.Sets/src/mage/cards/m/MindWarp.java index ecf88172c4b..692fe4a4007 100644 --- a/Mage.Sets/src/mage/cards/m/MindWarp.java +++ b/Mage.Sets/src/mage/cards/m/MindWarp.java @@ -59,7 +59,7 @@ class MindWarpEffect extends OneShotEffect { } int amountToDiscard = source.getManaCostsToPay().getX(); TargetCard target = new TargetCardInHand(amountToDiscard, StaticFilters.FILTER_CARD_CARDS); - you.choose(outcome, targetPlayer.getHand(), target, game); + you.choose(outcome, targetPlayer.getHand(), target, source, game); targetPlayer.discard(new CardsImpl(target.getTargets()), false, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/m/MindleechGhoul.java b/Mage.Sets/src/mage/cards/m/MindleechGhoul.java index 5116b311c03..a8ae7902be5 100644 --- a/Mage.Sets/src/mage/cards/m/MindleechGhoul.java +++ b/Mage.Sets/src/mage/cards/m/MindleechGhoul.java @@ -78,7 +78,7 @@ class MindleechGhoulEffect extends OneShotEffect { continue; } TargetCard target = new TargetCardInHand(); - opponent.choose(Outcome.Discard, opponent.getHand(), target, game); + opponent.choose(Outcome.Discard, opponent.getHand(), target, source, game); cards.add(game.getCard(target.getFirstTarget())); } return controller.moveCards(cards, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/m/MinnWilyIllusionist.java b/Mage.Sets/src/mage/cards/m/MinnWilyIllusionist.java index 2c59627a48b..a18ea82d19e 100644 --- a/Mage.Sets/src/mage/cards/m/MinnWilyIllusionist.java +++ b/Mage.Sets/src/mage/cards/m/MinnWilyIllusionist.java @@ -89,7 +89,7 @@ class MinnWilyIllusionistEffect extends OneShotEffect { ); filterCard.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, permanent.getPower().getValue() + 1)); TargetCardInHand target = new TargetCardInHand(0, 1, filterCard); - player.choose(Outcome.PutCardInPlay, player.getHand(), target, game); + player.choose(Outcome.PutCardInPlay, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/m/MishraArtificerProdigy.java b/Mage.Sets/src/mage/cards/m/MishraArtificerProdigy.java index 09bce971cf6..3416d79429b 100644 --- a/Mage.Sets/src/mage/cards/m/MishraArtificerProdigy.java +++ b/Mage.Sets/src/mage/cards/m/MishraArtificerProdigy.java @@ -120,14 +120,14 @@ class MishraArtificerProdigyEffect extends OneShotEffect { if (controller.chooseUse(Outcome.Neutral, "Search your graveyard?", source, game)) { // You can't fail to find the card in your graveyard because it's not hidden TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(1, 1, filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } // Hand if (card == null && controller.chooseUse(Outcome.Neutral, "Search your hand?", source, game)) { TargetCardInHand target = new TargetCardInHand(0, 1, filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, source, game)) { card = game.getCard(target.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/m/MishrasResearchDesk.java b/Mage.Sets/src/mage/cards/m/MishrasResearchDesk.java index d1d100eb228..585131a6124 100644 --- a/Mage.Sets/src/mage/cards/m/MishrasResearchDesk.java +++ b/Mage.Sets/src/mage/cards/m/MishrasResearchDesk.java @@ -86,7 +86,7 @@ class MishrasResearchDeskEffect extends OneShotEffect { default: TargetCard target = new TargetCardInExile(StaticFilters.FILTER_CARD); target.setNotTarget(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); } if (card == null) { diff --git a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java index c9a6cf9fe2d..f4a4bf6def5 100644 --- a/Mage.Sets/src/mage/cards/m/MitoticManipulation.java +++ b/Mage.Sets/src/mage/cards/m/MitoticManipulation.java @@ -82,7 +82,7 @@ class MitoticManipulationEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.LIBRARY, filter); if (cardsFromTop.count(filter, source.getControllerId(), source, game) > 0 && controller.chooseUse(Outcome.PutCardInPlay, "Put a card on the battlefield?", source, game)) { - if (controller.choose(Outcome.PutCardInPlay, cardsFromTop, target, game)) { + if (controller.choose(Outcome.PutCardInPlay, cardsFromTop, target, source, game)) { Card card = cardsFromTop.get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/m/MomentOfTruth.java b/Mage.Sets/src/mage/cards/m/MomentOfTruth.java index fcf1e5a1f56..374cd179626 100644 --- a/Mage.Sets/src/mage/cards/m/MomentOfTruth.java +++ b/Mage.Sets/src/mage/cards/m/MomentOfTruth.java @@ -64,7 +64,7 @@ class MomentOfTruthEffect extends OneShotEffect { cards.size() == 3 ? 1 : 0, 1, StaticFilters.FILTER_CARD ); target.withChooseHint("To put into your hand"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.HAND, source, game); @@ -77,7 +77,7 @@ class MomentOfTruthEffect extends OneShotEffect { cards.size() == 2 ? 1 : 0, 1, StaticFilters.FILTER_CARD ); target.withChooseHint("To put into your graveyard"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); if (card != null) { player.putInGraveyard(card, game); @@ -88,7 +88,7 @@ class MomentOfTruthEffect extends OneShotEffect { } target = new TargetCardInLibrary(); target.withChooseHint("To put on the bottom of your library"); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); if (card == null) { return true; diff --git a/Mage.Sets/src/mage/cards/m/Monomania.java b/Mage.Sets/src/mage/cards/m/Monomania.java index 3bc03f33710..7e8a31ad6e9 100644 --- a/Mage.Sets/src/mage/cards/m/Monomania.java +++ b/Mage.Sets/src/mage/cards/m/Monomania.java @@ -59,7 +59,7 @@ class MonomaniaEffect extends OneShotEffect { return false; } TargetCard target = new TargetDiscard(player.getId()); - player.choose(Outcome.Benefit, player.getHand(), target, game); + player.choose(Outcome.Benefit, player.getHand(), target, source, game); Cards cards = player.getHand().copy(); cards.removeIf(target.getTargets()::contains); return !player.discard(cards, false, source, game).isEmpty(); diff --git a/Mage.Sets/src/mage/cards/m/MonsterManual.java b/Mage.Sets/src/mage/cards/m/MonsterManual.java index f4b578e1b56..be2cb0c7c4a 100644 --- a/Mage.Sets/src/mage/cards/m/MonsterManual.java +++ b/Mage.Sets/src/mage/cards/m/MonsterManual.java @@ -82,7 +82,7 @@ class ZoologicalStudyEffect extends OneShotEffect { break; default: TargetCard target = new TargetCard(Zone.ALL, StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = cards.get(target.getFirstTarget(), game); } player.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/m/MoorlandRescuer.java b/Mage.Sets/src/mage/cards/m/MoorlandRescuer.java index 4b4d579ab2e..02a4a60292f 100644 --- a/Mage.Sets/src/mage/cards/m/MoorlandRescuer.java +++ b/Mage.Sets/src/mage/cards/m/MoorlandRescuer.java @@ -76,7 +76,7 @@ class MoorlandRescuerEffect extends OneShotEffect { return false; } TargetCard target = new MoorlandRescuerTarget(permanent.getPower().getValue(), source, game); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); Card sourceCard = (Card) source.getSourceObjectIfItStillExists(game); if (sourceCard != null) { diff --git a/Mage.Sets/src/mage/cards/m/MuzzioVisionaryArchitect.java b/Mage.Sets/src/mage/cards/m/MuzzioVisionaryArchitect.java index ca8fe547ce0..4643349be71 100644 --- a/Mage.Sets/src/mage/cards/m/MuzzioVisionaryArchitect.java +++ b/Mage.Sets/src/mage/cards/m/MuzzioVisionaryArchitect.java @@ -90,7 +90,7 @@ class MuzzioVisionaryArchitectEffect extends OneShotEffect { controller.lookAtCards(source, null, cards, game); if (!cards.isEmpty()) { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterArtifactCard("artifact card to put onto the battlefield")); - if (target.canChoose(controller.getId(), source, game) && controller.choose(Outcome.Benefit, cards, target, game)) { + if (target.canChoose(controller.getId(), source, game) && controller.choose(Outcome.Benefit, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.revealCards(source, new CardsImpl(card), game); diff --git a/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java b/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java index b037af91880..4ca7af89014 100644 --- a/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java +++ b/Mage.Sets/src/mage/cards/m/MythosOfBrokkos.java @@ -84,7 +84,7 @@ class MythosOfBrokkosEffect extends OneShotEffect { } } TargetCard targetCard = new TargetCardInYourGraveyard(0, 2, filter, true); - player.choose(outcome, player.getGraveyard(), targetCard, game); + player.choose(outcome, player.getGraveyard(), targetCard, source, game); Cards cards = new CardsImpl(targetCard.getTargets()); return player.moveCards(cards, Zone.HAND, source, game); } diff --git a/Mage.Sets/src/mage/cards/n/NahirisWarcrafting.java b/Mage.Sets/src/mage/cards/n/NahirisWarcrafting.java index 65375b4643e..cc9b20a54f8 100644 --- a/Mage.Sets/src/mage/cards/n/NahirisWarcrafting.java +++ b/Mage.Sets/src/mage/cards/n/NahirisWarcrafting.java @@ -87,7 +87,7 @@ class NahirisWarcraftingEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, excess)); TargetCard target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_A); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/n/NavigationOrb.java b/Mage.Sets/src/mage/cards/n/NavigationOrb.java index 71c3e642942..a82ab57dad0 100644 --- a/Mage.Sets/src/mage/cards/n/NavigationOrb.java +++ b/Mage.Sets/src/mage/cards/n/NavigationOrb.java @@ -94,7 +94,7 @@ class NavigationOrbEffect extends OneShotEffect { default: TargetCard targetCard = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD); targetCard.withChooseHint("To put onto the battlefield"); - player.choose(outcome, cards, targetCard, game); + player.choose(outcome, cards, targetCard, source, game); card = cards.get(targetCard.getFirstTarget(), game); } cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/n/Necromentia.java b/Mage.Sets/src/mage/cards/n/Necromentia.java index 093a2317c70..21c52386ada 100644 --- a/Mage.Sets/src/mage/cards/n/Necromentia.java +++ b/Mage.Sets/src/mage/cards/n/Necromentia.java @@ -80,7 +80,7 @@ class NecromentiaEffect extends OneShotEffect { if (cardsCount > 0) { filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); TargetCard target = new TargetCard(0, cardsCount, Zone.GRAVEYARD, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, source, game)) { controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); } } @@ -91,7 +91,7 @@ class NecromentiaEffect extends OneShotEffect { if (cardsCount > 0) { filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); TargetCard target = new TargetCard(0, cardsCount, Zone.HAND, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, source, game)) { numberOfCardsExiledFromHand = target.getTargets().size(); controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); } @@ -106,7 +106,7 @@ class NecromentiaEffect extends OneShotEffect { if (cardsCount > 0) { filter.setMessage("card named " + cardName + " in the library of " + targetPlayer.getLogName()); TargetCardInLibrary targetLib = new TargetCardInLibrary(0, cardsCount, filter); - if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) { + if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, source, game)) { controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game); } } else { diff --git a/Mage.Sets/src/mage/cards/n/NeverHappened.java b/Mage.Sets/src/mage/cards/n/NeverHappened.java index 8bcd138ee62..b0680335219 100644 --- a/Mage.Sets/src/mage/cards/n/NeverHappened.java +++ b/Mage.Sets/src/mage/cards/n/NeverHappened.java @@ -80,7 +80,7 @@ class NeverHappenedEffect extends OneShotEffect { target.setNotTarget(true); cards = opponent.getGraveyard(); } - if (controller.choose(outcome, cards, target, game)) { + if (controller.choose(outcome, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/n/NicolBolasDragonGod.java b/Mage.Sets/src/mage/cards/n/NicolBolasDragonGod.java index ac3dc25563b..41a995b9d22 100644 --- a/Mage.Sets/src/mage/cards/n/NicolBolasDragonGod.java +++ b/Mage.Sets/src/mage/cards/n/NicolBolasDragonGod.java @@ -165,7 +165,7 @@ class NicolBolasDragonGodPlusOneEffect extends OneShotEffect { for (Target target : possibleTargetTypes) { // hand if (target.equals(targetHand)) { - if (opponent.choose(Outcome.Exile, opponent.getHand(), targetHand, game) + if (opponent.choose(Outcome.Exile, opponent.getHand(), targetHand, source, game) && game.getCard(targetHand.getFirstTarget()) != null) { cards.add(game.getCard(targetHand.getFirstTarget())); break; diff --git a/Mage.Sets/src/mage/cards/n/NightTerrors.java b/Mage.Sets/src/mage/cards/n/NightTerrors.java index 86e8a3f6c9f..08ad79df27d 100644 --- a/Mage.Sets/src/mage/cards/n/NightTerrors.java +++ b/Mage.Sets/src/mage/cards/n/NightTerrors.java @@ -65,7 +65,7 @@ class NightTerrorsEffect extends OneShotEffect { targetPlayer.revealCards(source, targetPlayer.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_NON_LAND); - if (!player.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + if (!player.choose(Outcome.Exile, targetPlayer.getHand(), target, source, game)) { return true; } Card card = targetPlayer.getHand().get(target.getFirstTarget(), game); diff --git a/Mage.Sets/src/mage/cards/n/Nightsnare.java b/Mage.Sets/src/mage/cards/n/Nightsnare.java index 3b11b782c71..9330b1ed579 100644 --- a/Mage.Sets/src/mage/cards/n/Nightsnare.java +++ b/Mage.Sets/src/mage/cards/n/Nightsnare.java @@ -68,7 +68,7 @@ class NightsnareDiscardEffect extends OneShotEffect { return true; } TargetCard target = new TargetCard(1, Zone.HAND, new FilterNonlandCard()); - if (controller.choose(Outcome.Benefit, revealedCards, target, game)) { + if (controller.choose(Outcome.Benefit, revealedCards, target, source, game)) { Card card = revealedCards.get(target.getFirstTarget(), game); player.discard(card, false, source, game); } diff --git a/Mage.Sets/src/mage/cards/n/NineFingersKeene.java b/Mage.Sets/src/mage/cards/n/NineFingersKeene.java index 87ba312dd68..94246c0abe4 100644 --- a/Mage.Sets/src/mage/cards/n/NineFingersKeene.java +++ b/Mage.Sets/src/mage/cards/n/NineFingersKeene.java @@ -89,7 +89,7 @@ class NineFingersKeeneEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/n/NissasEncouragement.java b/Mage.Sets/src/mage/cards/n/NissasEncouragement.java index dd3a7966637..5d98c1f99cc 100644 --- a/Mage.Sets/src/mage/cards/n/NissasEncouragement.java +++ b/Mage.Sets/src/mage/cards/n/NissasEncouragement.java @@ -107,7 +107,7 @@ class NissasEncouragementEffect extends OneShotEffect { namedFilterGY.add(new NamePredicate(name)); if (player.getGraveyard().count(namedFilterGY, game) > 0) { TargetCard targetGY = new TargetCard(0, 1, Zone.GRAVEYARD, namedFilterGY); - if (player.choose(Outcome.ReturnToHand, player.getGraveyard(), targetGY, game)) { + if (player.choose(Outcome.ReturnToHand, player.getGraveyard(), targetGY, source, game)) { for (UUID cardIdGY : targetGY.getTargets()) { Card cardGY = player.getGraveyard().get(cardIdGY, game); cards.add(cardGY); diff --git a/Mage.Sets/src/mage/cards/n/NivMizzetReborn.java b/Mage.Sets/src/mage/cards/n/NivMizzetReborn.java index 6aefab1505a..db86b413430 100644 --- a/Mage.Sets/src/mage/cards/n/NivMizzetReborn.java +++ b/Mage.Sets/src/mage/cards/n/NivMizzetReborn.java @@ -84,7 +84,7 @@ class NivMizzetRebornEffect extends OneShotEffect { } player.revealCards(source, cards, game); TargetCard target = new NivMizzetRebornTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); player.moveCardsToHandWithInfo(toHand, source, game, true); cards.retainZone(Zone.LIBRARY, game); diff --git a/Mage.Sets/src/mage/cards/o/OKagachiMadeManifest.java b/Mage.Sets/src/mage/cards/o/OKagachiMadeManifest.java index ad16a1600fb..b4cc5c8399d 100644 --- a/Mage.Sets/src/mage/cards/o/OKagachiMadeManifest.java +++ b/Mage.Sets/src/mage/cards/o/OKagachiMadeManifest.java @@ -104,7 +104,7 @@ class OKagachiMadeManifestEffect extends OneShotEffect { default: TargetCard target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_A_NON_LAND); target.setNotTarget(true); - player.choose(Outcome.ReturnToHand, controller.getGraveyard(), target, game); + player.choose(Outcome.ReturnToHand, controller.getGraveyard(), target, source, game); card = game.getCard(target.getFirstTarget()); } if (card == null) { diff --git a/Mage.Sets/src/mage/cards/o/OwlbearCub.java b/Mage.Sets/src/mage/cards/o/OwlbearCub.java index bc261b848a2..8517bf1ab55 100644 --- a/Mage.Sets/src/mage/cards/o/OwlbearCub.java +++ b/Mage.Sets/src/mage/cards/o/OwlbearCub.java @@ -112,7 +112,7 @@ class OwlbearCubEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 8)); TargetCard target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.BATTLEFIELD, source, game, true, false, false, null); diff --git a/Mage.Sets/src/mage/cards/p/PainfulMemories.java b/Mage.Sets/src/mage/cards/p/PainfulMemories.java index 4ce3cbe38db..c1fc84c0707 100644 --- a/Mage.Sets/src/mage/cards/p/PainfulMemories.java +++ b/Mage.Sets/src/mage/cards/p/PainfulMemories.java @@ -66,7 +66,7 @@ class PainfulMemoriesEffect extends OneShotEffect { if (!targetPlayer.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard()); - if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) { + if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, source, game)) { Card card = targetPlayer.getHand().get(target.getFirstTarget(), game); if (card != null) { return targetPlayer.moveCardToLibraryWithInfo(card, source, game, Zone.HAND, true, true); diff --git a/Mage.Sets/src/mage/cards/p/PanopticMirror.java b/Mage.Sets/src/mage/cards/p/PanopticMirror.java index 8eace8b92cc..621ad7b0a1a 100644 --- a/Mage.Sets/src/mage/cards/p/PanopticMirror.java +++ b/Mage.Sets/src/mage/cards/p/PanopticMirror.java @@ -142,7 +142,7 @@ class PanopticMirrorCastEffect extends OneShotEffect { cardToCopy = cards.getCards(game).iterator().next(); } else { TargetCard target = new TargetCard(1, Zone.EXILED, new FilterCard("card to copy")); - controller.choose(Outcome.Copy, cards, target, game); + controller.choose(Outcome.Copy, cards, target, source, game); cardToCopy = cards.get(target.getFirstTarget(), game); } if (cardToCopy != null) { diff --git a/Mage.Sets/src/mage/cards/p/PendantOfProsperity.java b/Mage.Sets/src/mage/cards/p/PendantOfProsperity.java index 315d0890331..d090bb47d27 100644 --- a/Mage.Sets/src/mage/cards/p/PendantOfProsperity.java +++ b/Mage.Sets/src/mage/cards/p/PendantOfProsperity.java @@ -84,7 +84,7 @@ class PendantOfProsperityEffect extends OneShotEffect { return true; } TargetCardInHand target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_LAND_A); - if (!player.choose(outcome, player.getHand(), target, game)) { + if (!player.choose(outcome, player.getHand(), target, source, game)) { return true; } player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/p/Peregrination.java b/Mage.Sets/src/mage/cards/p/Peregrination.java index c3b288f7323..31b0fb18a60 100644 --- a/Mage.Sets/src/mage/cards/p/Peregrination.java +++ b/Mage.Sets/src/mage/cards/p/Peregrination.java @@ -80,7 +80,7 @@ class PeregrinationEffect extends OneShotEffect { controller.revealCards(sourceObject.getIdName(), revealed, game); if (target.getTargets().size() == 2) { TargetCard target2 = new TargetCard(Zone.LIBRARY, filter); - controller.choose(Outcome.Benefit, revealed, target2, game); + controller.choose(Outcome.Benefit, revealed, target2, source, game); Card card = revealed.get(target2.getFirstTarget(), game); controller.moveCards(card, Zone.BATTLEFIELD, source, game, true, false, false, null); revealed.remove(card); diff --git a/Mage.Sets/src/mage/cards/p/PerishTheThought.java b/Mage.Sets/src/mage/cards/p/PerishTheThought.java index 9592a48c015..d4cbde79425 100644 --- a/Mage.Sets/src/mage/cards/p/PerishTheThought.java +++ b/Mage.Sets/src/mage/cards/p/PerishTheThought.java @@ -69,7 +69,7 @@ class PerishTheThoughtEffect extends OneShotEffect { if (you != null) { TargetCard target = new TargetCard(Zone.HAND, filter); target.setNotTarget(true); - if (you.choose(Outcome.Neutral, targetOpponent.getHand(), target, game)) { + if (you.choose(Outcome.Neutral, targetOpponent.getHand(), target, source, game)) { Card chosenCard = targetOpponent.getHand().get(target.getFirstTarget(), game); if (chosenCard != null) { targetOpponent.shuffleCardsToLibrary(chosenCard, game, source); diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianGrimoire.java b/Mage.Sets/src/mage/cards/p/PhyrexianGrimoire.java index 3fcc2f2214b..fb4ea8cf0e1 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianGrimoire.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianGrimoire.java @@ -89,7 +89,7 @@ class PhyrexianGrimoireEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.GRAVEYARD, new FilterCard()); target.setRequired(true); - if(opponent.choose(Outcome.Exile, cards, target, game)) + if(opponent.choose(Outcome.Exile, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); cards.remove(target.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/p/PhyrexianPortal.java b/Mage.Sets/src/mage/cards/p/PhyrexianPortal.java index c2537686b43..82ef1c4f3fc 100644 --- a/Mage.Sets/src/mage/cards/p/PhyrexianPortal.java +++ b/Mage.Sets/src/mage/cards/p/PhyrexianPortal.java @@ -73,7 +73,7 @@ class PhyrexianPortalEffect extends OneShotEffect { TargetCard target = new TargetCard(0, cards.size(), Zone.LIBRARY, new FilterCard("cards to put in the first pile")); List pile1 = new ArrayList<>(); - if (opponent.choose(Outcome.Neutral, cards, target, game)) { + if (opponent.choose(Outcome.Neutral, cards, target, source, game)) { List targets = target.getTargets(); for (UUID targetId : targets) { Card card = cards.get(targetId, game); @@ -100,7 +100,7 @@ class PhyrexianPortalEffect extends OneShotEffect { chosenPile.addAll(choice ? pile1 : pile2); TargetCard target2 = new TargetCard(Zone.HAND, new FilterCard("card to put into your hand")); - if (controller.choose(outcome, chosenPile, target2, game)) { + if (controller.choose(outcome, chosenPile, target2, source, game)) { Card card = chosenPile.get(target2.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/p/PickTheBrain.java b/Mage.Sets/src/mage/cards/p/PickTheBrain.java index 9e61d1371bb..1927f5ce48a 100644 --- a/Mage.Sets/src/mage/cards/p/PickTheBrain.java +++ b/Mage.Sets/src/mage/cards/p/PickTheBrain.java @@ -71,7 +71,7 @@ class PickTheBrainEffect extends SearchTargetGraveyardHandLibraryForCardNameAndE if (!opponent.getHand().isEmpty()) { opponent.revealCards("Exile " + StaticFilters.FILTER_CARD_A_NON_LAND.getMessage(), opponent.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_A_NON_LAND); - if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardToExileWithInfo(card, null, "", source, game, Zone.HAND, true); diff --git a/Mage.Sets/src/mage/cards/p/PlungeIntoDarkness.java b/Mage.Sets/src/mage/cards/p/PlungeIntoDarkness.java index 95fc93e7ae4..f2460f8d64b 100644 --- a/Mage.Sets/src/mage/cards/p/PlungeIntoDarkness.java +++ b/Mage.Sets/src/mage/cards/p/PlungeIntoDarkness.java @@ -124,7 +124,7 @@ class PlungeIntoDarknessSearchEffect extends OneShotEffect { controller.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put into your hand")); - if (controller.choose(Outcome.DrawCard, cards, target, game)) { + if (controller.choose(Outcome.DrawCard, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/p/ProteusStaff.java b/Mage.Sets/src/mage/cards/p/ProteusStaff.java index 02cb5d0a065..23974af6610 100644 --- a/Mage.Sets/src/mage/cards/p/ProteusStaff.java +++ b/Mage.Sets/src/mage/cards/p/ProteusStaff.java @@ -99,7 +99,7 @@ class ProteusStaffEffect extends OneShotEffect { } } else { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put on bottom of your library (last chosen will be on bottom)")); - controller.choose(Outcome.Neutral, cards, target, game); + controller.choose(Outcome.Neutral, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.moveCardToLibraryWithInfo(card, source, game, Zone.LIBRARY, false, false); diff --git a/Mage.Sets/src/mage/cards/p/PrototypePortal.java b/Mage.Sets/src/mage/cards/p/PrototypePortal.java index 25c137e7133..90e04f8f3dd 100644 --- a/Mage.Sets/src/mage/cards/p/PrototypePortal.java +++ b/Mage.Sets/src/mage/cards/p/PrototypePortal.java @@ -101,7 +101,7 @@ class PrototypePortalEffect extends OneShotEffect { if (controller != null && sourceObject != null) { if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_ARTIFACT); - controller.choose(Outcome.Benefit, controller.getHand(), target, game); + controller.choose(Outcome.Benefit, controller.getHand(), target, source, game); Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardsToExile(card, source, game, true, source.getSourceId(), sourceObject.getIdName() + " (Imprint)"); diff --git a/Mage.Sets/src/mage/cards/p/PsychicIntrusion.java b/Mage.Sets/src/mage/cards/p/PsychicIntrusion.java index 8fdab756c3e..e3d11516c00 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicIntrusion.java +++ b/Mage.Sets/src/mage/cards/p/PsychicIntrusion.java @@ -89,14 +89,14 @@ class PsychicIntrusionExileEffect extends OneShotEffect { Card card = null; if (cardsHand > 0 && fromHand) { TargetCard target = new TargetCard(Zone.HAND, filter); - if (controller.choose(Outcome.Benefit, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Benefit, opponent.getHand(), target, source, game)) { card = opponent.getHand().get(target.getFirstTarget(), game); } } if (cardsGraveyard > 0 && !fromHand) { TargetCard target = new TargetCard(Zone.GRAVEYARD, filter); - if (controller.choose(Outcome.Benefit, opponent.getGraveyard(), target, game)) { + if (controller.choose(Outcome.Benefit, opponent.getGraveyard(), target, source, game)) { card = opponent.getGraveyard().get(target.getFirstTarget(), game); } diff --git a/Mage.Sets/src/mage/cards/p/PsychicSurgery.java b/Mage.Sets/src/mage/cards/p/PsychicSurgery.java index 991a0d29da9..885448eb003 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicSurgery.java +++ b/Mage.Sets/src/mage/cards/p/PsychicSurgery.java @@ -102,7 +102,7 @@ class PsychicSurgeryEffect extends OneShotEffect { controller.lookAtCards(source, null, cards, game); if (!cards.isEmpty() && controller.chooseUse(Outcome.Exile, "Exile a card?", source, game)) { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to exile")); - if (controller.choose(Outcome.Exile, cards, target, game)) { + if (controller.choose(Outcome.Exile, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/p/PsychicTheft.java b/Mage.Sets/src/mage/cards/p/PsychicTheft.java index 55f39792136..d2017792631 100644 --- a/Mage.Sets/src/mage/cards/p/PsychicTheft.java +++ b/Mage.Sets/src/mage/cards/p/PsychicTheft.java @@ -82,7 +82,7 @@ class PsychicTheftEffect extends OneShotEffect { Card chosenCard = null; if (cardsHand > 0) { TargetCard target = new TargetCard(Zone.HAND, filter); - if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { chosenCard = opponent.getHand().get(target.getFirstTarget(), game); } } diff --git a/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java b/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java index 9d528374f28..4bf7034d556 100644 --- a/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java +++ b/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java @@ -71,7 +71,7 @@ class PsychoticEpisodeEffect extends OneShotEffect { Card topdeck = player.getLibrary().getFromTop(game); options.add(topdeck); controller.lookAtCards("Top of Library (Psychotic Episode)", topdeck, game); - if (controller.choose(Outcome.Discard, options, targetCard, game)) { + if (controller.choose(Outcome.Discard, options, targetCard, source, game)) { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { CardsImpl cards = new CardsImpl(); diff --git a/Mage.Sets/src/mage/cards/q/QueenKaylaBinKroog.java b/Mage.Sets/src/mage/cards/q/QueenKaylaBinKroog.java index 3b387e00c6a..f97e81c1b5f 100644 --- a/Mage.Sets/src/mage/cards/q/QueenKaylaBinKroog.java +++ b/Mage.Sets/src/mage/cards/q/QueenKaylaBinKroog.java @@ -78,7 +78,7 @@ class QueenKaylaBinKroogEffect extends OneShotEffect { Cards cards = player.discard(player.getHand(), false, source, game); player.drawCards(cards.size(), source, game); TargetCard target = new QueenKaylaBinKroogTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/r/RakdosAugermage.java b/Mage.Sets/src/mage/cards/r/RakdosAugermage.java index 64020914c4c..539ffd38454 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosAugermage.java +++ b/Mage.Sets/src/mage/cards/r/RakdosAugermage.java @@ -74,7 +74,7 @@ class RakdosAugermageEffect extends OneShotEffect { Card sourceCard = game.getCard(source.getSourceId()); player.revealCards((sourceCard != null ? sourceCard.getIdName() + " (" + sourceCard.getZoneChangeCounter(game) + ") (" : "Discard (") + controller.getName() + ")", revealedCards, game); TargetCard target = new TargetCard(Zone.HAND, new FilterCard()); - if (player.choose(Outcome.Benefit, revealedCards, target, game)) { + if (player.choose(Outcome.Benefit, revealedCards, target, source, game)) { Card card = revealedCards.get(target.getFirstTarget(), game); return player.discard(card, false, source, game); diff --git a/Mage.Sets/src/mage/cards/r/Ransack.java b/Mage.Sets/src/mage/cards/r/Ransack.java index 39313546b6a..9dabe9d6641 100644 --- a/Mage.Sets/src/mage/cards/r/Ransack.java +++ b/Mage.Sets/src/mage/cards/r/Ransack.java @@ -74,7 +74,7 @@ class RansackEffect extends OneShotEffect { Cards cardsRemaining = new CardsImpl(); cardsRemaining.addAll(cards); TargetCard target = new TargetCard(0, number, Zone.LIBRARY, filter); - if (player.choose(Outcome.DrawCard, cardsRemaining, target, game)) { + if (player.choose(Outcome.DrawCard, cardsRemaining, target, source, game)) { Cards pickedCards = new CardsImpl(target.getTargets()); cardsRemaining.removeAll(pickedCards); player.putCardsOnBottomOfLibrary(pickedCards, game, source, true); diff --git a/Mage.Sets/src/mage/cards/r/RealmbreakerTheInvasionTree.java b/Mage.Sets/src/mage/cards/r/RealmbreakerTheInvasionTree.java index 7c7b0db1e10..48e36ef7853 100644 --- a/Mage.Sets/src/mage/cards/r/RealmbreakerTheInvasionTree.java +++ b/Mage.Sets/src/mage/cards/r/RealmbreakerTheInvasionTree.java @@ -99,7 +99,7 @@ class RealmbreakerTheInvasionTreeEffect extends OneShotEffect { } TargetCard target = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_LAND); target.setNotTarget(true); - controller.choose(Outcome.PutLandInPlay, opponent.getGraveyard(), target, game); + controller.choose(Outcome.PutLandInPlay, opponent.getGraveyard(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/r/RealmsUncharted.java b/Mage.Sets/src/mage/cards/r/RealmsUncharted.java index 60e12deff00..9d736dadd6d 100644 --- a/Mage.Sets/src/mage/cards/r/RealmsUncharted.java +++ b/Mage.Sets/src/mage/cards/r/RealmsUncharted.java @@ -86,7 +86,7 @@ class RealmsUnchartedEffect extends OneShotEffect { Cards cardsToKeep = new CardsImpl(); cardsToKeep.addAll(cards); TargetCard targetDiscard = new TargetCard(2, Zone.LIBRARY, filter2); - if (opponent.choose(Outcome.Discard, cards, targetDiscard, game)) { + if (opponent.choose(Outcome.Discard, cards, targetDiscard, source, game)) { cardsToKeep.removeIf(targetDiscard.getTargets()::contains); cards.removeAll(cardsToKeep); } diff --git a/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java b/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java index 9a27ca0a01f..555102405f5 100644 --- a/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java +++ b/Mage.Sets/src/mage/cards/r/ReckonerShakedown.java @@ -82,7 +82,7 @@ class ReckonerShakedownEffect extends OneShotEffect { } player.revealCards(source, player.getHand(), game); TargetCard target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_A_NON_LAND); - controller.choose(Outcome.Discard, player.getHand(), target, game); + controller.choose(Outcome.Discard, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.discard(card, false, source, game); diff --git a/Mage.Sets/src/mage/cards/r/ResearchDevelopment.java b/Mage.Sets/src/mage/cards/r/ResearchDevelopment.java index 9381fc18d83..367a9410291 100644 --- a/Mage.Sets/src/mage/cards/r/ResearchDevelopment.java +++ b/Mage.Sets/src/mage/cards/r/ResearchDevelopment.java @@ -71,7 +71,7 @@ class ResearchEffect extends OneShotEffect { } TargetCard target = new TargetCard(0, 4, Zone.OUTSIDE, new FilterCard("cards you own from outside the game")); target.setNotTarget(true); - if (controller.choose(Outcome.Benefit, controller.getSideboard(), target, game)) { + if (controller.choose(Outcome.Benefit, controller.getSideboard(), target, source, game)) { controller.shuffleCardsToLibrary(new CardsImpl(target.getTargets()), game, source); } } diff --git a/Mage.Sets/src/mage/cards/r/RevealingEye.java b/Mage.Sets/src/mage/cards/r/RevealingEye.java index ba9d8cd96dd..cbd392e737c 100644 --- a/Mage.Sets/src/mage/cards/r/RevealingEye.java +++ b/Mage.Sets/src/mage/cards/r/RevealingEye.java @@ -83,7 +83,7 @@ class RevealingEyeEffect extends OneShotEffect { return true; } TargetCard target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_NON_LAND); - controller.choose(outcome, opponent.getHand(), target, game); + controller.choose(outcome, opponent.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return true; diff --git a/Mage.Sets/src/mage/cards/r/ReversalOfFortune.java b/Mage.Sets/src/mage/cards/r/ReversalOfFortune.java index e2e45b89024..29532b64278 100644 --- a/Mage.Sets/src/mage/cards/r/ReversalOfFortune.java +++ b/Mage.Sets/src/mage/cards/r/ReversalOfFortune.java @@ -76,7 +76,7 @@ class ReversalOfFortuneEffect extends OneShotEffect { //You may copy an instant or sorcery card in it TargetCard target = new TargetCard(1, Zone.HAND, new FilterInstantOrSorceryCard()); target.setRequired(false); - if (controller.choose(Outcome.PlayForFree, revealedCards, target, game)) { + if (controller.choose(Outcome.PlayForFree, revealedCards, target, source, game)) { Card card = revealedCards.get(target.getFirstTarget(), game); //If you do, you may cast the copy without paying its mana cost if (card != null) { diff --git a/Mage.Sets/src/mage/cards/r/RevivingVapors.java b/Mage.Sets/src/mage/cards/r/RevivingVapors.java index 991d8a7393d..9da440ffb6b 100644 --- a/Mage.Sets/src/mage/cards/r/RevivingVapors.java +++ b/Mage.Sets/src/mage/cards/r/RevivingVapors.java @@ -66,7 +66,7 @@ class RevivingVaporsEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put into your hand")); target.setNotTarget(true); target.setRequired(true); - if (controller.choose(Outcome.DrawCard, cards, target, game)) { + if (controller.choose(Outcome.DrawCard, cards, target, source, game)) { card = cards.get(target.getFirstTarget(), game); } } diff --git a/Mage.Sets/src/mage/cards/r/RofellossGift.java b/Mage.Sets/src/mage/cards/r/RofellossGift.java index a475486a81f..c653114baf3 100644 --- a/Mage.Sets/src/mage/cards/r/RofellossGift.java +++ b/Mage.Sets/src/mage/cards/r/RofellossGift.java @@ -70,7 +70,7 @@ class RofellossGiftEffect extends OneShotEffect { return false; } TargetCardInHand targetCardInHand = new TargetCardInHand(0, Integer.MAX_VALUE, filter1); - if (!player.choose(outcome, player.getHand(), targetCardInHand, game)) { + if (!player.choose(outcome, player.getHand(), targetCardInHand, source, game)) { return false; } Cards cards = new CardsImpl(); diff --git a/Mage.Sets/src/mage/cards/r/RootweaverDruid.java b/Mage.Sets/src/mage/cards/r/RootweaverDruid.java index 21a7a62aa76..d537604a2ea 100644 --- a/Mage.Sets/src/mage/cards/r/RootweaverDruid.java +++ b/Mage.Sets/src/mage/cards/r/RootweaverDruid.java @@ -88,7 +88,7 @@ class RootweaverDruidEffect extends OneShotEffect { continue; } target = new TargetCardInLibrary(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); mine.addAll(target.getTargets()); cards.removeAll(target.getTargets()); theirs.addAll(cards); diff --git a/Mage.Sets/src/mage/cards/r/RunedCrown.java b/Mage.Sets/src/mage/cards/r/RunedCrown.java index 5f6eaeada46..82c19f7d8cf 100644 --- a/Mage.Sets/src/mage/cards/r/RunedCrown.java +++ b/Mage.Sets/src/mage/cards/r/RunedCrown.java @@ -89,7 +89,7 @@ class RunedCrownEffect extends OneShotEffect { if (controller.chooseUse(Outcome.Neutral, "Search your graveyard for a Rune card?", source, game)) { TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter); target.setNotTarget(true); - if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getGraveyard(), target, source, game)) { card = game.getCard(target.getFirstTarget()); if (card != null) { zone = Zone.GRAVEYARD; @@ -98,7 +98,7 @@ class RunedCrownEffect extends OneShotEffect { } if (card == null && controller.chooseUse(Outcome.Neutral, "Search your hand for a Rune card?", source, game)) { TargetCardInHand target = new TargetCardInHand(filter); - if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, game)) { + if (controller.choose(Outcome.PutCardInPlay, controller.getHand(), target, source, game)) { card = game.getCard(target.getFirstTarget()); if (card != null) { zone = Zone.HAND; diff --git a/Mage.Sets/src/mage/cards/s/SaheelisDirective.java b/Mage.Sets/src/mage/cards/s/SaheelisDirective.java index 4ec7f52a28e..37505870cca 100644 --- a/Mage.Sets/src/mage/cards/s/SaheelisDirective.java +++ b/Mage.Sets/src/mage/cards/s/SaheelisDirective.java @@ -74,7 +74,7 @@ class SaheelisDirectiveEffect extends OneShotEffect { filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue + 1)); TargetCard target1 = new TargetCard(0, Integer.MAX_VALUE, Zone.LIBRARY, filter); target1.setNotTarget(true); - controller.choose(Outcome.PutCardInPlay, cards, target1, game); + controller.choose(Outcome.PutCardInPlay, cards, target1, source, game); Cards toBattlefield = new CardsImpl(target1.getTargets()); cards.removeAll(toBattlefield); controller.moveCards(toBattlefield.getCards(game), Zone.BATTLEFIELD, source, game, false, false, false, null); diff --git a/Mage.Sets/src/mage/cards/s/SealedFate.java b/Mage.Sets/src/mage/cards/s/SealedFate.java index ee8a9cbc91a..a0e0af78545 100644 --- a/Mage.Sets/src/mage/cards/s/SealedFate.java +++ b/Mage.Sets/src/mage/cards/s/SealedFate.java @@ -72,7 +72,7 @@ class SealedFateEffect extends OneShotEffect { return controller.moveCards(cards, Zone.EXILED, source, game); } TargetCard targetCard = new TargetCardInLibrary(); - controller.choose(outcome, cards, targetCard, game); + controller.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/s/SeeBeyond.java b/Mage.Sets/src/mage/cards/s/SeeBeyond.java index 26d88bebe40..9dadeca84d3 100644 --- a/Mage.Sets/src/mage/cards/s/SeeBeyond.java +++ b/Mage.Sets/src/mage/cards/s/SeeBeyond.java @@ -56,7 +56,7 @@ class SeeBeyondEffect extends OneShotEffect { controller.drawCards(2, source, game); if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, new FilterCard("card to shuffle into your library")); - controller.choose(Outcome.Detriment, controller.getHand(), target, game); + controller.choose(Outcome.Detriment, controller.getHand(), target, source, game); Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.LIBRARY, source, game); diff --git a/Mage.Sets/src/mage/cards/s/SelectiveAdaptation.java b/Mage.Sets/src/mage/cards/s/SelectiveAdaptation.java index 9a3a3aedb2d..3e320016175 100644 --- a/Mage.Sets/src/mage/cards/s/SelectiveAdaptation.java +++ b/Mage.Sets/src/mage/cards/s/SelectiveAdaptation.java @@ -108,7 +108,7 @@ class SelectiveAdaptationEffect extends OneShotEffect { continue; } TargetCard target = abilitySelector.makeTarget(); - player.choose(Outcome.DrawCard, top7, target, game); + player.choose(Outcome.DrawCard, top7, target, source, game); toHand.add(target.getFirstTarget()); toGrave.remove(target.getFirstTarget()); } @@ -117,7 +117,7 @@ class SelectiveAdaptationEffect extends OneShotEffect { } if (toHand.count(filter, game) > 0) { TargetCard target = new TargetCardInLibrary(filter); - player.choose(Outcome.PutCreatureInPlay, toHand, target, game); + player.choose(Outcome.PutCreatureInPlay, toHand, target, source, game); Card toBattlefield = game.getCard(target.getFirstTarget()); if (toBattlefield != null && player.moveCards(toBattlefield, Zone.BATTLEFIELD, source, game) diff --git a/Mage.Sets/src/mage/cards/s/SelvalasStampede.java b/Mage.Sets/src/mage/cards/s/SelvalasStampede.java index 34e715c5a37..decf06d70ab 100644 --- a/Mage.Sets/src/mage/cards/s/SelvalasStampede.java +++ b/Mage.Sets/src/mage/cards/s/SelvalasStampede.java @@ -94,7 +94,7 @@ class SelvalasStampedeEffect extends OneShotEffect { // You may put a permanent card from your hand onto the battlefield for each free vote if (freeCount > 0) { TargetCardInHand target = new TargetCardInHand(0, freeCount, StaticFilters.FILTER_CARD_PERMANENT); - player.choose(Outcome.PutCreatureInPlay, player.getHand(), target, game); + player.choose(Outcome.PutCreatureInPlay, player.getHand(), target, source, game); creatureCards.clear(); creatureCards.addAll(target.getTargets()); player.moveCards(creatureCards, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java index 82f3a11d07f..850093e9a1d 100644 --- a/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java +++ b/Mage.Sets/src/mage/cards/s/SemblanceAnvil.java @@ -63,7 +63,7 @@ class SemblanceAnvilEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); if (player != null && !player.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, filter); - player.choose(Outcome.Benefit, player.getHand(), target, game); + player.choose(Outcome.Benefit, player.getHand(), target, source, game); Card card = player.getHand().get(target.getFirstTarget(), game); if (card != null) { card.moveToExile(getId(), "Semblance Anvil (Imprint)", source, game); diff --git a/Mage.Sets/src/mage/cards/s/ShadowKin.java b/Mage.Sets/src/mage/cards/s/ShadowKin.java index 003aee8d10f..28639c53a17 100644 --- a/Mage.Sets/src/mage/cards/s/ShadowKin.java +++ b/Mage.Sets/src/mage/cards/s/ShadowKin.java @@ -87,7 +87,7 @@ class ShadowKinEffect extends OneShotEffect { 0, 1, StaticFilters.FILTER_CARD_CREATURE ); target.setNotTarget(true); - controller.choose(outcome, cards, target, game); + controller.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); Permanent sourcePermanent = source.getSourcePermanentIfItStillExists(game); if (card == null || sourcePermanent == null) { diff --git a/Mage.Sets/src/mage/cards/s/ShiftyDoppelganger.java b/Mage.Sets/src/mage/cards/s/ShiftyDoppelganger.java index 0979c20eba2..69a776604f7 100644 --- a/Mage.Sets/src/mage/cards/s/ShiftyDoppelganger.java +++ b/Mage.Sets/src/mage/cards/s/ShiftyDoppelganger.java @@ -81,7 +81,7 @@ class ShiftyDoppelgangerExileEffect extends OneShotEffect { return false; } TargetCardInHand target = new TargetCardInHand(StaticFilters.FILTER_CARD_CREATURE); - player.choose(Outcome.PutCreatureInPlay, player.getHand(), target, game); + player.choose(Outcome.PutCreatureInPlay, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/s/ShrineOfPiercingVision.java b/Mage.Sets/src/mage/cards/s/ShrineOfPiercingVision.java index 88c214dafd0..ad7fe3b2c9d 100644 --- a/Mage.Sets/src/mage/cards/s/ShrineOfPiercingVision.java +++ b/Mage.Sets/src/mage/cards/s/ShrineOfPiercingVision.java @@ -94,7 +94,7 @@ class ShrineOfPiercingVisionEffect extends OneShotEffect { if (!cards.isEmpty()) { player.lookAtCards(source, null, cards, game); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put into your hand")); - if (player.choose(Outcome.DrawCard, cards, target, game)) { + if (player.choose(Outcome.DrawCard, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/s/SiphonInsight.java b/Mage.Sets/src/mage/cards/s/SiphonInsight.java index d390e3272ed..6fb871cc385 100644 --- a/Mage.Sets/src/mage/cards/s/SiphonInsight.java +++ b/Mage.Sets/src/mage/cards/s/SiphonInsight.java @@ -81,7 +81,7 @@ class SiphonInsightEffect extends OneShotEffect { Cards topCards = new CardsImpl(); topCards.addAll(opponent.getLibrary().getTopCards(game, 2)); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to exile")); - controller.choose(outcome, topCards, target, game); + controller.choose(outcome, topCards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { controller.putCardsOnBottomOfLibrary(topCards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/s/SistersOfStoneDeath.java b/Mage.Sets/src/mage/cards/s/SistersOfStoneDeath.java index 4706a8877e0..fb0c8f865c8 100644 --- a/Mage.Sets/src/mage/cards/s/SistersOfStoneDeath.java +++ b/Mage.Sets/src/mage/cards/s/SistersOfStoneDeath.java @@ -97,7 +97,7 @@ class SistersOfStoneDeathEffect extends OneShotEffect { cardsInExile.add(card); } } - if (controller.choose(Outcome.PutCreatureInPlay, cardsInExile, target, game)) { + if (controller.choose(Outcome.PutCreatureInPlay, cardsInExile, target, source, game)) { Card chosenCard = game.getCard(target.getFirstTarget()); return controller.moveCards(chosenCard, Zone.BATTLEFIELD, source, game); } diff --git a/Mage.Sets/src/mage/cards/s/SkyclavePlunder.java b/Mage.Sets/src/mage/cards/s/SkyclavePlunder.java index 8542f049815..377f7cff5a0 100644 --- a/Mage.Sets/src/mage/cards/s/SkyclavePlunder.java +++ b/Mage.Sets/src/mage/cards/s/SkyclavePlunder.java @@ -71,7 +71,7 @@ class SkyclavePlunderEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, xValue)); int toTake = Math.min(cards.size(), 3); TargetCard target = new TargetCardInLibrary(toTake, toTake, StaticFilters.FILTER_CARD); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); cards.removeIf(target.getTargets()::contains); player.moveCards(toHand, Zone.HAND, source, game); diff --git a/Mage.Sets/src/mage/cards/s/SmeltingVat.java b/Mage.Sets/src/mage/cards/s/SmeltingVat.java index e0637876715..61346fbbe35 100644 --- a/Mage.Sets/src/mage/cards/s/SmeltingVat.java +++ b/Mage.Sets/src/mage/cards/s/SmeltingVat.java @@ -86,7 +86,7 @@ class SmeltingVatEffect extends OneShotEffect { Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 8)); player.revealCards(source, cards, game); TargetCard target = new SmeltingVatTarget(source); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); cards.retainZone(Zone.LIBRARY, game); player.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/s/SoulFoundry.java b/Mage.Sets/src/mage/cards/s/SoulFoundry.java index c641e13f1d9..5efa8ce960a 100644 --- a/Mage.Sets/src/mage/cards/s/SoulFoundry.java +++ b/Mage.Sets/src/mage/cards/s/SoulFoundry.java @@ -109,7 +109,7 @@ class SoulFoundryImprintEffect extends OneShotEffect { if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, filter); if (target.canChoose(source.getControllerId(), source, game) - && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { + && controller.choose(Outcome.Benefit, controller.getHand(), target, source, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardToExileWithInfo(card, source.getSourceId(), sourcePermanent.getIdName() + " (Imprint)", source, game, Zone.HAND, true); diff --git a/Mage.Sets/src/mage/cards/s/SpectersShriek.java b/Mage.Sets/src/mage/cards/s/SpectersShriek.java index bf86c08f404..e6a4c4fc75a 100644 --- a/Mage.Sets/src/mage/cards/s/SpectersShriek.java +++ b/Mage.Sets/src/mage/cards/s/SpectersShriek.java @@ -94,7 +94,7 @@ class SpectersShriekEffect extends OneShotEffect { } target = new TargetCardInHand(filter); target.setNotTarget(true); - return controller.choose(Outcome.Detriment, controller.getHand(), target, game) + return controller.choose(Outcome.Detriment, controller.getHand(), target, source, game) && controller.moveCards(game.getCard(target.getFirstTarget()), Zone.EXILED, source, game); } } diff --git a/Mage.Sets/src/mage/cards/s/Spellbinder.java b/Mage.Sets/src/mage/cards/s/Spellbinder.java index e322bd4e823..e875e85ec00 100644 --- a/Mage.Sets/src/mage/cards/s/Spellbinder.java +++ b/Mage.Sets/src/mage/cards/s/Spellbinder.java @@ -120,7 +120,7 @@ class SpellbinderImprintEffect extends OneShotEffect { if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, filter); if (target.canChoose(source.getControllerId(), source, game) - && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { + && controller.choose(Outcome.Benefit, controller.getHand(), target, source, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardToExileWithInfo(card, source.getSourceId(), diff --git a/Mage.Sets/src/mage/cards/s/SplitTheSpoils.java b/Mage.Sets/src/mage/cards/s/SplitTheSpoils.java index 26cc35f6c9b..4d43d39d09f 100644 --- a/Mage.Sets/src/mage/cards/s/SplitTheSpoils.java +++ b/Mage.Sets/src/mage/cards/s/SplitTheSpoils.java @@ -71,7 +71,7 @@ class SplitTheSpoilsEffect extends OneShotEffect { player.moveCards(cards, Zone.EXILED, source, game); TargetCard target = new TargetCardInExile(0, 5, StaticFilters.FILTER_CARD, null); target.withChooseHint("To put in pile 1").setNotTarget(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); List pile1 = new ArrayList<>(); target.getTargets() .stream() diff --git a/Mage.Sets/src/mage/cards/s/StreamOfThought.java b/Mage.Sets/src/mage/cards/s/StreamOfThought.java index 8d3d1298381..f6821cbae53 100644 --- a/Mage.Sets/src/mage/cards/s/StreamOfThought.java +++ b/Mage.Sets/src/mage/cards/s/StreamOfThought.java @@ -68,7 +68,7 @@ class StreamOfThoughtEffect extends OneShotEffect { } TargetCard target = new TargetCardInYourGraveyard(0, 4); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return false; } player.shuffleCardsToLibrary(new CardsImpl(target.getTargets()), game, source); diff --git a/Mage.Sets/src/mage/cards/s/StrefanMaurerProgenitor.java b/Mage.Sets/src/mage/cards/s/StrefanMaurerProgenitor.java index ba2c4b378c2..188eacc59f0 100644 --- a/Mage.Sets/src/mage/cards/s/StrefanMaurerProgenitor.java +++ b/Mage.Sets/src/mage/cards/s/StrefanMaurerProgenitor.java @@ -116,7 +116,7 @@ class StrefanMaurerProgenitorPlayVampireEffect extends OneShotEffect { if (player == null) { return false; } TargetCard target = new TargetCardInHand(0, 1, vampireCardFilter); - if (!player.choose(outcome, player.getHand(), target, game)) { return false; } + if (!player.choose(outcome, player.getHand(), target, source, game)) { return false; } Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; } diff --git a/Mage.Sets/src/mage/cards/s/StruggleForSanity.java b/Mage.Sets/src/mage/cards/s/StruggleForSanity.java index 80c4f2433a8..14832870342 100644 --- a/Mage.Sets/src/mage/cards/s/StruggleForSanity.java +++ b/Mage.Sets/src/mage/cards/s/StruggleForSanity.java @@ -78,7 +78,7 @@ class StruggleForSanityEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.HAND, new FilterCard("a card to exile")); while (!cardsLeft.isEmpty()) { if (opponentsChoice) { - targetPlayer.choose(Outcome.ReturnToHand, cardsLeft, target, game); + targetPlayer.choose(Outcome.ReturnToHand, cardsLeft, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { exiledByOpponent.add(card); @@ -86,7 +86,7 @@ class StruggleForSanityEffect extends OneShotEffect { targetPlayer.moveCardsToExile(card, source, game, true, exileZoneOpponent, sourceObject.getIdName() + " exiled by " + targetPlayer.getName()); } } else { - controller.choose(Outcome.Discard, cardsLeft, target, game); + controller.choose(Outcome.Discard, cardsLeft, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { exiledByController.add(card); diff --git a/Mage.Sets/src/mage/cards/s/SummonersEgg.java b/Mage.Sets/src/mage/cards/s/SummonersEgg.java index 2c665151089..daeab1855a6 100644 --- a/Mage.Sets/src/mage/cards/s/SummonersEgg.java +++ b/Mage.Sets/src/mage/cards/s/SummonersEgg.java @@ -69,7 +69,7 @@ class SummonersEggImprintEffect extends OneShotEffect { if (!controller.getHand().isEmpty()) { TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD); if (target.canChoose(source.getControllerId(), source, game) - && controller.choose(Outcome.Benefit, controller.getHand(), target, game)) { + && controller.choose(Outcome.Benefit, controller.getHand(), target, source, game)) { Card card = controller.getHand().get(target.getFirstTarget(), game); if (card != null) { card.setFaceDown(true, game); diff --git a/Mage.Sets/src/mage/cards/t/TajuruParagon.java b/Mage.Sets/src/mage/cards/t/TajuruParagon.java index b283dedc60d..f56c75a41ed 100644 --- a/Mage.Sets/src/mage/cards/t/TajuruParagon.java +++ b/Mage.Sets/src/mage/cards/t/TajuruParagon.java @@ -92,7 +92,7 @@ class TajuruParagonEffect extends OneShotEffect { FilterCard filter = new FilterCard("card that shares a creature type with " + permanent.getName()); filter.add(new SharesCreatureTypePredicate(permanent)); TargetCard target = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCardToHandWithInfo(card, source, game, true); diff --git a/Mage.Sets/src/mage/cards/t/TakenumaAbandonedMire.java b/Mage.Sets/src/mage/cards/t/TakenumaAbandonedMire.java index 16933850fcf..6437b033fe9 100644 --- a/Mage.Sets/src/mage/cards/t/TakenumaAbandonedMire.java +++ b/Mage.Sets/src/mage/cards/t/TakenumaAbandonedMire.java @@ -87,7 +87,7 @@ class TakenumaAbandonedMireEffect extends OneShotEffect { } TargetCard target = new TargetCardInGraveyard(filter); target.setNotTarget(true); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); return player.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); } } diff --git a/Mage.Sets/src/mage/cards/t/TalarasBane.java b/Mage.Sets/src/mage/cards/t/TalarasBane.java index 86302847195..f161ade3dcc 100644 --- a/Mage.Sets/src/mage/cards/t/TalarasBane.java +++ b/Mage.Sets/src/mage/cards/t/TalarasBane.java @@ -77,7 +77,7 @@ class TalarasBaneEffect extends OneShotEffect { if (targetPlayer != null && you != null) { targetPlayer.revealCards("Talaras Bane", targetPlayer.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, filter); - if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) { + if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, source, game)) { card = targetPlayer.getHand().get(target.getFirstTarget(), game); } if (card != null) { diff --git a/Mage.Sets/src/mage/cards/t/Tariff.java b/Mage.Sets/src/mage/cards/t/Tariff.java index 4b1c7148fe7..4d8a4b8f988 100644 --- a/Mage.Sets/src/mage/cards/t/Tariff.java +++ b/Mage.Sets/src/mage/cards/t/Tariff.java @@ -81,7 +81,7 @@ class TariffEffect extends OneShotEffect { List creatures = getPermanentsWithTheHighestCMC(game, player.getId(), new FilterControlledCreaturePermanent()); - Permanent creatureToPayFor = chooseOnePermanent(game, player, creatures); + Permanent creatureToPayFor = chooseOnePermanent(player, creatures, source, game); if (creatureToPayFor != null && sourceObject != null) { ManaCosts manaCost = ManaCosts.removeVariableManaCost(creatureToPayFor.getManaCost()); @@ -116,7 +116,7 @@ class TariffEffect extends OneShotEffect { return result; } - private Permanent chooseOnePermanent(Game game, Player player, List permanents) { + private Permanent chooseOnePermanent(Player player, List permanents, Ability source, Game game) { Permanent permanent = null; if (permanents.size() == 1) { permanent = permanents.iterator().next(); @@ -127,7 +127,7 @@ class TariffEffect extends OneShotEffect { } TargetCard targetCard = new TargetCard(Zone.BATTLEFIELD, new FilterCard()); - if (player.choose(Outcome.Benefit, cards, targetCard, game)) { + if (player.choose(Outcome.Benefit, cards, targetCard, source, game)) { permanent = game.getPermanent(targetCard.getFirstTarget()); } } diff --git a/Mage.Sets/src/mage/cards/t/TayamLuminousEnigma.java b/Mage.Sets/src/mage/cards/t/TayamLuminousEnigma.java index a3616e1abd0..439f0ee4e6d 100644 --- a/Mage.Sets/src/mage/cards/t/TayamLuminousEnigma.java +++ b/Mage.Sets/src/mage/cards/t/TayamLuminousEnigma.java @@ -186,7 +186,7 @@ class TayamLuminousEnigmaEffect extends OneShotEffect { } TargetCard target = new TargetCardInYourGraveyard(filter); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return false; } return player.moveCards(game.getCard(target.getFirstTarget()), Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/cards/t/Technomancer.java b/Mage.Sets/src/mage/cards/t/Technomancer.java index d2ab7736d77..125959a8e98 100644 --- a/Mage.Sets/src/mage/cards/t/Technomancer.java +++ b/Mage.Sets/src/mage/cards/t/Technomancer.java @@ -73,7 +73,7 @@ class TechnomancerEffect extends OneShotEffect { return false; } TargetCard target = new TechnomancerTarget(); - player.choose(outcome, player.getGraveyard(), target, game); + player.choose(outcome, player.getGraveyard(), target, source, game); return player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); } } diff --git a/Mage.Sets/src/mage/cards/t/TectonicGiant.java b/Mage.Sets/src/mage/cards/t/TectonicGiant.java index f6416ed02d7..e4b5cd33049 100644 --- a/Mage.Sets/src/mage/cards/t/TectonicGiant.java +++ b/Mage.Sets/src/mage/cards/t/TectonicGiant.java @@ -119,7 +119,7 @@ class TectonicGiantEffect extends OneShotEffect { Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 2)); controller.moveCards(cards, Zone.EXILED, source, game); TargetCard targetCard = new TargetCardInExile(StaticFilters.FILTER_CARD); - controller.choose(outcome, cards, targetCard, game); + controller.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card == null) { diff --git a/Mage.Sets/src/mage/cards/t/TellingTime.java b/Mage.Sets/src/mage/cards/t/TellingTime.java index e0be5c08f83..783a4651cea 100644 --- a/Mage.Sets/src/mage/cards/t/TellingTime.java +++ b/Mage.Sets/src/mage/cards/t/TellingTime.java @@ -71,7 +71,7 @@ class TellingTimeEffect extends OneShotEffect { if (cards.isEmpty()) { return true; } - Card card = pickCard(game, controller, cards, "card to put in your hand"); + Card card = pickCard(controller, cards, "card to put in your hand", source, game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); cards.remove(card); @@ -80,7 +80,7 @@ class TellingTimeEffect extends OneShotEffect { return true; } - card = pickCard(game, controller, cards, "card to put on top of your library"); + card = pickCard(controller, cards, "card to put on top of your library", source, game); if (card != null) { controller.moveCards(card, Zone.LIBRARY, source, game); cards.remove(card); @@ -91,7 +91,7 @@ class TellingTimeEffect extends OneShotEffect { return true; } - private Card pickCard(Game game, Player player, Cards cards, String message) { + private Card pickCard(Player player, Cards cards, String message, Ability source, Game game) { if (cards.isEmpty()) { return null; } @@ -102,7 +102,7 @@ class TellingTimeEffect extends OneShotEffect { } TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard(message)); - if (player.choose(Outcome.Benefit, cards, target, game)) { + if (player.choose(Outcome.Benefit, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/t/ThassasOracle.java b/Mage.Sets/src/mage/cards/t/ThassasOracle.java index 49fca6d9b8f..a3dfc00c545 100644 --- a/Mage.Sets/src/mage/cards/t/ThassasOracle.java +++ b/Mage.Sets/src/mage/cards/t/ThassasOracle.java @@ -78,7 +78,7 @@ class ThassasOracleEffect extends OneShotEffect { int xValue = DevotionCount.U.calculate(game, source, this); Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, xValue)); TargetCardInLibrary target = new TargetCardInLibrary(0, 1, StaticFilters.FILTER_CARD); - player.choose(Outcome.DrawCard, cards, target, game); + player.choose(Outcome.DrawCard, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); cards.remove(card); player.putCardsOnTopOfLibrary(new CardsImpl(card), game, source, false); diff --git a/Mage.Sets/src/mage/cards/t/TheDragonKamiReborn.java b/Mage.Sets/src/mage/cards/t/TheDragonKamiReborn.java index 8dc210d3c6c..798e0674802 100644 --- a/Mage.Sets/src/mage/cards/t/TheDragonKamiReborn.java +++ b/Mage.Sets/src/mage/cards/t/TheDragonKamiReborn.java @@ -82,7 +82,7 @@ class TheDragonKamiRebornEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInLibrary(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { player.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/t/TheFirstTyrannicWar.java b/Mage.Sets/src/mage/cards/t/TheFirstTyrannicWar.java index 392d28554f9..8545a9b5460 100644 --- a/Mage.Sets/src/mage/cards/t/TheFirstTyrannicWar.java +++ b/Mage.Sets/src/mage/cards/t/TheFirstTyrannicWar.java @@ -85,7 +85,7 @@ class TheFirstTyrannicWarFirstEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/t/TheGrandEvolution.java b/Mage.Sets/src/mage/cards/t/TheGrandEvolution.java index 817d0f32c50..2b4a6e04547 100644 --- a/Mage.Sets/src/mage/cards/t/TheGrandEvolution.java +++ b/Mage.Sets/src/mage/cards/t/TheGrandEvolution.java @@ -104,7 +104,7 @@ class TheGrandEvolutionEffect extends OneShotEffect { Cards cards = player.millCards(10, source, game); TargetCard target = new TargetCard(0, 2, Zone.ALL, StaticFilters.FILTER_CARD_CREATURE); target.setNotTarget(true); - player.choose(Outcome.PutCreatureInPlay, cards, target, game); + player.choose(Outcome.PutCreatureInPlay, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/t/TheWorldSpell.java b/Mage.Sets/src/mage/cards/t/TheWorldSpell.java index 7323cf7679e..b0934a5c87d 100644 --- a/Mage.Sets/src/mage/cards/t/TheWorldSpell.java +++ b/Mage.Sets/src/mage/cards/t/TheWorldSpell.java @@ -88,7 +88,7 @@ class TheWorldSpellEffect extends OneShotEffect { return false; } TargetCardInHand target = new TargetCardInHand(0, 2, filter); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); return player.moveCards(new CardsImpl(target.getTargets()), Zone.BATTLEFIELD, source, game); } } diff --git a/Mage.Sets/src/mage/cards/t/ThiefOfSanity.java b/Mage.Sets/src/mage/cards/t/ThiefOfSanity.java index 66f18ec01a5..83825214d95 100644 --- a/Mage.Sets/src/mage/cards/t/ThiefOfSanity.java +++ b/Mage.Sets/src/mage/cards/t/ThiefOfSanity.java @@ -80,7 +80,7 @@ class ThiefOfSanityEffect extends OneShotEffect { Cards topCards = new CardsImpl(); topCards.addAll(damagedPlayer.getLibrary().getTopCards(game, 3)); TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to exile face down")); - if (controller.choose(outcome, topCards, target, game)) { + if (controller.choose(outcome, topCards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { topCards.remove(card); diff --git a/Mage.Sets/src/mage/cards/t/ThievesAuction.java b/Mage.Sets/src/mage/cards/t/ThievesAuction.java index 32ef5468468..2019f0c22e0 100644 --- a/Mage.Sets/src/mage/cards/t/ThievesAuction.java +++ b/Mage.Sets/src/mage/cards/t/ThievesAuction.java @@ -85,7 +85,7 @@ class ThievesAuctionEffect extends OneShotEffect { // chooses one of the exiled cards TargetCard target = new TargetCardInExile(new FilterCard()); - if (player.choose(Outcome.PutCardInPlay, exiledCards, target, game)) { + if (player.choose(Outcome.PutCardInPlay, exiledCards, target, source, game)) { // and puts it onto the battlefield tapped under their control. Card chosenCard = exiledCards.get(target.getFirstTarget(), game); if (chosenCard != null) { diff --git a/Mage.Sets/src/mage/cards/t/ThoughtPrison.java b/Mage.Sets/src/mage/cards/t/ThoughtPrison.java index 8d0ded12558..52264ea0385 100644 --- a/Mage.Sets/src/mage/cards/t/ThoughtPrison.java +++ b/Mage.Sets/src/mage/cards/t/ThoughtPrison.java @@ -84,7 +84,7 @@ class ThoughtPrisonImprintEffect extends OneShotEffect { targetPlayer.revealCards("Thought Prison ", targetPlayer.getHand(), game); TargetCard target = new TargetCard(1, Zone.HAND, filter); - if (player.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) { + if (player.choose(Outcome.Benefit, targetPlayer.getHand(), target, source, game)) { List targets = target.getTargets(); for (UUID targetId : targets) { Card card = targetPlayer.getHand().get(targetId, game); diff --git a/Mage.Sets/src/mage/cards/t/ThoughtpickerWitch.java b/Mage.Sets/src/mage/cards/t/ThoughtpickerWitch.java index c4637aa74c6..4f6a03ddb18 100644 --- a/Mage.Sets/src/mage/cards/t/ThoughtpickerWitch.java +++ b/Mage.Sets/src/mage/cards/t/ThoughtpickerWitch.java @@ -81,7 +81,7 @@ class ThoughtpickerWitchEffect extends OneShotEffect { Cards cards = new CardsImpl(opponent.getLibrary().getTopCards(game, 2)); if (!cards.isEmpty()) { TargetCard target = new TargetCardInLibrary(new FilterCard("card to exile")); - if (controller.choose(Outcome.Exile, cards, target, game)) { + if (controller.choose(Outcome.Exile, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/t/ThrullSurgeon.java b/Mage.Sets/src/mage/cards/t/ThrullSurgeon.java index 550b65b21e6..ec2cd11ffd3 100644 --- a/Mage.Sets/src/mage/cards/t/ThrullSurgeon.java +++ b/Mage.Sets/src/mage/cards/t/ThrullSurgeon.java @@ -70,7 +70,7 @@ class ThrullSurgeonEffect extends OneShotEffect { you.lookAtCards("Discard", targetPlayer.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, new FilterCard()); target.setNotTarget(true); - if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, game)) { + if (you.choose(Outcome.Benefit, targetPlayer.getHand(), target, source, game)) { Card card = targetPlayer.getHand().get(target.getFirstTarget(), game); return targetPlayer.discard(card, false, source, game); diff --git a/Mage.Sets/src/mage/cards/t/TidehollowSculler.java b/Mage.Sets/src/mage/cards/t/TidehollowSculler.java index bac7c8e5403..fc7683c8e3c 100644 --- a/Mage.Sets/src/mage/cards/t/TidehollowSculler.java +++ b/Mage.Sets/src/mage/cards/t/TidehollowSculler.java @@ -82,7 +82,7 @@ class TidehollowScullerExileEffect extends OneShotEffect { && opponent != null) { opponent.revealCards("Tidehollow Sculler", opponent.getHand(), game); TargetCard target = new TargetCard(Zone.HAND, new FilterNonlandCard("nonland card to exile")); - if (controller.choose(Outcome.Exile, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, opponent.getHand(), target, source, game)) { Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCardsToExile( diff --git a/Mage.Sets/src/mage/cards/t/TraumaticRevelation.java b/Mage.Sets/src/mage/cards/t/TraumaticRevelation.java index a02ff7787dd..6ea091aef89 100644 --- a/Mage.Sets/src/mage/cards/t/TraumaticRevelation.java +++ b/Mage.Sets/src/mage/cards/t/TraumaticRevelation.java @@ -76,7 +76,7 @@ class TraumaticRevelationEffect extends OneShotEffect { } opponent.revealCards(source, opponent.getHand(), game); TargetCard target = new TargetCardInHand(0, 1, filter); - controller.choose(Outcome.Discard, opponent.getHand(), target, game); + controller.choose(Outcome.Discard, opponent.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { opponent.discard(card, false, source, game); diff --git a/Mage.Sets/src/mage/cards/t/TreacherousUrge.java b/Mage.Sets/src/mage/cards/t/TreacherousUrge.java index 8f1b1dd528e..463f4217a3e 100644 --- a/Mage.Sets/src/mage/cards/t/TreacherousUrge.java +++ b/Mage.Sets/src/mage/cards/t/TreacherousUrge.java @@ -77,7 +77,7 @@ class TreacherousUrgeEffect extends OneShotEffect { Card card = null; if (cardsHand > 0) { TargetCard target = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_CREATURE); - if (controller.choose(Outcome.Benefit, opponent.getHand(), target, game)) { + if (controller.choose(Outcome.Benefit, opponent.getHand(), target, source, game)) { card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { if (controller.moveCards(card, Zone.BATTLEFIELD, source, game)) { diff --git a/Mage.Sets/src/mage/cards/t/TruthOrTale.java b/Mage.Sets/src/mage/cards/t/TruthOrTale.java index c2cd531c52b..a2c7e6bb250 100644 --- a/Mage.Sets/src/mage/cards/t/TruthOrTale.java +++ b/Mage.Sets/src/mage/cards/t/TruthOrTale.java @@ -81,7 +81,7 @@ class TruthOrTaleEffect extends OneShotEffect { TargetCard target = new TargetCard(0, cards.size(), Zone.LIBRARY, new FilterCard("cards to put in the first pile")); List pile1 = new ArrayList<>(); target.setRequired(false); - if (controller.choose(Outcome.Neutral, cards, target, game)) { + if (controller.choose(Outcome.Neutral, cards, target, source, game)) { List targets = target.getTargets(); for (UUID targetId : targets) { Card card = game.getCard(targetId); @@ -103,7 +103,7 @@ class TruthOrTaleEffect extends OneShotEffect { if (!chosen.isEmpty()) { Cards chosenCards = new CardsImpl(new HashSet<>(chosen)); TargetCard finalChosenCardTarget = new TargetCard(Zone.LIBRARY,new FilterCard("card to put into your hand")); - if (controller.choose(Outcome.DrawCard, chosenCards, finalChosenCardTarget, game)){ + if (controller.choose(Outcome.DrawCard, chosenCards, finalChosenCardTarget, source, game)){ Card finalChosenCard = game.getCard(finalChosenCardTarget.getFirstTarget()); if (finalChosenCard != null) { if (!game.isSimulation()) { diff --git a/Mage.Sets/src/mage/cards/t/TurntimberSymbiosis.java b/Mage.Sets/src/mage/cards/t/TurntimberSymbiosis.java index 8a1c924fb3f..e519c7c6a33 100644 --- a/Mage.Sets/src/mage/cards/t/TurntimberSymbiosis.java +++ b/Mage.Sets/src/mage/cards/t/TurntimberSymbiosis.java @@ -95,7 +95,7 @@ class TurntimberSymbiosisEffect extends OneShotEffect { TargetCard target = new TargetCardInLibrary( 0, 1, StaticFilters.FILTER_CARD_CREATURE ); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/t/TymaretCallsTheDead.java b/Mage.Sets/src/mage/cards/t/TymaretCallsTheDead.java index af1e2f21289..27df4c43a8c 100644 --- a/Mage.Sets/src/mage/cards/t/TymaretCallsTheDead.java +++ b/Mage.Sets/src/mage/cards/t/TymaretCallsTheDead.java @@ -97,7 +97,7 @@ class TymaretCallsTheDeadFirstEffect extends OneShotEffect { } TargetCard target = new TargetCardInYourGraveyard(filter); target.setNotTarget(true); - if (!player.choose(outcome, player.getGraveyard(), target, game)) { + if (!player.choose(outcome, player.getGraveyard(), target, source, game)) { return true; } return player.moveCards(game.getCard(target.getFirstTarget()), Zone.EXILED, source, game) diff --git a/Mage.Sets/src/mage/cards/u/UltraMagnusTactician.java b/Mage.Sets/src/mage/cards/u/UltraMagnusTactician.java index f3ced9ded38..ecc24acad5c 100644 --- a/Mage.Sets/src/mage/cards/u/UltraMagnusTactician.java +++ b/Mage.Sets/src/mage/cards/u/UltraMagnusTactician.java @@ -88,7 +88,7 @@ class UltraMagnusTacticianEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(0, 1, filter); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/u/UnmooredEgo.java b/Mage.Sets/src/mage/cards/u/UnmooredEgo.java index 57ad6a6bd89..fe12a4d38a9 100644 --- a/Mage.Sets/src/mage/cards/u/UnmooredEgo.java +++ b/Mage.Sets/src/mage/cards/u/UnmooredEgo.java @@ -78,7 +78,7 @@ class UnmooredEgoEffect extends OneShotEffect { filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); TargetCard target = new TargetCard(Math.min(cardsCount, numberOfCardsStillToRemove), Math.min(cardsCount, numberOfCardsStillToRemove), Zone.GRAVEYARD, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, source, game)) { numberOfCardsStillToRemove -= target.getTargets().size(); controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); } @@ -89,7 +89,7 @@ class UnmooredEgoEffect extends OneShotEffect { cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getHand().count(filter, game)); filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); TargetCard target = new TargetCard(0, Math.min(cardsCount, numberOfCardsStillToRemove), Zone.HAND, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, source, game)) { numberOfCardsExiledFromHand = target.getTargets().size(); numberOfCardsStillToRemove -= target.getTargets().size(); controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); @@ -103,7 +103,7 @@ class UnmooredEgoEffect extends OneShotEffect { cardsCount = (cardName.isEmpty() ? 0 : cardsInLibrary.count(filter, game)); filter.setMessage("card named " + cardName + " in the library of " + targetPlayer.getLogName()); TargetCardInLibrary targetLib = new TargetCardInLibrary(0, Math.min(cardsCount, numberOfCardsStillToRemove), filter); - if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) { + if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, source, game)) { controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game); } } diff --git a/Mage.Sets/src/mage/cards/u/UvildaDeanOfPerfection.java b/Mage.Sets/src/mage/cards/u/UvildaDeanOfPerfection.java index 7f88faf0fd4..adf5033be26 100644 --- a/Mage.Sets/src/mage/cards/u/UvildaDeanOfPerfection.java +++ b/Mage.Sets/src/mage/cards/u/UvildaDeanOfPerfection.java @@ -109,7 +109,7 @@ class UvildaDeanOfPerfectionEffect extends OneShotEffect { TargetCard target = new TargetCardInHand( 0, 1, StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY ); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/v/ValakutAwakening.java b/Mage.Sets/src/mage/cards/v/ValakutAwakening.java index 5d324e0eba7..7319b8f17b3 100644 --- a/Mage.Sets/src/mage/cards/v/ValakutAwakening.java +++ b/Mage.Sets/src/mage/cards/v/ValakutAwakening.java @@ -81,7 +81,7 @@ class ValakutAwakeningEffect extends OneShotEffect { TargetCard targetCard = new TargetCardInHand( 0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_CARDS ); - player.choose(outcome, player.getHand(), targetCard, game); + player.choose(outcome, player.getHand(), targetCard, source, game); Cards cards = new CardsImpl(targetCard.getTargets()); player.putCardsOnBottomOfLibrary(cards, game, source, true); player.drawCards(cards.size() + 1, source, game); diff --git a/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java b/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java index 923996eab43..decc8778534 100644 --- a/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java +++ b/Mage.Sets/src/mage/cards/v/ValkiGodOfLies.java @@ -125,7 +125,7 @@ class ValkiGodOfLiesRevealExileEffect extends OneShotEffect { TargetCard targetToExile = new TargetCard(Zone.HAND, StaticFilters.FILTER_CARD_CREATURE); targetToExile.withChooseHint("card to exile"); targetToExile.setNotTarget(true); - if (controller.choose(Outcome.Exile, opponent.getHand(), targetToExile, game)) { + if (controller.choose(Outcome.Exile, opponent.getHand(), targetToExile, source, game)) { Card targetedCardToExile = game.getCard(targetToExile.getFirstTarget()); if (targetedCardToExile != null && game.getState().getZone(source.getSourceId()) == Zone.BATTLEFIELD) { @@ -242,7 +242,7 @@ class ValkiGodOfLiesCopyExiledEffect extends OneShotEffect { Cards cards = game.getExile().getExileZone(exileId); if (cards != null && !cards.isEmpty() - && controller.choose(Outcome.Benefit, cards, target, game)) { + && controller.choose(Outcome.Benefit, cards, target, source, game)) { Card chosenExiledCard = game.getCard(target.getFirstTarget()); if (chosenExiledCard != null) { ContinuousEffect copyEffect = new CopyEffect(Duration.WhileOnBattlefield, chosenExiledCard.getMainCard(), source.getSourceId()); diff --git a/Mage.Sets/src/mage/cards/v/VendilionClique.java b/Mage.Sets/src/mage/cards/v/VendilionClique.java index e69ab9ed806..ff188a18745 100644 --- a/Mage.Sets/src/mage/cards/v/VendilionClique.java +++ b/Mage.Sets/src/mage/cards/v/VendilionClique.java @@ -78,7 +78,7 @@ class VendilionCliqueEffect extends OneShotEffect { if (player != null && controller != null && sourceObject != null) { TargetCard targetCard = new TargetCard(Zone.ALL, new FilterNonlandCard()); targetCard.setRequired(false); - if (controller.choose(Outcome.Discard, player.getHand(), targetCard, game)) { + if (controller.choose(Outcome.Discard, player.getHand(), targetCard, source, game)) { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { CardsImpl cards = new CardsImpl(); diff --git a/Mage.Sets/src/mage/cards/v/VerdantMastery.java b/Mage.Sets/src/mage/cards/v/VerdantMastery.java index 4a205937814..02258849921 100644 --- a/Mage.Sets/src/mage/cards/v/VerdantMastery.java +++ b/Mage.Sets/src/mage/cards/v/VerdantMastery.java @@ -88,7 +88,7 @@ class VerdantMasteryEffect extends OneShotEffect { target = new TargetCardInLibrary(1, StaticFilters.FILTER_CARD_BASIC_LAND); target.setRequired(true); target.withChooseHint("to give to " + opponent.getName()); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); opponent.moveCards( card, Zone.BATTLEFIELD, source, game, true, @@ -103,7 +103,7 @@ class VerdantMasteryEffect extends OneShotEffect { } target = new TargetCardInLibrary(Math.min(cards.size(), 2), StaticFilters.FILTER_CARD_BASIC_LAND); target.setRequired(true); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards( new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, true, false, false, null diff --git a/Mage.Sets/src/mage/cards/v/VivienChampionOfTheWilds.java b/Mage.Sets/src/mage/cards/v/VivienChampionOfTheWilds.java index 1b2432a6767..7c4d2310dda 100644 --- a/Mage.Sets/src/mage/cards/v/VivienChampionOfTheWilds.java +++ b/Mage.Sets/src/mage/cards/v/VivienChampionOfTheWilds.java @@ -101,7 +101,7 @@ class VivienChampionOfTheWildsEffect extends OneShotEffect { Cards cardsToLook = new CardsImpl(player.getLibrary().getTopCards(game, 3)); FilterCard filter = new FilterCard("card to exile face down"); TargetCard target = new TargetCardInLibrary(filter); - if (!player.choose(outcome, cardsToLook, target, game)) { + if (!player.choose(outcome, cardsToLook, target, source, game)) { return false; } diff --git a/Mage.Sets/src/mage/cards/v/VivienOnTheHunt.java b/Mage.Sets/src/mage/cards/v/VivienOnTheHunt.java index 559f9fb13c8..dd869802473 100644 --- a/Mage.Sets/src/mage/cards/v/VivienOnTheHunt.java +++ b/Mage.Sets/src/mage/cards/v/VivienOnTheHunt.java @@ -126,7 +126,7 @@ class VivienOnTheHuntMillEffect extends OneShotEffect { TargetCard target = new TargetCard( 0, Integer.MAX_VALUE, Zone.ALL, StaticFilters.FILTER_CARD_CREATURE ); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); player.moveCards(new CardsImpl(target.getTargets()), Zone.HAND, source, game); return true; } diff --git a/Mage.Sets/src/mage/cards/v/ViviensArkbow.java b/Mage.Sets/src/mage/cards/v/ViviensArkbow.java index c61d1ed196d..efb29f68f19 100644 --- a/Mage.Sets/src/mage/cards/v/ViviensArkbow.java +++ b/Mage.Sets/src/mage/cards/v/ViviensArkbow.java @@ -79,7 +79,7 @@ class ViviensArkbowEffect extends OneShotEffect { filter.add(new ManaValuePredicate(ComparisonType.FEWER_THAN, xValue + 1)); TargetCard target = new TargetCardInLibrary(0, 1, filter); - if (player.choose(outcome, cards, target, game)) { + if (player.choose(outcome, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (player.moveCards(card, Zone.BATTLEFIELD, source, game)) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/v/ViviensInvocation.java b/Mage.Sets/src/mage/cards/v/ViviensInvocation.java index 64fc2b88ea0..9912699ce2b 100644 --- a/Mage.Sets/src/mage/cards/v/ViviensInvocation.java +++ b/Mage.Sets/src/mage/cards/v/ViviensInvocation.java @@ -69,7 +69,7 @@ class ViviensInvocationEffect extends OneShotEffect { } TargetCard target = new TargetCard(Zone.LIBRARY, filter); target.setNotTarget(true); - controller.choose(Outcome.PutCreatureInPlay, cards, target, game); + controller.choose(Outcome.PutCreatureInPlay, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card == null) { controller.putCardsOnBottomOfLibrary(cards, game, source, false); diff --git a/Mage.Sets/src/mage/cards/v/VoidMaw.java b/Mage.Sets/src/mage/cards/v/VoidMaw.java index 6b3eae1e824..5fd786e7681 100644 --- a/Mage.Sets/src/mage/cards/v/VoidMaw.java +++ b/Mage.Sets/src/mage/cards/v/VoidMaw.java @@ -140,7 +140,7 @@ class VoidMawCost extends CostImpl { Cards cards = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, ability)); if (cards != null && !cards.isEmpty() - && controller.choose(Outcome.Benefit, cards, target, game)) { + && controller.choose(Outcome.Benefit, cards, target, source, game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { if (controller.moveCardToGraveyardWithInfo(card, source, game, Zone.EXILED)) { diff --git a/Mage.Sets/src/mage/cards/v/VolcanicSpite.java b/Mage.Sets/src/mage/cards/v/VolcanicSpite.java index 40d526028b5..b7822816836 100644 --- a/Mage.Sets/src/mage/cards/v/VolcanicSpite.java +++ b/Mage.Sets/src/mage/cards/v/VolcanicSpite.java @@ -80,7 +80,7 @@ class VolcanicSpiteEffect extends OneShotEffect { return false; } TargetCard target = new TargetCardInHand(); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return false; diff --git a/Mage.Sets/src/mage/cards/v/VolrathsDungeon.java b/Mage.Sets/src/mage/cards/v/VolrathsDungeon.java index d32415b1c34..a19a25a8fcc 100644 --- a/Mage.Sets/src/mage/cards/v/VolrathsDungeon.java +++ b/Mage.Sets/src/mage/cards/v/VolrathsDungeon.java @@ -75,7 +75,7 @@ class VolrathsDungeonEffect extends OneShotEffect { Player targetedPlayer = game.getPlayer(source.getFirstTarget()); if (targetedPlayer != null) { TargetCardInHand target = new TargetCardInHand(); - if (targetedPlayer.choose(Outcome.Detriment, targetedPlayer.getHand(), target, game)) { + if (targetedPlayer.choose(Outcome.Detriment, targetedPlayer.getHand(), target, source, game)) { Card card = game.getCard(target.getFirstTarget()); // must hides the card name from other players return card != null && targetedPlayer.putCardOnTopXOfLibrary(card, game, source, 0, false); diff --git a/Mage.Sets/src/mage/cards/w/WanderingArchaic.java b/Mage.Sets/src/mage/cards/w/WanderingArchaic.java index caec8d1b101..d2d5f57a6ee 100644 --- a/Mage.Sets/src/mage/cards/w/WanderingArchaic.java +++ b/Mage.Sets/src/mage/cards/w/WanderingArchaic.java @@ -126,7 +126,7 @@ class ExploreTheVastlandsEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 5)); TargetCard target = new ExploreTheVastlandsTarget(); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); Cards toHand = new CardsImpl(target.getTargets()); cards.removeIf(target.getTargets()::contains); player.revealCards(source, toHand, game); diff --git a/Mage.Sets/src/mage/cards/w/WatchersOfTheDead.java b/Mage.Sets/src/mage/cards/w/WatchersOfTheDead.java index ecca273c580..9a4586c9bf1 100644 --- a/Mage.Sets/src/mage/cards/w/WatchersOfTheDead.java +++ b/Mage.Sets/src/mage/cards/w/WatchersOfTheDead.java @@ -76,7 +76,7 @@ class WatchersOfTheDeadEffect extends OneShotEffect { target.setNotTarget(true); Cards cardsInGraveyard = opponent.getGraveyard(); if (cardsInGraveyard.size() > 1) { - opponent.choose(outcome, cardsInGraveyard, target, game); + opponent.choose(outcome, cardsInGraveyard, target, source, game); for (Card cardInGraveyard : cardsInGraveyard.getCards(game)) { if (!target.getTargets().contains(cardInGraveyard.getId())) { opponent.moveCardToExileWithInfo(cardInGraveyard, CardUtil.getCardExileZoneId(game, source.getId()), diff --git a/Mage.Sets/src/mage/cards/w/WildfireDevils.java b/Mage.Sets/src/mage/cards/w/WildfireDevils.java index 8c2cddcf450..5c7a4256076 100644 --- a/Mage.Sets/src/mage/cards/w/WildfireDevils.java +++ b/Mage.Sets/src/mage/cards/w/WildfireDevils.java @@ -87,7 +87,7 @@ class WildfireDevilsEffect extends OneShotEffect { } TargetCardInGraveyard targetCard = new TargetCardInGraveyard(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY); targetCard.setNotTarget(true); - if (!randomPlayer.choose(Outcome.Discard, randomPlayer.getGraveyard(), targetCard, game)) { + if (!randomPlayer.choose(Outcome.Discard, randomPlayer.getGraveyard(), targetCard, source, game)) { return false; } Card card = game.getCard(targetCard.getFirstTarget()); diff --git a/Mage.Sets/src/mage/cards/w/WinotaJoinerOfForces.java b/Mage.Sets/src/mage/cards/w/WinotaJoinerOfForces.java index 9f78f63676d..db0b3c3a479 100644 --- a/Mage.Sets/src/mage/cards/w/WinotaJoinerOfForces.java +++ b/Mage.Sets/src/mage/cards/w/WinotaJoinerOfForces.java @@ -90,7 +90,7 @@ class WinotaJoinerOfForcesEffect extends OneShotEffect { } Cards cards = new CardsImpl(player.getLibrary().getTopCards(game, 6)); TargetCardInLibrary targetCardInLibrary = new TargetCardInLibrary(0, 1, filter); - player.choose(outcome, cards, targetCardInLibrary, game); + player.choose(outcome, cards, targetCardInLibrary, source, game); Card card = game.getCard(targetCardInLibrary.getFirstTarget()); if (card == null || !player.moveCards( card, Zone.BATTLEFIELD, source, game, true, diff --git a/Mage.Sets/src/mage/cards/w/WordOfCommand.java b/Mage.Sets/src/mage/cards/w/WordOfCommand.java index b6a27986f67..5f0e2c62e88 100644 --- a/Mage.Sets/src/mage/cards/w/WordOfCommand.java +++ b/Mage.Sets/src/mage/cards/w/WordOfCommand.java @@ -92,7 +92,7 @@ class WordOfCommandEffect extends OneShotEffect { // Look at target opponent's hand and choose a card from it TargetCard targetCard = new TargetCard(Zone.HAND, new FilterCard()); - if (controller.choose(Outcome.Discard, targetPlayer.getHand(), targetCard, game)) { + if (controller.choose(Outcome.Discard, targetPlayer.getHand(), targetCard, source, game)) { card = game.getCard(targetCard.getFirstTarget()); } diff --git a/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java b/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java index a1a10324efe..c240f715716 100644 --- a/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java +++ b/Mage.Sets/src/mage/cards/w/WorldlyCounsel.java @@ -74,7 +74,7 @@ class WorldlyCounselEffect extends OneShotEffect { controller.moveCards(cards, Zone.HAND, source, game); } else { TargetCard target = new TargetCard(Zone.LIBRARY, new FilterCard("card to put into your hand")); - if (controller.choose(Outcome.DrawCard, cards, target, game)) { + if (controller.choose(Outcome.DrawCard, cards, target, source, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/w/WrennAndSeven.java b/Mage.Sets/src/mage/cards/w/WrennAndSeven.java index 524b56c76a6..8761c8a1c2d 100644 --- a/Mage.Sets/src/mage/cards/w/WrennAndSeven.java +++ b/Mage.Sets/src/mage/cards/w/WrennAndSeven.java @@ -83,7 +83,7 @@ class WrennAndSevenLandEffect extends OneShotEffect { TargetCardInHand target = new TargetCardInHand( 0, Integer.MAX_VALUE, StaticFilters.FILTER_CARD_LANDS ); - player.choose(outcome, player.getHand(), target, game); + player.choose(outcome, player.getHand(), target, source, game); return player.moveCards( new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, true, diff --git a/Mage.Sets/src/mage/cards/w/WuSpy.java b/Mage.Sets/src/mage/cards/w/WuSpy.java index 2a3ace8fd94..d1a796df6e1 100644 --- a/Mage.Sets/src/mage/cards/w/WuSpy.java +++ b/Mage.Sets/src/mage/cards/w/WuSpy.java @@ -77,7 +77,7 @@ class WuSpyEffect extends OneShotEffect { Cards cards = new CardsImpl(opponent.getLibrary().getTopCards(game, 2)); if (!cards.isEmpty()) { TargetCard target = new TargetCardInLibrary(new FilterCard("card to put into graveyard")); - controller.choose(Outcome.Benefit, cards, target, game); + controller.choose(Outcome.Benefit, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); diff --git a/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java b/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java index 80e57758801..5c796c4d98e 100644 --- a/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java +++ b/Mage.Sets/src/mage/cards/x/XenagosTheReveler.java @@ -124,7 +124,7 @@ class XenagosExileEffect extends OneShotEffect { target1.setNotTarget(true); if (!exiledCards.isEmpty() && target1.canChoose(source.getControllerId(), source, game) - && controller.choose(Outcome.PutCardInPlay, exiledCards, target1, game)) { + && controller.choose(Outcome.PutCardInPlay, exiledCards, target1, source, game)) { controller.moveCards(new CardsImpl(target1.getTargets()), Zone.BATTLEFIELD, source, game); } return true; diff --git a/Mage.Sets/src/mage/cards/y/YouFindSomePrisoners.java b/Mage.Sets/src/mage/cards/y/YouFindSomePrisoners.java index 720a3e44259..2af56bbe731 100644 --- a/Mage.Sets/src/mage/cards/y/YouFindSomePrisoners.java +++ b/Mage.Sets/src/mage/cards/y/YouFindSomePrisoners.java @@ -78,7 +78,7 @@ class YouFindSomePrisonersEffect extends OneShotEffect { player.moveCards(cards, Zone.EXILED, source, game); TargetCardInExile target = new TargetCardInExile(StaticFilters.FILTER_CARD); target.setNotTarget(true); - player.choose(Outcome.PlayForFree, cards, target, game); + player.choose(Outcome.PlayForFree, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { CardUtil.makeCardPlayable(game, source, card, Duration.UntilEndOfYourNextTurn, true); diff --git a/Mage.Sets/src/mage/cards/z/ZaraRenegadeRecruiter.java b/Mage.Sets/src/mage/cards/z/ZaraRenegadeRecruiter.java index f649003e831..0ab95c2d000 100644 --- a/Mage.Sets/src/mage/cards/z/ZaraRenegadeRecruiter.java +++ b/Mage.Sets/src/mage/cards/z/ZaraRenegadeRecruiter.java @@ -85,7 +85,7 @@ class ZaraRenegadeRecruiterEffect extends OneShotEffect { TargetCardInHand targetCard = new TargetCardInHand( 0, 1, StaticFilters.FILTER_CARD_CREATURE ); - controller.choose(outcome, player.getHand(), targetCard, game); + controller.choose(outcome, player.getHand(), targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card == null) { return false; diff --git a/Mage/src/main/java/mage/abilities/effects/common/CastCardFromOutsideTheGameEffect.java b/Mage/src/main/java/mage/abilities/effects/common/CastCardFromOutsideTheGameEffect.java index a4c2c8dbc22..b3940e54a62 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/CastCardFromOutsideTheGameEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/CastCardFromOutsideTheGameEffect.java @@ -69,7 +69,7 @@ public class CastCardFromOutsideTheGameEffect extends OneShotEffect { } TargetCard target = new TargetCard(Zone.OUTSIDE, filterCard); - if (player.choose(Outcome.Benefit, filteredCards, target, game)) { + if (player.choose(Outcome.Benefit, filteredCards, target, source, game)) { Card card = player.getSideboard().get(target.getFirstTarget(), game); if (card != null) { game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE); diff --git a/Mage/src/main/java/mage/abilities/effects/common/DrawDiscardOneOfThemEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DrawDiscardOneOfThemEffect.java index bf306147e51..46c0b594e76 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DrawDiscardOneOfThemEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DrawDiscardOneOfThemEffect.java @@ -52,7 +52,7 @@ public class DrawDiscardOneOfThemEffect extends OneShotEffect { if (!drawnCards.isEmpty()) { TargetCard cardToDiscard = new TargetCard(Zone.HAND, new FilterCard("card to discard")); cardToDiscard.setNotTarget(true); - if (controller.choose(Outcome.Discard, drawnCards, cardToDiscard, game)) { + if (controller.choose(Outcome.Discard, drawnCards, cardToDiscard, source, game)) { Card card = controller.getHand().get(cardToDiscard.getFirstTarget(), game); if (card != null) { return controller.discard(card, false, source, game); diff --git a/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java b/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java index b350f59e45d..4a5bd1355a9 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/ExileCardYouChooseTargetOpponentEffect.java @@ -41,7 +41,7 @@ public class ExileCardYouChooseTargetOpponentEffect extends OneShotEffect { return true; } TargetCard target = new TargetCard(Zone.HAND, filter); - controller.choose(Outcome.Exile, opponent.getHand(), target, game); + controller.choose(Outcome.Exile, opponent.getHand(), target, source, game); Card card = opponent.getHand().get(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java index ef72b3fa9c2..37820e93b3b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/MillThenPutInHandEffect.java @@ -58,7 +58,7 @@ public class MillThenPutInHandEffect extends OneShotEffect { return applyOtherwiseEffect(game, source); } TargetCard target = new TargetCard(0, 1, Zone.ALL, filter); - player.choose(Outcome.DrawCard, cards, target, game); + player.choose(Outcome.DrawCard, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { return applyOtherwiseEffect(game, source); diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutCardFromOneOfTwoZonesOntoBattlefieldEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutCardFromOneOfTwoZonesOntoBattlefieldEffect.java index 14497970974..3376fa56b99 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutCardFromOneOfTwoZonesOntoBattlefieldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutCardFromOneOfTwoZonesOntoBattlefieldEffect.java @@ -123,7 +123,7 @@ public class PutCardFromOneOfTwoZonesOntoBattlefieldEffect extends OneShotEffect default: return false; } - controller.choose(outcome, cards, targetCard, game); + controller.choose(outcome, cards, targetCard, source, game); Card card = game.getCard(targetCard.getFirstTarget()); if (card == null || !controller.moveCards(card, Zone.BATTLEFIELD, source, game, tapped, false, false, null)) { return false; diff --git a/Mage/src/main/java/mage/abilities/effects/common/RevealAndSeparatePilesEffect.java b/Mage/src/main/java/mage/abilities/effects/common/RevealAndSeparatePilesEffect.java index 15237187d57..35f6d73209a 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/RevealAndSeparatePilesEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/RevealAndSeparatePilesEffect.java @@ -106,7 +106,7 @@ public class RevealAndSeparatePilesEffect extends OneShotEffect { Player separatingPlayer = this.getExecutingPlayer(controller, game, source, playerWhoSeparates, "separate the revealed cards"); TargetCard target = new TargetCard(0, cards.size(), Zone.LIBRARY, filter); List pile1 = new ArrayList<>(); - separatingPlayer.choose(Outcome.Neutral, cards, target, game); + separatingPlayer.choose(Outcome.Neutral, cards, target, source, game); target.getTargets() .stream() .map(game::getCard) diff --git a/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java b/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java index 7c6e46de9b1..8e12cb02abd 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/WishEffect.java @@ -125,7 +125,7 @@ public class WishEffect extends OneShotEffect { TargetCard target = new TargetCard(Zone.ALL, filter); target.setNotTarget(true); - if (controller.choose(Outcome.Benefit, filteredCards, target, game)) { + if (controller.choose(Outcome.Benefit, filteredCards, target, source, game)) { Card card = controller.getSideboard().get(target.getFirstTarget(), game); if (card == null && alsoFromExile) { card = game.getCard(target.getFirstTarget()); diff --git a/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java b/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java index 0fb66863746..f433f93f758 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/discard/DiscardCardYouChooseTargetEffect.java @@ -155,7 +155,7 @@ public class DiscardCardYouChooseTargetEffect extends OneShotEffect { return result; } TargetCard target = new TargetCard(optional ? 0 : numberToDiscard, numberToDiscard, Zone.HAND, filter); - if (!controller.choose(Outcome.Benefit, revealedCards, target, game)) { + if (!controller.choose(Outcome.Benefit, revealedCards, target, source, game)) { return result; } result = !player.discard(new CardsImpl(target.getTargets()), false, source, game).isEmpty(); diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java index 21cd0a54688..12c3f56310b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutInHandEffect.java @@ -71,7 +71,7 @@ public class SearchLibraryGraveyardPutInHandEffect extends OneShotEffect { if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a card named " + filter.getMessage() + '?', source, game)) { TargetCard target = new TargetCardInYourGraveyard(0, 1, filter, true); target.clearChosen(); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (controller.choose(outcome, controller.getGraveyard(), target, source, game)) { if (!target.getTargets().isEmpty()) { cardFound = game.getCard(target.getFirstTarget()); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java index 464d4ab10da..0038136290b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardPutOntoBattlefieldEffect.java @@ -69,7 +69,7 @@ public class SearchLibraryGraveyardPutOntoBattlefieldEffect extends OneShotEffec if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + '?', source, game)) { TargetCard target = new TargetCardInYourGraveyard(0, 1, filter, true); target.clearChosen(); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (controller.choose(outcome, controller.getGraveyard(), target, source, game)) { if (!target.getTargets().isEmpty()) { cardFound = game.getCard(target.getFirstTarget()); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessMVPutIntoPlay.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessMVPutIntoPlay.java index bbca957698f..f85af66ec47 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessMVPutIntoPlay.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchLibraryGraveyardWithLessMVPutIntoPlay.java @@ -67,7 +67,7 @@ public class SearchLibraryGraveyardWithLessMVPutIntoPlay extends OneShotEffect { if (cardFound == null && controller.chooseUse(outcome, "Search your graveyard for a " + filter.getMessage() + " with mana value X or less" + '?', source, game)) { TargetCard target = new TargetCard(0, 1, Zone.GRAVEYARD, advancedFilter); target.clearChosen(); - if (controller.choose(outcome, controller.getGraveyard(), target, game)) { + if (controller.choose(outcome, controller.getGraveyard(), target, source, game)) { if (!target.getTargets().isEmpty()) { cardFound = game.getCard(target.getFirstTarget()); } diff --git a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java index 1029b4899d3..9db638c729e 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/search/SearchTargetGraveyardHandLibraryForCardNameAndExileEffect.java @@ -69,7 +69,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect if (cardsCount > 0) { filter.setMessage("card named " + cardName + " in the graveyard of " + targetPlayer.getName()); TargetCard target = new TargetCard((graveyardExileOptional ? 0 : cardsCount), cardsCount, Zone.GRAVEYARD, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, source, game)) { controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); } } @@ -78,7 +78,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect cardsCount = (cardName.isEmpty() ? 0 : targetPlayer.getHand().count(filter, game)); filter.setMessage("card named " + cardName + " in the hand of " + targetPlayer.getName()); TargetCard target = new TargetCard(0, cardsCount, Zone.HAND, filter); - if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + if (controller.choose(Outcome.Exile, targetPlayer.getHand(), target, source, game)) { controller.moveCards(new CardsImpl(target.getTargets()), Zone.EXILED, source, game); } @@ -88,7 +88,7 @@ public abstract class SearchTargetGraveyardHandLibraryForCardNameAndExileEffect cardsCount = (cardName.isEmpty() ? 0 : cardsInLibrary.count(filter, game)); filter.setMessage("card named " + cardName + " in the library of " + targetPlayer.getLogName()); TargetCardInLibrary targetLib = new TargetCardInLibrary(0, cardsCount, filter); - if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, game)) { + if (controller.choose(Outcome.Exile, cardsInLibrary, targetLib, source, game)) { controller.moveCards(new CardsImpl(targetLib.getTargets()), Zone.EXILED, source, game); } targetPlayer.shuffleLibrary(source, game); diff --git a/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java b/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java index a756483ec9e..c4e3b595c66 100644 --- a/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/keyword/FatesealEffect.java @@ -63,7 +63,7 @@ public class FatesealEffect extends OneShotEffect { TargetCard target1 = new TargetCard(Zone.LIBRARY, filter1); target1.setRequired(false); // move cards to the bottom of the library - while (!cards.isEmpty() && controller.choose(Outcome.Detriment, cards, target1, game)) { + while (!cards.isEmpty() && controller.choose(Outcome.Detriment, cards, target1, source, game)) { if (!controller.canRespond() || !opponent.canRespond()) { return false; } diff --git a/Mage/src/main/java/mage/abilities/keyword/CascadeAbility.java b/Mage/src/main/java/mage/abilities/keyword/CascadeAbility.java index c8724ab1680..3fbb407c273 100644 --- a/Mage/src/main/java/mage/abilities/keyword/CascadeAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/CascadeAbility.java @@ -144,7 +144,7 @@ class CascadeEffect extends OneShotEffect { if (event.getAmount() > 0) { TargetCardInExile target = new TargetCardInExile(0, event.getAmount(), StaticFilters.FILTER_CARD_LAND, null, true); target.withChooseHint("land to put onto battlefield tapped"); - controller.choose(Outcome.PutCardInPlay, cardsToExile, target, game); + controller.choose(Outcome.PutCardInPlay, cardsToExile, target, source, game); controller.moveCards( new CardsImpl(target.getTargets()).getCards(game), Zone.BATTLEFIELD, source, game, true, false, false, null diff --git a/Mage/src/main/java/mage/abilities/keyword/HideawayAbility.java b/Mage/src/main/java/mage/abilities/keyword/HideawayAbility.java index 17367db3054..dafb0c0fb9c 100644 --- a/Mage/src/main/java/mage/abilities/keyword/HideawayAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/HideawayAbility.java @@ -93,7 +93,7 @@ class HideawayExileEffect extends OneShotEffect { } TargetCard target = new TargetCard(Zone.LIBRARY, filter); target.setNotTarget(true); - controller.choose(Outcome.Detriment, cards, target, game); + controller.choose(Outcome.Detriment, cards, target, source, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { controller.moveCardsToExile( diff --git a/Mage/src/main/java/mage/abilities/keyword/RippleAbility.java b/Mage/src/main/java/mage/abilities/keyword/RippleAbility.java index 02e51cd8a84..4f95fd81cd0 100644 --- a/Mage/src/main/java/mage/abilities/keyword/RippleAbility.java +++ b/Mage/src/main/java/mage/abilities/keyword/RippleAbility.java @@ -101,7 +101,7 @@ class RippleEffect extends OneShotEffect { target1.setRequired(false); // choose cards to play for free - while (player.canRespond() && cards.count(sameNameFilter, game) > 0 && player.choose(Outcome.PlayForFree, cards, target1, game)) { + while (player.canRespond() && cards.count(sameNameFilter, game) > 0 && player.choose(Outcome.PlayForFree, cards, target1, source, game)) { Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { game.getState().setValue("PlayFromNotOwnHandZone" + card.getId(), Boolean.TRUE); diff --git a/Mage/src/main/java/mage/cards/CardImpl.java b/Mage/src/main/java/mage/cards/CardImpl.java index 205064c8623..182523f63ed 100644 --- a/Mage/src/main/java/mage/cards/CardImpl.java +++ b/Mage/src/main/java/mage/cards/CardImpl.java @@ -416,7 +416,7 @@ public abstract class CardImpl extends MageObjectImpl implements Card { ZoneChangeEvent event = new ZoneChangeEvent(mainCard.getId(), ability, controllerId, fromZone, Zone.STACK); Spell spell = new Spell(this, ability.getSpellAbilityToResolve(game), controllerId, event.getFromZone(), game); ZoneChangeInfo.Stack info = new ZoneChangeInfo.Stack(event, spell); - return ZonesHandler.cast(info, game, ability); + return ZonesHandler.cast(info, ability, game); } @Override diff --git a/Mage/src/main/java/mage/game/ZonesHandler.java b/Mage/src/main/java/mage/game/ZonesHandler.java index 36203728001..8dfa40a9763 100644 --- a/Mage/src/main/java/mage/game/ZonesHandler.java +++ b/Mage/src/main/java/mage/game/ZonesHandler.java @@ -24,9 +24,9 @@ import java.util.*; */ public final class ZonesHandler { - public static boolean cast(ZoneChangeInfo info, Game game, Ability source) { + public static boolean cast(ZoneChangeInfo info, Ability source, Game game) { if (maybeRemoveFromSourceZone(info, game, source)) { - placeInDestinationZone(info, game, 0); + placeInDestinationZone(info,0, source, game); // create a group zone change event if a card is moved to stack for casting (it's always only one card, but some effects check for group events (one or more xxx)) Set cards = new HashSet<>(); Set tokens = new HashSet<>(); @@ -54,10 +54,10 @@ public final class ZonesHandler { public static boolean moveCard(ZoneChangeInfo info, Game game, Ability source) { List list = new ArrayList<>(); list.add(info); - return !moveCards(list, game, source).isEmpty(); + return !moveCards(list, source, game).isEmpty(); } - public static List moveCards(List zoneChangeInfos, Game game, Ability source) { + public static List moveCards(List zoneChangeInfos, Ability source, Game game) { // Handle Unmelded Meld Cards for (ListIterator itr = zoneChangeInfos.listIterator(); itr.hasNext(); ) { ZoneChangeInfo info = itr.next(); @@ -110,7 +110,7 @@ public final class ZonesHandler { // All permanents go to battlefield at the same time (=create order) createOrder = game.getState().getNextPermanentOrderNumber(); } - placeInDestinationZone(zoneChangeInfo, game, createOrder); + placeInDestinationZone(zoneChangeInfo, createOrder, source, game); if (game.getPhase() != null) { // moving cards to zones before game started does not need events game.addSimultaneousEvent(zoneChangeInfo.event); } @@ -118,14 +118,14 @@ public final class ZonesHandler { return zoneChangeInfos; } - private static void placeInDestinationZone(ZoneChangeInfo info, Game game, int createOrder) { + private static void placeInDestinationZone(ZoneChangeInfo info, int createOrder, Ability source, Game game) { // Handle unmelded cards if (info instanceof ZoneChangeInfo.Unmelded) { ZoneChangeInfo.Unmelded unmelded = (ZoneChangeInfo.Unmelded) info; Zone toZone = null; for (ZoneChangeInfo subInfo : unmelded.subInfo) { toZone = subInfo.event.getToZone(); - placeInDestinationZone(subInfo, game, createOrder); + placeInDestinationZone(subInfo, createOrder, source, game); } // We arbitrarily prefer the bottom half card. This should never be relevant. if (toZone != null) { @@ -199,7 +199,8 @@ public final class ZonesHandler { break; case GRAVEYARD: for (Card card : chooseOrder( - "order to put in graveyard (last chosen will be on top)", cardsToMove, owner, game)) { + "order to put in graveyard (last chosen will be on top)", + cardsToMove, owner, source, game)) { game.getPlayer(card.getOwnerId()).getGraveyard().add(card); } break; @@ -207,13 +208,15 @@ public final class ZonesHandler { if (info instanceof ZoneChangeInfo.Library && ((ZoneChangeInfo.Library) info).top) { // on top for (Card card : chooseOrder( - "order to put on top of library (last chosen will be topmost)", cardsToMove, owner, game)) { + "order to put on top of library (last chosen will be topmost)", + cardsToMove, owner, source, game)) { game.getPlayer(card.getOwnerId()).getLibrary().putOnTop(card, game); } } else { // on bottom for (Card card : chooseOrder( - "order to put on bottom of library (last chosen will be bottommost)", cardsToMove, owner, game)) { + "order to put on bottom of library (last chosen will be bottommost)", + cardsToMove, owner, source, game)) { game.getPlayer(card.getOwnerId()).getLibrary().putOnBottom(card, game); } } @@ -404,7 +407,7 @@ public final class ZonesHandler { return success; } - public static List chooseOrder(String message, Cards cards, Player player, Game game) { + public static List chooseOrder(String message, Cards cards, Player player, Ability source, Game game) { List order = new ArrayList<>(); if (cards.isEmpty()) { return order; @@ -412,7 +415,7 @@ public final class ZonesHandler { TargetCard target = new TargetCard(Zone.ALL, new FilterCard(message)); target.setRequired(true); while (player.canRespond() && cards.size() > 1) { - player.choose(Outcome.Neutral, cards, target, game); + player.choose(Outcome.Neutral, cards, target, source, game); UUID targetObjectId = target.getFirstTarget(); order.add(cards.get(targetObjectId, game)); cards.remove(targetObjectId); diff --git a/Mage/src/main/java/mage/game/command/dungeons/DungeonOfTheMadMageDungeon.java b/Mage/src/main/java/mage/game/command/dungeons/DungeonOfTheMadMageDungeon.java index b38d4b5c059..b270b2b9448 100644 --- a/Mage/src/main/java/mage/game/command/dungeons/DungeonOfTheMadMageDungeon.java +++ b/Mage/src/main/java/mage/game/command/dungeons/DungeonOfTheMadMageDungeon.java @@ -173,7 +173,7 @@ class MadWizardsLairEffect extends OneShotEffect { } player.revealCards(source, cards, game); TargetCardInHand target = new TargetCardInHand(0, 1, StaticFilters.FILTER_CARD_NON_LAND); - player.choose(Outcome.PlayForFree, cards, target, game); + player.choose(Outcome.PlayForFree, cards, target, source, game); Card card = player.getHand().get(target.getFirstTarget(), game); if (card == null) { return true; diff --git a/Mage/src/main/java/mage/game/command/dungeons/UndercityDungeon.java b/Mage/src/main/java/mage/game/command/dungeons/UndercityDungeon.java index e39361dbc28..41f58d22988 100644 --- a/Mage/src/main/java/mage/game/command/dungeons/UndercityDungeon.java +++ b/Mage/src/main/java/mage/game/command/dungeons/UndercityDungeon.java @@ -153,7 +153,7 @@ class ThroneOfTheDeadThreeEffect extends OneShotEffect { break; default: TargetCardInLibrary target = new TargetCardInLibrary(StaticFilters.FILTER_CARD_CREATURE); - player.choose(outcome, cards, target, game); + player.choose(outcome, cards, target, source, game); card = cards.get(target.getFirstTarget(), game); } if (card != null) { diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index e6a0ee02c54..7ddbcea960f 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -625,10 +625,6 @@ public interface Player extends MageItem, Copyable { boolean choose(Outcome outcome, Target target, Ability source, Game game, Map options); - // TODO: remove to use choose with "Ability source" - default boolean choose(Outcome outcome, Cards cards, TargetCard target, Game game) { - return choose(outcome, cards, target, null, game); - } boolean choose(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game); boolean chooseTarget(Outcome outcome, Target target, Ability source, Game game); diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 7d7b5d46dad..e726e7c58c2 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -937,7 +937,7 @@ public abstract class PlayerImpl implements Player, Serializable { new FilterCard("card ORDER to put on the BOTTOM of your library (last one chosen will be bottommost)")); target.setRequired(true); while (cards.size() > 1 && this.canRespond() - && this.choose(Outcome.Neutral, cards, target, game)) { + && this.choose(Outcome.Neutral, cards, target, source, game)) { UUID targetObjectId = target.getFirstTarget(); if (targetObjectId == null) { break; @@ -1031,7 +1031,7 @@ public abstract class PlayerImpl implements Player, Serializable { target.setRequired(true); while (cards.size() > 1 && this.canRespond() - && this.choose(Outcome.Neutral, cards, target, game)) { + && this.choose(Outcome.Neutral, cards, target, source, game)) { UUID targetObjectId = target.getFirstTarget(); if (targetObjectId == null) { break; @@ -2691,7 +2691,7 @@ public abstract class PlayerImpl implements Player, Serializable { // handling Panglacial Wurm - cast cards while searching from own library if (targetPlayer.getId().equals(searchingPlayer.getId())) { - if (handleCastableCardsWhileLibrarySearching(library, game, targetPlayer)) { + if (handleCastableCardsWhileLibrarySearching(library, targetPlayer, source, game)) { // clear all choices to start from scratch (casted cards must be removed from library) newTarget.clearChosen(); continue; @@ -2748,7 +2748,7 @@ public abstract class PlayerImpl implements Player, Serializable { } } - private boolean handleCastableCardsWhileLibrarySearching(Library library, Game game, Player targetPlayer) { + private boolean handleCastableCardsWhileLibrarySearching(Library library, Player targetPlayer, Ability source, Game game) { // must return true after cast try (to restart searching process without casted cards) // uses for handling Panglacial Wurm: // * While you're searching your library, you may cast Panglacial Wurm from your library. @@ -2776,7 +2776,7 @@ public abstract class PlayerImpl implements Player, Serializable { targetCard.setNotTarget(true); while (castableCards.size() > 0) { targetCard.clearChosen(); - if (!targetPlayer.choose(Outcome.AIDontUseIt, new CardsImpl(castableCards), targetCard, game)) { + if (!targetPlayer.choose(Outcome.AIDontUseIt, new CardsImpl(castableCards), targetCard, source, game)) { break; } @@ -4539,7 +4539,7 @@ public abstract class PlayerImpl implements Player, Serializable { byOwner ? card.getOwnerId() : getId(), fromZone, Zone.BATTLEFIELD, appliedEffects); infoList.add(new ZoneChangeInfo.Battlefield(event, faceDown, tapped, source)); } - infoList = ZonesHandler.moveCards(infoList, game, source); + infoList = ZonesHandler.moveCards(infoList, source, game); for (ZoneChangeInfo info : infoList) { Permanent permanent = game.getPermanent(info.event.getTargetId()); if (permanent != null) { diff --git a/Mage/src/main/java/mage/util/CardUtil.java b/Mage/src/main/java/mage/util/CardUtil.java index 47fb1d1cc4d..bdc3f257891 100644 --- a/Mage/src/main/java/mage/util/CardUtil.java +++ b/Mage/src/main/java/mage/util/CardUtil.java @@ -1282,7 +1282,7 @@ public final class CardUtil { Cards castableCards = new CardsImpl(cardMap.keySet()); TargetCard target = new TargetCard(0, 1, Zone.ALL, defaultFilter); target.setNotTarget(true); - player.choose(Outcome.PlayForFree, castableCards, target, game); + player.choose(Outcome.PlayForFree, castableCards, target, source, game); cardToCast = castableCards.get(target.getFirstTarget(), game); } if (cardToCast == null) {