diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/Reciprocate.java b/Mage.Sets/src/mage/sets/championsofkamigawa/Reciprocate.java index c35c223381d..3bc51cb49e6 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/Reciprocate.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/Reciprocate.java @@ -31,13 +31,12 @@ package mage.sets.championsofkamigawa; import java.util.HashSet; import java.util.Set; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.effects.common.ExileTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -46,7 +45,7 @@ import mage.target.common.TargetCreaturePermanent; import mage.watchers.common.PlayerDamagedBySourceWatcher; /** - * @author LevelX + * @author LevelX2 */ public class Reciprocate extends CardImpl { @@ -84,7 +83,7 @@ class ReciprocateTarget> extends TargetPerm @Override public boolean canTarget(UUID id, Ability source, Game game) { PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource",source.getControllerId()); - if (watcher != null && watcher.damageSources.contains(id)) { + if (watcher != null && watcher.hasSourceDoneDamage(id, game)) { return super.canTarget(id, source, game); } return false; @@ -97,7 +96,7 @@ class ReciprocateTarget> extends TargetPerm PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", sourceControllerId); for (UUID targetId : availablePossibleTargets) { Permanent permanent = game.getPermanent(targetId); - if(permanent != null && watcher != null && watcher.damageSources.contains(targetId)){ + if(permanent != null && watcher != null && watcher.hasSourceDoneDamage(targetId, game)){ possibleTargets.add(targetId); } } @@ -115,7 +114,7 @@ class ReciprocateTarget> extends TargetPerm PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", sourceControllerId); for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, sourceId, game)) { if (!targets.containsKey(permanent.getId()) && permanent.canBeTargetedBy(targetSource, sourceControllerId, game) - && watcher != null && watcher.damageSources.contains(permanent.getId())) { + && watcher != null && watcher.hasSourceDoneDamage(permanent.getId(), game)) { count++; if (count >= remainingTargets) { return true; diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/WickedAkuba.java b/Mage.Sets/src/mage/sets/championsofkamigawa/WickedAkuba.java index 828d69385ed..c95d6be99be 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/WickedAkuba.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/WickedAkuba.java @@ -28,17 +28,16 @@ package mage.sets.championsofkamigawa; import java.util.UUID; - -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ColoredManaCost; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.cards.CardImpl; +import mage.constants.CardType; import mage.constants.ColoredManaSymbol; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.FilterPlayer; import mage.filter.predicate.ObjectSourcePlayer; import mage.filter.predicate.ObjectSourcePlayerPredicate; @@ -89,8 +88,8 @@ class WickedAkubaPredicate implements ObjectSourcePlayerPredicate input, Game game) { PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", input.getObject().getId()); - if (watcher != null && watcher.damageSources.contains(input.getSourceId())) { - return true; + if (watcher != null) { + return watcher.hasSourceDoneDamage(input.getSourceId(), game); } return false; diff --git a/Mage.Sets/src/mage/sets/conflux/GiltspireAvenger.java b/Mage.Sets/src/mage/sets/conflux/GiltspireAvenger.java index 6979300bda0..61bc2cbe6a0 100644 --- a/Mage.Sets/src/mage/sets/conflux/GiltspireAvenger.java +++ b/Mage.Sets/src/mage/sets/conflux/GiltspireAvenger.java @@ -30,9 +30,6 @@ package mage.sets.conflux; import java.util.HashSet; import java.util.Set; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Rarity; -import mage.constants.Zone; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; @@ -41,6 +38,9 @@ import mage.abilities.costs.common.TapSourceCost; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.keyword.ExaltedAbility; import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; @@ -48,7 +48,6 @@ import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; import mage.watchers.common.PlayerDamagedBySourceWatcher; - /** * * @author BetaSteward_at_googlemail.com @@ -103,7 +102,7 @@ class GiltspireAvengerTarget> extends Targe @Override public boolean canTarget(UUID id, Ability source, Game game) { PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource",source.getControllerId()); - if (watcher != null && watcher.damageSources.contains(id)) { + if (watcher != null && watcher.hasSourceDoneDamage(id, game)) { return super.canTarget(id, source, game); } return false; @@ -116,7 +115,7 @@ class GiltspireAvengerTarget> extends Targe PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", sourceControllerId); for (UUID targetId : availablePossibleTargets) { Permanent permanent = game.getPermanent(targetId); - if(permanent != null && watcher != null && watcher.damageSources.contains(targetId)){ + if(permanent != null && watcher != null && watcher.hasSourceDoneDamage(targetId, game)){ possibleTargets.add(targetId); } } @@ -134,7 +133,7 @@ class GiltspireAvengerTarget> extends Targe PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", sourceControllerId); for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, sourceControllerId, sourceId, game)) { if (!targets.containsKey(permanent.getId()) && permanent.canBeTargetedBy(targetSource, sourceControllerId, game) - && watcher != null && watcher.damageSources.contains(permanent.getId())) { + && watcher != null && watcher.hasSourceDoneDamage(permanent.getId(), game)) { count++; if (count >= remainingTargets) { return true; diff --git a/Mage/src/mage/abilities/condition/common/DealtDamageToAnOpponent.java b/Mage/src/mage/abilities/condition/common/DealtDamageToAnOpponent.java index c185837e206..192d0cf5715 100644 --- a/Mage/src/mage/abilities/condition/common/DealtDamageToAnOpponent.java +++ b/Mage/src/mage/abilities/condition/common/DealtDamageToAnOpponent.java @@ -45,8 +45,8 @@ public class DealtDamageToAnOpponent implements Condition { public boolean apply(Game game, Ability source) { for (UUID opponentId: game.getOpponents(source.getControllerId())) { PlayerDamagedBySourceWatcher watcher = (PlayerDamagedBySourceWatcher) game.getState().getWatchers().get("PlayerDamagedBySource", opponentId); - if (watcher != null && watcher.damageSources.contains(source.getSourceId())) { - return true; + if (watcher != null) { + return watcher.hasSourceDoneDamage(source.getSourceId(), game); } } return false; diff --git a/Mage/src/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java b/Mage/src/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java index fcb90b1a029..6e85fa29ba6 100644 --- a/Mage/src/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java +++ b/Mage/src/mage/filter/predicate/permanent/DamagedPlayerThisTurnPredicate.java @@ -57,15 +57,15 @@ public class DamagedPlayerThisTurnPredicate implements ObjectPlayerPredicate { - public List damageSources = new ArrayList(); + private Set damageSourceIds = new HashSet(); public PlayerDamagedBySourceWatcher(UUID playerId) { super("PlayerDamagedBySource", WatcherScope.PLAYER); - setControllerId(playerId); + setControllerId(playerId); } public PlayerDamagedBySourceWatcher(final PlayerDamagedBySourceWatcher watcher) { super(watcher); - this.damageSources.addAll(watcher.damageSources); + this.damageSourceIds.addAll(watcher.damageSourceIds); } @Override @@ -64,15 +64,27 @@ public class PlayerDamagedBySourceWatcher extends WatcherImpl