diff --git a/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java b/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java
index de6cebd5d10..b76c2c7bd88 100644
--- a/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java
+++ b/Mage.Sets/src/mage/sets/starwars/AsajjVentress.java
@@ -44,7 +44,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -76,7 +76,7 @@ public class AsajjVentress extends CardImpl {
HateCondition.getInstance(),
"Hate — Whenever Asajj Ventress attacks, if an opponent lost life from a source other than combat damage this turn, target creature blocks this turn if able");
ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public AsajjVentress(final AsajjVentress card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java b/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java
index 5d515a1bf3a..69a86552521 100644
--- a/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java
+++ b/Mage.Sets/src/mage/sets/starwars/BatheInBacta.java
@@ -35,7 +35,7 @@ import mage.abilities.effects.common.GainLifeEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -59,7 +59,7 @@ public class BatheInBacta extends CardImpl {
HateCondition.getInstance(),
"If you lost life from a source other than combat damage this turn, you gain 9 life instead"));
- this.getSpellAbility().addWatcher(new NonCombatDamageWatcher());
+ this.getSpellAbility().addWatcher(new LifeLossOtherFromCombatWatcher());
}
public BatheInBacta(final BatheInBacta card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java b/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java
index e847285c318..bc8f52b1438 100644
--- a/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java
+++ b/Mage.Sets/src/mage/sets/starwars/DarkApprenticeship.java
@@ -38,7 +38,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.target.TargetPlayer;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -56,7 +56,7 @@ public class DarkApprenticeship extends CardImpl {
HateCondition.getInstance(),
"Hate — At the beggining of each end step, if an opponent lost life from source other than combat damage this turn, Dark Apprenticeship deals 2 damage to target player.");
ability.addTarget(new TargetPlayer());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public DarkApprenticeship(final DarkApprenticeship card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/DarthMaul.java b/Mage.Sets/src/mage/sets/starwars/DarthMaul.java
index 76ee29f6a71..bf6ccd18b28 100644
--- a/Mage.Sets/src/mage/sets/starwars/DarthMaul.java
+++ b/Mage.Sets/src/mage/sets/starwars/DarthMaul.java
@@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -70,7 +70,7 @@ public class DarthMaul extends CardImpl {
HateCondition.getInstance(),
"Hate — Whenever Darth Maul attacks, if an opponent loses life from a source other than combat damage this turn, target creature can't block this turn.");
ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public DarthMaul(final DarthMaul card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/ForceDenial.java b/Mage.Sets/src/mage/sets/starwars/ForceDenial.java
index 6a6efa4916f..d5e4a5f3027 100644
--- a/Mage.Sets/src/mage/sets/starwars/ForceDenial.java
+++ b/Mage.Sets/src/mage/sets/starwars/ForceDenial.java
@@ -39,7 +39,7 @@ import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.target.TargetSpell;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -63,7 +63,7 @@ public class ForceDenial extends CardImpl {
HateCondition.getInstance(),
"
Hate - If an opponent lost life from a source other than combat damage this turn, counter that spell instead."));
this.getSpellAbility().addTarget(new TargetSpell());
- this.getSpellAbility().addWatcher(new NonCombatDamageWatcher());
+ this.getSpellAbility().addWatcher(new LifeLossOtherFromCombatWatcher());
// Scry 1
this.getSpellAbility().addEffect(new ScryEffect(1));
diff --git a/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java b/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java
index 50598afe89f..f9743be4fcd 100644
--- a/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java
+++ b/Mage.Sets/src/mage/sets/starwars/IronFistOfTheEmpire.java
@@ -41,7 +41,7 @@ import mage.constants.CardType;
import mage.constants.Rarity;
import mage.constants.TargetController;
import mage.game.permanent.token.Token;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -60,7 +60,7 @@ public class IronFistOfTheEmpire extends CardImpl {
triggeredAbility,
HateCondition.getInstance(),
"Hate — At the beggining of each end step, if opponent lost life from a source other than combat damage this turn, you gain 1 life and create a 2/2 red Soldier creature token with first strike named Royal Guard.");
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public IronFistOfTheEmpire(final IronFistOfTheEmpire card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithAssassin.java b/Mage.Sets/src/mage/sets/starwars/SithAssassin.java
index 402d667975b..08d3dfab7e7 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithAssassin.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithAssassin.java
@@ -42,7 +42,7 @@ import mage.filter.common.FilterCreaturePermanent;
import mage.filter.predicate.Predicates;
import mage.filter.predicate.mageobject.ColorPredicate;
import mage.target.common.TargetCreaturePermanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -70,7 +70,7 @@ public class SithAssassin extends CardImpl {
HateCondition.getInstance(),
"Hate - When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, destroy target nonblack creature.");
ability.addTarget(new TargetCreaturePermanent(filter));
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public SithAssassin(final SithAssassin card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java b/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java
index ef25ce0676b..3b022b5d0c4 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithInquisitor.java
@@ -38,7 +38,7 @@ import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.target.common.TargetOpponent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -60,7 +60,7 @@ public class SithInquisitor extends CardImpl {
HateCondition.getInstance(),
"Hate — When {this} enters the battlefield, if an opponent lost life from a source other then combat damage this turn, target player discard a card at random.");
ability.addTarget(new TargetOpponent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public SithInquisitor(final SithInquisitor card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithMagic.java b/Mage.Sets/src/mage/sets/starwars/SithMagic.java
index 15271aaf389..50a607f9cec 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithMagic.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithMagic.java
@@ -58,7 +58,7 @@ import mage.game.permanent.Permanent;
import mage.players.Player;
import mage.target.common.TargetCardInGraveyard;
import mage.target.targetpointer.FixedTarget;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -78,7 +78,7 @@ public class SithMagic extends CardImpl {
HateCondition.getInstance(),
"Hate — At the beggining of each combat, if opponent lost life from a source other than combat damage this turn, you may return target card from a graveyard to the battlefield under your control. It gains lifelink and haste. Exile it at the beginning of the next end step or if it would leave the battlefield.");
ability.addTarget(new TargetCardInGraveyard(new FilterCreatureCard()));
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public SithMagic(final SithMagic card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithManipulator.java b/Mage.Sets/src/mage/sets/starwars/SithManipulator.java
index 3d0dc7950aa..94dd40ede53 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithManipulator.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithManipulator.java
@@ -40,7 +40,7 @@ import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -62,7 +62,7 @@ public class SithManipulator extends CardImpl {
new InvertCondition(HateCondition.getInstance()),
"When Sith Manipulator enters the battlefield, return target creature to its owner's hand");
ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
// Hate — If opponent lost life from source other than combat damage this turn, put that card on top of its owner's library instead.
ability = new ConditionalTriggeredAbility(
@@ -70,7 +70,7 @@ public class SithManipulator extends CardImpl {
HateCondition.getInstance(),
"Hate — If opponent lost life from source other than combat damage this turn, put that card on top of its owner's library instead");
ability.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
diff --git a/Mage.Sets/src/mage/sets/starwars/SithMarauder.java b/Mage.Sets/src/mage/sets/starwars/SithMarauder.java
index fec99e871bb..89784979712 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithMarauder.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithMarauder.java
@@ -38,7 +38,7 @@ import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
import mage.target.common.TargetCreatureOrPlayer;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -60,7 +60,7 @@ public class SithMarauder extends CardImpl {
HateCondition.getInstance(),
"Hate — When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, {this} deals 3 damage to target creature or player");
ability.addTarget(new TargetCreatureOrPlayer());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public SithMarauder(final SithMarauder card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithMindseer.java b/Mage.Sets/src/mage/sets/starwars/SithMindseer.java
index 24ad4377e3a..51d98665586 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithMindseer.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithMindseer.java
@@ -40,7 +40,7 @@ import mage.constants.CardType;
import mage.constants.Duration;
import mage.constants.Rarity;
import mage.target.common.TargetCreaturePermanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -62,7 +62,7 @@ public class SithMindseer extends CardImpl {
HateCondition.getInstance(),
"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.addTarget(new TargetCreaturePermanent());
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
public SithMindseer(final SithMindseer card) {
diff --git a/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java b/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java
index 1e36b75d568..79244eb67be 100644
--- a/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java
+++ b/Mage.Sets/src/mage/sets/starwars/SithSorcerer.java
@@ -38,7 +38,7 @@ import mage.abilities.effects.keyword.ScryEffect;
import mage.cards.CardImpl;
import mage.constants.CardType;
import mage.constants.Rarity;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -62,7 +62,7 @@ public class SithSorcerer extends CardImpl {
new EntersBattlefieldTriggeredAbility(new DrawCardSourceControllerEffect(1)),
HateCondition.getInstance(),
"Hate — When {this} enters the battlefield, if an opponent lost life from a source other than combat damage this turn, draw a card.");
- this.addAbility(ability, new NonCombatDamageWatcher());
+ this.addAbility(ability, new LifeLossOtherFromCombatWatcher());
}
diff --git a/Mage.Sets/src/mage/sets/starwars/Terentatek.java b/Mage.Sets/src/mage/sets/starwars/Terentatek.java
index f32df0b340b..3350f684ca8 100644
--- a/Mage.Sets/src/mage/sets/starwars/Terentatek.java
+++ b/Mage.Sets/src/mage/sets/starwars/Terentatek.java
@@ -41,7 +41,7 @@ import mage.filter.common.FilterControlledPermanent;
import mage.filter.predicate.mageobject.SubtypePredicate;
import mage.game.Game;
import mage.game.permanent.Permanent;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
*
@@ -60,7 +60,7 @@ public class Terentatek extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek1RestrictionEffect()));
// Hate — If an opponent lost life from source other than combat damage this turn, Terentatek may attack as though you controlled a Sith.
- this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek2RestrictionEffect()), new NonCombatDamageWatcher());
+ this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new Terentatek2RestrictionEffect()), new LifeLossOtherFromCombatWatcher());
}
@@ -142,8 +142,8 @@ class Terentatek2RestrictionEffect extends RestrictionEffect {
@Override
public boolean applies(Permanent permanent, Ability source, Game game) {
if (permanent.getId().equals(source.getSourceId())) {
- NonCombatDamageWatcher watcher = (NonCombatDamageWatcher) game.getState().getWatchers().get("NonCombatDamageWatcher");
- return watcher != null && watcher.opponentsBeenDealtNonCombatDamage(source.getControllerId());
+ LifeLossOtherFromCombatWatcher watcher = (LifeLossOtherFromCombatWatcher) game.getState().getWatchers().get("NonCombatDamageWatcher");
+ return watcher != null && watcher.opponentLostLifeOtherFromCombat(source.getControllerId());
}
return false;
}
diff --git a/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java
index 3d487844805..1d35e6c3e07 100644
--- a/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java
+++ b/Mage/src/main/java/mage/abilities/condition/common/HateCondition.java
@@ -30,7 +30,7 @@ package mage.abilities.condition.common;
import mage.abilities.Ability;
import mage.abilities.condition.Condition;
import mage.game.Game;
-import mage.watchers.common.NonCombatDamageWatcher;
+import mage.watchers.common.LifeLossOtherFromCombatWatcher;
/**
* Describes condition when an opponent has been dealt any amount of non-combat
@@ -54,8 +54,8 @@ public class HateCondition implements Condition {
@Override
public boolean apply(Game game, Ability source) {
- NonCombatDamageWatcher watcher = (NonCombatDamageWatcher) game.getState().getWatchers().get("NonCombatDamageWatcher");
- return watcher != null && watcher.opponentsBeenDealtNonCombatDamage(source.getControllerId());
+ LifeLossOtherFromCombatWatcher watcher = (LifeLossOtherFromCombatWatcher) game.getState().getWatchers().get(LifeLossOtherFromCombatWatcher.class.getName());
+ return watcher != null && watcher.opponentLostLifeOtherFromCombat(source.getControllerId());
}
@Override
diff --git a/Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java b/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java
similarity index 60%
rename from Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java
rename to Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java
index 2cceb1f54e2..39a9b0133d4 100644
--- a/Mage/src/main/java/mage/watchers/common/NonCombatDamageWatcher.java
+++ b/Mage/src/main/java/mage/watchers/common/LifeLossOtherFromCombatWatcher.java
@@ -32,58 +32,48 @@ import java.util.Set;
import java.util.UUID;
import mage.constants.WatcherScope;
import mage.game.Game;
-import mage.game.events.DamagedPlayerEvent;
import mage.game.events.GameEvent;
-import mage.game.events.GameEvent.EventType;
import mage.watchers.Watcher;
/*
*
* @author Styxo
*/
-public class NonCombatDamageWatcher extends Watcher {
+public class LifeLossOtherFromCombatWatcher extends Watcher {
- private final Set playersBeenDealtNonCombatDamage = new HashSet<>();
+ private final Set players = new HashSet<>();
- public NonCombatDamageWatcher() {
- super("NonCombatDamageWatcher", WatcherScope.GAME);
+ public LifeLossOtherFromCombatWatcher() {
+ super(LifeLossOtherFromCombatWatcher.class.getName(), WatcherScope.GAME);
}
- public NonCombatDamageWatcher(final NonCombatDamageWatcher watcher) {
+ public LifeLossOtherFromCombatWatcher(final LifeLossOtherFromCombatWatcher watcher) {
super(watcher);
}
@Override
public void watch(GameEvent event, Game game) {
- if (event.getType() == GameEvent.EventType.LOST_LIFE) {
+ if (event.getType() == GameEvent.EventType.LOST_LIFE && !event.getFlag()) {
UUID playerId = event.getPlayerId();
if (playerId != null) {
- playersBeenDealtNonCombatDamage.add(playerId);
+ players.add(playerId);
}
- } else if (event.getType() == EventType.DAMAGED_PLAYER) {
- DamagedPlayerEvent dEvent = (DamagedPlayerEvent) event;
- if (!dEvent.isCombatDamage()) {
- UUID playerId = event.getPlayerId();
- if (playerId != null) {
- playersBeenDealtNonCombatDamage.add(playerId);
- }
- }
}
}
- public boolean opponentsBeenDealtNonCombatDamage(UUID playerId) {
- return (!playersBeenDealtNonCombatDamage.contains(playerId) && playersBeenDealtNonCombatDamage.size() > 0)
- || (playersBeenDealtNonCombatDamage.contains(playerId) && playersBeenDealtNonCombatDamage.size() > 1);
+ public boolean opponentLostLifeOtherFromCombat(UUID playerId) {
+ return (!players.contains(playerId) && players.size() > 0)
+ || (players.contains(playerId) && players.size() > 1);
}
@Override
public void reset() {
super.reset();
- playersBeenDealtNonCombatDamage.clear();
+ players.clear();
}
@Override
- public NonCombatDamageWatcher copy() {
- return new NonCombatDamageWatcher(this);
+ public LifeLossOtherFromCombatWatcher copy() {
+ return new LifeLossOtherFromCombatWatcher(this);
}
}