Add Event to the signature of updateZoneChangeCounter.

This is required to Implement Skullbriar, the Walking Grave
This commit is contained in:
Samuel Sandeen 2016-09-10 17:45:26 -04:00
parent d53f751711
commit cdff9bae78
10 changed files with 26 additions and 20 deletions

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -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");
}

View file

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

View file

@ -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");
}

View file

@ -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.");
}