diff --git a/Mage/src/main/java/mage/abilities/effects/common/continuous/CommanderReplacementEffect.java b/Mage/src/main/java/mage/abilities/effects/common/continuous/CommanderReplacementEffect.java index 14cdf54c03f..621c9b434ce 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/continuous/CommanderReplacementEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/continuous/CommanderReplacementEffect.java @@ -26,6 +26,13 @@ import mage.players.Player; 903.9a If a commander is a melded permanent and its owner chooses to put it into the command zone this way, that permanent and the card representing it that isn’t a commander are put into the appropriate zone, and the card that represents it and is a commander is put into the command zone. + + The new state-based action that helps accomplish this rules change is worded as follows: (again, quoting from the announcement) + “If a commander is in a graveyard or in exile and that card was put into that zone since the last time state-based actions were checked, + its owner may put it into the command zone. + + If a commander would be put into its owner’s hand or library from anywhere, its owner may put it into the command zone instead. + This replacement effect may apply more than once to the same event.” */ // Oathbreaker mode: If your Oathbreaker changes zones, you may return it to the Command Zone. The Signature Spell must return to the Command Zone. public class CommanderReplacementEffect extends ReplacementEffectImpl { @@ -121,6 +128,7 @@ public class CommanderReplacementEffect extends ReplacementEffectImpl { switch (zEvent.getToZone()) { // Normal commander movement is handled in state-based actions in GameImpl case BATTLEFIELD: case GRAVEYARD: + case EXILED: return true; } } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index ccc4c3c6f74..99d5a6d21ce 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -4297,10 +4297,12 @@ public abstract class PlayerImpl implements Player, Serializable { game.getStack().remove(spell, game); } } - game.informPlayers(this.getLogName() + " moves " + (withName ? card.getLogName() - + (card.isCopy() ? " (Copy)" : "") : "a card face down") + ' ' - + (fromZone != null ? "from " + fromZone.toString().toLowerCase(Locale.ENGLISH) - + ' ' : "") + "to the exile zone"); + if (Zone.EXILED.equals(game.getState().getZone(card.getId()))) { // only if target zone was not replaced + game.informPlayers(this.getLogName() + " moves " + (withName ? card.getLogName() + + (card.isCopy() ? " (Copy)" : "") : "a card face down") + ' ' + + (fromZone != null ? "from " + fromZone.toString().toLowerCase(Locale.ENGLISH) + + ' ' : "") + "to the exile zone"); + } } result = true;