magefree / mage

Magic Another Game Engine
http://xmage.today
MIT License
1.8k stars 746 forks source link

server log error: getSpellOrLKIStack got non-spell id in getSpellKickedCountStrict #12527

Open xenohedron opened 1 week ago

xenohedron commented 1 week ago
ERROR 2024-06-20 19:59:12,308 getSpellOrLKIStack got non-spell id mage.game.stack.Stac
kAbility correlating to non-spell object stack ability (Equip {1} <i>({1}: Attach to t
arget creature you control. Equip only as a sorcery.)</i>). =>[GAME a895c7d8-9902-4570
-b9ce-badb19324edf] GameImpl.getSpellOrLKIStack 
java.lang.Throwable
        at mage.game.GameImpl.getSpellOrLKIStack(GameImpl.java:718)
        at mage.abilities.keyword.KickerAbility.getSpellKickedCountStrict(KickerAbilit
y.java:283)
        at mage.abilities.keyword.KickerAbility.getSpellKickedCount(KickerAbility.java
:276)
        at mage.abilities.condition.common.KickedCondition.apply(KickedCondition.java:
28)
        at mage.ConditionalMana.apply(ConditionalMana.java:83)
        at mage.players.PlayerImpl.canPayMinimumManaCost(PlayerImpl.java:3708)
        at mage.players.PlayerImpl.canPlay(PlayerImpl.java:3634)
        at mage.players.PlayerImpl.findActivatedAbilityFromPlayable(PlayerImpl.java:39
22)
        at mage.players.PlayerImpl.getPlayableFromObjectSingle(PlayerImpl.java:4078)
        at mage.players.PlayerImpl.getPlayableFromObjectAll(PlayerImpl.java:3985)
        at mage.players.PlayerImpl.getPlayable(PlayerImpl.java:4252)
        at mage.players.PlayerImpl.getPlayableObjects(PlayerImpl.java:4314)
        at mage.server.game.GameSessionPlayer.prepareGameView(GameSessionPlayer.java:2
16)
        at mage.server.game.GameSessionPlayer.getGameView(GameSessionPlayer.java:200)
        at mage.server.game.GameSessionWatcher.lambda$update$0(GameSessionWatcher.java:54)
        at java.util.Optional.ifPresent(Optional.java:159)
        at mage.server.game.GameSessionWatcher.update(GameSessionWatcher.java:54)
        at mage.server.game.GameController.updateGame(GameController.java:805)
        at mage.server.game.GameController.lambda$init$3aa0d15c$1(GameController.java:122)
        at mage.game.events.EventDispatcher.fireEvent(EventDispatcher.java:28)
        at mage.game.events.TableEventSource.fireTableEvent(TableEventSource.java:44)
        at mage.game.GameImpl.fireUpdatePlayersEvent(GameImpl.java:3127)
        at mage.game.GameImpl.playPriority(GameImpl.java:1693)
        at mage.game.turn.Step.priority(Step.java:67)
ssk97 commented 1 week ago

Looks like I caused this problem, when I added support for [[Wastescape Battlemage]]'s kicker abilities. Not sure what the best way to solve it would be, the easiest solution would be to just return null instead of throwing an error. An alternative is creating a separate KickedCondition for just Wastescape Battlemage (presumably inside of the card's implementation)

github-actions[bot] commented 1 week ago

Wastescape Battlemage - (Gatherer) (Scryfall) (EDHREC)

{1}{C} Creature — Eldrazi Wizard 2/2 Kicker {G} and/or {1}{U} When you cast this spell, if it was kicked with its {G} kicker, exile target artifact or enchantment an opponent controls. When you cast this spell, if it was kicked with its {1}{U} kicker, return target creature an opponent controls to its owner's hand.