From c38d49358cf59476b842f2097c2fc2f5c0bb40ee Mon Sep 17 00:00:00 2001 From: Loki Date: Sat, 9 Jun 2012 12:23:57 +0300 Subject: [PATCH] fix NPE when library is empty --- .../sets/worldwake/JaceTheMindSculptor.java | 239 +++++++++--------- 1 file changed, 121 insertions(+), 118 deletions(-) diff --git a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java index 9fc8ad4901d..f7a6e20c0c8 100644 --- a/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java +++ b/Mage.Sets/src/mage/sets/worldwake/JaceTheMindSculptor.java @@ -29,6 +29,7 @@ package mage.sets.worldwake; import java.util.UUID; + import mage.Constants.CardType; import mage.Constants.Outcome; import mage.Constants.Rarity; @@ -52,161 +53,163 @@ import mage.target.common.TargetCardInHand; import mage.target.common.TargetCreaturePermanent; /** - * * @author BetaSteward_at_googlemail.com */ public class JaceTheMindSculptor extends CardImpl { - public JaceTheMindSculptor(UUID ownerId) { - super(ownerId, 31, "Jace, the Mind Sculptor", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{2}{U}{U}"); - this.expansionSetCode = "WWK"; - this.subtype.add("Jace"); - this.color.setBlue(true); - this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); + public JaceTheMindSculptor(UUID ownerId) { + super(ownerId, 31, "Jace, the Mind Sculptor", Rarity.MYTHIC, new CardType[]{CardType.PLANESWALKER}, "{2}{U}{U}"); + this.expansionSetCode = "WWK"; + this.subtype.add("Jace"); + this.color.setBlue(true); + this.addAbility(new EntersBattlefieldAbility(new AddCountersSourceEffect(CounterType.LOYALTY.createInstance(3)), "")); - LoyaltyAbility ability1 = new LoyaltyAbility(new JaceTheMindSculptorEffect1(), 2); - ability1.addTarget(new TargetPlayer()); - this.addAbility(ability1); + LoyaltyAbility ability1 = new LoyaltyAbility(new JaceTheMindSculptorEffect1(), 2); + ability1.addTarget(new TargetPlayer()); + this.addAbility(ability1); - LoyaltyAbility ability2 = new LoyaltyAbility(new JaceTheMindSculptorEffect2(), 0); - this.addAbility(ability2); + LoyaltyAbility ability2 = new LoyaltyAbility(new JaceTheMindSculptorEffect2(), 0); + this.addAbility(ability2); - LoyaltyAbility ability3 = new LoyaltyAbility(new ReturnToHandTargetEffect(), -1); - ability3.addTarget(new TargetCreaturePermanent()); - this.addAbility(ability3); + LoyaltyAbility ability3 = new LoyaltyAbility(new ReturnToHandTargetEffect(), -1); + ability3.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability3); - LoyaltyAbility ability4 = new LoyaltyAbility(new JaceTheMindSculptorEffect3(), -12); - ability4.addTarget(new TargetPlayer()); - this.addAbility(ability4); + LoyaltyAbility ability4 = new LoyaltyAbility(new JaceTheMindSculptorEffect3(), -12); + ability4.addTarget(new TargetPlayer()); + this.addAbility(ability4); - } + } - public JaceTheMindSculptor(final JaceTheMindSculptor card) { - super(card); - } + public JaceTheMindSculptor(final JaceTheMindSculptor card) { + super(card); + } - @Override - public JaceTheMindSculptor copy() { - return new JaceTheMindSculptor(this); - } + @Override + public JaceTheMindSculptor copy() { + return new JaceTheMindSculptor(this); + } } class JaceTheMindSculptorEffect1 extends OneShotEffect { - public JaceTheMindSculptorEffect1() { - super(Outcome.Detriment); - staticText = "Look at the top card of target player's library. You may put that card on the bottom of that player's library"; - } + public JaceTheMindSculptorEffect1() { + super(Outcome.Detriment); + staticText = "Look at the top card of target player's library. You may put that card on the bottom of that player's library"; + } - public JaceTheMindSculptorEffect1(final JaceTheMindSculptorEffect1 effect) { - super(effect); - } + public JaceTheMindSculptorEffect1(final JaceTheMindSculptorEffect1 effect) { + super(effect); + } - @Override - public JaceTheMindSculptorEffect1 copy() { - return new JaceTheMindSculptorEffect1(this); - } + @Override + public JaceTheMindSculptorEffect1 copy() { + return new JaceTheMindSculptorEffect1(this); + } - @Override - public boolean apply(Game game, Ability source) { - Player controller = game.getPlayer(source.getControllerId()); - Player player = game.getPlayer(source.getFirstTarget()); - if (controller != null && player != null) { - Cards cards = new CardsImpl(); - cards.add(player.getLibrary().getFromTop(game)); - controller.lookAtCards("Jace, the Mind Sculptor",cards, game); - if (controller.chooseUse(outcome, "Do you wish to put card on the bottom of player's library?", game)) { - Card card = player.getLibrary().removeFromTop(game); - if (card != null) { - card.moveToZone(Zone.LIBRARY, source.getId(), game, false); - } - } - return true; - } - return false; - } + @Override + public boolean apply(Game game, Ability source) { + Player controller = game.getPlayer(source.getControllerId()); + Player player = game.getPlayer(source.getFirstTarget()); + if (controller != null && player != null) { + Card c = player.getLibrary().getFromTop(game); + if (c != null) { + Cards cards = new CardsImpl(); + cards.add(c); + controller.lookAtCards("Jace, the Mind Sculptor", cards, game); + if (controller.chooseUse(outcome, "Do you wish to put card on the bottom of player's library?", game)) { + Card card = player.getLibrary().removeFromTop(game); + if (card != null) { + card.moveToZone(Zone.LIBRARY, source.getId(), game, false); + } + } + return true; + } + } + return false; + } } class JaceTheMindSculptorEffect2 extends OneShotEffect { - public JaceTheMindSculptorEffect2() { - super(Outcome.DrawCard); - staticText = "Draw three cards, then put two cards from your hand on top of your library in any order"; - } + public JaceTheMindSculptorEffect2() { + super(Outcome.DrawCard); + staticText = "Draw three cards, then put two cards from your hand on top of your library in any order"; + } - public JaceTheMindSculptorEffect2(final JaceTheMindSculptorEffect2 effect) { - super(effect); - } + public JaceTheMindSculptorEffect2(final JaceTheMindSculptorEffect2 effect) { + super(effect); + } - @Override - public JaceTheMindSculptorEffect2 copy() { - return new JaceTheMindSculptorEffect2(this); - } + @Override + public JaceTheMindSculptorEffect2 copy() { + return new JaceTheMindSculptorEffect2(this); + } - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null) { - player.drawCards(3, game); - putOnLibrary(player, source, game); - putOnLibrary(player, source, game); - return true; - } - return false; - } + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.drawCards(3, game); + putOnLibrary(player, source, game); + putOnLibrary(player, source, game); + return true; + } + return false; + } - private boolean putOnLibrary(Player player, Ability source, Game game) { - TargetCardInHand target = new TargetCardInHand(); - target.setRequired(true); - player.chooseTarget(Outcome.ReturnToHand, target, source, game); - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - player.getHand().remove(card); - card.moveToZone(Zone.LIBRARY, source.getId(), game, true); - } - return true; - } + private boolean putOnLibrary(Player player, Ability source, Game game) { + TargetCardInHand target = new TargetCardInHand(); + target.setRequired(true); + player.chooseTarget(Outcome.ReturnToHand, target, source, game); + Card card = player.getHand().get(target.getFirstTarget(), game); + if (card != null) { + player.getHand().remove(card); + card.moveToZone(Zone.LIBRARY, source.getId(), game, true); + } + return true; + } } class JaceTheMindSculptorEffect3 extends OneShotEffect { - public JaceTheMindSculptorEffect3() { - super(Outcome.DrawCard); - staticText = "Exile all cards from target player's library, then that player shuffles his or her hand into his or her library"; - } + public JaceTheMindSculptorEffect3() { + super(Outcome.DrawCard); + staticText = "Exile all cards from target player's library, then that player shuffles his or her hand into his or her library"; + } - public JaceTheMindSculptorEffect3(final JaceTheMindSculptorEffect3 effect) { - super(effect); - } + public JaceTheMindSculptorEffect3(final JaceTheMindSculptorEffect3 effect) { + super(effect); + } - @Override - public JaceTheMindSculptorEffect3 copy() { - return new JaceTheMindSculptorEffect3(this); - } + @Override + public JaceTheMindSculptorEffect3 copy() { + return new JaceTheMindSculptorEffect3(this); + } - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getFirstTarget()); - ExileZone exile = game.getExile().getPermanentExile(); - if (player != null) { - while (true) { - if (player.getLibrary().getFromTop(game) == null) - break; - Card card = player.getLibrary().removeFromTop(game); - exile.add(card); - game.setZone(card.getId(), Zone.EXILED); - } - for (Card card : player.getHand().getCards(game)) { - card.moveToZone(Zone.LIBRARY, source.getId(), game, false); - } - return true; - } - return false; - } + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getFirstTarget()); + ExileZone exile = game.getExile().getPermanentExile(); + if (player != null) { + while (true) { + if (player.getLibrary().getFromTop(game) == null) + break; + Card card = player.getLibrary().removeFromTop(game); + exile.add(card); + game.setZone(card.getId(), Zone.EXILED); + } + for (Card card : player.getHand().getCards(game)) { + card.moveToZone(Zone.LIBRARY, source.getId(), game, false); + } + return true; + } + return false; + } } \ No newline at end of file