From 081ac7ca3c6ff824f58cab0c3a3f68b5398c518a Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Tue, 23 Apr 2019 16:05:34 +0400 Subject: [PATCH] Fixed Single Combat that it does not prevent cast on next turn; --- .../src/mage/cards/g/GideonBattleForged.java | 22 ++----- Mage.Sets/src/mage/cards/g/GideonJura.java | 12 ++-- Mage.Sets/src/mage/cards/o/OracleEnVec.java | 4 +- Mage.Sets/src/mage/cards/p/PeaceTalks.java | 4 +- Mage.Sets/src/mage/cards/r/RowanKenrith.java | 2 +- Mage.Sets/src/mage/cards/s/SingleCombat.java | 2 +- Mage.Sets/src/mage/cards/t/Taunt.java | 11 ++-- .../src/mage/cards/t/TreasureNabber.java | 37 ++---------- .../src/mage/cards/v/VraskaTheUnseen.java | 30 ++-------- Mage.Sets/src/mage/cards/w/WallOfDust.java | 2 +- .../abilities/effects/ContinuousEffect.java | 19 ++++-- .../effects/ContinuousEffectImpl.java | 60 ++++++++++++------- .../effects/ContinuousEffectsList.java | 12 ++-- .../common/combat/CantAttackYouAllEffect.java | 2 +- .../main/java/mage/constants/Duration.java | 2 +- 15 files changed, 94 insertions(+), 127 deletions(-) diff --git a/Mage.Sets/src/mage/cards/g/GideonBattleForged.java b/Mage.Sets/src/mage/cards/g/GideonBattleForged.java index f54e3445b75..b1957ada177 100644 --- a/Mage.Sets/src/mage/cards/g/GideonBattleForged.java +++ b/Mage.Sets/src/mage/cards/g/GideonBattleForged.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; @@ -16,12 +14,7 @@ import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; import mage.abilities.keyword.IndestructibleAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.TurnPhase; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.ControllerPredicate; import mage.game.Game; @@ -29,8 +22,9 @@ import mage.game.permanent.Permanent; import mage.game.permanent.token.TokenImpl; import mage.target.common.TargetCreaturePermanent; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class GideonBattleForged extends CardImpl { @@ -42,7 +36,7 @@ public final class GideonBattleForged extends CardImpl { } public GideonBattleForged(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.PLANESWALKER},""); + super(ownerId, setInfo, new CardType[]{CardType.PLANESWALKER}, ""); this.addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.GIDEON); @@ -98,6 +92,7 @@ class GideonBattleForgedToken extends TokenImpl { toughness = new MageInt(4); this.addAbility(IndestructibleAbility.getInstance()); } + public GideonBattleForgedToken(final GideonBattleForgedToken token) { super(token); } @@ -109,7 +104,6 @@ class GideonBattleForgedToken extends TokenImpl { class GideonBattleForgedAttacksIfAbleTargetEffect extends RequirementEffect { - int nextTurnTargetController = 0; protected MageObjectReference targetPermanentReference; public GideonBattleForgedAttacksIfAbleTargetEffect(Duration duration) { @@ -119,7 +113,6 @@ class GideonBattleForgedAttacksIfAbleTargetEffect extends RequirementEffect { public GideonBattleForgedAttacksIfAbleTargetEffect(final GideonBattleForgedAttacksIfAbleTargetEffect effect) { super(effect); - this.nextTurnTargetController = effect.nextTurnTargetController; this.targetPermanentReference = effect.targetPermanentReference; } @@ -137,10 +130,7 @@ class GideonBattleForgedAttacksIfAbleTargetEffect extends RequirementEffect { if (targetPermanent == null) { return true; } - if (nextTurnTargetController == 0 && startingTurn != game.getTurnNum() && game.isActivePlayer(targetPermanent.getControllerId())) { - nextTurnTargetController = game.getTurnNum(); - } - return game.getPhase().getType() == TurnPhase.END && nextTurnTargetController > 0 && game.getTurnNum() > nextTurnTargetController; + return game.getPhase().getType() == TurnPhase.END && game.getTurnNum() > getNextStartingControllerTurnNum(); } @Override diff --git a/Mage.Sets/src/mage/cards/g/GideonJura.java b/Mage.Sets/src/mage/cards/g/GideonJura.java index 12c783c9ed9..20c597978c9 100644 --- a/Mage.Sets/src/mage/cards/g/GideonJura.java +++ b/Mage.Sets/src/mage/cards/g/GideonJura.java @@ -1,6 +1,5 @@ package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; @@ -13,11 +12,7 @@ import mage.abilities.effects.common.PreventAllDamageToSourceEffect; import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.SubType; -import mage.constants.SuperType; -import mage.constants.TurnPhase; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.permanent.TappedPredicate; import mage.game.Game; @@ -26,8 +21,9 @@ import mage.game.permanent.token.TokenImpl; import mage.target.common.TargetCreaturePermanent; import mage.target.common.TargetOpponent; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public final class GideonJura extends CardImpl { @@ -127,7 +123,7 @@ class GideonJuraEffect extends RequirementEffect { @Override public boolean isInactive(Ability source, Game game) { - return (startingTurn != game.getTurnNum() + return (getStartingTurnNum() != game.getTurnNum() && (game.getPhase().getType() == TurnPhase.END && game.isActivePlayer(source.getFirstTarget()))) || // 6/15/2010: If a creature controlled by the affected player can't attack Gideon Jura (because he's no longer on the battlefield, for example), that player may have it attack you, another one of your planeswalkers, or nothing at all. diff --git a/Mage.Sets/src/mage/cards/o/OracleEnVec.java b/Mage.Sets/src/mage/cards/o/OracleEnVec.java index 768e057bfe4..4338c19a856 100644 --- a/Mage.Sets/src/mage/cards/o/OracleEnVec.java +++ b/Mage.Sets/src/mage/cards/o/OracleEnVec.java @@ -132,7 +132,7 @@ class OracleEnVecMustAttackRequirementEffect extends RequirementEffect { @Override public boolean isInactive(Ability source, Game game) { - return startingTurn != game.getTurnNum() + return getStartingTurnNum() != game.getTurnNum() && (game.getPhase().getType() == TurnPhase.END && game.isActivePlayer(this.getTargetPointer().getFirst(game, source))); } @@ -171,7 +171,7 @@ class OracleEnVecCantAttackRestrictionEffect extends RestrictionEffect { @Override public boolean isInactive(Ability source, Game game) { - return startingTurn != game.getTurnNum() + return getStartingTurnNum() != game.getTurnNum() && (game.getPhase().getType() == TurnPhase.END && game.isActivePlayer(this.getTargetPointer().getFirst(game, source))); } diff --git a/Mage.Sets/src/mage/cards/p/PeaceTalks.java b/Mage.Sets/src/mage/cards/p/PeaceTalks.java index ef9811c5400..4201fc1d837 100644 --- a/Mage.Sets/src/mage/cards/p/PeaceTalks.java +++ b/Mage.Sets/src/mage/cards/p/PeaceTalks.java @@ -97,7 +97,7 @@ class PeaceTalksCantAttackEffect extends RestrictionEffect { @Override public boolean isInactive(Ability source, Game game) { - if (startingTurn + 2 == game.getTurnNum()) { + if (getStartingTurnNum() + 2 <= game.getTurnNum()) { this.discard(); return true; } @@ -149,7 +149,7 @@ class PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities ex @Override public boolean isInactive(Ability source, Game game) { - if (startingTurn + 2 == game.getTurnNum()) { + if (getStartingTurnNum() + 2 <= game.getTurnNum()) { this.discard(); return true; } diff --git a/Mage.Sets/src/mage/cards/r/RowanKenrith.java b/Mage.Sets/src/mage/cards/r/RowanKenrith.java index 02e58898614..422dc96d90c 100644 --- a/Mage.Sets/src/mage/cards/r/RowanKenrith.java +++ b/Mage.Sets/src/mage/cards/r/RowanKenrith.java @@ -101,7 +101,7 @@ class RowanKenrithAttackEffect extends RequirementEffect { @Override public boolean isInactive(Ability source, Game game) { - return (startingTurn != game.getTurnNum() + return (getStartingTurnNum() != game.getTurnNum() && (game.getPhase().getType() == TurnPhase.END && game.isActivePlayer(source.getFirstTarget()))) || // 6/15/2010: If a creature controlled by the affected player can't attack Gideon Jura (because he's no longer on the battlefield, for example), that player may have it attack you, another one of your planeswalkers, or nothing at all. diff --git a/Mage.Sets/src/mage/cards/s/SingleCombat.java b/Mage.Sets/src/mage/cards/s/SingleCombat.java index e352cccdb48..d4c235beb12 100644 --- a/Mage.Sets/src/mage/cards/s/SingleCombat.java +++ b/Mage.Sets/src/mage/cards/s/SingleCombat.java @@ -97,7 +97,7 @@ class SingleCombatEffect extends OneShotEffect { class SingleCombatRestrictionEffect extends ContinuousRuleModifyingEffectImpl { SingleCombatRestrictionEffect() { - super(Duration.UntilYourNextTurn, Outcome.Neutral); + super(Duration.UntilEndOfYourNextTurn, Outcome.Neutral); staticText = "Players can't cast creature or planeswalker spells until the end of your next turn."; } diff --git a/Mage.Sets/src/mage/cards/t/Taunt.java b/Mage.Sets/src/mage/cards/t/Taunt.java index cff6d3e77c2..56478052a34 100644 --- a/Mage.Sets/src/mage/cards/t/Taunt.java +++ b/Mage.Sets/src/mage/cards/t/Taunt.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.RequirementEffect; import mage.cards.CardImpl; @@ -13,14 +11,15 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.target.TargetPlayer; +import java.util.UUID; + /** - * * @author emerald000 */ public final class Taunt extends CardImpl { public Taunt(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{U}"); + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{U}"); // During target player's next turn, creatures that player controls attack you if able. this.getSpellAbility().addEffect(new TauntEffect()); @@ -60,9 +59,9 @@ class TauntEffect extends RequirementEffect { @Override public boolean isInactive(Ability source, Game game) { - return startingTurn != game.getTurnNum() && + return getStartingTurnNum() != game.getTurnNum() && (game.getPhase().getType() == TurnPhase.END && - game.isActivePlayer(this.getTargetPointer().getFirst(game, source))); + game.isActivePlayer(this.getTargetPointer().getFirst(game, source))); } @Override diff --git a/Mage.Sets/src/mage/cards/t/TreasureNabber.java b/Mage.Sets/src/mage/cards/t/TreasureNabber.java index b851dbd5747..ba23895c9df 100644 --- a/Mage.Sets/src/mage/cards/t/TreasureNabber.java +++ b/Mage.Sets/src/mage/cards/t/TreasureNabber.java @@ -1,21 +1,12 @@ package mage.cards.t; -import java.util.List; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.ContinuousEffectImpl; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.PhaseStep; -import mage.constants.SubLayer; -import mage.constants.SubType; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -23,8 +14,10 @@ import mage.game.permanent.Permanent; import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTargets; +import java.util.List; +import java.util.UUID; + /** - * * @author spjspj */ public final class TreasureNabber extends CardImpl { @@ -94,18 +87,8 @@ class TreasureNabberEffect extends ContinuousEffectImpl { protected FixedTargets fixedTargets; TreasureNabberEffect() { - super(Duration.Custom, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); + super(Duration.UntilEndOfYourNextTurn, Layer.ControlChangingEffects_2, SubLayer.NA, Outcome.GainControl); this.staticText = "gain control of that artifact until the end of your next turn"; - startingTurn = 0; - } - - @Override - public void init(Ability source, Game game) { - super.init(source, game); - startingTurn = game.getTurnNum(); - if (game.getPhase().getStep().getType() == PhaseStep.END_TURN) { - startingTurn = game.getTurnNum() + 1; - } } TreasureNabberEffect(final TreasureNabberEffect effect) { @@ -118,16 +101,6 @@ class TreasureNabberEffect extends ContinuousEffectImpl { return new TreasureNabberEffect(this); } - @Override - public boolean isInactive(Ability source, Game game) { - if (startingTurn != 0 && game.getTurnNum() >= startingTurn && game.getPhase().getStep().getType() == PhaseStep.END_TURN) { - if (game.isActivePlayer(source.getControllerId())) { - return true; - } - } - return false; - } - @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(getTargetPointer().getFirst(game, source)); diff --git a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java index 343271b27d5..a5edd3bed00 100644 --- a/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java +++ b/Mage.Sets/src/mage/cards/v/VraskaTheUnseen.java @@ -1,7 +1,5 @@ - package mage.cards.v; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; import mage.abilities.TriggeredAbilityImpl; @@ -12,14 +10,7 @@ import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.SubType; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.constants.SuperType; -import mage.constants.Zone; +import mage.constants.*; import mage.game.Game; import mage.game.events.DamagedPlaneswalkerEvent; import mage.game.events.GameEvent; @@ -29,15 +20,15 @@ import mage.game.permanent.token.AssassinToken; import mage.target.common.TargetNonlandPermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * If an effect creates a copy of one of the Assassin creature tokens, the copy * will also have the triggered ability. - * + *

* Each Assassin token's triggered ability will trigger whenever it deals combat * damage to any player, including you. * - * * @author LevelX2 */ public final class VraskaTheUnseen extends CardImpl { @@ -79,7 +70,6 @@ class VraskaTheUnseenGainAbilityEffect extends ContinuousEffectImpl { super(Duration.Custom, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.AddAbility); this.ability = ability; staticText = "Until your next turn, whenever a creature deals combat damage to {this}, destroy that creature"; - startingTurn = 0; } public VraskaTheUnseenGainAbilityEffect(final VraskaTheUnseenGainAbilityEffect effect) { @@ -87,12 +77,6 @@ class VraskaTheUnseenGainAbilityEffect extends ContinuousEffectImpl { this.ability = effect.ability.copy(); } - @Override - public void init(Ability source, Game game) { - super.init(source, game); //To change body of generated methods, choose Tools | Templates. - startingTurn = game.getTurnNum(); - } - @Override public VraskaTheUnseenGainAbilityEffect copy() { return new VraskaTheUnseenGainAbilityEffect(this); @@ -110,10 +94,8 @@ class VraskaTheUnseenGainAbilityEffect extends ContinuousEffectImpl { @Override public boolean isInactive(Ability source, Game game) { - if (startingTurn != 0 && game.getTurnNum() != startingTurn) { - if (game.isActivePlayer(source.getControllerId())) { - return true; - } + if (getStartingTurnNum() != 0 && game.getTurnNum() != getStartingTurnNum()) { + return game.isActivePlayer(source.getControllerId()); } return false; } diff --git a/Mage.Sets/src/mage/cards/w/WallOfDust.java b/Mage.Sets/src/mage/cards/w/WallOfDust.java index f7517a38add..7db60d9e584 100644 --- a/Mage.Sets/src/mage/cards/w/WallOfDust.java +++ b/Mage.Sets/src/mage/cards/w/WallOfDust.java @@ -75,7 +75,7 @@ class WallOfDustRestrictionEffect extends RestrictionEffect { if (targetPermanent == null) { return true; } - if (nextTurnTargetController == 0 && startingTurn != game.getTurnNum() && game.isActivePlayer(targetPermanent.getControllerId())) { + if (nextTurnTargetController == 0 && getStartingTurnNum() != game.getTurnNum() && game.isActivePlayer(targetPermanent.getControllerId())) { nextTurnTargetController = game.getTurnNum(); } return game.getPhase().getType() == TurnPhase.END && nextTurnTargetController > 0 && game.getTurnNum() > nextTurnTargetController; diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousEffect.java b/Mage/src/main/java/mage/abilities/effects/ContinuousEffect.java index b6a9288166f..9ecb8b91856 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousEffect.java @@ -1,10 +1,5 @@ - package mage.abilities.effects; -import java.util.EnumSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; import mage.MageObjectReference; import mage.abilities.Ability; import mage.constants.DependencyType; @@ -13,8 +8,12 @@ import mage.constants.Layer; import mage.constants.SubLayer; import mage.game.Game; +import java.util.EnumSet; +import java.util.List; +import java.util.Set; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public interface ContinuousEffect extends Effect { @@ -59,6 +58,14 @@ public interface ContinuousEffect extends Effect { void addDependedToType(DependencyType dependencyType); + void setStartingTurnNum(Game game, UUID startingController); + + int getStartingTurnNum(); + + int getNextStartingControllerTurnNum(); + + UUID getStartingController(); + @Override void newId(); diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousEffectImpl.java b/Mage/src/main/java/mage/abilities/effects/ContinuousEffectImpl.java index f908f16fd99..dc72e9d494b 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousEffectImpl.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousEffectImpl.java @@ -1,12 +1,5 @@ - package mage.abilities.effects; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.MageSingleton; @@ -14,16 +7,12 @@ import mage.abilities.dynamicvalue.DynamicValue; import mage.abilities.dynamicvalue.common.DomainValue; import mage.abilities.dynamicvalue.common.SignInversionDynamicValue; import mage.abilities.dynamicvalue.common.StaticValue; -import mage.constants.AbilityType; -import mage.constants.DependencyType; -import mage.constants.Duration; -import mage.constants.EffectType; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; +import mage.constants.*; import mage.game.Game; import mage.players.Player; +import java.util.*; + /** * @author BetaSteward_at_googlemail.com */ @@ -50,8 +39,9 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu protected boolean characterDefining = false; // until your next turn - protected int startingTurn; - protected UUID startingControllerId; + private int startingTurnNum; + private int yourNextTurnNum; + private UUID startingControllerId; public ContinuousEffectImpl(Duration duration, Outcome outcome) { super(outcome); @@ -79,7 +69,8 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu this.affectedObjectsSet = effect.affectedObjectsSet; this.affectedObjectList.addAll(effect.affectedObjectList); this.temporary = effect.temporary; - this.startingTurn = effect.startingTurn; + this.startingTurnNum = effect.startingTurnNum; + this.yourNextTurnNum = effect.yourNextTurnNum; this.startingControllerId = effect.startingControllerId; this.dependencyTypes = effect.dependencyTypes; this.dependendToTypes = effect.dependendToTypes; @@ -170,17 +161,44 @@ public abstract class ContinuousEffectImpl extends EffectImpl implements Continu this.affectedObjectsSet = true; } } - startingTurn = game.getTurnNum(); - startingControllerId = source.getControllerId(); + setStartingTurnNum(game, source.getControllerId()); + } + + @Override + public void setStartingTurnNum(Game game, UUID startingController) { + this.startingControllerId = startingController; + this.startingTurnNum = game.getTurnNum(); + this.yourNextTurnNum = game.isActivePlayer(startingControllerId) ? startingTurnNum + 2 : startingTurnNum + 1; + } + + public int getStartingTurnNum() { + return this.startingTurnNum; + } + + public int getNextStartingControllerTurnNum() { + return this.yourNextTurnNum; + } + + public UUID getStartingController() { + return this.startingControllerId; } @Override public boolean isInactive(Ability source, Game game) { - if (duration == Duration.UntilYourNextTurn) { + if (duration == Duration.UntilYourNextTurn || duration == Duration.UntilEndOfYourNextTurn) { Player player = game.getPlayer(startingControllerId); if (player != null) { if (player.isInGame()) { - return game.isActivePlayer(startingControllerId) && game.getTurnNum() != startingTurn; + boolean canDelete = false; + switch (duration) { + case UntilYourNextTurn: + canDelete = game.getTurnNum() >= yourNextTurnNum; + break; + case UntilEndOfYourNextTurn: + canDelete = (game.getTurnNum() > yourNextTurnNum) + || (game.getTurnNum() == yourNextTurnNum && game.getStep().getType().isAfter(PhaseStep.END_TURN)); + } + return canDelete; } return player.hasReachedNextTurnAfterLeaving(); } diff --git a/Mage/src/main/java/mage/abilities/effects/ContinuousEffectsList.java b/Mage/src/main/java/mage/abilities/effects/ContinuousEffectsList.java index 69837a16b71..524a1eaa9a8 100644 --- a/Mage/src/main/java/mage/abilities/effects/ContinuousEffectsList.java +++ b/Mage/src/main/java/mage/abilities/effects/ContinuousEffectsList.java @@ -1,6 +1,5 @@ package mage.abilities.effects; -import java.util.*; import mage.abilities.Ability; import mage.abilities.MageSingleton; import mage.constants.Duration; @@ -8,6 +7,8 @@ import mage.constants.Zone; import mage.game.Game; import org.apache.log4j.Logger; +import java.util.*; + /** * @param * @author BetaSteward_at_googlemail.com @@ -41,7 +42,7 @@ public class ContinuousEffectsList extends ArrayList } public void removeEndOfTurnEffects() { - for (Iterator i = this.iterator(); i.hasNext();) { + for (Iterator i = this.iterator(); i.hasNext(); ) { T entry = i.next(); if (entry.getDuration() == Duration.EndOfTurn) { i.remove(); @@ -52,7 +53,7 @@ public class ContinuousEffectsList extends ArrayList public void removeEndOfCombatEffects() { - for (Iterator i = this.iterator(); i.hasNext();) { + for (Iterator i = this.iterator(); i.hasNext(); ) { T entry = i.next(); if (entry.getDuration() == Duration.EndOfCombat) { i.remove(); @@ -62,7 +63,7 @@ public class ContinuousEffectsList extends ArrayList } public void removeInactiveEffects(Game game) { - for (Iterator i = this.iterator(); i.hasNext();) { + for (Iterator i = this.iterator(); i.hasNext(); ) { T entry = i.next(); if (isInactive(entry, game)) { i.remove(); @@ -102,6 +103,7 @@ public class ContinuousEffectsList extends ArrayList break; case Custom: case UntilYourNextTurn: + case UntilEndOfYourNextTurn: if (effect.isInactive(ability, game)) { it.remove(); } @@ -151,7 +153,7 @@ public class ContinuousEffectsList extends ArrayList abilities.removeAll(abilitiesToRemove); } if (abilities == null || abilities.isEmpty()) { - for (Iterator iterator = this.iterator(); iterator.hasNext();) { + for (Iterator iterator = this.iterator(); iterator.hasNext(); ) { ContinuousEffect effect = iterator.next(); if (effect.getId().equals(effectIdToRemove)) { iterator.remove(); diff --git a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java index 2df6a416e68..b47fd8d748b 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/combat/CantAttackYouAllEffect.java @@ -33,7 +33,7 @@ public class CantAttackYouAllEffect extends RestrictionEffect { this.alsoPlaneswalker = alsoPlaneswalker; staticText = filterAttacker.getMessage() + " can't attack you" + (alsoPlaneswalker ? " or a planeswalker you control" : "") - + (duration == Duration.UntilYourNextTurn ? " until your next turn" : ""); + + (duration == Duration.UntilYourNextTurn || duration == Duration.UntilEndOfYourNextTurn ? " " + duration.toString() : ""); } CantAttackYouAllEffect(final CantAttackYouAllEffect effect) { diff --git a/Mage/src/main/java/mage/constants/Duration.java b/Mage/src/main/java/mage/constants/Duration.java index 1c462cbb3df..0ec5060ed06 100644 --- a/Mage/src/main/java/mage/constants/Duration.java +++ b/Mage/src/main/java/mage/constants/Duration.java @@ -1,7 +1,6 @@ package mage.constants; /** - * * @author North */ public enum Duration { @@ -12,6 +11,7 @@ public enum Duration { WhileInGraveyard("", false), EndOfTurn("until end of turn", true), UntilYourNextTurn("until your next turn", true), + UntilEndOfYourNextTurn("until the end of your next turn", true), UntilSourceLeavesBattlefield("until {source} leaves the battlefield", true), // supported for continuous layered effects EndOfCombat("until end of combat", true), EndOfStep("until end of phase step", true),