From c703ebaa9d651e41690a7b97ff08181c21699e73 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 28 Sep 2016 08:30:31 +0200 Subject: [PATCH] Reworked Hate condition. --- .../src/mage/sets/starwars/AsajjVentress.java | 4 +-- .../src/mage/sets/starwars/BatheInBacta.java | 4 +-- .../sets/starwars/DarkApprenticeship.java | 4 +-- .../src/mage/sets/starwars/DarthMaul.java | 4 +-- .../src/mage/sets/starwars/ForceDenial.java | 4 +-- .../sets/starwars/IronFistOfTheEmpire.java | 4 +-- .../src/mage/sets/starwars/SithAssassin.java | 4 +-- .../mage/sets/starwars/SithInquisitor.java | 4 +-- .../src/mage/sets/starwars/SithMagic.java | 4 +-- .../mage/sets/starwars/SithManipulator.java | 6 ++-- .../src/mage/sets/starwars/SithMarauder.java | 4 +-- .../src/mage/sets/starwars/SithMindseer.java | 4 +-- .../src/mage/sets/starwars/SithSorcerer.java | 4 +-- .../src/mage/sets/starwars/Terentatek.java | 8 ++--- .../condition/common/HateCondition.java | 6 ++-- ...va => LifeLossOtherFromCombatWatcher.java} | 36 +++++++------------ 16 files changed, 47 insertions(+), 57 deletions(-) rename Mage/src/main/java/mage/watchers/common/{NonCombatDamageWatcher.java => LifeLossOtherFromCombatWatcher.java} (60%) 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); } }