From a7fc5b9583d8f0cf41c95a9a49df5b08604f9e13 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 9 Aug 2014 16:40:21 +0200 Subject: [PATCH] * Hushwing Gryff - Fixed a bug that the effect was wrongly implemented as replacement effect with potential to repalce other replacement effects. --- .../mage/sets/magic2015/HushwingGryff.java | 19 ++++++++++--------- .../abilities/effects/ContinuousEffects.java | 3 --- Mage/src/mage/game/GameState.java | 3 +++ .../events/EntersTheBattlefieldEvent.java | 2 +- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/Mage.Sets/src/mage/sets/magic2015/HushwingGryff.java b/Mage.Sets/src/mage/sets/magic2015/HushwingGryff.java index f6945e1a827..6ab80f84d9d 100644 --- a/Mage.Sets/src/mage/sets/magic2015/HushwingGryff.java +++ b/Mage.Sets/src/mage/sets/magic2015/HushwingGryff.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ReplacementEffectImpl; +import mage.abilities.effects.ContinuousRuleModifiyingEffectImpl; import mage.abilities.keyword.FlashAbility; import mage.abilities.keyword.FlyingAbility; import mage.cards.CardImpl; @@ -41,6 +41,7 @@ import mage.constants.Outcome; import mage.constants.Rarity; import mage.constants.Zone; import mage.game.Game; +import mage.game.events.EntersTheBattlefieldEvent; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; @@ -77,9 +78,10 @@ public class HushwingGryff extends CardImpl { } } -class HushwingGryffEffect extends ReplacementEffectImpl { +class HushwingGryffEffect extends ContinuousRuleModifiyingEffectImpl { + HushwingGryffEffect() { - super(Duration.WhileOnBattlefield, Outcome.Detriment, false); + super(Duration.WhileOnBattlefield, Outcome.Detriment, false, false); staticText = "Creatures entering the battlefield don't cause abilities to trigger"; } @@ -87,16 +89,15 @@ class HushwingGryffEffect extends ReplacementEffectImpl { super(effect); } - @Override - public boolean replaceEvent(GameEvent event, Ability source, Game game) { - return true; - } @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { - Permanent p = game.getPermanent(event.getTargetId()); - if (p != null && p.getCardType().contains(CardType.CREATURE)) { + Permanent permanent = ((EntersTheBattlefieldEvent)event).getTarget(); + if (permanent != null && permanent.getCardType().contains(CardType.CREATURE)) { + // Because replacement events have to be executed + // call replaceEvent here without calling the triggering event after + game.getContinuousEffects().replaceEvent(event, game); return true; } } diff --git a/Mage/src/mage/abilities/effects/ContinuousEffects.java b/Mage/src/mage/abilities/effects/ContinuousEffects.java index b171891efcf..f9f05a9dd2f 100644 --- a/Mage/src/mage/abilities/effects/ContinuousEffects.java +++ b/Mage/src/mage/abilities/effects/ContinuousEffects.java @@ -636,9 +636,6 @@ public class ContinuousEffects implements Serializable { } public boolean replaceEvent(GameEvent event, Game game) { - if (preventedByRuleModification(event, game, false)) { - return true; - } boolean caught = false; HashMap> consumed = new HashMap<>(); do { diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index d7fce8601e3..c2e46048582 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -537,6 +537,9 @@ public class GameState implements Serializable, Copyable { } public boolean replaceEvent(GameEvent event, Game game) { + if (effects.preventedByRuleModification(event, game, false)) { + return true; + } return effects.replaceEvent(event, game); } diff --git a/Mage/src/mage/game/events/EntersTheBattlefieldEvent.java b/Mage/src/mage/game/events/EntersTheBattlefieldEvent.java index b2e139e27bc..ccc89da2f5f 100644 --- a/Mage/src/mage/game/events/EntersTheBattlefieldEvent.java +++ b/Mage/src/mage/game/events/EntersTheBattlefieldEvent.java @@ -39,7 +39,7 @@ import mage.game.permanent.Permanent; */ public class EntersTheBattlefieldEvent extends GameEvent { - private Zone fromZone; + private final Zone fromZone; private Permanent target; public EntersTheBattlefieldEvent(Permanent target, UUID sourceId, UUID playerId, Zone fromZone) {