diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java index d5e096a39e..9f0b9e00d4 100644 --- a/Mage/src/main/java/mage/abilities/AbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java @@ -58,7 +58,7 @@ public abstract class AbilityImpl implements Ability { protected ManaCosts<ManaCost> manaCostsToPay; protected Costs<Cost> costs; protected Costs<Cost> optionalCosts; - protected Modes modes; + protected Modes modes; // access to it by GetModes only (it's can be override by some abilities) protected Zone zone; protected String name; protected AbilityWord abilityWord; @@ -70,7 +70,7 @@ public abstract class AbilityImpl implements Ability { protected boolean activated = false; protected boolean worksFaceDown = false; protected int sourceObjectZoneChangeCounter; - protected List<Watcher> watchers = new ArrayList<>(); + protected List<Watcher> watchers = new ArrayList<>(); // access to it by GetWatchers only (it's can be override by some abilities) protected List<Ability> subAbilities = null; protected boolean canFizzle = true; protected TargetAdjuster targetAdjuster = null; @@ -102,7 +102,7 @@ public abstract class AbilityImpl implements Ability { this.manaCostsToPay = ability.manaCostsToPay.copy(); this.costs = ability.costs.copy(); this.optionalCosts = ability.optionalCosts.copy(); - for (Watcher watcher : ability.watchers) { + for (Watcher watcher : ability.getWatchers()) { watchers.add(watcher.copy()); } @@ -263,8 +263,9 @@ public abstract class AbilityImpl implements Ability { this.getManaCostsToPay().clear(); } } - if (modes.getAdditionalCost() != null) { - modes.getAdditionalCost().addOptionalAdditionalModeCosts(this, game); + + if (getModes().getAdditionalCost() != null) { + getModes().getAdditionalCost().addOptionalAdditionalModeCosts(this, game); } // 20130201 - 601.2b // If the spell has alternative or additional costs that will be paid as it's being cast such @@ -656,7 +657,7 @@ public abstract class AbilityImpl implements Ability { @Override public void setControllerId(UUID controllerId) { this.controllerId = controllerId; - for (Watcher watcher : watchers) { + for (Watcher watcher : getWatchers()) { watcher.setControllerId(controllerId); } @@ -684,7 +685,7 @@ public abstract class AbilityImpl implements Ability { subAbility.setSourceId(sourceId); } } - for (Watcher watcher : watchers) { + for (Watcher watcher : getWatchers()) { watcher.setSourceId(sourceId); } @@ -757,7 +758,7 @@ public abstract class AbilityImpl implements Ability { watcher.setSourceId(this.sourceId); watcher.setControllerId(this.controllerId); - watchers.add(watcher); + getWatchers().add(watcher); } @Override diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java index c84a9871c6..1cdc2b3169 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalInterveningIfTriggeredAbility.java @@ -9,6 +9,9 @@ import mage.abilities.effects.Effects; import mage.constants.EffectType; import mage.game.Game; import mage.game.events.GameEvent; +import mage.watchers.Watcher; + +import java.util.List; /** * Adds condition to {@link mage.abilities.effects.ContinuousEffect}. Acts as @@ -37,7 +40,6 @@ public class ConditionalInterveningIfTriggeredAbility extends TriggeredAbilityIm this.modes = ability.getModes(); this.condition = condition; this.abilityText = text; - this.watchers = ability.getWatchers(); } public ConditionalInterveningIfTriggeredAbility(final ConditionalInterveningIfTriggeredAbility triggered) { @@ -45,7 +47,6 @@ public class ConditionalInterveningIfTriggeredAbility extends TriggeredAbilityIm this.ability = triggered.ability.copy(); this.condition = triggered.condition; this.abilityText = triggered.abilityText; - this.watchers = triggered.watchers; } @Override @@ -93,6 +94,16 @@ public class ConditionalInterveningIfTriggeredAbility extends TriggeredAbilityIm return ability.getModes(); } + @Override + public List<Watcher> getWatchers() { + return ability.getWatchers(); + } + + @Override + public void addWatcher(Watcher watcher) { + ability.addWatcher(watcher); + } + @Override public Effects getEffects(Game game, EffectType effectType) { return ability.getEffects(game, effectType); diff --git a/Mage/src/main/java/mage/abilities/decorator/ConditionalTriggeredAbility.java b/Mage/src/main/java/mage/abilities/decorator/ConditionalTriggeredAbility.java index b77c66df9d..f3e347292f 100644 --- a/Mage/src/main/java/mage/abilities/decorator/ConditionalTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/decorator/ConditionalTriggeredAbility.java @@ -9,6 +9,9 @@ import mage.abilities.effects.Effects; import mage.constants.EffectType; import mage.game.Game; import mage.game.events.GameEvent; +import mage.watchers.Watcher; + +import java.util.List; /** * Adds condition to {@link mage.abilities.effects.ContinuousEffect}. Acts as @@ -34,7 +37,6 @@ public class ConditionalTriggeredAbility extends TriggeredAbilityImpl { public ConditionalTriggeredAbility(TriggeredAbility ability, Condition condition, String text) { super(ability.getZone(), null); this.ability = ability; - this.modes = ability.getModes(); this.condition = condition; this.abilityText = text; } @@ -86,6 +88,16 @@ public class ConditionalTriggeredAbility extends TriggeredAbilityImpl { return ability.getModes(); } + @Override + public List<Watcher> getWatchers() { + return ability.getWatchers(); + } + + @Override + public void addWatcher(Watcher watcher) { + ability.addWatcher(watcher); + } + @Override public Effects getEffects(Game game, EffectType effectType) { return ability.getEffects(game, effectType);