From ec1327199d840fccecb758b0fc84f926bc9c54a7 Mon Sep 17 00:00:00 2001 From: magenoxx Date: Thu, 19 May 2011 23:22:11 +0400 Subject: [PATCH] Fixed moveToExile. --- .../abilities/keyword/CascadeAbility.java | 2 +- Mage/src/mage/cards/CardImpl.java | 59 +++++++++++++------ Mage/src/mage/players/Player.java | 1 + Mage/src/mage/players/PlayerImpl.java | 7 +++ 4 files changed, 50 insertions(+), 19 deletions(-) diff --git a/Mage/src/mage/abilities/keyword/CascadeAbility.java b/Mage/src/mage/abilities/keyword/CascadeAbility.java index d066681a2d5..d75f8b8ffc8 100644 --- a/Mage/src/mage/abilities/keyword/CascadeAbility.java +++ b/Mage/src/mage/abilities/keyword/CascadeAbility.java @@ -97,7 +97,7 @@ class CascadeEffect extends OneShotEffect { ExileZone exile = game.getExile().createZone(source.getSourceId(), player.getName() + " Cascade"); int sourceCost = game.getObject(source.getSourceId()).getManaCost().convertedManaCost(); do { - card = player.getLibrary().removeFromTop(game); + card = player.getLibrary().getFromTop(game); if (card == null) break; card.moveToExile(exile.getId(), exile.getName(), source.getId(), game); diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 7d846e87d99..e0e40a9cd7a 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -205,16 +205,22 @@ public abstract class CardImpl> extends MageObjectImpl Zone fromZone = game.getZone(objectId); ZoneChangeEvent event = new ZoneChangeEvent(this.objectId, sourceId, ownerId, fromZone, toZone); if (!game.replaceEvent(event)) { - if (event.getFromZone() != null) { - switch (event.getFromZone()) { - case GRAVEYARD: - game.getPlayer(ownerId).removeFromGraveyard(this, game); - break; - default: - //logger.warning("moveToZone, not fully implemented: from="+event.getFromZone() + ", to="+event.getToZone()); - } - game.rememberLKI(objectId, event.getFromZone(), this); - } + if (event.getFromZone() != null) { + switch (event.getFromZone()) { + 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("moveToZone, not fully implemented: from="+event.getFromZone() + ", to="+event.getToZone()); + } + game.rememberLKI(objectId, event.getFromZone(), this); + } switch (event.getToZone()) { case GRAVEYARD: game.getPlayer(ownerId).putInGraveyard(this, game, !flag); @@ -277,6 +283,23 @@ public abstract class CardImpl> extends MageObjectImpl Zone fromZone = game.getZone(objectId); ZoneChangeEvent event = new ZoneChangeEvent(this.objectId, sourceId, ownerId, fromZone, Zone.EXILED); 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("moveToExile, not fully implemented: from="+fromZone); + } + game.rememberLKI(objectId, event.getFromZone(), this); + } + if (exileId == null) { game.getExile().getPermanentExile().add(this); } @@ -301,13 +324,13 @@ public abstract class CardImpl> extends MageObjectImpl return true; } - @Override - public String getArt() { - return ""; - } + @Override + public String getArt() { + return ""; + } - @Override - public void setCardNumber(int cid) { - this.cardNumber = cid; - } + @Override + public void setCardNumber(int cid) { + this.cardNumber = cid; + } } diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 0cd4b2a2a33..9683e5fe583 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -111,6 +111,7 @@ public interface Player extends MageItem, Copyable { public boolean removeFromBattlefield(Permanent permanent, Game game); public boolean putInGraveyard(Card card, Game game, boolean fromBattlefield); public boolean removeFromGraveyard(Card card, Game game); + public boolean removeFromLibrary(Card card, Game game); public boolean searchLibrary(TargetCardInLibrary target, Game game); public boolean canPlayLand(); public boolean playLand(Card card, Game game); diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 5c336e1ddc1..ae4ee5bef13 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -311,6 +311,13 @@ public abstract class PlayerImpl> implements Player, Ser hand.remove(card); return true; } + + @Override + public boolean removeFromLibrary(Card card, Game game) { + if (card == null) return false; + library.remove(card.getId(), game); + return true; + } @Override public void discard(int amount, Ability source, Game game) {