diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java index 3e93aee0307..0ed546599a0 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/InameDeathAspect.java @@ -98,16 +98,18 @@ class InameDeathAspectEffect extends SearchEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - player.searchLibrary(target, game); - if (target.getTargets().size() > 0) { - for (UUID cardId: target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); - if (card != null){ - card.moveToZone(Constants.Zone.GRAVEYARD, source.getId(), game, false); + if (player != null && player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + for (UUID cardId: target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null){ + card.moveToZone(Constants.Zone.GRAVEYARD, source.getId(), game, false); + } } } player.shuffleLibrary(game); + return true; } - return true; + return false; } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/conflux/PathToExile.java b/Mage.Sets/src/mage/sets/conflux/PathToExile.java index c675c4761ff..ef347af3a48 100644 --- a/Mage.Sets/src/mage/sets/conflux/PathToExile.java +++ b/Mage.Sets/src/mage/sets/conflux/PathToExile.java @@ -93,15 +93,16 @@ class PathToExileEffect extends OneShotEffect { if (permanent.moveToZone(Zone.EXILED, source.getId(), game, false)) { 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().getCard(target.getFirstTarget(), game); - if (card != null) { - if (card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), permanent.getControllerId())) { - Permanent land = game.getPermanent(card.getId()); - if (land != null) - land.setTapped(true); - } - } + if (player.searchLibrary(target, 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()); + if (land != null) + land.setTapped(true); + } + } + } player.shuffleLibrary(game); } return true; diff --git a/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java b/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java index cc5049fed00..2321ae4578e 100644 --- a/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java +++ b/Mage.Sets/src/mage/sets/darkascension/IncreasingAmbition.java @@ -102,12 +102,12 @@ class IncreasingAmbitionEffect extends SearchEffect { else { target = new TargetCardInLibrary(); } - player.searchLibrary(target, game); - if (target.getTargets().size() > 0) { - for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); - if (card != null){ - card.moveToZone(Constants.Zone.HAND, source.getId(), game, false); + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + for (UUID cardId: (List)target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null) + card.moveToZone(Constants.Zone.HAND, source.getId(), game, false); } } } diff --git a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java index acbb923ffa7..e25072a17ed 100644 --- a/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java +++ b/Mage.Sets/src/mage/sets/innistrad/BitterheartWitch.java @@ -65,7 +65,9 @@ public class BitterheartWitch extends CardImpl { this.addAbility(DeathtouchAbility.getInstance()); // When Bitterheart Witch dies, you may search your library for a Curse card, put it onto the battlefield attached to target player, then shuffle your library. - this.addAbility(new DiesTriggeredAbility(new BitterheartWitchEffect(), true)); + Ability ability = new DiesTriggeredAbility(new BitterheartWitchEffect(), true); + ability.addTarget(new TargetPlayer()); + this.addAbility(ability); } @@ -98,25 +100,21 @@ class BitterheartWitchEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - TargetPlayer target = new TargetPlayer(); Player player = game.getPlayer(source.getControllerId()); - if (player != null) { + Player targetPlayer = game.getPlayer(source.getFirstTarget()); + if (player != null && targetPlayer != null) { TargetCardInLibrary targetCard = new TargetCardInLibrary(filter); targetCard.setRequired(true); if (player.searchLibrary(targetCard, game)) { Card card = game.getCard(targetCard.getFirstTarget()); if (card != null) { - if (target.canChoose(source.getSourceId(), source.getControllerId(), game)) { - player.chooseTarget(Outcome.Detriment, target, source, game); - Player targetPlayer = game.getPlayer(target.getFirstTarget()); - if (targetPlayer != null) { - player.shuffleLibrary(game); - card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId()); - return targetPlayer.addAttachment(card.getId(), game); - } - } + card.putOntoBattlefield(game, Zone.LIBRARY, source.getSourceId(), source.getControllerId()); + targetPlayer.addAttachment(card.getId(), game); } + player.shuffleLibrary(game); + return true; } + player.shuffleLibrary(game); } return false; } diff --git a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java index 3e167007a4e..92d062e471e 100644 --- a/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java +++ b/Mage.Sets/src/mage/sets/innistrad/CaravanVigil.java @@ -106,9 +106,10 @@ class CaravanVigilEffect extends OneShotEffect { } } player.revealCards("Caravan Vigil", cards, game); + player.shuffleLibrary(game); + return true; } player.shuffleLibrary(game); - return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/lorwyn/SeedguideAsh.java b/Mage.Sets/src/mage/sets/lorwyn/SeedguideAsh.java index eda0baee49b..5479e650fcc 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/SeedguideAsh.java +++ b/Mage.Sets/src/mage/sets/lorwyn/SeedguideAsh.java @@ -62,7 +62,7 @@ public class SeedguideAsh extends CardImpl { this.power = new MageInt(4); this.toughness = new MageInt(4); // When Seedguide Ash dies, you may search your library for up to three Forest cards and put them onto the battlefield tapped. If you do, shuffle your library. - this.addAbility(new DiesTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, filter), true, Constants.Outcome.PutLandInPlay), true)); + this.addAbility(new DiesTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(0, 3, filter), true, false, Constants.Outcome.PutLandInPlay), true)); } public SeedguideAsh(final SeedguideAsh card) { diff --git a/Mage.Sets/src/mage/sets/magic2010/BorderlandRanger.java b/Mage.Sets/src/mage/sets/magic2010/BorderlandRanger.java index 34042a23281..8e80c85c23d 100644 --- a/Mage.Sets/src/mage/sets/magic2010/BorderlandRanger.java +++ b/Mage.Sets/src/mage/sets/magic2010/BorderlandRanger.java @@ -54,7 +54,7 @@ public class BorderlandRanger extends CardImpl { this.color.setGreen(true); this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(new TargetCardInLibrary(filter)), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(new TargetCardInLibrary(filter), false), true)); } public BorderlandRanger(final BorderlandRanger card) { diff --git a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java index 9fdad759aa3..38d2fa0a713 100644 --- a/Mage.Sets/src/mage/sets/magic2011/Cultivate.java +++ b/Mage.Sets/src/mage/sets/magic2011/Cultivate.java @@ -95,38 +95,41 @@ class CultivateEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { TargetCardInLibrary target = new TargetCardInLibrary(0, 2, new FilterBasicLandCard()); Player player = game.getPlayer(source.getControllerId()); - player.searchLibrary(target, game); - if (target.getTargets().size() > 0) { - Cards revealed = new CardsImpl(); - for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().getCard(cardId, game); - revealed.add(card); - } - player.revealCards("Cultivate", revealed, game); - if (target.getTargets().size() == 2) { - TargetCard target2 = new TargetCard(Zone.PICK, filter); - target2.setRequired(true); - player.choose(Outcome.Benefit, revealed, target2, game); - Card card = revealed.get(target2.getFirstTarget(), game); - card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId()); - revealed.remove(card); - Permanent permanent = game.getPermanent(card.getId()); - if (permanent != null) - permanent.setTapped(true); - card = revealed.getCards(game).iterator().next(); - card.moveToZone(Zone.HAND, source.getId(), game, false); - } - else if (target.getTargets().size() == 1) { - Card card = revealed.getCards(game).iterator().next(); - card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId()); - Permanent permanent = game.getPermanent(card.getId()); - if (permanent != null) - permanent.setTapped(true); - } + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Cards revealed = new CardsImpl(); + for (UUID cardId: (List)target.getTargets()) { + Card card = player.getLibrary().getCard(cardId, game); + revealed.add(card); + } + player.revealCards("Cultivate", revealed, game); + if (target.getTargets().size() == 2) { + TargetCard target2 = new TargetCard(Zone.PICK, filter); + target2.setRequired(true); + player.choose(Outcome.Benefit, revealed, target2, game); + Card card = revealed.get(target2.getFirstTarget(), game); + card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId()); + revealed.remove(card); + Permanent permanent = game.getPermanent(card.getId()); + if (permanent != null) + permanent.setTapped(true); + card = revealed.getCards(game).iterator().next(); + card.moveToZone(Zone.HAND, source.getId(), game, false); + } + else if (target.getTargets().size() == 1) { + Card card = revealed.getCards(game).iterator().next(); + card.putOntoBattlefield(game, Zone.LIBRARY, source.getId(), source.getControllerId()); + Permanent permanent = game.getPermanent(card.getId()); + if (permanent != null) + permanent.setTapped(true); + } - player.shuffleLibrary(game); - } - return true; + } + player.shuffleLibrary(game); + return true; + } + player.shuffleLibrary(game); + return false; } diff --git a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java index c3a30bf01e0..d407484ecf0 100644 --- a/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java +++ b/Mage.Sets/src/mage/sets/magic2011/HoardingDragon.java @@ -104,15 +104,19 @@ class HoardingDragonEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); - player.searchLibrary(target, game); - if (target.getTargets().size() > 0) { - Card card = player.getLibrary().remove(target.getFirstTarget(), game); - if (card != null){ - game.getExile().add(exileId, "Hoarding Dragon exile", card); - } - player.shuffleLibrary(game); - } - return true; + if (player != null) { + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); + if (card != null) + card.moveToExile(exileId, "Hoarding Dragon exile", source.getSourceId(), game); + } + } + player.shuffleLibrary(game); + return true; + } + player.shuffleLibrary(game); + return false; } @Override diff --git a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java index 3ae56560d68..eed25f29396 100644 --- a/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java +++ b/Mage.Sets/src/mage/sets/magic2012/ArachnusSpinner.java @@ -133,10 +133,10 @@ class ArachnusSpinnerEffect extends OneShotEffect { if (player.searchLibrary(target, game)) { card = game.getCard(target.getFirstTarget()); if (card != null) { - player.shuffleLibrary(game); zone = Zone.LIBRARY; } } + player.shuffleLibrary(game); } if (card != null) { Permanent permanent = game.getPermanent(source.getFirstTarget()); diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java index 9bebffe65f3..2a4bf8bf29b 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/DistantMemories.java @@ -116,12 +116,10 @@ class DistantMemoriesEffect extends OneShotEffect { } else { player.drawCards(3, game); } - } else { - player.shuffleLibrary(game); - return false; + return true; } } - - return true; + player.shuffleLibrary(game); + return false; } } diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java index 33548023c95..18fccd9a538 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/GreenSunsZenith.java @@ -82,6 +82,8 @@ class GreenSunsZenithSearchEffect extends OneShotEffect 0) { - for (UUID cardId : (List) target.getTargets()) { - Card card = player.getLibrary().getCard(cardId, game); - card.putOntoBattlefield(game, Constants.Zone.HAND, source.getId(), source.getControllerId()); - } - player.shuffleLibrary(game); - return true; + Card card = player.getLibrary().getCard(target.getFirstTarget(), game); + if (card != null) + card.putOntoBattlefield(game, Constants.Zone.HAND, source.getId(), source.getControllerId()); } + player.shuffleLibrary(game); + return true; } + player.shuffleLibrary(game); return false; } diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/TreasureMage.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/TreasureMage.java index 8078cfe9da4..ca199696758 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/TreasureMage.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/TreasureMage.java @@ -63,7 +63,7 @@ public class TreasureMage extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); - SearchEffect effect = new SearchLibraryRevealPutInHandEffect(target); + SearchEffect effect = new SearchLibraryRevealPutInHandEffect(target, false); this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true)); } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/BrutalizerExarch.java b/Mage.Sets/src/mage/sets/newphyrexia/BrutalizerExarch.java index 4ab2a2c4519..b27946a1e86 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/BrutalizerExarch.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/BrutalizerExarch.java @@ -111,16 +111,18 @@ class BrutalizerExarchEffect1 extends OneShotEffect { TargetCardInLibrary target = new TargetCardInLibrary(new FilterCreatureCard("creature card in your library")); target.setRequired(true); if (player.searchLibrary(target, game)) { - Card card = game.getCard(target.getFirstTarget()); + Card card = player.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { Cards cards = new CardsImpl(); cards.add(card); player.revealCards("Brutalizer Exarch", cards, game); - player.shuffleLibrary(game); - card.moveToZone(Zone.LIBRARY, source.getId(), game, true); - return true; } + player.shuffleLibrary(game); + if (card != null) + card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + return true; } + player.shuffleLibrary(game); } return false; } diff --git a/Mage.Sets/src/mage/sets/planechase/SilvergladeElemental.java b/Mage.Sets/src/mage/sets/planechase/SilvergladeElemental.java index 958d8c94b6f..94b8cb8183f 100644 --- a/Mage.Sets/src/mage/sets/planechase/SilvergladeElemental.java +++ b/Mage.Sets/src/mage/sets/planechase/SilvergladeElemental.java @@ -59,7 +59,7 @@ public class SilvergladeElemental extends CardImpl { this.color.setGreen(true); this.power = new MageInt(4); this.toughness = new MageInt(4); - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), false, false), true)); } public SilvergladeElemental(final SilvergladeElemental card) { diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java index 0ad9e141421..b9b5fd22751 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/StrataScythe.java @@ -90,6 +90,8 @@ class StrataScytheImprintEffect extends OneShotEffect @Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); + if (player == null) + return false; TargetCardInLibrary target = new TargetCardInLibrary(new FilterLandCard()); if (player.searchLibrary(target, game)) { if (target.getTargets().size() > 0) { @@ -103,8 +105,8 @@ class StrataScytheImprintEffect extends OneShotEffect } } } - player.shuffleLibrary(game); } + player.shuffleLibrary(game); return true; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/TrinketMage.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/TrinketMage.java index 10a475f5589..84f89ed5b68 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/TrinketMage.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/TrinketMage.java @@ -63,7 +63,7 @@ public class TrinketMage extends CardImpl { this.power = new MageInt(2); this.toughness = new MageInt(2); TargetCardInLibrary target = new TargetCardInLibrary(0, 1, filter); - SearchEffect effect = new SearchLibraryRevealPutInHandEffect(target); + SearchEffect effect = new SearchLibraryRevealPutInHandEffect(target, false); this.addAbility(new EntersBattlefieldTriggeredAbility(effect, true)); } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/FarhavenElf.java b/Mage.Sets/src/mage/sets/shadowmoor/FarhavenElf.java index 3b1b44c0347..c27316ed157 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/FarhavenElf.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/FarhavenElf.java @@ -54,7 +54,7 @@ public class FarhavenElf extends CardImpl { this.toughness = new MageInt(1); // When Farhaven Elf enters the battlefield, you may search your library for a basic land card and put it onto the battlefield tapped. If you do, shuffle your library. - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterBasicLandCard()), true), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterBasicLandCard()), true, false), true)); } public FarhavenElf(final FarhavenElf card) { diff --git a/Mage.Sets/src/mage/sets/shardsofalara/RangerOfEos.java b/Mage.Sets/src/mage/sets/shardsofalara/RangerOfEos.java index 4eccdbedb95..897bd4e3654 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/RangerOfEos.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/RangerOfEos.java @@ -63,7 +63,7 @@ public class RangerOfEos extends CardImpl { this.toughness = new MageInt(2); TargetCardInLibrary target = new TargetCardInLibrary(0, 2, filter); - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(target), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(target, false), true)); } public RangerOfEos(final RangerOfEos card) { diff --git a/Mage.Sets/src/mage/sets/tenth/CivicWayfinder.java b/Mage.Sets/src/mage/sets/tenth/CivicWayfinder.java index 1f318dae61a..b147519037d 100644 --- a/Mage.Sets/src/mage/sets/tenth/CivicWayfinder.java +++ b/Mage.Sets/src/mage/sets/tenth/CivicWayfinder.java @@ -53,7 +53,7 @@ public class CivicWayfinder extends CardImpl { this.color.setGreen(true); this.power = new MageInt(2); this.toughness = new MageInt(2); - this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(new TargetCardInLibrary(new FilterBasicLandCard())), true)); + this.addAbility(new EntersBattlefieldTriggeredAbility(new SearchLibraryRevealPutInHandEffect(new TargetCardInLibrary(new FilterBasicLandCard()), false), true)); } public CivicWayfinder(final CivicWayfinder card) { diff --git a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java index 7c2046e385b..1f899407e8d 100644 --- a/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java +++ b/Mage.Sets/src/mage/sets/zendikar/QuestForTheHolyRelic.java @@ -120,11 +120,9 @@ class QuestForTheHolyRelicEffect extends OneShotEffect { private boolean revealCards = false; + private boolean forceShuffle; public SearchLibraryPutInHandEffect(TargetCardInLibrary target) { - this(target, false); + this(target, false, true); } public SearchLibraryPutInHandEffect(TargetCardInLibrary target, boolean revealCards) { + this(target, revealCards, true); + } + + public SearchLibraryPutInHandEffect(TargetCardInLibrary target, boolean revealCards, boolean forceShuffle) { super(target, Outcome.DrawCard); this.revealCards = revealCards; + this.forceShuffle = forceShuffle; setText(); } @@ -72,30 +78,35 @@ public class SearchLibraryPutInHandEffect extends SearchEffect 0) { - Cards cards = new CardsImpl(); - for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); - if (card != null){ - card.moveToZone(Zone.HAND, source.getId(), game, false); - if (revealCards) { - cards.add(card); + if (player == null) + return false; + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Cards cards = new CardsImpl(); + for (UUID cardId: (List)target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null){ + card.moveToZone(Zone.HAND, source.getId(), game, false); + if (revealCards) { + cards.add(card); + } } } - } - if (revealCards) { - String name = "Reveal"; - Card sourceCard = game.getCard(source.getSourceId()); - if (sourceCard != null) { - name = sourceCard.getName(); + if (revealCards) { + String name = "Reveal"; + Card sourceCard = game.getCard(source.getSourceId()); + if (sourceCard != null) { + name = sourceCard.getName(); + } + player.revealCards(name, cards, game); } - player.revealCards(name, cards, game); } + player.shuffleLibrary(game); + return true; } - // shuffle anyway - player.shuffleLibrary(game); - return true; + if (forceShuffle) + player.shuffleLibrary(game); + return false; } private void setText() { @@ -108,7 +119,10 @@ public class SearchLibraryPutInHandEffect extends SearchEffect { private boolean tapped; + private boolean forceShuffle; public SearchLibraryPutInPlayEffect(TargetCardInLibrary target) { - this(target, false, Outcome.PutCardInPlay); + this(target, false, true, Outcome.PutCardInPlay); } public SearchLibraryPutInPlayEffect(TargetCardInLibrary target, boolean tapped) { - this(target, tapped, Outcome.PutCardInPlay); + this(target, tapped, true, Outcome.PutCardInPlay); } - public SearchLibraryPutInPlayEffect(TargetCardInLibrary target, boolean tapped, Outcome outcome) { + public SearchLibraryPutInPlayEffect(TargetCardInLibrary target, boolean tapped, boolean forceShuffle) { + this(target, tapped, forceShuffle, Outcome.PutCardInPlay); + } + + public SearchLibraryPutInPlayEffect(TargetCardInLibrary target, boolean tapped, Outcome outcome) { + this(target, tapped, true, outcome); + } + + public SearchLibraryPutInPlayEffect(TargetCardInLibrary target, boolean tapped, boolean forceShuffle, Outcome outcome) { super(target, outcome); this.tapped = tapped; + this.forceShuffle = forceShuffle; setText(); } public SearchLibraryPutInPlayEffect(final SearchLibraryPutInPlayEffect effect) { super(effect); this.tapped = effect.tapped; + this.forceShuffle = effect.forceShuffle; } @Override @@ -75,6 +86,8 @@ public class SearchLibraryPutInPlayEffect extends SearchEffect 0) { for (UUID cardId: (List)target.getTargets()) { @@ -89,12 +102,12 @@ public class SearchLibraryPutInPlayEffect extends SearchEffect cards = new ArrayList(); - if (target.getTargets().size() > 0) { + if (player == null) + return false; + if (player.searchLibrary(target, game)) { + List cards = new ArrayList(); for (UUID cardId: (List)target.getTargets()) { Card card = player.getLibrary().remove(cardId, game); if (card != null) - cards.add(card); + cards.add(card); } player.shuffleLibrary(game); - for (Card card: cards) { - card.moveToZone(Zone.LIBRARY, source.getId(), game, true); - } + for (Card card: cards) { + card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + } + return true; } - return true; + // shuffle anyway + player.shuffleLibrary(game); + return false; } private void setText() { diff --git a/Mage/src/mage/abilities/effects/common/search/SearchLibraryRevealPutInHandEffect.java b/Mage/src/mage/abilities/effects/common/search/SearchLibraryRevealPutInHandEffect.java index 54c30a8ad9d..bd96c512002 100644 --- a/Mage/src/mage/abilities/effects/common/search/SearchLibraryRevealPutInHandEffect.java +++ b/Mage/src/mage/abilities/effects/common/search/SearchLibraryRevealPutInHandEffect.java @@ -47,13 +47,21 @@ import mage.target.common.TargetCardInLibrary; */ public class SearchLibraryRevealPutInHandEffect extends SearchEffect { - public SearchLibraryRevealPutInHandEffect(TargetCardInLibrary target) { + boolean forceShuffle; + + public SearchLibraryRevealPutInHandEffect(TargetCardInLibrary target) { + this(target, true); + } + + public SearchLibraryRevealPutInHandEffect(TargetCardInLibrary target, boolean forceShuffle) { super(target, Outcome.DrawCard); + this.forceShuffle = forceShuffle; setText(); } public SearchLibraryRevealPutInHandEffect(final SearchLibraryRevealPutInHandEffect effect) { super(effect); + this.forceShuffle = effect.forceShuffle; } @Override @@ -64,20 +72,26 @@ public class SearchLibraryRevealPutInHandEffect extends SearchEffect 0) { - Cards revealed = new CardsImpl(); - for (UUID cardId: (List)target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); - if (card != null) { - card.moveToZone(Zone.HAND, source.getId(), game, false); - revealed.add(card); - } - } - player.shuffleLibrary(game); - player.revealCards("Search", revealed, game); - } - return true; + if (player == null) + return false; + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Cards revealed = new CardsImpl(); + for (UUID cardId: (List)target.getTargets()) { + Card card = player.getLibrary().getCard(cardId, game); + if (card != null) { + card.moveToZone(Zone.HAND, source.getId(), game, false); + revealed.add(card); + } + } + player.revealCards("Search", revealed, game); + } + player.shuffleLibrary(game); + return true; + } + if (forceShuffle) + player.shuffleLibrary(game); + return false; } private void setText() { @@ -90,7 +104,10 @@ public class SearchLibraryRevealPutInHandEffect extends SearchEffect { filter.setConvertedManaCost(sourceCard.getManaCost().convertedManaCost()); filter.setConvertedManaCostComparison(Filter.ComparisonType.Equal); TargetCardInLibrary target = new TargetCardInLibrary(1, filter); - player.searchLibrary(target, game); - if (target.getTargets().size() > 0) { - Cards revealed = new CardsImpl(); - for (UUID cardId : target.getTargets()) { - Card card = player.getLibrary().remove(cardId, game); - if (card != null) { - card.moveToZone(Constants.Zone.HAND, source.getId(), game, false); - revealed.add(card); + if (player.searchLibrary(target, game)) { + if (target.getTargets().size() > 0) { + Cards revealed = new CardsImpl(); + for (UUID cardId : target.getTargets()) { + Card card = player.getLibrary().remove(cardId, game); + if (card != null) { + card.moveToZone(Constants.Zone.HAND, source.getId(), game, false); + revealed.add(card); + } } + player.revealCards("Search", revealed, game); } - player.shuffleLibrary(game); - player.revealCards("Search", revealed, game); } + player.shuffleLibrary(game); + return true; } - - return true; + return false; } @Override diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 0134c7868a2..06b45c8fd6c 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -1096,8 +1096,8 @@ public abstract class PlayerImpl> implements Player, Ser newTarget = target; if (newTarget.choose(Outcome.Neutral, playerId, null, game)) { game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LIBRARY_SEARCHED, playerId, playerId)); - return true; } + return true; } return false; }