Merge branch 'hasManaAbility' into 'master'

Fix hasManaAbility

See merge request core-developers/forge!5552
This commit is contained in:
Michael Kamensky
2021-10-17 03:14:16 +00:00
2 changed files with 11 additions and 3 deletions

View File

@@ -1,5 +1,7 @@
package forge.game; package forge.game;
import com.google.common.collect.Iterables;
import forge.card.ColorSet; import forge.card.ColorSet;
import forge.card.MagicColor; import forge.card.MagicColor;
import forge.card.mana.ManaAtom; import forge.card.mana.ManaAtom;
@@ -11,7 +13,9 @@ import forge.game.cost.Cost;
import forge.game.mana.ManaCostBeingPaid; import forge.game.mana.ManaCostBeingPaid;
import forge.game.player.Player; import forge.game.player.Player;
import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbility;
import forge.game.spellability.SpellAbilityPredicates;
import forge.game.staticability.StaticAbility; import forge.game.staticability.StaticAbility;
import forge.game.trigger.Trigger;
import forge.game.zone.ZoneType; import forge.game.zone.ZoneType;
import forge.util.Expressions; import forge.util.Expressions;
@@ -102,8 +106,11 @@ public class ForgeScript {
} }
return false; return false;
} else if (property.equals("hasManaAbility")) { } else if (property.equals("hasManaAbility")) {
for (final SpellAbility sa : cardState.getSpellAbilities()) { if (Iterables.any(cardState.getSpellAbilities(), SpellAbilityPredicates.isManaAbility())) {
if (sa.isManaAbility()) { return true;
}
for (final Trigger trig : cardState.getTriggers()) {
if (trig.getOverridingAbility() != null && trig.getOverridingAbility().isManaAbility()) {
return true; return true;
} }
} }

View File

@@ -364,7 +364,8 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit
if (isPwAbility()) { if (isPwAbility()) {
return false; //Loyalty ability, not a mana ability. return false; //Loyalty ability, not a mana ability.
} }
if (isWrapper() && this.getTrigger().getMode() != TriggerType.TapsForMana) { // CR 605.1b
if (isTrigger() && this.getTrigger().getMode() != TriggerType.TapsForMana) {
return false; return false;
} }