diff --git a/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java b/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java index a2d99f147f2..ea56d34f647 100644 --- a/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java +++ b/Mage.Sets/src/mage/sets/invasion/FactOrFiction.java @@ -27,6 +27,9 @@ */ package mage.sets.invasion; +import java.util.List; +import java.util.Set; +import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Outcome; import mage.Constants.Rarity; @@ -44,10 +47,6 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetCard; -import java.util.List; -import java.util.Set; -import java.util.UUID; - /** * * @author North @@ -113,17 +112,16 @@ class FactOrFictionEffect extends OneShotEffect { TargetCard target = new TargetCard(0, cards.size(), Zone.PICK, new FilterCard("cards to put in the first pile")); Cards pile1 = new CardsImpl(); - - while (opponent.choose(Outcome.Neutral, cards, target, game)); - - List targets = target.getTargets(); - for (UUID targetId : targets) { - Card card = cards.get(targetId, game); - if (card != null) { - pile1.add(card); - cards.remove(card); - } - } + if (opponent.choose(Outcome.Neutral, cards, target, game)) { + List targets = target.getTargets(); + for (UUID targetId : targets) { + Card card = cards.get(targetId, game); + if (card != null) { + pile1.add(card); + cards.remove(card); + } + } + } player.revealCards("Pile 1 (Fact or Fiction)", pile1, game); player.revealCards("Pile 2 (Fact or Fiction)", cards, game); diff --git a/Mage.Sets/src/mage/sets/magic2010/SageOwl.java b/Mage.Sets/src/mage/sets/magic2010/SageOwl.java index 67acef906f8..3f4b49e16af 100644 --- a/Mage.Sets/src/mage/sets/magic2010/SageOwl.java +++ b/Mage.Sets/src/mage/sets/magic2010/SageOwl.java @@ -99,7 +99,8 @@ class SageOwlEffect extends OneShotEffect { } Cards cards = new CardsImpl(Zone.PICK); - for (int i = 0; i < 4; i++) { + int count = Math.min(player.getLibrary().size(), 4); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); diff --git a/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java b/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java index 1d4b953e891..b0b7293eb72 100644 --- a/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java +++ b/Mage.Sets/src/mage/sets/magic2011/ConundrumSphinx.java @@ -28,7 +28,6 @@ package mage.sets.magic2011; -import java.util.Set; import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Outcome; @@ -94,19 +93,20 @@ class ConundrumSphinxEffect extends OneShotEffect { Choice cardChoice = new ChoiceImpl(); cardChoice.setChoices(Sets.getCardNames()); for (Player player: game.getPlayers().values()) { - cardChoice.clearChoice(); - player.choose(Outcome.DrawCard, cardChoice, game); - Card card = player.getLibrary().removeFromTop(game); - Cards cards = new CardsImpl(); - cards.add(card); - player.revealCards("Conundrum Sphinx", cards, game); - if (card.getName().equals(cardChoice.getChoice())) { - card.moveToZone(Zone.HAND, source.getId(), game, true); + if(player.getLibrary().size() > 0){ + cardChoice.clearChoice(); + player.choose(Outcome.DrawCard, cardChoice, game); + Card card = player.getLibrary().removeFromTop(game); + Cards cards = new CardsImpl(); + cards.add(card); + player.revealCards("Conundrum Sphinx", cards, game); + if (card.getName().equals(cardChoice.getChoice())) { + card.moveToZone(Zone.HAND, source.getId(), game, true); + } + else { + card.moveToZone(Zone.LIBRARY, source.getId(), game, false); + } } - else { - card.moveToZone(Zone.LIBRARY, source.getId(), game, false); - } - } return true; } diff --git a/Mage.Sets/src/mage/sets/magic2011/DarkTutelage.java b/Mage.Sets/src/mage/sets/magic2011/DarkTutelage.java index 96da2926327..c9c23fa9c2b 100644 --- a/Mage.Sets/src/mage/sets/magic2011/DarkTutelage.java +++ b/Mage.Sets/src/mage/sets/magic2011/DarkTutelage.java @@ -79,20 +79,22 @@ class DarkTutelageEffect extends OneShotEffect { super(effect); } - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - Card card = player.getLibrary().removeFromTop(game); - if (card != null) { - card.moveToZone(Zone.HAND, source.getId(), game, false); - player.loseLife(card.getManaCost().convertedManaCost(), game); - Cards cards = new CardsImpl(); - cards.add(card); - player.revealCards("Dark Tutelage", cards, game); - return true; - } - return false; - } + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null && player.getLibrary().size() > 0) { + Card card = player.getLibrary().removeFromTop(game); + if (card != null) { + card.moveToZone(Zone.HAND, source.getId(), game, false); + player.loseLife(card.getManaCost().convertedManaCost(), game); + Cards cards = new CardsImpl(); + cards.add(card); + player.revealCards("Dark Tutelage", cards, game); + return true; + } + } + return false; + } @Override public DarkTutelageEffect copy() { diff --git a/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java b/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java index ffb95a8e750..a2f21987cc6 100644 --- a/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java +++ b/Mage.Sets/src/mage/sets/magic2012/SphinxOfUthuun.java @@ -103,7 +103,7 @@ class SphinxOfUthuunEffect extends OneShotEffect { } Cards cards = new CardsImpl(Zone.PICK); - int count = Math.min(player.getLibrary().size(), 5); + int count = Math.min(player.getLibrary().size(), 5); for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { @@ -119,19 +119,18 @@ class SphinxOfUthuunEffect extends OneShotEffect { TargetCard target = new TargetCard(0, cards.size(), Zone.PICK, new FilterCard("cards to put in the first pile")); Cards pile1 = new CardsImpl(); + if (opponent.choose(Outcome.Neutral, cards, target, game)) { + List targets = target.getTargets(); + for (UUID targetId : targets) { + Card card = cards.get(targetId, game); + if (card != null) { + pile1.add(card); + cards.remove(card); + } + } + } - while (opponent.choose(Outcome.Neutral, cards, target, game)); - - List targets = target.getTargets(); - for (UUID targetId : targets) { - Card card = cards.get(targetId, game); - if (card != null) { - pile1.add(card); - cards.remove(card); - } - } - - player.revealCards("Pile 1 (Sphinx of Uthuun)", pile1, game); + player.revealCards("Pile 1 (Sphinx of Uthuun)", pile1, game); player.revealCards("Pile 2 (Sphinx of Uthuun)", cards, game); Choice choice = new ChoiceImpl(true); diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/Galvanoth.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/Galvanoth.java index ebdeea0775a..506a77d0dac 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/Galvanoth.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/Galvanoth.java @@ -32,17 +32,14 @@ import mage.Constants.CardType; import mage.Constants.Outcome; import mage.Constants.Rarity; import mage.Constants.TargetController; -import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.effects.common.counter.AddCountersSourceEffect; import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; -import mage.counters.CounterType; import mage.game.Game; import mage.players.Player; diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/LeadTheStampede.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/LeadTheStampede.java index a4bd1ae1495..6a27f1d8f4b 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/LeadTheStampede.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/LeadTheStampede.java @@ -95,7 +95,8 @@ class LeadTheStampedeEffect extends OneShotEffect { Cards cards = new CardsImpl(Zone.PICK); int creatureCardsFound = 0; - for (int i = 0; i < 5; i++) { + int count = Math.min(player.getLibrary().size(), 5); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/MitoticManipulation.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/MitoticManipulation.java index 87508b803c3..983aa8090ca 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/MitoticManipulation.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/MitoticManipulation.java @@ -102,7 +102,8 @@ class MitoticManipulationEffect extends OneShotEffect Cards cards = new CardsImpl(Zone.PICK); Cards cardsFound = new CardsImpl(Zone.PICK); - for (int i = 0; i < 7; i++) { + int count = Math.min(player.getLibrary().size(), 7); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); diff --git a/Mage.Sets/src/mage/sets/mirrodinbesieged/TezzeretAgentOfBolas.java b/Mage.Sets/src/mage/sets/mirrodinbesieged/TezzeretAgentOfBolas.java index 2260b9d6697..d2b601b01ca 100644 --- a/Mage.Sets/src/mage/sets/mirrodinbesieged/TezzeretAgentOfBolas.java +++ b/Mage.Sets/src/mage/sets/mirrodinbesieged/TezzeretAgentOfBolas.java @@ -120,7 +120,8 @@ class TezzeretAgentOfBolasEffect1 extends OneShotEffect { if (cardsCount > 0) { filter.setMessage("card named " + card.getName() + " in the graveyard of " + targetPlayer.getName()); TargetCardInGraveyard target = new TargetCardInGraveyard(0, cardsCount, filter); - - while (target.canChoose(player.getId(), game)) { - if (!player.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { - break; - } - } - - for (UUID targetId : target.getTargets()) { - Card targetCard = targetPlayer.getGraveyard().get(targetId, game); - if (targetCard != null) { - targetPlayer.getGraveyard().remove(targetCard); - targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); - } - } - } + if (player.choose(Outcome.Exile, targetPlayer.getGraveyard(), target, game)) { + List targets = target.getTargets(); + for (UUID targetId : targets) { + Card targetCard = targetPlayer.getGraveyard().get(targetId, game); + if (targetCard != null) { + targetPlayer.getGraveyard().remove(targetCard); + targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); + } + } + } + } // cards in Hand cardsCount = targetPlayer.getHand().count(filter, game); if (cardsCount > 0) { filter.setMessage("card named " + card.getName() + " in the hand of " + targetPlayer.getName()); TargetCardInHand target = new TargetCardInHand(0, cardsCount, filter); - - while (target.canChoose(player.getId(), game)) { - if (!player.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { - break; - } - } - - for (UUID targetId : target.getTargets()) { - Card targetCard = targetPlayer.getHand().get(targetId, game); - if (targetCard != null) { - targetPlayer.getHand().remove(targetCard); - targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); - } - } - - } else { + if (player.choose(Outcome.Exile, targetPlayer.getHand(), target, game)) { + List targets = target.getTargets(); + for (UUID targetId : targets) { + Card targetCard = targetPlayer.getHand().get(targetId, game); + if (targetCard != null) { + targetPlayer.getHand().remove(targetCard); + targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); + } + } + } + } else { player.lookAtCards(targetPlayer.getName() + " hand", targetPlayer.getHand(), game); } @@ -162,19 +150,15 @@ class SurgicalExtractionEffect extends OneShotEffect { if (cardsCount > 0) { filter.setMessage("card named " + card.getName() + " in the library of " + targetPlayer.getName()); TargetCardInLibrary target = new TargetCardInLibrary(0, cardsCount, filter); - - while (target.canChoose(player.getId(), game)) { - if (!player.choose(Outcome.Exile, cardsInLibrary, target, game)) { - break; - } - } - - for (UUID targetId : target.getTargets()) { - Card targetCard = targetPlayer.getLibrary().remove(targetId, game); - if (targetCard != null) { - targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); - } - } + if (player.choose(Outcome.Exile, cardsInLibrary, target, game)) { + List targets = target.getTargets(); + for (UUID targetId : targets) { + Card targetCard = targetPlayer.getLibrary().remove(targetId, game); + if (targetCard != null) { + targetCard.moveToZone(Zone.EXILED, source.getId(), game, false); + } + } + } } else { player.lookAtCards(targetPlayer.getName() + " library", cardsInLibrary, game); } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhanTheMad.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhanTheMad.java index ca56a9138d9..d11fcee2d6b 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhanTheMad.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/SarkhanTheMad.java @@ -104,15 +104,17 @@ class SarkhanTheMadRevealAndDrawEffect extends OneShotEffect 0) { + Card card = player.getLibrary().removeFromTop(game); + Permanent permanent = game.getPermanent(source.getSourceId()); + if (card != null) { + card.moveToZone(Zone.HAND, source.getId(), game, false); + permanent.damage(card.getManaCost().convertedManaCost(), this.getId(), game, false, false); + Cards cards = new CardsImpl(); + cards.add(card); + player.revealCards("Sarkhan the Mad", cards, game); + return true; + } } return false; } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GenesisWave.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GenesisWave.java index bff5cfe76e5..2d815ec862b 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GenesisWave.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GenesisWave.java @@ -84,6 +84,7 @@ class GenesisWaveEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); Cards cards = new CardsImpl(Zone.PICK); int count = source.getManaCostsToPay().getX(); + count = Math.min(player.getLibrary().size(), count); for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); cards.add(card); diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java index b1ad795be9e..19ec1ccedbb 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/ShapeAnew.java @@ -28,7 +28,6 @@ package mage.sets.scarsofmirrodin; -import java.util.List; import java.util.UUID; import mage.Constants; @@ -41,11 +40,8 @@ import mage.cards.Card; import mage.cards.CardImpl; import mage.cards.Cards; import mage.cards.CardsImpl; -import mage.filter.Filter; import mage.filter.FilterPermanent; -import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; -import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; @@ -55,7 +51,7 @@ import mage.target.TargetPermanent; */ public class ShapeAnew extends CardImpl { - private static FilterPermanent filter = new FilterPermanent("an artifact"); + private static final FilterPermanent filter = new FilterPermanent("an artifact"); static { filter.getCardType().add(CardType.ARTIFACT); diff --git a/Mage.Sets/src/mage/sets/tenth/Traumatize.java b/Mage.Sets/src/mage/sets/tenth/Traumatize.java index 4b9c51e7940..c164ef8d45f 100644 --- a/Mage.Sets/src/mage/sets/tenth/Traumatize.java +++ b/Mage.Sets/src/mage/sets/tenth/Traumatize.java @@ -68,7 +68,7 @@ public class Traumatize extends CardImpl { class TraumatizeEffect extends OneShotEffect { public TraumatizeEffect() { - super(Outcome.GainLife); + super(Outcome.Detriment); staticText = "Target player puts the top half of his or her library, rounded down, into his or her graveyard"; } diff --git a/Mage.Sets/src/mage/sets/worldwake/HalimarDepths.java b/Mage.Sets/src/mage/sets/worldwake/HalimarDepths.java index 98fadc70f87..c04f9be4758 100644 --- a/Mage.Sets/src/mage/sets/worldwake/HalimarDepths.java +++ b/Mage.Sets/src/mage/sets/worldwake/HalimarDepths.java @@ -89,7 +89,8 @@ class HalimarDepthsEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); Cards cards = new CardsImpl(Zone.PICK); - for (int i = 0; i < 3; i++) { + int count = Math.min(player.getLibrary().size(), 3); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); cards.add(card); game.setZone(card.getId(), Zone.PICK); diff --git a/Mage.Sets/src/mage/sets/zendikar/BeastHunt.java b/Mage.Sets/src/mage/sets/zendikar/BeastHunt.java index c5e82a2aaf2..dff9cd5d64e 100644 --- a/Mage.Sets/src/mage/sets/zendikar/BeastHunt.java +++ b/Mage.Sets/src/mage/sets/zendikar/BeastHunt.java @@ -85,7 +85,8 @@ class BeastHuntEffect extends OneShotEffect { } Cards cards = new CardsImpl(); - for (int i = 0; i < 3; i++) { + int count = Math.min(player.getLibrary().size(), 3); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); diff --git a/Mage.Sets/src/mage/sets/zendikar/MerfolkWayfinder.java b/Mage.Sets/src/mage/sets/zendikar/MerfolkWayfinder.java index 11aa0d17f62..899b2f4d43f 100644 --- a/Mage.Sets/src/mage/sets/zendikar/MerfolkWayfinder.java +++ b/Mage.Sets/src/mage/sets/zendikar/MerfolkWayfinder.java @@ -101,7 +101,8 @@ class MerfolkWayfinderEffect extends OneShotEffect { Cards cards = new CardsImpl(Zone.PICK); Cards cardsToReveal = new CardsImpl(); - for (int i = 0; i < 3; i++) { + int count = Math.min(player.getLibrary().size(), 3); + for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); cardsToReveal.add(card); if (card != null) { diff --git a/Mage/src/mage/game/events/PlayerQueryEvent.java b/Mage/src/mage/game/events/PlayerQueryEvent.java index 5fd50301514..0ed8cd92cbc 100644 --- a/Mage/src/mage/game/events/PlayerQueryEvent.java +++ b/Mage/src/mage/game/events/PlayerQueryEvent.java @@ -33,7 +33,6 @@ import java.util.*; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; -import mage.abilities.Modes; import mage.abilities.TriggeredAbilities; import mage.cards.Card; import mage.cards.Cards;