Fix hasManaAbility

This commit is contained in:
TRT
2021-10-15 19:18:05 +02:00
committed by tool4EvEr
parent 0e97d822bb
commit dffd95dd08
2 changed files with 13 additions and 3 deletions

View File

@@ -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;
}
}

View File

@@ -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;