From dffd95dd081e63aefc8112e101e70be3cccfa4d7 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Fri, 15 Oct 2021 19:18:05 +0200 Subject: [PATCH 1/2] Fix hasManaAbility --- .../src/main/java/forge/game/ForgeScript.java | 13 +++++++++++-- .../java/forge/game/spellability/SpellAbility.java | 3 ++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index b13c469b83b..94780bbd5a2 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -1,5 +1,7 @@ package forge.game; +import com.google.common.collect.Iterables; + import forge.card.ColorSet; import forge.card.MagicColor; import forge.card.mana.ManaAtom; @@ -11,7 +13,10 @@ import forge.game.cost.Cost; import forge.game.mana.ManaCostBeingPaid; import forge.game.player.Player; import forge.game.spellability.SpellAbility; +import forge.game.spellability.SpellAbilityPredicates; import forge.game.staticability.StaticAbility; +import forge.game.trigger.Trigger; +import forge.game.trigger.WrappedAbility; import forge.game.zone.ZoneType; import forge.util.Expressions; @@ -102,8 +107,12 @@ public class ForgeScript { } return false; } else if (property.equals("hasManaAbility")) { - for (final SpellAbility sa : cardState.getSpellAbilities()) { - if (sa.isManaAbility()) { + if (Iterables.any(cardState.getSpellAbilities(), SpellAbilityPredicates.isManaAbility())) { + return true; + } + for (final Trigger trig : cardState.getTriggers()) { + WrappedAbility wrap = new WrappedAbility(trig, trig.getOverridingAbility(), sourceController); + if (wrap.isManaAbility()) { return true; } } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index a142b5d59fe..7cdb119a00d 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -364,11 +364,12 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit if (isPwAbility()) { return false; //Loyalty ability, not a mana ability. } + // CR 605.1b if (isWrapper() && this.getTrigger().getMode() != TriggerType.TapsForMana) { return false; } - SpellAbility tail = this; + SpellAbility tail = isWrapper() ? ((WrappedAbility) this).getWrappedAbility() : this; while (tail != null) { if (tail.manaPart != null) { return true; From c82826cf093060bbfef513a97066d2edba80e1c5 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Sat, 16 Oct 2021 14:39:23 +0200 Subject: [PATCH 2/2] Clean up --- forge-game/src/main/java/forge/game/ForgeScript.java | 4 +--- .../src/main/java/forge/game/spellability/SpellAbility.java | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ForgeScript.java b/forge-game/src/main/java/forge/game/ForgeScript.java index 94780bbd5a2..29659708ea5 100644 --- a/forge-game/src/main/java/forge/game/ForgeScript.java +++ b/forge-game/src/main/java/forge/game/ForgeScript.java @@ -16,7 +16,6 @@ import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityPredicates; import forge.game.staticability.StaticAbility; import forge.game.trigger.Trigger; -import forge.game.trigger.WrappedAbility; import forge.game.zone.ZoneType; import forge.util.Expressions; @@ -111,8 +110,7 @@ public class ForgeScript { return true; } for (final Trigger trig : cardState.getTriggers()) { - WrappedAbility wrap = new WrappedAbility(trig, trig.getOverridingAbility(), sourceController); - if (wrap.isManaAbility()) { + if (trig.getOverridingAbility() != null && trig.getOverridingAbility().isManaAbility()) { return true; } } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index 7cdb119a00d..b66e0280618 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -365,11 +365,11 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit return false; //Loyalty ability, not a mana ability. } // CR 605.1b - if (isWrapper() && this.getTrigger().getMode() != TriggerType.TapsForMana) { + if (isTrigger() && this.getTrigger().getMode() != TriggerType.TapsForMana) { return false; } - SpellAbility tail = isWrapper() ? ((WrappedAbility) this).getWrappedAbility() : this; + SpellAbility tail = this; while (tail != null) { if (tail.manaPart != null) { return true;