diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java b/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java index c961344942d..add2214866e 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/BoseijuWhoSheltersAll.java @@ -154,16 +154,19 @@ class BoseijuWhoSheltersAllCantCounterEffect extends ContinuousRuleModifyingEffe } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - BoseijuWhoSheltersAllWatcher watcher = (BoseijuWhoSheltersAllWatcher) game.getState().getWatchers().get("ManaPaidFromBoseijuWhoSheltersAllWatcher"); - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && watcher.spells.contains(spell.getId())) { - if (filter.match(spell.getCard(), game)) { - return true; - } + BoseijuWhoSheltersAllWatcher watcher = (BoseijuWhoSheltersAllWatcher) game.getState().getWatchers().get("ManaPaidFromBoseijuWhoSheltersAllWatcher"); + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && watcher.spells.contains(spell.getId())) { + if (filter.match(spell.getCard(), game)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java index 35f9be1beb9..620507e2b08 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java +++ b/Mage.Sets/src/mage/sets/coldsnap/HaakonStromgaldScourge.java @@ -142,16 +142,19 @@ class HaakonStromgaldScourgePlayEffect2 extends ContinuousRuleModifyingEffectImp public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if(event.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && card.getId().equals(source.getSourceId())) { - Zone zone = game.getState().getZone(card.getId()); - if (zone != null && (zone != Zone.GRAVEYARD)) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && card.getId().equals(source.getSourceId())) { + Zone zone = game.getState().getZone(card.getId()); + if (zone != null && (zone != Zone.GRAVEYARD)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/commander/Stranglehold.java b/Mage.Sets/src/mage/sets/commander/Stranglehold.java index 5745f1d25f0..90c8b91ead0 100644 --- a/Mage.Sets/src/mage/sets/commander/Stranglehold.java +++ b/Mage.Sets/src/mage/sets/commander/Stranglehold.java @@ -100,14 +100,15 @@ class OpponentsCantSearchLibarariesEffect extends ContinuousRuleModifyingEffectI return null; } - + @Override + public boolean checksEventType(GameEvent event, Game game) { + return EventType.SEARCH_LIBRARY.equals(event.getType()); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (EventType.SEARCH_LIBRARY.equals(event.getType())) { - Player controller = game.getPlayer(source.getControllerId()); - return controller != null && controller.hasOpponent(event.getPlayerId(), game); - } - return false; + Player controller = game.getPlayer(source.getControllerId()); + return controller != null && controller.hasOpponent(event.getPlayerId(), game); } } diff --git a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java index 74e6f039d11..05e45c02b21 100644 --- a/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java +++ b/Mage.Sets/src/mage/sets/divinevsdemonic/FaithsFetters.java @@ -109,17 +109,20 @@ class FaithsFettersEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ACTIVATE_ABILITY) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo().equals(event.getSourceId())) { - Ability ability = game.getAbility(event.getTargetId(), event.getSourceId()); - if (ability != null) { - if (ability.getAbilityType() != AbilityType.MANA) { - return true; - } + Permanent enchantment = game.getPermanent(source.getSourceId()); + if (enchantment != null && enchantment.getAttachedTo().equals(event.getSourceId())) { + Ability ability = game.getAbility(event.getTargetId(), event.getSourceId()); + if (ability != null) { + if (ability.getAbilityType() != AbilityType.MANA) { + return true; } } } diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java index 3da5dcad708..fd8fce1274b 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/IcefallRegent.java @@ -123,7 +123,14 @@ class IcefallRegentEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return false; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.LOST_CONTROL || + event.getType() == GameEvent.EventType.ZONE_CHANGE || + event.getType() == GameEvent.EventType.UNTAP; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { // Source must be on the battlefield (it's neccessary to check here because if as response to the enter diff --git a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java index 0d12e44badf..9b02a60013e 100644 --- a/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java +++ b/Mage.Sets/src/mage/sets/elspethvstezzeret/BlindingBeam.java @@ -153,10 +153,15 @@ class BlindingBeamEffect2 extends ContinuousRuleModifyingEffectImpl { return false; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(EventType.UNTAP); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { // prevent untap event of creatures of target player - if (game.getTurn().getStepType().equals(PhaseStep.UNTAP) && event.getType().equals(EventType.UNTAP)) { + if (game.getTurn().getStepType().equals(PhaseStep.UNTAP)) { Permanent permanent = game.getPermanent(event.getTargetId()); if (permanent != null && permanent.getControllerId().equals(targetPlayerId) && filter.match(permanent, game)) { return true; diff --git a/Mage.Sets/src/mage/sets/eventide/WardOfBones.java b/Mage.Sets/src/mage/sets/eventide/WardOfBones.java index 7315222ae28..6b73ae1dbf1 100644 --- a/Mage.Sets/src/mage/sets/eventide/WardOfBones.java +++ b/Mage.Sets/src/mage/sets/eventide/WardOfBones.java @@ -102,12 +102,16 @@ class WardOfBonesEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == GameEvent.EventType.CAST_SPELL; + + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.PLAY_LAND - || event.getType() == GameEvent.EventType.CAST_SPELL - && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { + if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) { final Card card = game.getCard(event.getSourceId()); final Player opponent = game.getPlayer(event.getPlayerId()); if (card == null || opponent == null) { @@ -136,4 +140,4 @@ class WardOfBonesEffect extends ContinuousRuleModifyingEffectImpl { } return false; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java index 95fd687238e..054006c589f 100644 --- a/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java +++ b/Mage.Sets/src/mage/sets/fatereforged/WildSlash.java @@ -94,11 +94,6 @@ class DamageCantBePreventedEffect extends ContinuousRuleModifyingEffectImpl { return new DamageCantBePreventedEffect(this); } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public boolean checksEventType(GameEvent event, Game game) { return event.getType() == GameEvent.EventType.PREVENT_DAMAGE; diff --git a/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java b/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java index 6b8ca7b4957..c8cc0436d51 100644 --- a/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java +++ b/Mage.Sets/src/mage/sets/fifthdawn/EonHub.java @@ -56,10 +56,15 @@ class SkipUpkeepStepEffect extends ContinuousRuleModifyingEffectImpl { public SkipUpkeepStepEffect copy() { return new SkipUpkeepStepEffect(this); } + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.UPKEEP_STEP; + } @Override public boolean applies(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); - return event.getType() == EventType.UPKEEP_STEP && controller != null && controller.getInRange().contains(event.getPlayerId()); + return controller != null && controller.getInRange().contains(event.getPlayerId()); } } diff --git a/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java b/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java index 6e860dd4b43..ed39156879e 100644 --- a/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java +++ b/Mage.Sets/src/mage/sets/futuresight/GibberingDescent.java @@ -107,12 +107,12 @@ class GibberingDescentSkipUpkeepEffect extends ContinuousRuleModifyingEffectImpl } @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.UPKEEP_STEP; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return event.getType() == EventType.UPKEEP_STEP && (event.getPlayerId().equals(source.getControllerId())); + return event.getPlayerId().equals(source.getControllerId()); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java b/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java index 083ae5a33f7..c3179a77492 100644 --- a/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java +++ b/Mage.Sets/src/mage/sets/guildpact/LeylineOfLifeforce.java @@ -92,14 +92,17 @@ class LeylineOfLifeforceEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { - return true; - } + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java b/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java index 1d7d6d44f73..c4b2eef51cb 100644 --- a/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java +++ b/Mage.Sets/src/mage/sets/invasion/SpinalEmbrace.java @@ -106,10 +106,15 @@ class SpinalEmbraceEffect extends ContinuousRuleModifyingEffectImpl { SpinalEmbraceEffect(final SpinalEmbraceEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.CAST_SPELL); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType().equals(GameEvent.EventType.CAST_SPELL) && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { return !TurnPhase.COMBAT.equals(game.getTurn().getPhaseType()); } return false; diff --git a/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java b/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java index 10f685c3ede..688a91c5598 100644 --- a/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java +++ b/Mage.Sets/src/mage/sets/lorwyn/GaddockTeeg.java @@ -96,14 +96,17 @@ class GaddockTeegReplacementEffect4 extends ContinuousRuleModifyingEffectImpl { public GaddockTeegReplacementEffect4 copy() { return new GaddockTeegReplacementEffect4(this); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().convertedManaCost() >= 4) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().convertedManaCost() >= 4) { + return true; } return false; } @@ -130,14 +133,17 @@ class GaddockTeegReplacementEffectX extends ContinuousRuleModifyingEffectImpl { public GaddockTeegReplacementEffectX copy() { return new GaddockTeegReplacementEffectX(this); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().getText().contains("X")) { - return true; - } + Card card = game.getCard(event.getSourceId()); + if (card != null && !card.getCardType().contains(CardType.CREATURE) && card.getManaCost().getText().contains("X")) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java index 37f8166f327..4123b44e3e0 100644 --- a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java +++ b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java @@ -113,20 +113,23 @@ class FiendslayerPaladinEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.TARGET; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.TARGET) { - Card targetCard = game.getCard(event.getTargetId()); - StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); - if (targetCard != null && stackObject != null && targetCard.getId().equals(source.getSourceId())) { - if (stackObject.getColor().contains(ObjectColor.BLACK) - || stackObject.getColor().contains(ObjectColor.RED)) { - if (!stackObject.getControllerId().equals(source.getControllerId()) - && stackObject.getCardType().contains(CardType.INSTANT) - || stackObject.getCardType().contains(CardType.SORCERY)) { - return true; - } + Card targetCard = game.getCard(event.getTargetId()); + StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); + if (targetCard != null && stackObject != null && targetCard.getId().equals(source.getSourceId())) { + if (stackObject.getColor().contains(ObjectColor.BLACK) + || stackObject.getColor().contains(ObjectColor.RED)) { + if (!stackObject.getControllerId().equals(source.getControllerId()) + && stackObject.getCardType().contains(CardType.INSTANT) + || stackObject.getCardType().contains(CardType.SORCERY)) { + return true; } } } diff --git a/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java b/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java index 99fd63946d0..bd58c90546f 100644 --- a/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java +++ b/Mage.Sets/src/mage/sets/modernmasters/MoltenDisaster.java @@ -97,7 +97,12 @@ class MoltenDisasterSplitSecondEffect extends ContinuousRuleModifyingEffectImpl public String getInfoMessage(Ability source, GameEvent event, Game game) { return "You can't cast spells or activate abilities that aren't mana abilities (Split second)."; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL || event.getType() == GameEvent.EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.CAST_SPELL) { diff --git a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java index 92733a092c9..8a890c5eb2b 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/ExclusionRitual.java @@ -117,18 +117,21 @@ class ExclusionRitualReplacementEffect extends ContinuousRuleModifyingEffectImpl ExclusionRitualReplacementEffect(final ExclusionRitualReplacementEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL) { - Permanent sourcePermanent = game.getPermanent(source.getSourceId()); - Card card = game.getCard(event.getSourceId()); - if (sourcePermanent != null && card != null) { - if (sourcePermanent.getImprinted().size() > 0) { - Card imprintedCard = game.getCard(sourcePermanent.getImprinted().get(0)); - if (imprintedCard != null) { - return card.getName().equals(imprintedCard.getName()); - } + Permanent sourcePermanent = game.getPermanent(source.getSourceId()); + Card card = game.getCard(event.getSourceId()); + if (sourcePermanent != null && card != null) { + if (sourcePermanent.getImprinted().size() > 0) { + Card imprintedCard = game.getCard(sourcePermanent.getImprinted().get(0)); + if (imprintedCard != null) { + return card.getName().equals(imprintedCard.getName()); } } } diff --git a/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java b/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java index 7d4f0717aad..22e0e3103fa 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/TorporOrb.java @@ -77,16 +77,19 @@ class TorporOrbEffect extends ContinuousRuleModifyingEffectImpl { TorporOrbEffect(final TorporOrbEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { - Ability ability = (Ability) getValue("targetAbility"); - if (ability != null && AbilityType.TRIGGERED.equals(ability.getAbilityType())) { - Permanent p = game.getPermanent(event.getTargetId()); - if (p != null && p.getCardType().contains(CardType.CREATURE)) { - return true; - } + Ability ability = (Ability) getValue("targetAbility"); + if (ability != null && AbilityType.TRIGGERED.equals(ability.getAbilityType())) { + Permanent p = game.getPermanent(event.getTargetId()); + if (p != null && p.getCardType().contains(CardType.CREATURE)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java index 615701536e4..5fe936c09e9 100644 --- a/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java +++ b/Mage.Sets/src/mage/sets/planechase2012/IllusoryAngel.java @@ -87,9 +87,14 @@ class IllusoryAngelEffect extends ContinuousRuleModifyingEffectImpl { super(effect); } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { CastSpellLastTurnWatcher watcher = (CastSpellLastTurnWatcher) game.getState().getWatchers().get("CastSpellLastTurnWatcher"); if (watcher != null && watcher.getAmountOfSpellsPlayerCastOnCurrentTurn(source.getControllerId()) == 0) { return true; @@ -99,11 +104,6 @@ class IllusoryAngelEffect extends ContinuousRuleModifyingEffectImpl { } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public IllusoryAngelEffect copy() { return new IllusoryAngelEffect(this); diff --git a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java index f96e18249ce..fdf73f6d5e2 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/RakdosLordOfRiots.java @@ -109,10 +109,15 @@ class RakdosLordOfRiotsCantCastEffect extends ContinuousRuleModifyingEffectImpl public RakdosLordOfRiotsCantCastEffect copy() { return new RakdosLordOfRiotsCantCastEffect(this); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == EventType.CAST_SPELL && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { if (new OpponentsLostLifeCount().calculate(game, source, this) == 0) { return true; } diff --git a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java index b8ef9015f74..538519c8ef3 100644 --- a/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java +++ b/Mage.Sets/src/mage/sets/saviorsofkamigawa/CurtainOfLight.java @@ -103,9 +103,14 @@ class CurtainOfLightRuleModifyingEffect extends ContinuousRuleModifyingEffectImp super(effect); } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.CAST_SPELL); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType().equals(GameEvent.EventType.CAST_SPELL) && event.getSourceId().equals(source.getSourceId())) { + if (event.getSourceId().equals(source.getSourceId())) { return !game.getPhase().getType().equals(TurnPhase.COMBAT) || game.getStep().getType().equals(PhaseStep.BEGIN_COMBAT) || game.getStep().getType().equals(PhaseStep.DECLARE_ATTACKERS); diff --git a/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java b/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java index c7a16ac6d8d..1d468452cff 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/EverlastingTorment.java @@ -97,10 +97,15 @@ class DamageCantBePreventedEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType().equals(GameEvent.EventType.PREVENT_DAMAGE); + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return event.getType().equals(GameEvent.EventType.PREVENT_DAMAGE); + return true; } } @@ -138,8 +143,14 @@ class DamageDealtAsIfSourceHadWitherEffect extends ReplacementEffectImpl { return true; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.DAMAGE_CREATURE; + } + + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return (event.getType() == EventType.DAMAGE_CREATURE); + return true; } } diff --git a/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java b/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java index b2f4276e70d..f2506f17667 100644 --- a/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java +++ b/Mage.Sets/src/mage/sets/shardsofalara/EtherswornCanonist.java @@ -133,11 +133,6 @@ class EtherswornCanonistReplacementEffect extends ContinuousRuleModifyingEffectI super(effect); } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public EtherswornCanonistReplacementEffect copy() { return new EtherswornCanonistReplacementEffect(this); diff --git a/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java b/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java index 5c761476d9a..dd32de85bc5 100644 --- a/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java +++ b/Mage.Sets/src/mage/sets/tempestremastered/Necrologia.java @@ -107,11 +107,6 @@ class NecrologiaTimingEffect extends ContinuousRuleModifyingEffectImpl { return false; } - @Override - public boolean apply(Game game, Ability source) { - return true; - } - @Override public NecrologiaTimingEffect copy() { return new NecrologiaTimingEffect(this); diff --git a/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java b/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java index ba2cf19c677..3954abf1fac 100644 --- a/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java +++ b/Mage.Sets/src/mage/sets/tenth/GaeasHerald.java @@ -93,14 +93,17 @@ class CantCounterEffect extends ContinuousRuleModifyingEffectImpl { public boolean apply(Game game, Ability source) { return true; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { - return true; - } + Spell spell = game.getStack().getSpell(event.getTargetId()); + if (spell != null && spell.getCardType().contains(CardType.CREATURE)) { + return true; } return false; } diff --git a/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java b/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java index 047b256b2e1..7add0e83ce7 100644 --- a/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java +++ b/Mage.Sets/src/mage/sets/timespiral/AngelsGrace.java @@ -89,17 +89,14 @@ class AngelsGraceEffect extends ContinuousRuleModifyingEffectImpl { } @Override - public boolean apply(Game game, Ability source) { - return true; + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.WINS || event.getType() == EventType.LOSES; } - + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if ((event.getType() == EventType.WINS && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) || - (event.getType() == EventType.LOSES && event.getPlayerId().equals(source.getControllerId()))) { - return true; - } - return false; + return (event.getType() == EventType.WINS && game.getOpponents(source.getControllerId()).contains(event.getPlayerId())) || + (event.getType() == EventType.LOSES && event.getPlayerId().equals(source.getControllerId())); } } diff --git a/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java b/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java index 9bc424d3ac6..d120e532d31 100644 --- a/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java +++ b/Mage.Sets/src/mage/sets/torment/LlawanCephalidEmpress.java @@ -132,15 +132,18 @@ class LlawanCephalidRuleModifyingEffect extends ContinuousRuleModifyingEffectImp return null; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL) { - Player controller = game.getPlayer(source.getControllerId()); - if (controller != null && game.isOpponent(controller, event.getPlayerId())) { - Card card = game.getCard(event.getSourceId()); - if (card != null && filter.match(card, source.getControllerId(), game)) { - return true; - } + Player controller = game.getPlayer(source.getControllerId()); + if (controller != null && game.isOpponent(controller, event.getPlayerId())) { + Card card = game.getCard(event.getSourceId()); + if (card != null && filter.match(card, source.getControllerId(), game)) { + return true; } } return false; diff --git a/Mage.Sets/src/mage/sets/torment/Overmaster.java b/Mage.Sets/src/mage/sets/torment/Overmaster.java index e0ec810d218..c2057a3f8a4 100644 --- a/Mage.Sets/src/mage/sets/torment/Overmaster.java +++ b/Mage.Sets/src/mage/sets/torment/Overmaster.java @@ -114,17 +114,17 @@ class OvermasterEffect extends ContinuousRuleModifyingEffectImpl { } return null; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.COUNTER; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.COUNTER) { - Spell spell = game.getStack().getSpell(event.getTargetId()); - OvermasterWatcher watcher = (OvermasterWatcher) game.getState().getWatchers().get("overmasterWatcher", source.getControllerId()); - if (spell != null && watcher != null && watcher.isUncounterable(spell.getId())) { - return true; - } - } - return false; + Spell spell = game.getStack().getSpell(event.getTargetId()); + OvermasterWatcher watcher = (OvermasterWatcher) game.getState().getWatchers().get("overmasterWatcher", source.getControllerId()); + return spell != null && watcher != null && watcher.isUncounterable(spell.getId()); } } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java b/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java index 09d6c92a3a6..e1439fae1f8 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/CityInABottle.java @@ -401,15 +401,15 @@ class CityInABottleCantPlayEffect extends ContinuousRuleModifyingEffectImpl { public String getInfoMessage(Ability source, GameEvent event, Game game) { return "You can't play cards originally printed in the Arabian Nights expansion"; } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.PLAY_LAND || event.getType() == EventType.CAST_SPELL) { - Card card = game.getCard(event.getSourceId()); - if (card != null && filter.match(card, source.getSourceId(), source.getControllerId(), game)) { - return true; - } - } - return false; + Card card = game.getCard(event.getSourceId()); + return card != null && filter.match(card, source.getSourceId(), source.getControllerId(), game); } } diff --git a/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java b/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java index b2783ca49dd..16836860f92 100644 --- a/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java +++ b/Mage.Sets/src/mage/sets/visions/CityOfSolitude.java @@ -77,10 +77,15 @@ class CityOfSolitudeEffect extends ContinuousRuleModifyingEffectImpl { CityOfSolitudeEffect(final CityOfSolitudeEffect effect) { super(effect); } - + + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == EventType.CAST_SPELL || event.getType() == EventType.ACTIVATE_ABILITY; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - return (event.getType() == EventType.CAST_SPELL || event.getType() == EventType.ACTIVATE_ABILITY) && !game.getActivePlayerId().equals(event.getPlayerId()); + return !game.getActivePlayerId().equals(event.getPlayerId()); } @Override diff --git a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java index 90cc8037047..e566f1f1242 100644 --- a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java +++ b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java @@ -141,25 +141,23 @@ class IonaShieldOfEmeriaReplacementEffect extends ContinuousRuleModifyingEffectI return null; } + @Override + public boolean checksEventType(GameEvent event, Game game) { + return event.getType() == GameEvent.EventType.CAST_SPELL; + } + @Override public boolean applies(GameEvent event, Ability source, Game game) { - if (event.getType() == GameEvent.EventType.CAST_SPELL) { - if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId()) ) { - ObjectColor chosenColor = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); - Card card = game.getCard(event.getSourceId()); - if (chosenColor != null && card != null && card.getColor().contains(chosenColor)) { - return true; - } + if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId()) ) { + ObjectColor chosenColor = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); + Card card = game.getCard(event.getSourceId()); + if (chosenColor != null && card != null && card.getColor().contains(chosenColor)) { + return true; } } return false; } - @Override - public boolean apply(Game game, Ability source) { - return false; - } - @Override public IonaShieldOfEmeriaReplacementEffect copy() { return new IonaShieldOfEmeriaReplacementEffect(this); diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java new file mode 100644 index 00000000000..37603d2c2b0 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/WorlgorgerDragonTest.java @@ -0,0 +1,54 @@ +/* + * 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 org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ + +public class WorlgorgerDragonTest extends CardTestPlayerBase { + + /** + * Tests that exiled permanents return to battlefield + */ + @Test + public void testDisabledEffectOnChangeZone() { + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 6); + addCard(Zone.HAND, playerA, "Worldgorger Dragon"); + + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion", 1); + addCard(Zone.BATTLEFIELD, playerA, "Gerrard's Battle Cry", 1); + + addCard(Zone.BATTLEFIELD, playerB, "Swamp", 2); + // Destroy target nonartifact, nonblack creature. It can't be regenerated. + addCard(Zone.HAND, playerB, "Terror", 1); + + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Worldgorger Dragon"); + + castSpell(2, PhaseStep.PRECOMBAT_MAIN, playerB, "Terror", "Worldgorger Dragon"); + + setStopAt(2, PhaseStep.BEGIN_COMBAT); + execute(); + + assertLife(playerA, 20); + assertLife(playerB, 20); + + assertGraveyardCount(playerA, "Worldgorger Dragon", 1); + assertGraveyardCount(playerB, "Terror", 1); + + assertPermanentCount(playerA, "Silvercoat Lion", 1); + assertPermanentCount(playerA, "Gerrard's Battle Cry", 1); + + } + +} \ No newline at end of file diff --git a/Mage/src/mage/abilities/effects/common/CantBeCounteredSourceEffect.java b/Mage/src/mage/abilities/effects/common/CantBeCounteredSourceEffect.java index 097424d434c..5613bc558e4 100644 --- a/Mage/src/mage/abilities/effects/common/CantBeCounteredSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/CantBeCounteredSourceEffect.java @@ -79,7 +79,6 @@ public class CantBeCounteredSourceEffect extends ContinuousRuleModifyingEffectIm return event.getType() == EventType.COUNTER; } - @Override public boolean applies(GameEvent event, Ability source, Game game) { Spell spell = game.getStack().getSpell(event.getTargetId()); diff --git a/Mage/src/mage/game/events/GameEvent.java b/Mage/src/mage/game/events/GameEvent.java index e22e86b4311..65948f54e37 100644 --- a/Mage/src/mage/game/events/GameEvent.java +++ b/Mage/src/mage/game/events/GameEvent.java @@ -114,7 +114,16 @@ public class GameEvent { LOSES, LOST, WINS, TARGET, TARGETED, - COUNTER, COUNTERED, + + /* COUNTER + targetId id of the spell or id of stack ability + sourceId sourceId of the ability countering the spell or stack ability + playerId controller of the countered spell or stack ability + amount not used for this event + flag not used for this event + */ + COUNTER, + COUNTERED, DECLARING_ATTACKERS, DECLARED_ATTACKERS, DECLARE_ATTACKER, ATTACKER_DECLARED,