diff --git a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java
index e2fa750bf94..a14bb44b092 100644
--- a/Mage.Sets/src/mage/cards/a/AwakenerDruid.java
+++ b/Mage.Sets/src/mage/cards/a/AwakenerDruid.java
@@ -96,6 +96,7 @@ class AwakenerDruidToken extends TokenImpl {
super(token);
}
+ @Override
public AwakenerDruidToken copy() {
return new AwakenerDruidToken(this);
}
diff --git a/Mage.Sets/src/mage/cards/c/Charisma.java b/Mage.Sets/src/mage/cards/c/Charisma.java
index c2fe9091bcc..235ab9e8641 100644
--- a/Mage.Sets/src/mage/cards/c/Charisma.java
+++ b/Mage.Sets/src/mage/cards/c/Charisma.java
@@ -6,6 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToACreatureAttachedTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.common.AttachEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
@@ -16,6 +17,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.Zone;
import mage.target.TargetPermanent;
import mage.target.common.TargetCreaturePermanent;
@@ -40,8 +42,8 @@ public final class Charisma extends CardImpl {
this.addAbility(ability);
// Whenever enchanted creature deals damage to a creature, gain control of the other creature for as long as Charisma remains on the battlefield.
- Condition condition = SourceOnBattlefieldCondition.instance;
- ConditionalContinuousEffect conditionalEffect = new ConditionalContinuousEffect(new GainControlTargetEffect(Duration.Custom), condition, rule);
+ ConditionalContinuousEffect conditionalEffect = new ConditionalContinuousEffect(new GainControlTargetEffect(Duration.Custom),
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD), rule);
this.addAbility(new DealsDamageToACreatureAttachedTriggeredAbility(conditionalEffect, false, "enchanted creature", false, true));
}
diff --git a/Mage.Sets/src/mage/cards/c/CytoplastManipulator.java b/Mage.Sets/src/mage/cards/c/CytoplastManipulator.java
index fa4db9dfc26..4954ae6e4a9 100644
--- a/Mage.Sets/src/mage/cards/c/CytoplastManipulator.java
+++ b/Mage.Sets/src/mage/cards/c/CytoplastManipulator.java
@@ -6,6 +6,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.costs.mana.ManaCostsImpl;
import mage.abilities.decorator.ConditionalContinuousEffect;
@@ -47,7 +48,7 @@ public final class CytoplastManipulator extends CardImpl {
// {U}, {tap}: Gain control of target creature with a +1/+1 counter on it for as long as Cytoplast Manipulator remains on the battlefield.
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.Custom, true),
- SourceOnBattlefieldCondition.instance,
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
"gain control of target creature with a +1/+1 counter on it for as long as {this} remains on the battlefield");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl("{U}"));
ability.addCost(new TapSourceCost());
diff --git a/Mage.Sets/src/mage/cards/i/InfernalDenizen.java b/Mage.Sets/src/mage/cards/i/InfernalDenizen.java
index 7b162869c35..d5005c10b5c 100644
--- a/Mage.Sets/src/mage/cards/i/InfernalDenizen.java
+++ b/Mage.Sets/src/mage/cards/i/InfernalDenizen.java
@@ -7,6 +7,7 @@ import mage.abilities.Ability;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
import mage.abilities.common.SimpleActivatedAbility;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.costs.common.TapSourceCost;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.dynamicvalue.DynamicValue;
@@ -52,7 +53,7 @@ public final class InfernalDenizen extends CardImpl {
// {tap}: Gain control of target creature for as long as Infernal Denizen remains on the battlefield.
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.Custom, true),
- SourceOnBattlefieldCondition.instance,
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
"gain control of target creature for as long as {this} remains on the battlefield");
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, effect, new TapSourceCost());
ability.addTarget(new TargetCreaturePermanent());
diff --git a/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java b/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java
index 247fcad5090..c93e56b1394 100644
--- a/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java
+++ b/Mage.Sets/src/mage/cards/i/IntetTheDreamer.java
@@ -19,7 +19,7 @@ import mage.players.Player;
import mage.util.CardUtil;
import java.util.UUID;
-import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.decorator.ConditionalAsThoughEffect;
import mage.abilities.effects.ContinuousEffect;
import mage.abilities.effects.common.asthought.PlayFromNotOwnHandZoneTargetEffect;
@@ -83,11 +83,11 @@ class IntetTheDreamerExileEffect extends OneShotEffect {
card.setFaceDown(true, game);
controller.moveCardsToExile(card, source, game, false,
CardUtil.getExileZoneId(game, source.getSourceId(), sourceObject.getZoneChangeCounter(game)), // sourceObject must be used due to source not working correctly
- sourceObject.getIdName());
+ sourceObject.getIdName() + " (" + sourceObject.getZoneChangeCounter(game) + ")");
card.setFaceDown(true, game);
ContinuousEffect effect = new ConditionalAsThoughEffect(
- new PlayFromNotOwnHandZoneTargetEffect(Zone.EXILED, TargetController.YOU, Duration.Custom, true),
- SourceOnBattlefieldCondition.instance);
+ new PlayFromNotOwnHandZoneTargetEffect(Zone.EXILED, TargetController.YOU, Duration.Custom, true),
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD));
effect.setTargetPointer(new FixedTarget(card, game));
game.getState().addEffect(effect, source);
game.getState().setValue("Exiled_IntetTheDreamer" + card.getId(), Boolean.TRUE); // TODO This value will never be removed
@@ -130,10 +130,16 @@ class IntetTheDreamerLookEffect extends AsThoughEffectImpl {
Player controller = game.getPlayer(source.getControllerId());
if (controller != null) {
Card card = game.getCard(objectId);
- return (card != null
- && card.isFaceDown(game)
- && game.getExile().containsId(card.getId(), game)
- && Boolean.TRUE.equals(game.getState().getValue("Exiled_IntetTheDreamer" + card.getId())));
+ if (card != null) {
+ if (card.isFaceDown(game)
+ && game.getExile().containsId(card.getId(), game)
+ && Boolean.TRUE.equals(game.getState().getValue("Exiled_IntetTheDreamer" + card.getId()))) {
+ return true;
+ } else {
+ this.discard();
+ game.getState().setValue("Exiled_IntetTheDreamer" + card.getId(), null);
+ }
+ }
}
}
return false;
diff --git a/Mage.Sets/src/mage/cards/n/NekoTe.java b/Mage.Sets/src/mage/cards/n/NekoTe.java
index 3b056ae55c5..656ce23f3a6 100644
--- a/Mage.Sets/src/mage/cards/n/NekoTe.java
+++ b/Mage.Sets/src/mage/cards/n/NekoTe.java
@@ -6,6 +6,7 @@ import mage.abilities.Ability;
import mage.abilities.common.DealsDamageToACreatureAttachedTriggeredAbility;
import mage.abilities.common.DealsDamageToAPlayerAttachedTriggeredAbility;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect;
import mage.abilities.effects.ContinuousRuleModifyingEffect;
@@ -19,6 +20,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.Zone;
/**
*
@@ -33,7 +35,8 @@ public final class NekoTe extends CardImpl {
// Whenever equipped creature deals damage to a creature, tap that creature. That creature doesn't untap during its controller's untap step for as long as Neko-Te remains on the battlefield.
ContinuousRuleModifyingEffect skipUntapEffect = new DontUntapInControllersUntapStepTargetEffect(Duration.WhileOnBattlefield);
skipUntapEffect.setText("That creature doesn't untap during its controller's untap step for as long as {this} remains on the battlefield");
- ConditionalContinuousRuleModifyingEffect effect = new ConditionalContinuousRuleModifyingEffect(skipUntapEffect, SourceOnBattlefieldCondition.instance);
+ ConditionalContinuousRuleModifyingEffect effect = new ConditionalContinuousRuleModifyingEffect(skipUntapEffect,
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD));
Ability ability = new DealsDamageToACreatureAttachedTriggeredAbility(new TapTargetEffect("that creature"), false, "equipped creature", false, true);
ability.addEffect(effect);
this.addAbility(ability);
diff --git a/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java b/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java
index fa59c4dcc53..31934619f83 100644
--- a/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java
+++ b/Mage.Sets/src/mage/cards/s/ScarwoodBandits.java
@@ -26,6 +26,7 @@ import mage.target.common.TargetArtifactPermanent;
import mage.util.CardUtil;
import java.util.UUID;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
/**
* @author L_J
@@ -47,7 +48,7 @@ public final class ScarwoodBandits extends CardImpl {
new DoUnlessAnyOpponentPaysEffect(
new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.Custom, true),
- SourceOnBattlefieldCondition.instance,
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
"gain control of target artifact for as long as {this} remains on the battlefield"),
new GenericManaCost(2)),
new ManaCostsImpl("{2}{G}"));
diff --git a/Mage.Sets/src/mage/cards/s/SithMindseer.java b/Mage.Sets/src/mage/cards/s/SithMindseer.java
index 74a76a635f2..07fe6121a42 100644
--- a/Mage.Sets/src/mage/cards/s/SithMindseer.java
+++ b/Mage.Sets/src/mage/cards/s/SithMindseer.java
@@ -6,6 +6,8 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.HateCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
+import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
import mage.cards.CardImpl;
@@ -13,6 +15,7 @@ import mage.cards.CardSetInfo;
import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
+import mage.constants.Zone;
import mage.target.common.TargetCreaturePermanent;
import mage.watchers.common.LifeLossOtherFromCombatWatcher;
@@ -29,11 +32,16 @@ public final class SithMindseer extends CardImpl {
this.power = new MageInt(3);
this.toughness = new MageInt(3);
- // Hate — When Sith Mindseer enters the battlefield, if an opponent loses life from a source other than combat damage, gain control of target creature for as long as Sith Mindseer remains on the battlefield.
+ // Hate — When Sith Mindseer enters the battlefield, if an opponent loses life from a source other than combat damage,
+ // gain control of target creature for as long as Sith Mindseer remains on the battlefield.
Ability ability = new ConditionalInterveningIfTriggeredAbility(
- new EntersBattlefieldTriggeredAbility(new GainControlTargetEffect(Duration.WhileOnBattlefield)),
+ new EntersBattlefieldTriggeredAbility(new ConditionalContinuousEffect(
+ new GainControlTargetEffect(Duration.Custom, true),
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
+ "gain control of target creature for as long as {this} remains on the battlefield")),
HateCondition.instance,
- "Hate — When Sith Mindseer enters the battlefield, if an opponent loses life from a source other than combat damage, gain control of target creature for as long as Sith Mindseer remains on the battlefield.");
+ "Hate — When {this} enters the battlefield, if an opponent loses life from a source other than combat damage,"
+ + " gain control of target creature for as long as {this} remains on the battlefield.");
ability.addTarget(new TargetCreaturePermanent());
this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
diff --git a/Mage.Sets/src/mage/cards/s/Somnophore.java b/Mage.Sets/src/mage/cards/s/Somnophore.java
index 33a3b13a178..208db0abfbd 100644
--- a/Mage.Sets/src/mage/cards/s/Somnophore.java
+++ b/Mage.Sets/src/mage/cards/s/Somnophore.java
@@ -6,6 +6,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect;
import mage.abilities.effects.ContinuousRuleModifyingEffect;
import mage.abilities.effects.Effect;
@@ -44,7 +45,7 @@ public final class Somnophore extends CardImpl {
// Whenever Somnophore deals damage to a player, tap target creature that player controls. That creature doesn't untap during its controller's untap step for as long as Somnophore remains on the battlefield.
ContinuousRuleModifyingEffect skipUntapEffect = new DontUntapInControllersUntapStepTargetEffect(Duration.WhileOnBattlefield);
skipUntapEffect.setText("That creature doesn't untap during its controller's untap step for as long as {this} remains on the battlefield");
- ConditionalContinuousRuleModifyingEffect effect = new ConditionalContinuousRuleModifyingEffect(skipUntapEffect, SourceOnBattlefieldCondition.instance);
+ ConditionalContinuousRuleModifyingEffect effect = new ConditionalContinuousRuleModifyingEffect(skipUntapEffect, new SourceRemainsInZoneCondition(Zone.BATTLEFIELD));
Ability ability = new SomnophoreTriggeredAbility(new TapTargetEffect());
ability.addTarget(new TargetCreaturePermanent());
ability.addEffect(effect);
diff --git a/Mage.Sets/src/mage/cards/s/SowerOfTemptation.java b/Mage.Sets/src/mage/cards/s/SowerOfTemptation.java
index 3607841e7bf..9800a91148c 100644
--- a/Mage.Sets/src/mage/cards/s/SowerOfTemptation.java
+++ b/Mage.Sets/src/mage/cards/s/SowerOfTemptation.java
@@ -6,6 +6,7 @@ import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.EntersBattlefieldTriggeredAbility;
import mage.abilities.condition.common.SourceOnBattlefieldCondition;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.OneShotEffect;
import mage.abilities.effects.common.continuous.GainControlTargetEffect;
@@ -16,6 +17,7 @@ import mage.constants.CardType;
import mage.constants.SubType;
import mage.constants.Duration;
import mage.constants.Outcome;
+import mage.constants.Zone;
import mage.game.Game;
import mage.target.common.TargetCreaturePermanent;
@@ -78,7 +80,7 @@ class SowerOfTemptationGainControlEffect extends OneShotEffect {
public boolean apply(Game game, Ability source) {
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.Custom),
- SourceOnBattlefieldCondition.instance,
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
"gain control of target creature for as long as {this} remains on the battlefield");
game.addEffect(effect, source);
return false;
diff --git a/Mage.Sets/src/mage/cards/s/StromgaldSpy.java b/Mage.Sets/src/mage/cards/s/StromgaldSpy.java
index 94ead75870c..8bb0be3207d 100644
--- a/Mage.Sets/src/mage/cards/s/StromgaldSpy.java
+++ b/Mage.Sets/src/mage/cards/s/StromgaldSpy.java
@@ -5,6 +5,8 @@ import java.util.UUID;
import mage.MageInt;
import mage.abilities.Ability;
import mage.abilities.common.AttacksAndIsNotBlockedTriggeredAbility;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
+import mage.abilities.decorator.ConditionalContinuousEffect;
import mage.abilities.effects.ContinuousEffectImpl;
import mage.abilities.effects.common.continuous.AssignNoCombatDamageSourceEffect;
import mage.constants.SubType;
@@ -15,6 +17,7 @@ import mage.constants.Duration;
import mage.constants.Layer;
import mage.constants.Outcome;
import mage.constants.SubLayer;
+import mage.constants.Zone;
import mage.game.Game;
import mage.game.permanent.Permanent;
import mage.players.Player;
@@ -32,8 +35,14 @@ public final class StromgaldSpy extends CardImpl {
this.power = new MageInt(2);
this.toughness = new MageInt(4);
- // Whenever Stromgald Spy attacks and isn't blocked, you may have defending player play with their hand revealed for as long as Stromgald Spy remains on the battlefield. If you do, Stromgald Spy assigns no combat damage this turn.
- Ability ability = new AttacksAndIsNotBlockedTriggeredAbility(new StromgaldSpyEffect(), true, true);
+ // Whenever Stromgald Spy attacks and isn't blocked, you may have defending player play with their hand revealed
+ // for as long as Stromgald Spy remains on the battlefield. If you do, Stromgald Spy assigns no combat damage this turn.
+ Ability ability = new AttacksAndIsNotBlockedTriggeredAbility(
+ new ConditionalContinuousEffect(
+ new StromgaldSpyEffect(),
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
+ "you may have defending player play with their hand revealed for as long as {this} remains on the battlefield"),
+ true, true);
ability.addEffect(new AssignNoCombatDamageSourceEffect(Duration.EndOfTurn, true));
this.addAbility(ability);
}
@@ -51,8 +60,7 @@ public final class StromgaldSpy extends CardImpl {
class StromgaldSpyEffect extends ContinuousEffectImpl {
public StromgaldSpyEffect() {
- super(Duration.WhileOnBattlefield, Layer.PlayerEffects, SubLayer.NA, Outcome.Detriment);
- this.staticText = "you may have defending player play with their hand revealed for as long as Stromgald Spy remains on the battlefield";
+ super(Duration.Custom, Layer.PlayerEffects, SubLayer.NA, Outcome.Detriment);
}
public StromgaldSpyEffect(final StromgaldSpyEffect effect) {
diff --git a/Mage.Sets/src/mage/cards/t/TheAkroanWar.java b/Mage.Sets/src/mage/cards/t/TheAkroanWar.java
index 2a5cac325b9..19891d2612c 100644
--- a/Mage.Sets/src/mage/cards/t/TheAkroanWar.java
+++ b/Mage.Sets/src/mage/cards/t/TheAkroanWar.java
@@ -18,6 +18,7 @@ import mage.game.Game;
import mage.target.common.TargetCreaturePermanent;
import java.util.UUID;
+import mage.abilities.condition.common.SourceRemainsInZoneCondition;
/**
* @author TheElk801
@@ -42,8 +43,8 @@ public final class TheAkroanWar extends CardImpl {
SagaChapter.CHAPTER_I,
new ConditionalContinuousEffect(
new GainControlTargetEffect(Duration.Custom, true),
- SourceOnBattlefieldCondition.instance, "gain control of target creature " +
- "for as long as {this} remains on the battlefield"
+ new SourceRemainsInZoneCondition(Zone.BATTLEFIELD),
+ "gain control of target creature for as long as {this} remains on the battlefield"
), new TargetCreaturePermanent()
);
diff --git a/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java b/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java
new file mode 100644
index 00000000000..2d4e6a3d03c
--- /dev/null
+++ b/Mage/src/main/java/mage/abilities/condition/common/SourceRemainsInZoneCondition.java
@@ -0,0 +1,40 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package mage.abilities.condition.common;
+
+import mage.abilities.Ability;
+import mage.abilities.condition.Condition;
+import mage.constants.Zone;
+import mage.game.Game;
+
+/**
+ *
+ * @author LevelX2
+ */
+public class SourceRemainsInZoneCondition implements Condition {
+
+ private final Zone zone;
+ private int timesChangedZones = -1;
+
+ public SourceRemainsInZoneCondition(Zone zone) {
+ this.zone = zone;
+ this.timesChangedZones = -1;
+ }
+
+ @Override
+ public boolean apply(Game game, Ability source) {
+ if (timesChangedZones == -1) { // Only changed on first execution
+ timesChangedZones = game.getState().getZoneChangeCounter(source.getSourceId());
+ }
+ return (timesChangedZones == game.getState().getZoneChangeCounter(source.getSourceId())
+ && zone.equals(game.getState().getZone(source.getSourceId())));
+ }
+
+ @Override
+ public String toString() {
+ return "for as long as {this} remains on the " + zone.toString();
+ }
+}
diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java
index 1d0403aa9fc..357d41588e1 100644
--- a/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java
+++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalContinuousEffect.java
@@ -177,6 +177,7 @@ public class ConditionalContinuousEffect extends ContinuousEffectImpl {
/**
* Return all effects list, for tests only
+ * @return
*/
public List getAllEffects() {
List res = new ArrayList<>();
diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java
index f156e307f58..04f1e5d2a21 100644
--- a/Mage/src/main/java/mage/game/GameState.java
+++ b/Mage/src/main/java/mage/game/GameState.java
@@ -98,7 +98,7 @@ public class GameState implements Serializable, Copyable {
private Map zoneChangeCounter = new HashMap<>();
private Map copiedCards = new HashMap<>();
private int permanentOrderNumber;
- private Map usePowerInsteadOfToughnessForDamageLethalityFilters = new HashMap<>();
+ private final Map usePowerInsteadOfToughnessForDamageLethalityFilters = new HashMap<>();
private final Set commandersToStay = new HashSet<>();
private int applyEffectsCounter; // Upcounting number of each applyEffects execution