Hellfish wrote:I also changed SpellAbility.isManaAbility() to also look at subabilities.
There are a couple of issues with this change.
First just because part of an ability produces mana doesn't mean the ability is a mana ability.
605.1a An activated ability is a mana ability if it meets three criteria: it doesn’t have a target, it
could put mana into a player’s mana pool when it resolves, and it’s not a loyalty ability. (See
rule 606, “Loyalty Abilities.”)
The first ability of
Deathrite Shaman is not a mana ability because the it targets the card to exile.
The second problem is that trying to activate something like
Metalworker to pay for a cost causes a crash.
- activate Mana Ability crash | Open
- java.lang.NullPointerException
at forge.control.input.InputPayManaCostUtil.activateManaAbility(InputPayManaCostUtil.java:92)
at forge.control.input.InputPayManaCost2.selectCard(InputPayManaCost2.java:51)
at forge.gui.match.nonsingleton.CField.cardclickAction(CField.java:474)
at forge.gui.match.nonsingleton.CField.access$7(CField.java:418)
at forge.gui.match.nonsingleton.CField$8.mousePressed(CField.java:101)
at java.awt.AWTEventMulticaster.mousePressed(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
The crash is caused when the root ability is not a mana producing ability.