From 20e7c7cda3f3a2c67128e51fc67defc3fe1de28d Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Tue, 22 Sep 2020 18:50:21 -0400 Subject: [PATCH] [ZNR] fixed Moraug, Fury of Akoum bugs with combat (#7046) --- .../src/mage/cards/m/MoraugFuryOfAkoum.java | 35 +++++++++++++++++-- .../src/main/java/mage/game/turn/TurnMod.java | 9 +++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/Mage.Sets/src/mage/cards/m/MoraugFuryOfAkoum.java b/Mage.Sets/src/mage/cards/m/MoraugFuryOfAkoum.java index 706958eb2c4..1a1b57ae80b 100644 --- a/Mage.Sets/src/mage/cards/m/MoraugFuryOfAkoum.java +++ b/Mage.Sets/src/mage/cards/m/MoraugFuryOfAkoum.java @@ -18,6 +18,7 @@ import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; import mage.game.turn.TurnMod; +import mage.watchers.Watcher; import mage.watchers.common.AttackedThisTurnWatcher; import java.util.UUID; @@ -45,7 +46,7 @@ public final class MoraugFuryOfAkoum extends CardImpl { "Landfall — Whenever a land enters the battlefield under your control, " + "if it's your main phase, there's an additional combat phase after this phase. " + "At the beginning of that combat, untap all creatures you control." - )); + ), new MoraugFuryOfAkoumWatcher()); } private MoraugFuryOfAkoum(final MoraugFuryOfAkoum card) { @@ -116,7 +117,18 @@ class MoraugFuryOfAkoumCombatEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - TurnMod combat = new TurnMod(source.getControllerId(), TurnPhase.COMBAT,TurnPhase.COMBAT, false); + TurnPhase turnPhase = game.getPhase().getType(); + for (TurnMod turnMod : game.getState().getTurnMods()) { + if ("moraug".equals(turnMod.getNote()) + && turnMod.getPlayerId().equals(source.getControllerId()) + && turnMod.getAfterPhase() == turnPhase) { + turnPhase = TurnPhase.COMBAT; + turnMod.setNote("moraugIgnore"); + break; + } + } + TurnMod combat = new TurnMod(source.getControllerId(), TurnPhase.COMBAT, turnPhase, false); + combat.setNote("moraug"); game.getState().getTurnMods().add(combat); game.addDelayedTriggeredAbility(new MoraugFuryOfAkoumDelayedTriggeredAbility(combat.getId()), source); return true; @@ -171,3 +183,22 @@ class MoraugFuryOfAkoumDelayedTriggeredAbility extends DelayedTriggeredAbility { return "At the beginning of that combat, untap all creatures you control"; } } + +class MoraugFuryOfAkoumWatcher extends Watcher { + + MoraugFuryOfAkoumWatcher() { + super(WatcherScope.GAME); + } + + @Override + public void watch(GameEvent event, Game game) { + if (event.getType() != GameEvent.EventType.POSTCOMBAT_MAIN_PHASE_PRE) { + return; + } + for (TurnMod turnMod : game.getState().getTurnMods()) { + if ("moraug".equals(turnMod.getNote())) { + turnMod.setNote("moraugIgnore"); + } + } + } +} diff --git a/Mage/src/main/java/mage/game/turn/TurnMod.java b/Mage/src/main/java/mage/game/turn/TurnMod.java index f5246ae6ea0..ab3743c74c6 100644 --- a/Mage/src/main/java/mage/game/turn/TurnMod.java +++ b/Mage/src/main/java/mage/game/turn/TurnMod.java @@ -26,6 +26,7 @@ public class TurnMod implements Serializable { private PhaseStep skipStep; private TurnPhase afterPhase; private PhaseStep afterStep; + private String note; // Turn mod that should be applied after current turn mod. // Implemented only for control player turn mod! @@ -181,4 +182,12 @@ public class TurnMod implements Serializable { public void setSubsequentTurnMod(TurnMod subsequentTurnMod) { this.subsequentTurnMod = subsequentTurnMod; } + + public void setNote(String note) { + this.note = note; + } + + public String getNote() { + return note; + } }