diff --git a/Mage/src/main/java/mage/MageObject.java b/Mage/src/main/java/mage/MageObject.java index a0d9c5bc0ce..33d5047f0d7 100644 --- a/Mage/src/main/java/mage/MageObject.java +++ b/Mage/src/main/java/mage/MageObject.java @@ -10,6 +10,7 @@ import mage.abilities.costs.mana.ManaCosts; import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; +import mage.game.events.ZoneChangeEvent; public interface MageObject extends MageItem, Serializable { @@ -75,7 +76,7 @@ public interface MageObject extends MageItem, Serializable { int getZoneChangeCounter(Game game); - void updateZoneChangeCounter(Game game); + void updateZoneChangeCounter(Game game, ZoneChangeEvent event); void setZoneChangeCounter(int value, Game game); diff --git a/Mage/src/main/java/mage/MageObjectImpl.java b/Mage/src/main/java/mage/MageObjectImpl.java index daea728b079..8ab42221b1e 100644 --- a/Mage/src/main/java/mage/MageObjectImpl.java +++ b/Mage/src/main/java/mage/MageObjectImpl.java @@ -42,6 +42,7 @@ import mage.abilities.mana.ManaAbility; import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; +import mage.game.events.ZoneChangeEvent; import mage.util.CardUtil; import mage.util.GameLog; @@ -287,7 +288,7 @@ public abstract class MageObjectImpl implements MageObject { } @Override - public void updateZoneChangeCounter(Game game) { + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { game.getState().updateZoneChangeCounter(objectId); } diff --git a/Mage/src/main/java/mage/abilities/effects/AuraReplacementEffect.java b/Mage/src/main/java/mage/abilities/effects/AuraReplacementEffect.java index be9335c3c63..d0382e571c1 100644 --- a/Mage/src/main/java/mage/abilities/effects/AuraReplacementEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/AuraReplacementEffect.java @@ -174,8 +174,9 @@ public class AuraReplacementEffect extends ReplacementEffectImpl { if (targetCard != null || targetPermanent != null || targetPlayer != null) { card = game.getCard(event.getTargetId()); card.removeFromZone(game, fromZone, sourceId); - card.updateZoneChangeCounter(game); PermanentCard permanent = new PermanentCard(card, (controllingPlayer == null ? card.getOwnerId() : controllingPlayer.getId()), game); + ZoneChangeEvent zoneChangeEvent = new ZoneChangeEvent(permanent, controllerId, fromZone, Zone.BATTLEFIELD); + permanent.updateZoneChangeCounter(game, zoneChangeEvent); game.getBattlefield().addPermanent(permanent); card.setZone(Zone.BATTLEFIELD, game); if (permanent.entersBattlefield(event.getSourceId(), game, fromZone, true)) { @@ -188,7 +189,7 @@ public class AuraReplacementEffect extends ReplacementEffectImpl { } game.applyEffects(); - game.fireEvent(new ZoneChangeEvent(permanent, controllerId, fromZone, Zone.BATTLEFIELD)); + game.fireEvent(zoneChangeEvent); return true; } diff --git a/Mage/src/main/java/mage/cards/MeldCard.java b/Mage/src/main/java/mage/cards/MeldCard.java index 9644ddc680f..df7628f176d 100644 --- a/Mage/src/main/java/mage/cards/MeldCard.java +++ b/Mage/src/main/java/mage/cards/MeldCard.java @@ -36,8 +36,6 @@ import mage.counters.Counter; import mage.game.Game; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; -import mage.game.permanent.PermanentMeld; -import mage.players.Player; /** * @@ -192,20 +190,20 @@ public abstract class MeldCard extends CardImpl { } @Override - public void updateZoneChangeCounter(Game game) { + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { if (isCopy() || !isMelded()) { - super.updateZoneChangeCounter(game); + super.updateZoneChangeCounter(game, event); return; } game.getState().updateZoneChangeCounter(objectId); if (topLastZoneChangeCounter == topHalfCard.getZoneChangeCounter(game) && halves.contains(topHalfCard.getId())) { - topHalfCard.updateZoneChangeCounter(game); + topHalfCard.updateZoneChangeCounter(game, event); topLastZoneChangeCounter = topHalfCard.getZoneChangeCounter(game); } if (bottomLastZoneChangeCounter == bottomHalfCard.getZoneChangeCounter(game) && halves.contains(bottomHalfCard.getId())) { - bottomHalfCard.updateZoneChangeCounter(game); + bottomHalfCard.updateZoneChangeCounter(game, event); bottomLastZoneChangeCounter = bottomHalfCard.getZoneChangeCounter(game); } } diff --git a/Mage/src/main/java/mage/game/ZonesHandler.java b/Mage/src/main/java/mage/game/ZonesHandler.java index 71e35447382..4b1efae4c50 100644 --- a/Mage/src/main/java/mage/game/ZonesHandler.java +++ b/Mage/src/main/java/mage/game/ZonesHandler.java @@ -73,6 +73,7 @@ public class ZonesHandler { toZone = subInfo.event.getToZone(); placeInDestinationZone(subInfo, game); } + // We arbitrarily prefer the bottom half card. This should never be relevant. if (toZone != null) { game.setZone(unmelded.event.getTargetId(), toZone); } @@ -180,7 +181,8 @@ public class ZonesHandler { if (unmelded.subInfo.isEmpty()) { return false; } - meld.updateZoneChangeCounter(game); + // We arbitrarily prefer the bottom half card. This should never be relevant. + meld.updateZoneChangeCounter(game, unmelded.subInfo.get(unmelded.subInfo.size() - 1).event); return true; } // Handle all normal cases @@ -235,9 +237,9 @@ public class ZonesHandler { } if (success) { if (event.getToZone() == Zone.BATTLEFIELD && event.getTarget() != null) { - event.getTarget().updateZoneChangeCounter(game); + event.getTarget().updateZoneChangeCounter(game, event); } else { - card.updateZoneChangeCounter(game); + card.updateZoneChangeCounter(game, event); } } return success; diff --git a/Mage/src/main/java/mage/game/command/Commander.java b/Mage/src/main/java/mage/game/command/Commander.java index 3831292c623..b89cbc22b5d 100644 --- a/Mage/src/main/java/mage/game/command/Commander.java +++ b/Mage/src/main/java/mage/game/command/Commander.java @@ -42,6 +42,7 @@ import mage.cards.Card; import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; +import mage.game.events.ZoneChangeEvent; import mage.util.GameLog; public class Commander implements CommandObject { @@ -214,8 +215,8 @@ public class Commander implements CommandObject { } @Override - public void updateZoneChangeCounter(Game game) { - card.updateZoneChangeCounter(game); + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { + card.updateZoneChangeCounter(game, event); } @Override diff --git a/Mage/src/main/java/mage/game/command/Emblem.java b/Mage/src/main/java/mage/game/command/Emblem.java index eb9acc3b3a0..cfe9fa14c23 100644 --- a/Mage/src/main/java/mage/game/command/Emblem.java +++ b/Mage/src/main/java/mage/game/command/Emblem.java @@ -41,6 +41,7 @@ import mage.abilities.costs.mana.ManaCostsImpl; import mage.cards.FrameStyle; import mage.constants.CardType; import mage.game.Game; +import mage.game.events.ZoneChangeEvent; import mage.util.GameLog; /** @@ -233,7 +234,7 @@ public class Emblem implements CommandObject { } @Override - public void updateZoneChangeCounter(Game game) { + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { throw new UnsupportedOperationException("Unsupported operation"); } diff --git a/Mage/src/main/java/mage/game/permanent/PermanentCard.java b/Mage/src/main/java/mage/game/permanent/PermanentCard.java index 30cb926552d..bf3b2ec798f 100644 --- a/Mage/src/main/java/mage/game/permanent/PermanentCard.java +++ b/Mage/src/main/java/mage/game/permanent/PermanentCard.java @@ -240,8 +240,8 @@ public class PermanentCard extends PermanentImpl { } @Override - public void updateZoneChangeCounter(Game game) { - card.updateZoneChangeCounter(game); + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { + card.updateZoneChangeCounter(game, event); zoneChangeCounter = card.getZoneChangeCounter(game); } diff --git a/Mage/src/main/java/mage/game/stack/Spell.java b/Mage/src/main/java/mage/game/stack/Spell.java index 7d3d7db703b..47cac645506 100644 --- a/Mage/src/main/java/mage/game/stack/Spell.java +++ b/Mage/src/main/java/mage/game/stack/Spell.java @@ -778,7 +778,7 @@ public class Spell extends StackObjImpl implements Card { } @Override - public void updateZoneChangeCounter(Game game) { + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { throw new UnsupportedOperationException("Unsupported operation"); } diff --git a/Mage/src/main/java/mage/game/stack/StackAbility.java b/Mage/src/main/java/mage/game/stack/StackAbility.java index 17e4bb29106..34f857fa6a5 100644 --- a/Mage/src/main/java/mage/game/stack/StackAbility.java +++ b/Mage/src/main/java/mage/game/stack/StackAbility.java @@ -58,6 +58,7 @@ import mage.constants.Zone; import mage.constants.ZoneDetail; import mage.game.Game; import mage.game.events.GameEvent; +import mage.game.events.ZoneChangeEvent; import mage.players.Player; import mage.target.Target; import mage.target.Targets; @@ -557,7 +558,7 @@ public class StackAbility extends StackObjImpl implements Ability { } @Override - public void updateZoneChangeCounter(Game game) { + public void updateZoneChangeCounter(Game game, ZoneChangeEvent event) { throw new UnsupportedOperationException("Not supported."); }