StackOverflow error when using "Pteron Ghost" to block "Grimclaw Bats"
Describe the bug StackOverflow error (see stack below).
Java.lang.StackOverflowError at java.base/java.util.HashMap.hash(HashMap.java:337) at java.base/java.util.HashMap.put(HashMap.java:609) at java.base/java.util.HashSet.add(HashSet.java:221) at forge.util.collect.FCollection.add(FCollection.java:251) at forge.util.collect.FCollection.addAll(FCollection.java:311) at forge.game.player.PlayerCollection.getCardsIn(PlayerCollection.java:34) at forge.game.Game.getCardsIn(Game.java:552) at forge.game.Game.getCardsIn(Game.java:570) at forge.game.staticability.StaticAbilityCastWithFlash.anyWithFlashNeedsInfo(StaticAbilityCastWithFlash.java:16) at forge.game.spellability.SpellAbilityRestriction.canPlay(SpellAbilityRestriction.java:580) at forge.game.spellability.AbilityActivated.canPlay(AbilityActivated.java:89) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1055) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canRegenerate(ComputerUtil.java:1066) at forge.ai.ComputerUtilCombat.canDestroyBlockerBeforeFirstStrike(ComputerUtilCombat.java:1833) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1679) at forge.ai.ComputerUtilCombat.canDestroyAttacker(ComputerUtilCombat.java:1666) at forge.ai.ComputerUtilCombat.attackerWouldBeDestroyed(ComputerUtilCombat.java:721) at forge.ai.ComputerUtilCombat.combatantWouldBeDestroyed(ComputerUtilCombat.java:697) at forge.ai.ComputerUtilCombat.willOpposingCreatureDieInCombat(ComputerUtilCombat.java:2591) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:372) at forge.ai.ComputerUtilCost.checkSacrificeCost(ComputerUtilCost.java:415) at forge.ai.ComputerUtil.canR ... (truncated)
To Reproduce Steps to reproduce the behavior: 1- Duel against AI 2- AI attacks with "Grimclaw Bats" 3- Opponent blocks with "Pteron Ghost".
Expected behavior No crash.
Desktop (please complete the following information): MacOS, Forge version 1.6.59
Additional context Add any other context about the problem here.
This is related to #4014
We need a cleaner and robust recursion bailout method
This issue has not been updated in a while and has now been marked as stale. Stale messages will be auto closed.