magefree / mage

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

Token copies of Undercover Operative causing rollback. #10017

Open Grath opened 1 year ago

Grath commented 1 year ago

Caused by: java.lang.ClassCastException: mage.game.permanent.token.EmptyToken cannot be cast to mage.game.permanent.Permanent at mage.cards.u.UndercoverOperativeApplier.apply(UndercoverOperative.java:59) at mage.abilities.effects.common.CreateTokenCopyTargetEffect.apply(CreateTokenCopyTargetEffect.java:205) at mage.abilities.AbilityImpl.resolveMode(AbilityImpl.java:200) at mage.abilities.AbilityImpl.resolve(AbilityImpl.java:184) at mage.abilities.TriggeredAbilityImpl.resolve(TriggeredAbilityImpl.java:150) at mage.game.stack.StackAbility.resolve(StackAbility.java:89) at mage.player.ai.ComputerPlayer6.resolve(ComputerPlayer6.java:414) at mage.player.ai.ComputerPlayer6.addActions(ComputerPlayer6.java:254) at mage.player.ai.ComputerPlayer6.simulatePriority(ComputerPlayer6.java:530) at mage.player.ai.ComputerPlayer6.addActions(ComputerPlayer6.java:290) at mage.player.ai.ComputerPlayer6.simulatePriority(ComputerPlayer6.java:530) at mage.player.ai.ComputerPlayer6.addActions(ComputerPlayer6.java:290) at mage.player.ai.ComputerPlayer6.simulatePriority(ComputerPlayer6.java:530) at mage.player.ai.ComputerPlayer6.addActions(ComputerPlayer6.java:290) at mage.player.ai.ComputerPlayer6$1.call(ComputerPlayer6.java:432) at mage.player.ai.ComputerPlayer6$1.call(ComputerPlayer6.java:429) ... 4 more

Steps to reproduce: I was playing against an AI, I played a [[Miirym, Sentinel Wyrm]], then [[Undercover Operative]] copying Miirym. I kept the original Miirym, allowing Undercover Operative to go to the graveyard due to legend rule, and then Miirym's triggered ability should result in a token Undercover Operative but resulted in this error instead.

github-actions[bot] commented 1 year ago

Miirym, Sentinel Wyrm - (Gatherer) (Scryfall) (EDHREC)

{3}{G}{U}{R} Legendary Creature — Dragon Spirit 6/6 Flying, ward {2} Whenever another nontoken Dragon enters the battlefield under your control, create a token that's a copy of it, except the token isn't legendary.

Undercover Operative - (Gatherer) (Scryfall) (EDHREC)

{2}{U}{U} Creature — Shapeshifter Rogue 0/0 You may have Undercover Operative enter the battlefield as a copy of any creature on the battlefield, except it enters with a shield counter on it if you control that creature. (If it would be dealt damage or destroyed, remove a shield counter from it instead.)