From 91313476989320cedfd10a00ba97f12400ee47e9 Mon Sep 17 00:00:00 2001 From: Jeff Wadsworth Date: Thu, 30 Nov 2023 22:23:48 -0600 Subject: [PATCH] Fixed #11491 --- Mage.Sets/src/mage/cards/d/DragonBreath.java | 2 +- .../mage/cards/n/NimbleObstructionist.java | 7 ++-- .../FilterActivatedOrTriggeredAbility.java | 10 ++++-- .../ActivatedOrTriggeredAbilityPredicate.java | 34 +++++++++++++++++++ 4 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 Mage/src/main/java/mage/filter/predicate/other/ActivatedOrTriggeredAbilityPredicate.java diff --git a/Mage.Sets/src/mage/cards/d/DragonBreath.java b/Mage.Sets/src/mage/cards/d/DragonBreath.java index a80cd72f37a..6a575692a64 100644 --- a/Mage.Sets/src/mage/cards/d/DragonBreath.java +++ b/Mage.Sets/src/mage/cards/d/DragonBreath.java @@ -43,7 +43,7 @@ public final class DragonBreath extends CardImpl { // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); - this.getSpellAbility().addEffect(new AttachEffect(Outcome.AddAbility)); + this.getSpellAbility().addEffect(new AttachEffect(Outcome.Benefit)); Ability ability = new EnchantAbility(auraTarget); this.addAbility(ability); diff --git a/Mage.Sets/src/mage/cards/n/NimbleObstructionist.java b/Mage.Sets/src/mage/cards/n/NimbleObstructionist.java index 99593063139..c7f12605f1d 100644 --- a/Mage.Sets/src/mage/cards/n/NimbleObstructionist.java +++ b/Mage.Sets/src/mage/cards/n/NimbleObstructionist.java @@ -1,4 +1,3 @@ - package mage.cards.n; import java.util.UUID; @@ -15,7 +14,7 @@ import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.SubType; import mage.constants.TargetController; -import mage.filter.FilterStackObject; +import mage.filter.common.FilterActivatedOrTriggeredAbility; import mage.target.common.TargetActivatedOrTriggeredAbility; /** @@ -24,7 +23,9 @@ import mage.target.common.TargetActivatedOrTriggeredAbility; */ public final class NimbleObstructionist extends CardImpl { - private static final FilterStackObject filter = new FilterStackObject("activated or triggered ability you don't control"); + private static final FilterActivatedOrTriggeredAbility filter = + new FilterActivatedOrTriggeredAbility("activated or triggered ability you don't control"); + static { filter.add(TargetController.NOT_YOU.getControllerPredicate()); } diff --git a/Mage/src/main/java/mage/filter/common/FilterActivatedOrTriggeredAbility.java b/Mage/src/main/java/mage/filter/common/FilterActivatedOrTriggeredAbility.java index af4071cbb68..3c46130f32d 100644 --- a/Mage/src/main/java/mage/filter/common/FilterActivatedOrTriggeredAbility.java +++ b/Mage/src/main/java/mage/filter/common/FilterActivatedOrTriggeredAbility.java @@ -7,6 +7,7 @@ import mage.game.Game; import mage.game.stack.StackObject; import java.util.UUID; +import mage.filter.predicate.other.ActivatedOrTriggeredAbilityPredicate; /** * @author TheElk801 @@ -15,6 +16,7 @@ public class FilterActivatedOrTriggeredAbility extends FilterStackObject { public FilterActivatedOrTriggeredAbility() { this("activated or triggered ability"); + this.add(ActivatedOrTriggeredAbilityPredicate.instance); // this predicate is required to work correctly on the stack } public FilterActivatedOrTriggeredAbility(String name) { @@ -27,7 +29,9 @@ public class FilterActivatedOrTriggeredAbility extends FilterStackObject { @Override public boolean match(StackObject stackObject, UUID playerId, Ability source, Game game) { - if (!super.match(stackObject, playerId, source, game) || !(stackObject instanceof Ability)) { + + if (!super.match(stackObject, playerId, source, game) + || !(stackObject instanceof Ability)) { return false; } Ability ability = (Ability) stackObject; @@ -37,7 +41,9 @@ public class FilterActivatedOrTriggeredAbility extends FilterStackObject { @Override public boolean match(StackObject stackObject, Game game) { - if (!super.match(stackObject, game) || !(stackObject instanceof Ability)) { + + if (!super.match(stackObject, game) + || !(stackObject instanceof Ability)) { return false; } Ability ability = (Ability) stackObject; diff --git a/Mage/src/main/java/mage/filter/predicate/other/ActivatedOrTriggeredAbilityPredicate.java b/Mage/src/main/java/mage/filter/predicate/other/ActivatedOrTriggeredAbilityPredicate.java new file mode 100644 index 00000000000..4f11514415d --- /dev/null +++ b/Mage/src/main/java/mage/filter/predicate/other/ActivatedOrTriggeredAbilityPredicate.java @@ -0,0 +1,34 @@ +/* + * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license + * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template + */ +package mage.filter.predicate.other; + +import mage.abilities.Ability; +import mage.constants.AbilityType; +import mage.filter.predicate.Predicate; +import mage.game.Game; +import mage.game.stack.StackObject; + +/** + * + * @author jeffwadsworth + */ +public enum ActivatedOrTriggeredAbilityPredicate implements Predicate { + instance; + + @Override + public boolean apply(StackObject input, Game game) { + if (!(input instanceof Ability)) { + return false; + } + Ability ability = ((Ability) input); + return ability.getAbilityType() == AbilityType.TRIGGERED + || ability.getAbilityType() == AbilityType.ACTIVATED; + } + + @Override + public String toString() { + return "an activated or triggered ability"; + } +}