* Oathbreaker: Signature spell did not return to command zone if exiled (fixes #6870).

This commit is contained in:
LevelX2 2020-07-21 23:46:55 +02:00
parent 7f3b24365e
commit b965bddf92
2 changed files with 14 additions and 4 deletions

View file

@ -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 isnt 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 owners 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;
}
}

View file

@ -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;