diff --git a/Mage.Sets/src/mage/sets/conflux/PathToExile.java b/Mage.Sets/src/mage/sets/conflux/PathToExile.java index e2772637e22..c675c4761ff 100644 --- a/Mage.Sets/src/mage/sets/conflux/PathToExile.java +++ b/Mage.Sets/src/mage/sets/conflux/PathToExile.java @@ -94,7 +94,7 @@ class PathToExileEffect extends OneShotEffect { if (player.chooseUse(Outcome.PutCardInPlay, "Use Path to Exile effect?", game)) { TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); player.searchLibrary(target, game); - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { if (card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), permanent.getControllerId())) { Permanent land = game.getPermanent(card.getId()); diff --git a/Mage.Sets/src/mage/sets/darkascension/SorinLordOfInnistrad.java b/Mage.Sets/src/mage/sets/darkascension/SorinLordOfInnistrad.java index 05aff395e25..ea6b5507e03 100644 --- a/Mage.Sets/src/mage/sets/darkascension/SorinLordOfInnistrad.java +++ b/Mage.Sets/src/mage/sets/darkascension/SorinLordOfInnistrad.java @@ -153,11 +153,7 @@ class SorinLordOfInnistradEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); for (Card card : player.getGraveyard().getCards(filterZombie, game)) { - player.getGraveyard().remove(card); card.putOntoBattlefield(game, Constants.Zone.GRAVEYARD, source.getId(), source.getControllerId()); Permanent permanent = game.getPermanent(card.getId()); if (permanent != null) { diff --git a/Mage.Sets/src/mage/sets/fifthdawn/FoldIntoAEther.java b/Mage.Sets/src/mage/sets/fifthdawn/FoldIntoAEther.java index fac8e1c7812..30a4a8fd585 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/FoldIntoAEther.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/FoldIntoAEther.java @@ -100,7 +100,6 @@ class FoldIntoAEtherEffect extends OneShotEffect { && player.choose(Outcome.PutCreatureInPlay, target, source.getSourceId(), game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { - player.removeFromHand(card, game); card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId()); } } diff --git a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java index 553180e3531..acbb923ffa7 100644 --- a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java +++ b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java @@ -110,7 +110,6 @@ class BitterheartWitchEffect extends OneShotEffect { player.chooseTarget(Outcome.Detriment, target, source, game); Player targetPlayer = game.getPlayer(target.getFirstTarget()); if (targetPlayer != null) { - player.removeFromLibrary(card, game); player.shuffleLibrary(game); card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId()); return targetPlayer.addAttachment(card.getId(), game); diff --git a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java index 2fc4af5ee7d..3e167007a4e 100644 --- a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java +++ b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java @@ -95,7 +95,7 @@ class CaravanVigilEffect extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); if (player.searchLibrary(target, game)) { Cards cards = new CardsImpl(); - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { cards.add(card); if (MorbidCondition.getInstance().apply(game, source) diff --git a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java index 6ae76cb049e..27e2048f874 100644 --- a/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java +++ b/Mage.Sets/src/mage/sets/innistrad/GhostQuarter.java @@ -102,7 +102,7 @@ class GhostQuarterEffect extends OneShotEffect { if (player.chooseUse(Outcome.PutLandInPlay, "Do you wish to search for a basic land, put it onto the battlefield and then shuffle your library?", game)) { TargetCardInLibrary target = new TargetCardInLibrary(new FilterBasicLandCard()); if (player.searchLibrary(target, game)) { - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { card.putOntoBattlefield(game, Zone.HAND, source.getId(), player.getId()); } diff --git a/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java b/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java index c5ee41dd1c5..929189529ae 100644 --- a/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java +++ b/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java @@ -104,7 +104,6 @@ class GrimoireOfTheDeadEffect extends OneShotEffect { for (Player player: game.getPlayers().values()) { for (Card card: player.getGraveyard().getCards(game)) { if (card.getCardType().contains(CardType.CREATURE)) { - player.getGraveyard().remove(card); card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId()); game.addEffect(new GrimoireOfTheDeadEffect2(card.getId()), source); } diff --git a/Mage.Sets/src/mage/sets/magic2010/ElvishPiper.java b/Mage.Sets/src/mage/sets/magic2010/ElvishPiper.java index 33eb80b786e..56e9370b0f2 100644 --- a/Mage.Sets/src/mage/sets/magic2010/ElvishPiper.java +++ b/Mage.Sets/src/mage/sets/magic2010/ElvishPiper.java @@ -101,7 +101,6 @@ class PutCreatureOnBattlefieldEffect extends OneShotEffect { for (Player player: game.getPlayers().values()) { for (Card card: player.getGraveyard().getCards(game)) { if (card.getCardType().contains(CardType.CREATURE)) { - player.getGraveyard().remove(card); card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId()); } } diff --git a/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java b/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java index 472e91aa3c5..813626e835b 100644 --- a/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java +++ b/Mage.Sets/src/mage/sets/magic2010/LurkingPredators.java @@ -130,10 +130,8 @@ class LurkingPredatorsEffect extends OneShotEffect { if (card != null) { if (card.getCardType().contains(CardType.CREATURE)) { - player.getLibrary().remove(card.getId(), game); card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId()); } else if (player.chooseUse(Outcome.Neutral, "Put " + card.getName() + " on the bottom of your library?", game)) { - player.getLibrary().remove(card.getId(), game); card.moveToZone(Zone.LIBRARY, source.getId(), game, false); } } diff --git a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java index 8c9b720eb5f..9fdad759aa3 100644 --- a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java +++ b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java @@ -99,7 +99,7 @@ class CultivateEffect extends OneShotEffect { if (target.getTargets().size() > 0) { Cards revealed = new CardsImpl(); for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); + Card card = player.getLibrary().getCard(cardId, game); revealed.add(card); } player.revealCards("Cultivate", revealed, game); diff --git a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java index bc172787023..3ae56560d68 100644 --- a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java +++ b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java @@ -124,7 +124,6 @@ class ArachnusSpinnerEffect extends OneShotEffect { if (player.choose(Outcome.PutCardInPlay, player.getGraveyard(), target, game)) { card = game.getCard(target.getFirstTarget()); if (card != null) { - player.removeFromGraveyard(card, game); zone = Zone.GRAVEYARD; } } @@ -134,7 +133,6 @@ class ArachnusSpinnerEffect extends OneShotEffect { if (player.searchLibrary(target, game)) { card = game.getCard(target.getFirstTarget()); if (card != null) { - player.removeFromLibrary(card, game); player.shuffleLibrary(game); zone = Zone.LIBRARY; } diff --git a/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java b/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java index 2f6fdc91665..15689f292c3 100644 --- a/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java +++ b/Mage.Sets/src/mage/sets/magic2012/DoublingChant.java @@ -108,7 +108,7 @@ class DoublingChantEffect extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { chosenCards.add(card); } diff --git a/Mage.Sets/src/mage/sets/magic2012/DruidicSatchel.java b/Mage.Sets/src/mage/sets/magic2012/DruidicSatchel.java index 3d14109db22..a7131751764 100644 --- a/Mage.Sets/src/mage/sets/magic2012/DruidicSatchel.java +++ b/Mage.Sets/src/mage/sets/magic2012/DruidicSatchel.java @@ -92,7 +92,7 @@ class DruidicSatchelEffect extends OneShotEffect { token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); } if (card.getCardType().contains(CardType.LAND)) { - player.getLibrary().remove(card.getId(), game); + player.getLibrary().getCard(card.getId(), game); card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId()); } if (!card.getCardType().contains(CardType.CREATURE) && !card.getCardType().contains(CardType.LAND)) { diff --git a/Mage.Sets/src/mage/sets/magic2012/QuicksilverAmulet.java b/Mage.Sets/src/mage/sets/magic2012/QuicksilverAmulet.java index f244d8be54a..e54f78606a1 100644 --- a/Mage.Sets/src/mage/sets/magic2012/QuicksilverAmulet.java +++ b/Mage.Sets/src/mage/sets/magic2012/QuicksilverAmulet.java @@ -101,7 +101,6 @@ class PutCreatureOnBattlefieldEffect extends OneShotEffect 0) { for (UUID cardId : (List) target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); + Card card = player.getLibrary().getCard(cardId, game); card.putOntoBattlefield(game, Constants.Zone.HAND, source.getId(), source.getControllerId()); } player.shuffleLibrary(game); diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java index bbec3046aaf..84b2c8b1278 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/GruesomeEncore.java @@ -99,20 +99,17 @@ class GruesomeEncoreEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getFirstTarget()); if (card != null) { - Player opponent = game.getPlayer(card.getOwnerId()); - if (opponent != null && opponent.removeFromGraveyard(card, game)) { - card.addAbility(HasteAbility.getInstance()); - card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId()); + card.addAbility(HasteAbility.getInstance()); + card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId()); - ExileTargetEffect exileEffect = new ExileTargetEffect(); - exileEffect.setTargetPointer(new FixedTarget(card.getId())); - DelayedTriggeredAbility delayedAbility = new AtEndOfTurnDelayedTriggeredAbility(exileEffect); - delayedAbility.setSourceId(source.getSourceId()); - delayedAbility.setControllerId(source.getControllerId()); - game.addDelayedTriggeredAbility(delayedAbility); + ExileTargetEffect exileEffect = new ExileTargetEffect(); + exileEffect.setTargetPointer(new FixedTarget(card.getId())); + DelayedTriggeredAbility delayedAbility = new AtEndOfTurnDelayedTriggeredAbility(exileEffect); + delayedAbility.setSourceId(source.getSourceId()); + delayedAbility.setControllerId(source.getControllerId()); + game.addDelayedTriggeredAbility(delayedAbility); - return true; - } + return true; } return false; diff --git a/Mage.Sets/src/mage/sets/morningtide/PreeminentCaptain.java b/Mage.Sets/src/mage/sets/morningtide/PreeminentCaptain.java index 0d621407c0c..ba281f04a59 100644 --- a/Mage.Sets/src/mage/sets/morningtide/PreeminentCaptain.java +++ b/Mage.Sets/src/mage/sets/morningtide/PreeminentCaptain.java @@ -101,7 +101,6 @@ class PreeminentCaptainEffect extends OneShotEffect { UUID cardId = target.getFirstTarget(); Card card = player.getHand().get(cardId, game); if (card != null) { - player.getHand().remove(card); if (card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId())) { Permanent permanent = game.getPermanent(card.getId()); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java b/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java index 3a1075aa4dc..a7d87db7b55 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/BirthingPod.java @@ -110,7 +110,7 @@ class BirthingPodEffect extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { for (UUID cardId : target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); + Card card = player.getLibrary().getCard(cardId, game); if (card != null) { card.putOntoBattlefield(game, Constants.Zone.HAND, source.getId(), source.getControllerId()); } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java index 0e9eae91a73..feaf03277e8 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/OmenMachine.java @@ -159,7 +159,6 @@ class OmenMachineEffect2 extends OneShotEffect { card.moveToExile(source.getSourceId(), "Omen Machine Exile", source.getId(), game); if (card.getCardType().contains(CardType.LAND)) { card.putOntoBattlefield(game, Zone.EXILED, source.getId(), player.getId()); - game.getExile().removeCard(card, game); } else { player.cast(card.getSpellAbility(), game, true); diff --git a/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java b/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java index 912218f994d..c954abb57fb 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/PostmortemLunge.java @@ -110,7 +110,7 @@ class PostmortemLungeEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Card card = game.getCard(source.getFirstTarget()); Player player = game.getPlayer(card.getOwnerId()); - if (card != null && player != null && player.removeFromGraveyard(card, game)) { + if (card != null && player != null) { card.addAbility(HasteAbility.getInstance()); card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId()); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GethLordOfTheVault.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GethLordOfTheVault.java index 6b9a966e6f0..31ea3978cce 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GethLordOfTheVault.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GethLordOfTheVault.java @@ -125,7 +125,6 @@ class GethLordOfTheVaultEffect extends OneShotEffect { if (game.getState().getZone(card.getId()).equals(Zone.GRAVEYARD)) { Player player = game.getPlayer(card.getOwnerId()); if (card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId())) { - player.getGraveyard().remove(card); Permanent permanent = game.getPermanent(card.getId()); if (permanent != null) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java index 6615717ecf5..50e759cd81f 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/NimDeathmantle.java @@ -167,7 +167,6 @@ class NimDeathmantleEffect extends OneShotEffect { if (card != null && game.getState().getZone(card.getId()).equals(Constants.Zone.GRAVEYARD)) { Player owner = game.getPlayer(card.getOwnerId()); if (card.putOntoBattlefield(game, Constants.Zone.GRAVEYARD, source.getId(), source.getControllerId())) { - owner.getGraveyard().remove(card); Permanent permanent = game.getPermanent(card.getId()); if (permanent != null) { permanent.addAttachment(equipment.getId(), game); diff --git a/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java b/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java index 38ed8e7f453..4574b8620fc 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/ClarionUltimatum.java @@ -118,7 +118,7 @@ class ClarionUltimatumEffect extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { chosenCards.add(card); } diff --git a/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java b/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java index 980bb80004f..57d2331b05f 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/TezzeretTheSeeker.java @@ -127,7 +127,7 @@ class TezzeretTheSeekerEffect2 extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { - Card card = player.getLibrary().remove(target.getFirstTarget(), game); + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); if (card != null) { card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId()); } diff --git a/Mage.Sets/src/mage/sets/zendikar/ExplorersScope.java b/Mage.Sets/src/mage/sets/zendikar/ExplorersScope.java index d8a1264d41c..49c2e6a6846 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ExplorersScope.java +++ b/Mage.Sets/src/mage/sets/zendikar/ExplorersScope.java @@ -134,7 +134,6 @@ class ExplorersScopeEffect extends OneShotEffect { if (card.getCardType().contains(CardType.LAND)) { String message = "Put " + card.getName() + " onto the battlefield tapped?"; if (player.chooseUse(Outcome.PutLandInPlay, message, game)) { - player.getLibrary().remove(card.getId(), game); if (card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId())) { Permanent permanent = game.getPermanent(card.getId()); if (permanent != null) { diff --git a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java index a0eb4eeed7f..7c2046e385b 100644 --- a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java +++ b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java @@ -110,7 +110,7 @@ class QuestForTheHolyRelicEffect extends OneShotEffect { if (player.choose(Outcome.PutCreatureInPlay, target, source.getSourceId(), game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { - player.removeFromHand(card, game); card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId()); return true; } diff --git a/Mage/src/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java b/Mage/src/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java index 8e341019792..9959d391e45 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnFromGraveyardToBattlefieldTargetEffect.java @@ -71,7 +71,6 @@ public class ReturnFromGraveyardToBattlefieldTargetEffect extends OneShotEffect< if (card != null) { Player player = game.getPlayer(card.getOwnerId()); if (player != null) { - player.removeFromGraveyard(card, game); if (card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId())) { if (tapped) { Permanent permanent = game.getPermanent(card.getId()); diff --git a/Mage/src/mage/abilities/effects/common/ReturnSourceFromGraveyardToBattlefieldEffect.java b/Mage/src/mage/abilities/effects/common/ReturnSourceFromGraveyardToBattlefieldEffect.java index cc2ece79867..f7570df1f14 100644 --- a/Mage/src/mage/abilities/effects/common/ReturnSourceFromGraveyardToBattlefieldEffect.java +++ b/Mage/src/mage/abilities/effects/common/ReturnSourceFromGraveyardToBattlefieldEffect.java @@ -70,7 +70,6 @@ public class ReturnSourceFromGraveyardToBattlefieldEffect extends OneShotEffect< Player player = game.getPlayer(source.getControllerId()); Card card = player.getGraveyard().get(source.getSourceId(), game); if (card != null) { - player.removeFromGraveyard(card, game); if (card.putOntoBattlefield(game, Zone.GRAVEYARD, source.getId(), source.getControllerId())) { if (tapped) { Permanent permanent = game.getPermanent(card.getId()); diff --git a/Mage/src/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java b/Mage/src/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java index b9147aa3d52..688ed0a59d1 100644 --- a/Mage/src/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java +++ b/Mage/src/mage/abilities/effects/common/search/SearchLibraryPutInPlayEffect.java @@ -78,7 +78,7 @@ public class SearchLibraryPutInPlayEffect extends SearchEffect 0) { for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); + Card card = player.getLibrary().getCard(cardId, game); if (card != null) { if (card.putOntoBattlefield(game, Zone.HAND, source.getId(), source.getControllerId())) { if (tapped) { diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 3016e301978..c6661078369 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -348,13 +348,33 @@ public abstract class CardImpl> extends MageObjectImpl @Override public boolean putOntoBattlefield(Game game, Zone fromZone, UUID sourceId, UUID controllerId) { - PermanentCard permanent = new PermanentCard(this, controllerId); - game.getBattlefield().addPermanent(permanent); - game.setZone(objectId, Zone.BATTLEFIELD); - game.applyEffects(); - permanent.entersBattlefield(sourceId, game); - game.fireEvent(new ZoneChangeEvent(permanent, controllerId, fromZone, Zone.BATTLEFIELD)); - return true; + ZoneChangeEvent event = new ZoneChangeEvent(this.objectId, sourceId, controllerId, fromZone, Zone.BATTLEFIELD); + if (!game.replaceEvent(event)) { + if (fromZone != null) { + switch (fromZone) { + case GRAVEYARD: + game.getPlayer(ownerId).removeFromGraveyard(this, game); + break; + case HAND: + game.getPlayer(ownerId).removeFromHand(this, game); + break; + case LIBRARY: + game.getPlayer(ownerId).removeFromLibrary(this, game); + break; + default: + //logger.warning("putOntoBattlefield, not fully implemented: from="+fromZone); + } + game.rememberLKI(objectId, event.getFromZone(), this); + } + PermanentCard permanent = new PermanentCard(this, controllerId); + game.getBattlefield().addPermanent(permanent); + game.setZone(objectId, Zone.BATTLEFIELD); + game.applyEffects(); + permanent.entersBattlefield(sourceId, game); + game.fireEvent(new ZoneChangeEvent(permanent, controllerId, fromZone, Zone.BATTLEFIELD)); + return true; + } + return false; } @Override diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index 5e7cb560a90..fb2c8c2f910 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -505,7 +505,6 @@ public abstract class GameImpl> implements Game, Serializa for (Card card: player.getHand().getCards(this)) { if (card.getAbilities().containsKey(LeylineAbility.getInstance().getId())) { if (player.chooseUse(Outcome.PutCardInPlay, "Do you wish to put " + card.getName() + " on the battlefield?", this)) { - player.getHand().remove(card.getId()); card.putOntoBattlefield(this, Zone.HAND, null, player.getId()); } } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 8ee10589b5c..0134c7868a2 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -512,24 +512,6 @@ public abstract class PlayerImpl> implements Player, Ser if (!game.replaceEvent(GameEvent.getEvent(GameEvent.EventType.PLAY_LAND, card.getId(), playerId))) { int bookmark = game.bookmarkState(); Zone zone = game.getState().getZone(card.getId()); - switch (zone) { - case HAND: - removeFromHand(card, game); - break; - case LIBRARY: - removeFromLibrary(card, game); - break; - case GRAVEYARD: - removeFromGraveyard(card, game); - break; - case EXILED: - game.getExile().removeCard(card, game); - break; - default: - // invalid zone for play land - return false; - } - if (card.putOntoBattlefield(game, zone, null, playerId)) { landsPlayed++; game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LAND_PLAYED, card.getId(), playerId));