diff --git a/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java b/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java index 1602cadeb9f..9c64ff4659d 100644 --- a/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java +++ b/Mage.Sets/src/mage/sets/alliances/DiminishingReturns.java @@ -35,6 +35,7 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -48,8 +49,6 @@ public class DiminishingReturns extends CardImpl { super(ownerId, 39, "Diminishing Returns", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{2}{U}{U}"); this.expansionSetCode = "ALL"; - this.color.setBlue(true); - // Each player shuffles his or her hand and graveyard into his or her library. You exile the top ten cards of your library. Then each player draws up to seven cards. this.getSpellAbility().addEffect(new DiminishingReturnsEffect()); } @@ -77,27 +76,26 @@ class DiminishingReturnsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player sourcePlayer = game.getPlayer(source.getControllerId()); - if (sourcePlayer != null) { - for (UUID playerId : sourcePlayer.getInRange()) { + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (UUID playerId : controller.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); } } - for (int i = 0; i < 10; i++) { - Card card = sourcePlayer.getLibrary().getFromTop(game); - if (card != null) { - card.moveToExile(null, null, source.getSourceId(), game); - } + for (Card card: controller.getLibrary().getTopCards(game, 10)) { + controller.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.LIBRARY, true); } - for (UUID playerId : sourcePlayer.getInRange()) { + for (UUID playerId : controller.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { int cardsToDrawCount = player.getAmount(0, 7, "How many cards to draw (up to 7)?", game); diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java index f6946b9e184..a1a4f97491d 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/SwayOfTheStars.java @@ -34,6 +34,7 @@ import mage.constants.Rarity; import mage.constants.Zone; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.game.Game; import mage.game.permanent.Permanent; @@ -88,11 +89,13 @@ class SwayOfTheStarsEffect extends OneShotEffect { for (UUID playerId: sourcePlayer.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); player.drawCards(7, game); player.setLife(7, game); } diff --git a/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java b/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java index eb6999af57b..79d44bb1548 100644 --- a/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java +++ b/Mage.Sets/src/mage/sets/darkascension/ArchangelsLight.java @@ -35,8 +35,10 @@ import mage.abilities.Ability; import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.Outcome; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -50,8 +52,6 @@ public class ArchangelsLight extends CardImpl { super(ownerId, 1, "Archangel's Light", Rarity.MYTHIC, new CardType[]{CardType.SORCERY}, "{7}{W}"); this.expansionSetCode = "DKA"; - this.color.setWhite(true); - // You gain 2 life for each card in your graveyard, then shuffle your graveyard into your library. this.getSpellAbility().addEffect(new ArchangelsLightEffect()); @@ -80,13 +80,14 @@ class ArchangelsLightEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); + Player controller = game.getPlayer(source.getControllerId()); DynamicValue value = new CardsInControllerGraveyardCount(); - if (player != null) { - player.gainLife(value.calculate(game, source, this) * 2, game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); - player.shuffleLibrary(game); + if (controller != null) { + controller.gainLife(value.calculate(game, source, this) * 2, game); + for (Card card: controller.getGraveyard().getCards(game)) { + controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } + controller.shuffleLibrary(game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java index 5c607250e1c..59d356c1f4e 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/LearnFromThePast.java @@ -31,10 +31,12 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; @@ -87,8 +89,9 @@ class LearnFromThePastEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java b/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java index c1b2d4c7680..d0275362f3d 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java +++ b/Mage.Sets/src/mage/sets/lorwyn/PrimalCommand.java @@ -34,10 +34,12 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.GainLifeTargetEffect; import mage.abilities.effects.common.PutOnLibraryTargetEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.Predicates; @@ -120,8 +122,9 @@ class PrimalCommandShuffleGraveyardEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java b/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java index 013cb4eea66..19f46b5c95d 100644 --- a/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java +++ b/Mage.Sets/src/mage/sets/magic2011/ElixirOfImmortality.java @@ -38,6 +38,7 @@ import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.game.Game; import mage.game.permanent.Permanent; @@ -88,8 +89,9 @@ class ElixerOfImmortalityEffect extends OneShotEffect { if (permanent != null) { player.moveCardToLibraryWithInfo(permanent, source.getSourceId(), game, Zone.BATTLEFIELD, true, true); } - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java index 393a375197e..c944d17b716 100644 --- a/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java +++ b/Mage.Sets/src/mage/sets/magic2011/MassPolymorph.java @@ -105,7 +105,9 @@ class MassPolymorphEffect extends OneShotEffect { for (Card creatureCard: creatureCards.getCards(game)) { creatureCard.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId()); } - player.getLibrary().addAll(nonCreatureCards.getCards(game), game); + for (Card card: nonCreatureCards.getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java b/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java index c002ef0f591..3a553a2ffc8 100644 --- a/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java +++ b/Mage.Sets/src/mage/sets/magic2011/TimeReversal.java @@ -35,7 +35,9 @@ import mage.constants.Rarity; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileSpellEffect; +import mage.cards.Card; import mage.cards.CardImpl; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -80,11 +82,13 @@ class TimeReversalEffect extends OneShotEffect { for (UUID playerId: sourcePlayer.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); player.drawCards(7, game); } } diff --git a/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java b/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java index 60b8bd903ae..9b569009aac 100644 --- a/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java +++ b/Mage.Sets/src/mage/sets/magic2015/JaceTheLivingGuildpact.java @@ -37,6 +37,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.LookLibraryAndPickControllerEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; @@ -116,11 +117,13 @@ class JaceTheLivingGuildpactEffect extends OneShotEffect { for (UUID playerId: controller.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); } } controller.drawCards(7, game); diff --git a/Mage.Sets/src/mage/sets/onslaught/Reminisce.java b/Mage.Sets/src/mage/sets/onslaught/Reminisce.java index 0f80b5f5f70..1b8f8181c38 100644 --- a/Mage.Sets/src/mage/sets/onslaught/Reminisce.java +++ b/Mage.Sets/src/mage/sets/onslaught/Reminisce.java @@ -30,10 +30,12 @@ package mage.sets.onslaught; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; import mage.target.TargetPlayer; @@ -83,8 +85,9 @@ class ReminisceEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java b/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java index d011ed01a9f..103ec5196b2 100644 --- a/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java +++ b/Mage.Sets/src/mage/sets/onslaught/RiptideShapeshifter.java @@ -117,7 +117,9 @@ class RiptideShapeshifterEffect extends OneShotEffect { revealedCards.add(card); } player.revealCards("Riptide Shapeshifter", revealedCards, game); - player.getLibrary().addAll(revealedCards.getCards(game), game); + for (Card card: revealedCards.getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java b/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java index d2593a23751..09ae87683b8 100644 --- a/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java +++ b/Mage.Sets/src/mage/sets/ravnica/MnemonicNexus.java @@ -30,10 +30,12 @@ package mage.sets.ravnica; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; import mage.constants.Rarity; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -78,9 +80,10 @@ class MnemonicNexusEffect extends OneShotEffect { for (UUID playerId: sourcePlayer.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getGraveyard().clear(); } } return true; diff --git a/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java b/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java index 8449bf4ab0d..a113b5b891f 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/PsychicSpiral.java @@ -83,8 +83,9 @@ class PsychicSpiralEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); if (player != null) { int cardsInGraveyard = player.getGraveyard().size(); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); if (cardsInGraveyard > 0) { diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EmrakulTheAeonsTorn.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EmrakulTheAeonsTorn.java index d20b48458de..c8141e042f8 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EmrakulTheAeonsTorn.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EmrakulTheAeonsTorn.java @@ -42,6 +42,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.keyword.AnnihilatorAbility; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ProtectionAbility; +import mage.cards.Card; import mage.cards.CardImpl; import mage.filter.FilterSpell; import mage.filter.predicate.Predicates; @@ -142,8 +143,9 @@ class EmrakulTheAeonsTornEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/KozilekButcherOfTruth.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/KozilekButcherOfTruth.java index ba3ef1ea22c..81f0622ac4c 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/KozilekButcherOfTruth.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/KozilekButcherOfTruth.java @@ -41,6 +41,7 @@ import mage.abilities.common.PutIntoGraveFromAnywhereSourceTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.keyword.AnnihilatorAbility; +import mage.cards.Card; import mage.cards.CardImpl; import mage.game.Game; import mage.game.events.GameEvent; @@ -60,8 +61,14 @@ public class KozilekButcherOfTruth extends CardImpl { this.subtype.add("Eldrazi"); this.power = new MageInt(12); this.toughness = new MageInt(12); + + // When you cast Kozilek, Butcher of Truth, draw four cards. this.addAbility(new KozilekButcherOfTruthOnCastAbility()); + + // Annihilator 4 (Whenever this creature attacks, defending player sacrifices four permanents.) this.addAbility(new AnnihilatorAbility(4)); + + // When Kozilek is put into a graveyard from anywhere, its owner shuffles his or her graveyard into his or her library. this.addAbility(new PutIntoGraveFromAnywhereSourceTriggeredAbility(new KozilekButcherOfTruthEffect(), false)); } @@ -88,15 +95,15 @@ class KozilekButcherOfTruthOnCastAbility extends TriggeredAbilityImpl { super(ability); } + @Override + public boolean checkEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.SPELL_CAST; + } + @Override public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == GameEvent.EventType.SPELL_CAST) { - Spell spell = (Spell) game.getObject(event.getTargetId()); - if (this.getSourceId().equals(spell.getSourceId())) { - return true; - } - } - return false; + Spell spell = (Spell) game.getObject(event.getTargetId()); + return this.getSourceId().equals(spell.getSourceId()); } @Override @@ -122,11 +129,12 @@ class KozilekButcherOfTruthEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); - player.shuffleLibrary(game); + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null) { + for (Card card: controller.getGraveyard().getCards(game)) { + controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } + controller.shuffleLibrary(game); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/UlamogTheInfiniteGyre.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/UlamogTheInfiniteGyre.java index ec920cc213e..0d3da8ef6b8 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/UlamogTheInfiniteGyre.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/UlamogTheInfiniteGyre.java @@ -144,8 +144,9 @@ class UlamogTheInfiniteGyreEnterGraveyardEffect extends OneShotEffect { } Player player = game.getPlayer(ownerId); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card cardToMove: player.getGraveyard().getCards(game)) { + cardToMove.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java index b09e4283684..12a81997d18 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java @@ -116,7 +116,9 @@ public class ShapeAnew extends CardImpl { if (artifactCard != null) { artifactCard.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), player.getId()); } - player.getLibrary().addAll(nonArtifactCards.getCards(game), game); + for (Card cardToMove: nonArtifactCards.getCards(game)) { + cardToMove.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java b/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java index 9edf288614b..9de1bd5b443 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java +++ b/Mage.Sets/src/mage/sets/timeshifted/GaeasBlessing.java @@ -185,6 +185,9 @@ class GaeasBlessingGraveToLibraryEffect extends OneShotEffect { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { game.informPlayers(new StringBuilder(controller.getName()).append(" shuffle his or her graveyard into his or her library").toString()); + for (Card card: controller.getGraveyard().getCards(game)) { + controller.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } controller.getLibrary().addAll(controller.getGraveyard().getCards(game), game); controller.getGraveyard().clear(); controller.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java b/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java index 9c60e6f35c3..493c19a22f7 100644 --- a/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java +++ b/Mage.Sets/src/mage/sets/urzasdestiny/ThranFoundry.java @@ -34,6 +34,7 @@ import mage.abilities.costs.common.ExileSourceCost; import mage.abilities.costs.common.TapSourceCost; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.OneShotEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; @@ -91,8 +92,9 @@ class ThranFoundryEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(this.getTargetPointer().getFirst(game, source)); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java b/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java index 4df9b51e862..4aaaecf5441 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java +++ b/Mage.Sets/src/mage/sets/urzassaga/TimeSpiral.java @@ -35,7 +35,9 @@ import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.ExileSpellEffect; import mage.abilities.effects.common.UntapLandsEffect; +import mage.cards.Card; import mage.cards.CardImpl; +import mage.constants.Zone; import mage.game.Game; import mage.players.Player; @@ -83,11 +85,13 @@ class TimeSpiralEffect extends OneShotEffect { for (UUID playerId: sourcePlayer.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { - player.getLibrary().addAll(player.getHand().getCards(game), game); - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); + for (Card card: player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } + for (Card card: player.getGraveyard().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + } player.shuffleLibrary(game); - player.getHand().clear(); - player.getGraveyard().clear(); player.drawCards(7, game); } } diff --git a/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java b/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java index fdebd0fa2ad..c191e329cec 100644 --- a/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java +++ b/Mage.Sets/src/mage/sets/zendikar/QuestForAncientSecrets.java @@ -35,6 +35,7 @@ import mage.abilities.costs.common.RemoveCountersSourceCost; import mage.abilities.costs.common.SacrificeSourceCost; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.cards.Card; import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Outcome; @@ -101,8 +102,9 @@ class QuestForAncientSecretsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); if (player != null) { - player.getLibrary().addAll(player.getGraveyard().getCards(game), game); - player.getGraveyard().clear(); + for (Card card: player.getGraveyard().getCards(game)) { + player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.GRAVEYARD, true, true); + } player.shuffleLibrary(game); return true; }