diff --git a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java index e2fbf2266b0..cf34bf7c7d0 100644 --- a/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java +++ b/Mage/src/mage/abilities/common/LimitedTimesPerTurnActivatedAbility.java @@ -42,6 +42,17 @@ import mage.util.CardUtil; */ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { + class ActivationInfo { + + public int turnNum; + public int activationCounter; + + public ActivationInfo(int turnNum, int activationCounter) { + this.turnNum = turnNum; + this.activationCounter = activationCounter; + } + } + private int maxActivationsPerTurn; public LimitedTimesPerTurnActivatedAbility(Zone zone, Effect effect, Cost cost) { @@ -61,8 +72,8 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { @Override public boolean canActivate(UUID playerId, Game game) { if (super.canActivate(playerId, game)) { - Integer activations = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game)); - return activations == null || activations < maxActivationsPerTurn; + ActivationInfo activationInfo = (ActivationInfo) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game)); + return activationInfo == null || activationInfo.turnNum != game.getTurnNum() || activationInfo.activationCounter < maxActivationsPerTurn; } return false; } @@ -71,24 +82,24 @@ public class LimitedTimesPerTurnActivatedAbility extends ActivatedAbilityImpl { public boolean activate(Game game, boolean noMana) { if (canActivate(this.controllerId, game)) { if (super.activate(game, noMana)) { - Integer activations = (Integer) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game)); - if (activations == null) { - activations = new Integer(1); + ActivationInfo activationInfo = (ActivationInfo) game.getState().getValue(CardUtil.getCardZoneString("activations", sourceId, game)); + if (activationInfo == null) { + activationInfo = new ActivationInfo(game.getTurnNum(), 1); } else { - activations++; + if (activationInfo.turnNum != game.getTurnNum()) { + activationInfo.turnNum = game.getTurnNum(); + activationInfo.activationCounter = 1; + } else { + activationInfo.activationCounter++; + } } - game.getState().setValue(CardUtil.getCardZoneString("activations", sourceId, game), activations); + game.getState().setValue(CardUtil.getCardZoneString("activations", sourceId, game), activationInfo); return true; } } return false; } - @Override - public void reset(Game game) { - game.getState().setValue(CardUtil.getCardZoneString("activations", sourceId, game), new Integer(0)); - } - @Override public boolean resolve(Game game) { return super.resolve(game); diff --git a/Mage/src/mage/abilities/keyword/ForecastAbility.java b/Mage/src/mage/abilities/keyword/ForecastAbility.java index 639a5e49a82..70aab4f93b0 100644 --- a/Mage/src/mage/abilities/keyword/ForecastAbility.java +++ b/Mage/src/mage/abilities/keyword/ForecastAbility.java @@ -70,7 +70,7 @@ public class ForecastAbility extends LimitedTimesPerTurnActivatedAbility { @Override public boolean canActivate(UUID playerId, Game game) { // May be activated only during the upkeep step of the card's owner - if (!game.getActivePlayerId().equals(controllerId) || !game.getStep().getType().equals(PhaseStep.UPKEEP)) { + if (!game.getActivePlayerId().equals(controllerId) || !PhaseStep.UPKEEP.equals(game.getStep().getType())) { return false; } return super.canActivate(playerId, game);