From 85d85a4b17cd6254a3f4ae87add8d450f894dbc7 Mon Sep 17 00:00:00 2001 From: theelk801 Date: Tue, 27 May 2025 16:58:24 -0400 Subject: [PATCH] [FIN] Implement Memories Returning --- .../src/mage/cards/a/AidFromTheCowl.java | 2 +- .../src/mage/cards/a/AjaniSleeperAgent.java | 2 +- .../src/mage/cards/a/AmassTheComponents.java | 2 +- .../src/mage/cards/a/ArdentDustspeaker.java | 2 +- .../src/mage/cards/b/BrutalizerExarch.java | 2 +- Mage.Sets/src/mage/cards/b/BucolicRanch.java | 2 +- .../src/mage/cards/c/CabarettiAscendancy.java | 2 +- Mage.Sets/src/mage/cards/d/DeemInferior.java | 2 +- .../src/mage/cards/d/DescendantsPath.java | 2 +- .../mage/cards/d/DiscoverTheImpossible.java | 2 +- .../src/mage/cards/e/EmergentUltimatum.java | 2 +- .../src/mage/cards/e/ErrandRiderOfGondor.java | 2 +- Mage.Sets/src/mage/cards/e/EtherWell.java | 4 +- .../src/mage/cards/e/ExpressiveIteration.java | 2 +- Mage.Sets/src/mage/cards/f/FireProphecy.java | 2 +- .../src/mage/cards/g/GarrukSavageHerald.java | 2 +- .../mage/cards/k/KenessosPriestOfThassa.java | 4 +- .../src/mage/cards/k/KyloxsVoltstrider.java | 2 +- .../src/mage/cards/l/LanternOfRevealing.java | 2 +- .../src/mage/cards/m/MemoriesReturning.java | 129 ++++++++++++++++++ .../src/mage/cards/m/MistveilPlains.java | 2 +- Mage.Sets/src/mage/cards/m/MomentOfTruth.java | 2 +- Mage.Sets/src/mage/cards/n/NeeraWildMage.java | 2 +- .../src/mage/cards/p/PsychoticEpisode.java | 2 +- .../mage/cards/q/QuintoriusLoremaster.java | 3 +- Mage.Sets/src/mage/cards/s/SinisterWaltz.java | 2 +- .../src/mage/cards/t/TemporalCleansing.java | 2 +- .../src/mage/cards/t/TolarianContempt.java | 2 +- Mage.Sets/src/mage/cards/v/VolcanicSpite.java | 2 +- .../src/mage/cards/w/WriteIntoBeing.java | 2 +- .../mage/cards/y/YidaroWanderingMonster.java | 2 +- Mage.Sets/src/mage/sets/FinalFantasy.java | 1 + .../java/org/mage/test/player/TestPlayer.java | 4 +- .../common/PutOnLibrarySourceEffect.java | 3 +- Mage/src/main/java/mage/players/Player.java | 2 +- .../main/java/mage/players/PlayerImpl.java | 4 +- 36 files changed, 168 insertions(+), 40 deletions(-) create mode 100644 Mage.Sets/src/mage/cards/m/MemoriesReturning.java diff --git a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java index 4fc6fa05bc5..3cd45e595ad 100644 --- a/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java +++ b/Mage.Sets/src/mage/cards/a/AidFromTheCowl.java @@ -76,7 +76,7 @@ class AidFromTheCowlEffect extends OneShotEffect { if (card.isPermanent(game) && controller.chooseUse(Outcome.Neutral, "Put " + card.getIdName() + " onto the battlefield?", source, game)) { controller.moveCards(card, Zone.BATTLEFIELD, source, game); } else if (controller.chooseUse(Outcome.Neutral, "Put " + card.getIdName() + " on the bottom of your library?", source, game)) { - controller.putCardsOnBottomOfLibrary(card, game, source, false); + controller.putCardsOnBottomOfLibrary(card, game, source); } else { game.informPlayers(controller.getLogName() + " puts the revealed card back to the top of the library."); } diff --git a/Mage.Sets/src/mage/cards/a/AjaniSleeperAgent.java b/Mage.Sets/src/mage/cards/a/AjaniSleeperAgent.java index 0ac62db118b..c70844e96ab 100644 --- a/Mage.Sets/src/mage/cards/a/AjaniSleeperAgent.java +++ b/Mage.Sets/src/mage/cards/a/AjaniSleeperAgent.java @@ -90,7 +90,7 @@ class AjaniSleeperAgentEffect extends OneShotEffect { if (card.isCreature(game) || card.isPlaneswalker(game)) { controller.moveCards(card, Zone.HAND, source, game); } else if (controller.chooseUse(Outcome.Neutral, "Put " + card.getName() + " on the bottom of your library?", source, game)) { - controller.putCardsOnBottomOfLibrary(card, game, source, true); + controller.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/a/AmassTheComponents.java b/Mage.Sets/src/mage/cards/a/AmassTheComponents.java index a281f3134ff..c336c277b09 100644 --- a/Mage.Sets/src/mage/cards/a/AmassTheComponents.java +++ b/Mage.Sets/src/mage/cards/a/AmassTheComponents.java @@ -71,7 +71,7 @@ class AmassTheComponentsEffect extends OneShotEffect { 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); + return player.putCardsOnBottomOfLibrary(card, game, source); } } } diff --git a/Mage.Sets/src/mage/cards/a/ArdentDustspeaker.java b/Mage.Sets/src/mage/cards/a/ArdentDustspeaker.java index 91236a3ea8c..4b4ace434dc 100644 --- a/Mage.Sets/src/mage/cards/a/ArdentDustspeaker.java +++ b/Mage.Sets/src/mage/cards/a/ArdentDustspeaker.java @@ -88,7 +88,7 @@ class ArdentDustspeakerCost extends CostImpl { if (controller != null && (controller.chooseTarget(Outcome.Benefit, this.getTargets().get(0), source, game))) { Card card = game.getCard(this.getTargets().get(0).getFirstTarget()); if (card != null) { - controller.putCardsOnBottomOfLibrary(card, game, source, true); + controller.putCardsOnBottomOfLibrary(card, game, source); paid = true; } } diff --git a/Mage.Sets/src/mage/cards/b/BrutalizerExarch.java b/Mage.Sets/src/mage/cards/b/BrutalizerExarch.java index 9f2cab7d024..ec16f001d68 100644 --- a/Mage.Sets/src/mage/cards/b/BrutalizerExarch.java +++ b/Mage.Sets/src/mage/cards/b/BrutalizerExarch.java @@ -84,7 +84,7 @@ class BrutalizerExarchEffect2 extends OneShotEffect { Permanent permanent = game.getPermanent(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); if (permanent != null && controller != null) { - return controller.putCardsOnBottomOfLibrary(permanent, game, source, true); + return controller.putCardsOnBottomOfLibrary(permanent, game, source); } return false; } diff --git a/Mage.Sets/src/mage/cards/b/BucolicRanch.java b/Mage.Sets/src/mage/cards/b/BucolicRanch.java index 19a944bdbb5..5218b25e370 100644 --- a/Mage.Sets/src/mage/cards/b/BucolicRanch.java +++ b/Mage.Sets/src/mage/cards/b/BucolicRanch.java @@ -108,7 +108,7 @@ class BucolicRanchEffect extends OneShotEffect { if (Zone.LIBRARY.equals(game.getState().getZone(card.getId())) && player.chooseUse( outcome, "Put " + card.getName() + " on the bottom of your library?", source, game )) { - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/c/CabarettiAscendancy.java b/Mage.Sets/src/mage/cards/c/CabarettiAscendancy.java index cb3cf2dde63..23e76bb3493 100644 --- a/Mage.Sets/src/mage/cards/c/CabarettiAscendancy.java +++ b/Mage.Sets/src/mage/cards/c/CabarettiAscendancy.java @@ -73,7 +73,7 @@ class CabarettiAscendencyEffect extends OneShotEffect { controller.revealCards(source, new CardsImpl(card), game); controller.moveCards(card, Zone.HAND, source, game); } else if (controller.chooseUse(Outcome.Neutral, "Put " + card.getIdName() + " on the bottom of your library?", source, game)) { - controller.putCardsOnBottomOfLibrary(card, game, source, false); + controller.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/d/DeemInferior.java b/Mage.Sets/src/mage/cards/d/DeemInferior.java index fe76fa21372..2745bc88338 100644 --- a/Mage.Sets/src/mage/cards/d/DeemInferior.java +++ b/Mage.Sets/src/mage/cards/d/DeemInferior.java @@ -80,6 +80,6 @@ class DeemInferiorEffect extends OneShotEffect { )) { return player.putCardOnTopXOfLibrary(permanent, game, source, 2, true); } - return player.putCardsOnBottomOfLibrary(permanent, game, source, false); + return player.putCardsOnBottomOfLibrary(permanent, game, source); } } diff --git a/Mage.Sets/src/mage/cards/d/DescendantsPath.java b/Mage.Sets/src/mage/cards/d/DescendantsPath.java index ca765656f63..f4460a25e84 100644 --- a/Mage.Sets/src/mage/cards/d/DescendantsPath.java +++ b/Mage.Sets/src/mage/cards/d/DescendantsPath.java @@ -82,7 +82,7 @@ class DescendantsPathEffect extends OneShotEffect { CardUtil.castSpellWithAttributesForFree(controller, source, game, card); } if (game.getState().getZone(card.getId()) == Zone.LIBRARY) { - controller.putCardsOnBottomOfLibrary(card, game, source, false); + controller.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java b/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java index 5c0e253b2c5..c5ff5e91224 100644 --- a/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java +++ b/Mage.Sets/src/mage/cards/d/DiscoverTheImpossible.java @@ -79,7 +79,7 @@ class DiscoverTheImpossibleEffect extends OneShotEffect { player.choose(outcome, cards, target, source, game); Card card = game.getCard(target.getFirstTarget()); if (card == null) { - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); return true; } player.moveCards(card, Zone.EXILED, source, game); diff --git a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java index e2f0d73a582..e9f2af707bc 100644 --- a/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java +++ b/Mage.Sets/src/mage/cards/e/EmergentUltimatum.java @@ -100,7 +100,7 @@ class EmergentUltimatumEffect extends OneShotEffect { opponent.choose(outcome, cards, targetCardInExile, source, game); Card toShuffle = game.getCard(targetCardInExile.getFirstTarget()); if (toShuffle != null) { - player.putCardsOnBottomOfLibrary(toShuffle, game, source, false); + player.putCardsOnBottomOfLibrary(toShuffle, game, source); player.shuffleLibrary(source, game); cards.remove(toShuffle); } diff --git a/Mage.Sets/src/mage/cards/e/ErrandRiderOfGondor.java b/Mage.Sets/src/mage/cards/e/ErrandRiderOfGondor.java index 4089f0f0e05..8e97a244f6e 100644 --- a/Mage.Sets/src/mage/cards/e/ErrandRiderOfGondor.java +++ b/Mage.Sets/src/mage/cards/e/ErrandRiderOfGondor.java @@ -85,6 +85,6 @@ class ErrandRiderOfGondorEffect extends OneShotEffect { TargetCard target = new TargetCardInHand(); player.choose(outcome, player.getHand(), target, source, game); Card card = game.getCard(target.getFirstTarget()); - return card == null || player.putCardsOnBottomOfLibrary(card, game, source, false); + return card == null || player.putCardsOnBottomOfLibrary(card, game, source); } } diff --git a/Mage.Sets/src/mage/cards/e/EtherWell.java b/Mage.Sets/src/mage/cards/e/EtherWell.java index cb578d4bd75..ddb7ee257f1 100644 --- a/Mage.Sets/src/mage/cards/e/EtherWell.java +++ b/Mage.Sets/src/mage/cards/e/EtherWell.java @@ -65,10 +65,10 @@ class EtherWellEffect extends OneShotEffect { && player.chooseUse(outcome, "Put " + permanent.getLogName() + " on the bottom of its owner's library?", source, game )) { - player.putCardsOnBottomOfLibrary(permanent, game, source, true); + player.putCardsOnBottomOfLibrary(permanent, game, source); return true; } player.putCardsOnTopOfLibrary(new CardsImpl(permanent), game, source, true); return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java b/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java index 983ec9c9359..2d8c5ad4fe2 100644 --- a/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java +++ b/Mage.Sets/src/mage/cards/e/ExpressiveIteration.java @@ -88,7 +88,7 @@ class ExpressiveIterationEffect extends OneShotEffect { player.choose(outcome, cards, target, source, game); card = game.getCard(target.getFirstTarget()); if (card != null) { - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); cards.remove(card); } if (cards.isEmpty()) { diff --git a/Mage.Sets/src/mage/cards/f/FireProphecy.java b/Mage.Sets/src/mage/cards/f/FireProphecy.java index 2c9e488c09a..0a031453de8 100644 --- a/Mage.Sets/src/mage/cards/f/FireProphecy.java +++ b/Mage.Sets/src/mage/cards/f/FireProphecy.java @@ -73,7 +73,7 @@ class FireProphecyEffect extends OneShotEffect { if (card == null) { return false; } - if (player.putCardsOnBottomOfLibrary(card, game, source, false)) { + if (player.putCardsOnBottomOfLibrary(card, game, source)) { player.drawCards(1, source, game); } return true; diff --git a/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java b/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java index 74074c02bd1..fec2310512c 100644 --- a/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java +++ b/Mage.Sets/src/mage/cards/g/GarrukSavageHerald.java @@ -107,7 +107,7 @@ class GarrukSavageHeraldEffect extends OneShotEffect { if (card.isCreature(game)) { return player.moveCards(card, Zone.HAND, source, game); } else { - return player.putCardsOnBottomOfLibrary(card, game, source, false); + return player.putCardsOnBottomOfLibrary(card, game, source); } } } diff --git a/Mage.Sets/src/mage/cards/k/KenessosPriestOfThassa.java b/Mage.Sets/src/mage/cards/k/KenessosPriestOfThassa.java index 5bb7751a0fb..4649890498c 100644 --- a/Mage.Sets/src/mage/cards/k/KenessosPriestOfThassa.java +++ b/Mage.Sets/src/mage/cards/k/KenessosPriestOfThassa.java @@ -131,8 +131,8 @@ class KenessosPriestOfThassaActivatedEffect extends OneShotEffect { return player.moveCards(card, Zone.BATTLEFIELD, source, game); } if (player.chooseUse(outcome, "Put " + card.getName() + " on the bottom of your library?", source, game)) { - return player.putCardsOnBottomOfLibrary(card, game, source, true); + return player.putCardsOnBottomOfLibrary(card, game, source); } return true; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/k/KyloxsVoltstrider.java b/Mage.Sets/src/mage/cards/k/KyloxsVoltstrider.java index 81d48b65a17..e0c8cf7ee23 100644 --- a/Mage.Sets/src/mage/cards/k/KyloxsVoltstrider.java +++ b/Mage.Sets/src/mage/cards/k/KyloxsVoltstrider.java @@ -157,7 +157,7 @@ class KyloxsVoltstriderReplacementEffect extends ReplacementEffectImpl { return false; } - controller.putCardsOnBottomOfLibrary(card, game, source, false); + controller.putCardsOnBottomOfLibrary(card, game, source); return true; } } diff --git a/Mage.Sets/src/mage/cards/l/LanternOfRevealing.java b/Mage.Sets/src/mage/cards/l/LanternOfRevealing.java index d026d3a9cdd..ae02ff500d3 100644 --- a/Mage.Sets/src/mage/cards/l/LanternOfRevealing.java +++ b/Mage.Sets/src/mage/cards/l/LanternOfRevealing.java @@ -81,7 +81,7 @@ class LanternOfRevealingEffect extends OneShotEffect { if (game.getState().getZone(card.getId()) == Zone.LIBRARY && player.chooseUse( outcome, "Put " + card.getName() + " on the bottom of your library?", source, game )) { - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/m/MemoriesReturning.java b/Mage.Sets/src/mage/cards/m/MemoriesReturning.java new file mode 100644 index 00000000000..a5b7c0e15b0 --- /dev/null +++ b/Mage.Sets/src/mage/cards/m/MemoriesReturning.java @@ -0,0 +1,129 @@ +package mage.cards.m; + +import mage.abilities.Ability; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.keyword.FlashbackAbility; +import mage.cards.*; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; +import mage.target.TargetCard; +import mage.target.TargetPlayer; +import mage.target.common.TargetCardInLibrary; +import mage.target.common.TargetOpponent; + +import java.util.UUID; + +/** + * @author TheElk801 + */ +public final class MemoriesReturning extends CardImpl { + + public MemoriesReturning(UUID ownerId, CardSetInfo setInfo) { + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{2}{U}{U}"); + + // Reveal the top five cards of your library. Put one of them into your hand. Then choose an opponent. They put one on the bottom of your library. Then you put one into your hand. Then they put one on the bottom of your library. Put the other into your hand. + this.getSpellAbility().addEffect(new MemoriesReturningEffect()); + + // Flashback {7}{U}{U}. + this.addAbility(new FlashbackAbility(this, new ManaCostsImpl<>("{7}{U}{U}"))); + } + + private MemoriesReturning(final MemoriesReturning card) { + super(card); + } + + @Override + public MemoriesReturning copy() { + return new MemoriesReturning(this); + } +} + +class MemoriesReturningEffect extends OneShotEffect { + + MemoriesReturningEffect() { + super(Outcome.Benefit); + staticText = "reveal the top five cards of your library. Put one of them into your hand. " + + "Then choose an opponent. They put one on the bottom of your library. " + + "Then you put one into your hand. Then they put one on the bottom of your library. " + + "Put the other into your hand"; + } + + private MemoriesReturningEffect(final MemoriesReturningEffect effect) { + super(effect); + } + + @Override + public MemoriesReturningEffect copy() { + return new MemoriesReturningEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller == null) { + return false; + } + Cards cards = new CardsImpl(controller.getLibrary().getTopCards(game, 5)); + controller.revealCards(source, cards, game); + if (putCardInHand(controller, cards, source, game)) { + return true; + } + TargetPlayer target = new TargetOpponent(); + target.withNotTarget(true); + Player opponent = game.getPlayer(target.getFirstTarget()); + if (putCardOnBottom(controller, opponent, cards, source, game)) { + return true; + } + if (putCardInHand(controller, cards, source, game)) { + return true; + } + if (putCardOnBottom(controller, opponent, cards, source, game)) { + return true; + } + putCardInHand(controller, cards, source, game); + return true; + } + + private static boolean putCardInHand(Player controller, Cards cards, Ability source, Game game) { + switch (cards.size()) { + case 0: + return true; + case 1: + controller.moveCards(cards, Zone.HAND, source, game); + return true; + } + TargetCard target = new TargetCardInLibrary(); + target.withChooseHint("to put in your hand"); + controller.choose(Outcome.DrawCard, cards, target, source, game); + controller.moveCards(game.getCard(target.getFirstTarget()), Zone.HAND, source, game); + cards.retainZone(Zone.LIBRARY, game); + return false; + } + + private static boolean putCardOnBottom(Player controller, Player opponent, Cards cards, Ability source, Game game) { + switch (cards.size()) { + case 0: + return true; + case 1: + controller.putCardsOnBottomOfLibrary(cards, game, source, true); + return true; + } + if (opponent == null) { + return false; + } + TargetCard target = new TargetCardInLibrary(); + target.withChooseHint("to put on the bottom of " + controller.getName() + "'s library"); + opponent.choose(Outcome.Discard, cards, target, source, game); + Card card = game.getCard(target.getFirstTarget()); + if (card == null) { + return false; + } + controller.putCardsOnBottomOfLibrary(card, game, source); + cards.remove(card); + return false; + } +} diff --git a/Mage.Sets/src/mage/cards/m/MistveilPlains.java b/Mage.Sets/src/mage/cards/m/MistveilPlains.java index 65f9b15cabb..09cb3dea2eb 100644 --- a/Mage.Sets/src/mage/cards/m/MistveilPlains.java +++ b/Mage.Sets/src/mage/cards/m/MistveilPlains.java @@ -88,6 +88,6 @@ class MistveilPlainsGraveyardToLibraryEffect extends OneShotEffect { || game.getState().getZone(card.getId()) != Zone.GRAVEYARD) { return false; } - return player.putCardsOnBottomOfLibrary(card, game, source, false); + return player.putCardsOnBottomOfLibrary(card, game, source); } } diff --git a/Mage.Sets/src/mage/cards/m/MomentOfTruth.java b/Mage.Sets/src/mage/cards/m/MomentOfTruth.java index 374cd179626..94a300ede78 100644 --- a/Mage.Sets/src/mage/cards/m/MomentOfTruth.java +++ b/Mage.Sets/src/mage/cards/m/MomentOfTruth.java @@ -93,7 +93,7 @@ class MomentOfTruthEffect extends OneShotEffect { if (card == null) { return true; } - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); return true; } } diff --git a/Mage.Sets/src/mage/cards/n/NeeraWildMage.java b/Mage.Sets/src/mage/cards/n/NeeraWildMage.java index d3f43d2d202..6762de326e9 100644 --- a/Mage.Sets/src/mage/cards/n/NeeraWildMage.java +++ b/Mage.Sets/src/mage/cards/n/NeeraWildMage.java @@ -75,7 +75,7 @@ class NeeraWildMageEffect extends OneShotEffect { return false; } - if (!spellController.putCardsOnBottomOfLibrary(spell, game, source, true)) { + if (!spellController.putCardsOnBottomOfLibrary(spell, game, source)) { return false; } diff --git a/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java b/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java index 5cdee0e6bd3..0b00c5478bd 100644 --- a/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java +++ b/Mage.Sets/src/mage/cards/p/PsychoticEpisode.java @@ -75,7 +75,7 @@ class PsychoticEpisodeEffect extends OneShotEffect { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { game.informPlayers(card.getLogName() + " was chosen."); - player.putCardsOnBottomOfLibrary(card, game, source, true); + player.putCardsOnBottomOfLibrary(card, game, source); } } return true; diff --git a/Mage.Sets/src/mage/cards/q/QuintoriusLoremaster.java b/Mage.Sets/src/mage/cards/q/QuintoriusLoremaster.java index d4c3db7f3f2..602d0c6b8f5 100644 --- a/Mage.Sets/src/mage/cards/q/QuintoriusLoremaster.java +++ b/Mage.Sets/src/mage/cards/q/QuintoriusLoremaster.java @@ -36,7 +36,6 @@ import mage.target.common.TargetCardInYourGraveyard; import mage.target.targetpointer.FixedTarget; import mage.util.CardUtil; -import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -173,7 +172,7 @@ class QuintoriusLoremasterReplacementEffect extends ReplacementEffectImpl { Card card = mor.getCard(game); return controller != null && card != null - && controller.putCardsOnBottomOfLibrary(card, game, source, false); + && controller.putCardsOnBottomOfLibrary(card, game, source); } @Override diff --git a/Mage.Sets/src/mage/cards/s/SinisterWaltz.java b/Mage.Sets/src/mage/cards/s/SinisterWaltz.java index 0edef4561a7..3c08be3637f 100644 --- a/Mage.Sets/src/mage/cards/s/SinisterWaltz.java +++ b/Mage.Sets/src/mage/cards/s/SinisterWaltz.java @@ -69,7 +69,7 @@ class SinisterWaltzEffect extends OneShotEffect { } player.moveCards(cards, Zone.BATTLEFIELD, source, game); if (card != null) { - player.putCardsOnBottomOfLibrary(card, game, source, false); + player.putCardsOnBottomOfLibrary(card, game, source); } return true; } diff --git a/Mage.Sets/src/mage/cards/t/TemporalCleansing.java b/Mage.Sets/src/mage/cards/t/TemporalCleansing.java index cf3e97c9e1e..250e304cc9b 100644 --- a/Mage.Sets/src/mage/cards/t/TemporalCleansing.java +++ b/Mage.Sets/src/mage/cards/t/TemporalCleansing.java @@ -72,6 +72,6 @@ class TemporalCleansingEffect extends OneShotEffect { )) { return player.putCardOnTopXOfLibrary(permanent, game, source, 2, true); } - return player.putCardsOnBottomOfLibrary(permanent, game, source, false); + return player.putCardsOnBottomOfLibrary(permanent, game, source); } } diff --git a/Mage.Sets/src/mage/cards/t/TolarianContempt.java b/Mage.Sets/src/mage/cards/t/TolarianContempt.java index f3263351279..6a86e043dd4 100644 --- a/Mage.Sets/src/mage/cards/t/TolarianContempt.java +++ b/Mage.Sets/src/mage/cards/t/TolarianContempt.java @@ -93,7 +93,7 @@ class TolarianContemptEffect extends OneShotEffect { )) { owner.putCardsOnTopOfLibrary(permanent, game, source, false); } else { - owner.putCardsOnBottomOfLibrary(permanent, game, source, false); + owner.putCardsOnBottomOfLibrary(permanent, game, source); } } return true; diff --git a/Mage.Sets/src/mage/cards/v/VolcanicSpite.java b/Mage.Sets/src/mage/cards/v/VolcanicSpite.java index b7822816836..c54533d162c 100644 --- a/Mage.Sets/src/mage/cards/v/VolcanicSpite.java +++ b/Mage.Sets/src/mage/cards/v/VolcanicSpite.java @@ -85,7 +85,7 @@ class VolcanicSpiteEffect extends OneShotEffect { if (card == null) { return false; } - if (player.putCardsOnBottomOfLibrary(card, game, source, false)) { + if (player.putCardsOnBottomOfLibrary(card, game, source)) { player.drawCards(1, source, game); } return true; diff --git a/Mage.Sets/src/mage/cards/w/WriteIntoBeing.java b/Mage.Sets/src/mage/cards/w/WriteIntoBeing.java index 4b6ff09b2d4..46a0e048d20 100644 --- a/Mage.Sets/src/mage/cards/w/WriteIntoBeing.java +++ b/Mage.Sets/src/mage/cards/w/WriteIntoBeing.java @@ -84,7 +84,7 @@ class WriteIntoBeingEffect extends OneShotEffect { if (controller.getLibrary().hasCards()) { Card cardToPutBack = controller.getLibrary().getFromTop(game); if (controller.chooseUse(Outcome.Detriment, "Put " + cardToPutBack.getName() + " on bottom of library?", source, game)) { - controller.putCardsOnBottomOfLibrary(cardToPutBack, game, source, true); + controller.putCardsOnBottomOfLibrary(cardToPutBack, game, source); } else { controller.putCardsOnTopOfLibrary(cardToPutBack, game, source, true); } diff --git a/Mage.Sets/src/mage/cards/y/YidaroWanderingMonster.java b/Mage.Sets/src/mage/cards/y/YidaroWanderingMonster.java index 6706653e9a4..5a71ce63424 100644 --- a/Mage.Sets/src/mage/cards/y/YidaroWanderingMonster.java +++ b/Mage.Sets/src/mage/cards/y/YidaroWanderingMonster.java @@ -109,7 +109,7 @@ class YidaroWanderingMonsterEffect extends OneShotEffect { } YidaroWanderingMonsterWatcher watcher = game.getState().getWatcher(YidaroWanderingMonsterWatcher.class); if (watcher == null || watcher.getYidaroCount(player.getId()) < 4) { - player.putCardsOnBottomOfLibrary(card, game, source, true); + player.putCardsOnBottomOfLibrary(card, game, source); player.shuffleLibrary(source, game); } else { player.moveCards(card, Zone.BATTLEFIELD, source, game); diff --git a/Mage.Sets/src/mage/sets/FinalFantasy.java b/Mage.Sets/src/mage/sets/FinalFantasy.java index 6a31e79ec7a..80d6efb1734 100644 --- a/Mage.Sets/src/mage/sets/FinalFantasy.java +++ b/Mage.Sets/src/mage/sets/FinalFantasy.java @@ -295,6 +295,7 @@ public final class FinalFantasy extends ExpansionSet { cards.add(new SetCardInfo("Malboro", 106, Rarity.COMMON, mage.cards.m.Malboro.class)); cards.add(new SetCardInfo("Matoya, Archon Elder", 439, Rarity.RARE, mage.cards.m.MatoyaArchonElder.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Matoya, Archon Elder", 62, Rarity.RARE, mage.cards.m.MatoyaArchonElder.class, NON_FULL_USE_VARIOUS)); + cards.add(new SetCardInfo("Memories Returning", 63, Rarity.RARE, mage.cards.m.MemoriesReturning.class)); cards.add(new SetCardInfo("Midgar, City of Mako", 286, Rarity.RARE, mage.cards.m.MidgarCityOfMako.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Midgar, City of Mako", 313, Rarity.RARE, mage.cards.m.MidgarCityOfMako.class, NON_FULL_USE_VARIOUS)); cards.add(new SetCardInfo("Minwu, White Mage", 26, Rarity.RARE, mage.cards.m.MinwuWhiteMage.class, NON_FULL_USE_VARIOUS)); diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index e79cc0bc719..51496520d7d 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -3240,8 +3240,8 @@ public class TestPlayer implements Player { } @Override - public boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source, boolean anyOrder) { - return computerPlayer.putCardsOnBottomOfLibrary(card, game, source, anyOrder); + public boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source) { + return computerPlayer.putCardsOnBottomOfLibrary(card, game, source); } @Override diff --git a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibrarySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibrarySourceEffect.java index 69e70fd9bee..ad72c08f338 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/PutOnLibrarySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/PutOnLibrarySourceEffect.java @@ -1,6 +1,5 @@ package mage.abilities.effects.common; -import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -46,6 +45,6 @@ public class PutOnLibrarySourceEffect extends OneShotEffect { if (onTop) { return player.putCardsOnTopOfLibrary(card, game, source, false); } - return player.putCardsOnBottomOfLibrary(card, game, source, false); + return player.putCardsOnBottomOfLibrary(card, game, source); } } diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index a0bc38d90ff..87258a1ba2d 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -715,7 +715,7 @@ public interface Player extends MageItem, Copyable { */ boolean putCardsOnBottomOfLibrary(Cards cards, Game game, Ability source, boolean anyOrder); - boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source, boolean anyOrder); + boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source); /** * Moves the card to the top x position of the library diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 02f2f2db436..26085e30bdc 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -1034,8 +1034,8 @@ public abstract class PlayerImpl implements Player, Serializable { } @Override - public boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source, boolean anyOrder) { - return putCardsOnBottomOfLibrary(new CardsImpl(card), game, source, anyOrder); + public boolean putCardsOnBottomOfLibrary(Card card, Game game, Ability source) { + return putCardsOnBottomOfLibrary(new CardsImpl(card), game, source, false); } @Override