From 5f98cb685e6dbfae3e45ab852863fd23798457e2 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 26 Feb 2018 16:17:16 +0100 Subject: [PATCH] * Hushwing Gryff - Fixed that log message was sent out too often (fixes #4548). --- .../src/mage/cards/a/AmbuscadeShaman.java | 12 +++++------- Mage.Sets/src/mage/cards/h/HushwingGryff.java | 18 ++++++++++++------ Mage.Sets/src/mage/cards/t/TorporOrb.java | 16 +++++++++++----- .../test/cards/replacement/TorporOrbTest.java | 3 ++- .../java/mage/abilities/TriggeredAbility.java | 11 +++++++++++ 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/Mage.Sets/src/mage/cards/a/AmbuscadeShaman.java b/Mage.Sets/src/mage/cards/a/AmbuscadeShaman.java index ec6cf2b57af..ce6a6d5522a 100644 --- a/Mage.Sets/src/mage/cards/a/AmbuscadeShaman.java +++ b/Mage.Sets/src/mage/cards/a/AmbuscadeShaman.java @@ -51,17 +51,17 @@ import mage.target.targetpointer.FixedTarget; public class AmbuscadeShaman extends CardImpl { public AmbuscadeShaman(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}"); this.subtype.add(SubType.ORC); this.subtype.add(SubType.SHAMAN); this.power = new MageInt(2); this.toughness = new MageInt(2); // Whenever Ambuscade Shaman or another creature enters the battlefield under your control, that creature gets +2/+2 until end of turn. - Effect effect = new BoostTargetEffect(2,2, Duration.EndOfTurn); + Effect effect = new BoostTargetEffect(2, 2, Duration.EndOfTurn); effect.setText("that creature gets +2/+2 until end of turn"); this.addAbility(new AmbuscadeShamanTriggeredAbility(effect)); - + // Dash {3}{B} (You may cast this spell for its dash cost. If you do, it gains haste, and it's returned from the battlefield to its owner's hand at the beginning of the next end step.)); this.addAbility(new DashAbility(this, "{3}{B}")); @@ -103,9 +103,7 @@ class AmbuscadeShamanTriggeredAbility extends TriggeredAbilityImpl { Permanent permanent = game.getPermanent(targetId); if (permanent.getControllerId().equals(this.controllerId) && permanent.isCreature()) { - for (Effect effect : this.getEffects()) { - effect.setTargetPointer(new FixedTarget(event.getTargetId())); - } + this.getEffects().setTargetPointer(new FixedTarget(permanent, game)); return true; } return false; @@ -115,4 +113,4 @@ class AmbuscadeShamanTriggeredAbility extends TriggeredAbilityImpl { public String getRule() { return "Whenever {this} or another creature enters the battlefield under your control, that creature gets +2/+2 until end of turn."; } -} \ No newline at end of file +} diff --git a/Mage.Sets/src/mage/cards/h/HushwingGryff.java b/Mage.Sets/src/mage/cards/h/HushwingGryff.java index b3316468dcc..97eac840847 100644 --- a/Mage.Sets/src/mage/cards/h/HushwingGryff.java +++ b/Mage.Sets/src/mage/cards/h/HushwingGryff.java @@ -31,6 +31,7 @@ import java.util.UUID; import mage.MageInt; import mage.MageObject; import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.keyword.FlashAbility; @@ -39,9 +40,9 @@ import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.AbilityType; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Duration; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.EntersTheBattlefieldEvent; @@ -55,7 +56,7 @@ import mage.game.permanent.Permanent; public class HushwingGryff extends CardImpl { public HushwingGryff(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}"); this.subtype.add(SubType.HIPPOGRIFF); this.power = new MageInt(2); @@ -92,10 +93,15 @@ class HushwingGryffEffect extends ContinuousRuleModifyingEffectImpl { @Override public String getInfoMessage(Ability source, GameEvent event, Game game) { - MageObject mageObject = game.getObject(event.getSourceId()); + MageObject enteringObject = game.getObject(event.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId()); - if (mageObject != null && sourceObject != null) { - return sourceObject.getLogName() + " prevented ability of " + mageObject.getLogName() + " to trigger"; + Ability ability = (Ability) getValue("targetAbility"); + if (enteringObject != null && sourceObject != null && ability != null) { + MageObject abilitObject = game.getObject(ability.getSourceId()); + if (abilitObject != null) { + return sourceObject.getLogName() + " prevented ability of " + abilitObject.getLogName() + + " to trigger for " + enteringObject.getLogName() + " entering the battlefield."; + } } return null; } @@ -111,7 +117,7 @@ class HushwingGryffEffect extends ContinuousRuleModifyingEffectImpl { if (ability != null && ability.getAbilityType() == AbilityType.TRIGGERED) { Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget(); if (permanent != null && permanent.isCreature()) { - return true; + return (((TriggeredAbility) ability).checkTrigger(event, game)); } } return false; diff --git a/Mage.Sets/src/mage/cards/t/TorporOrb.java b/Mage.Sets/src/mage/cards/t/TorporOrb.java index 8aafc5c2971..8375b7c62af 100644 --- a/Mage.Sets/src/mage/cards/t/TorporOrb.java +++ b/Mage.Sets/src/mage/cards/t/TorporOrb.java @@ -30,6 +30,7 @@ package mage.cards.t; import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; +import mage.abilities.TriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.cards.CardImpl; @@ -51,7 +52,7 @@ import mage.game.permanent.Permanent; public class TorporOrb extends CardImpl { public TorporOrb(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{2}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{2}"); // Creatures entering the battlefield don't cause abilities to trigger. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TorporOrbEffect())); @@ -89,7 +90,7 @@ class TorporOrbEffect extends ContinuousRuleModifyingEffectImpl { if (ability != null && ability.getAbilityType() == AbilityType.TRIGGERED) { Permanent permanent = ((EntersTheBattlefieldEvent) event).getTarget(); if (permanent != null && permanent.isCreature()) { - return true; + return (((TriggeredAbility) ability).checkTrigger(event, game)); } } return false; @@ -97,10 +98,15 @@ class TorporOrbEffect extends ContinuousRuleModifyingEffectImpl { @Override public String getInfoMessage(Ability source, GameEvent event, Game game) { - MageObject mageObject = game.getObject(event.getSourceId()); + MageObject enteringObject = game.getObject(event.getSourceId()); MageObject sourceObject = game.getObject(source.getSourceId()); - if (mageObject != null && sourceObject != null) { - return sourceObject.getLogName() + " prevented ability of " + mageObject.getLogName() + " to trigger"; + Ability ability = (Ability) getValue("targetAbility"); + if (enteringObject != null && sourceObject != null && ability != null) { + MageObject abilitObject = game.getObject(ability.getSourceId()); + if (abilitObject != null) { + return sourceObject.getLogName() + " prevented ability of " + abilitObject.getLogName() + + " to trigger for " + enteringObject.getLogName() + " entering the battlefield."; + } } return null; } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/TorporOrbTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/TorporOrbTest.java index c8694f3540b..36b5edb5309 100644 --- a/Mage.Tests/src/test/java/org/mage/test/cards/replacement/TorporOrbTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/cards/replacement/TorporOrbTest.java @@ -41,7 +41,8 @@ public class TorporOrbTest extends CardTestPlayerBase { */ @Test public void testPitTweller() { - addCard(Zone.BATTLEFIELD, playerB, "Torpor Orb"); + // Creatures entering the battlefield don't cause abilities to trigger. + addCard(Zone.BATTLEFIELD, playerB, "Hushwing Gryff"); addCard(Zone.BATTLEFIELD, playerB, "Treacherous Pit-Dweller"); // 4/3 addCard(Zone.HAND, playerA, "Lightning Bolt"); diff --git a/Mage/src/main/java/mage/abilities/TriggeredAbility.java b/Mage/src/main/java/mage/abilities/TriggeredAbility.java index 638079c1e35..93ca77a32c5 100644 --- a/Mage/src/main/java/mage/abilities/TriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/TriggeredAbility.java @@ -50,6 +50,17 @@ public interface TriggeredAbility extends Ability { */ boolean checkEventType(GameEvent event, Game game); + /** + * This method checks if the event has to trigger the ability. It's + * important to do nothing unique within this method, that can't be done + * multiple times. Because some abilities call this to check if an ability + * is relevant (e.g. Torpor Orb), so the method is calle dmultiple times for + * the same event. + * + * @param event + * @param game + * @return + */ boolean checkTrigger(GameEvent event, Game game); boolean checkInterveningIfClause(Game game);