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;