Page 6 of 6

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 13:23
by friarsol
Chatted with Krazy, we're going to try to get a release out for Friday with as many aether revolt cards as we have ready.

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 14:39
by Agetian
That would be very nice, Sol!

I updated the edition definition a little bit to reflect AER Masterpieces (and also renamed the set Kaladesh Inventions to Masterpiece Series as it looks like it'll be a generic, regularly updated set of block-themed "additional" cards).

During testing I noticed that we need a full set of card definitions and the AER Planeswalker Deck print sheets to be filled in to prevent the game from crashing when trying to generate a booster draft with the AER set. This will become noticeable in both quest mode and standalone drafts if we release the game as it is right now. There are several things we can do if we can't provide a full edition definition by Friday:

Variant 1. Remove the mentioning of AER Planeswalker Deck print sheets from the Booster parameter in edition definition (temporarily, until we can fill it in) *and* fill in all the cards in the edition definition. This should prevent the game from crashing.

Variant 2. Keep things as they are (or maybe add the card list) but remove AER from the definition of the Kaladesh block temporarily until full AER edition data can be filled in. This should also prevent the game from crashing but it'll make AER inaccessible for drafting and for quest mode.

Please let me know which way would be better.

- Agetian

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 15:14
by friarsol
Agetian wrote:Variant 1. Remove the mentioning of AER Planeswalker Deck print sheets from the Booster parameter in edition definition (temporarily, until we can fill it in) *and* fill in all the cards in the edition definition. This should prevent the game from crashing.
This is definitely the preferred method. People want to play the new cards, they don't care all that much about the Planeswalker decks, which is really more of an intro player thing.

Once the cards are up on Gatherer, we'll get the mtgjson and build the edition file from that.

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 15:19
by Agetian
Ok, I have removed the mentioning of planeswalker decks from booster definition, but now we need the full list of cards. Knowing that the full spoiler is available, this should be possible to make. Do we use some kind of an automated script to generate edition files right now, or is that unavailable for sets that are not yet released officially?

EDIT: Remembered that we now have a Discord chat, so dropped in there :)

- Agetian

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 16:11
by pfps
Something should probably be done with auto-yields before the next beta.

Right now, auto-yields are by card description (including id) and trigger description (not including any information about the current triggers). I think that is the right level of granularity. However, card ids do not persist between games so the auto-yields should be cleared between games and they are not.

I see two options. The first is to make auto-yields insensitive to the card id. The second is to clear out auto-yields between games.

Any suggestions on which way to go? If the second way is chosen then someone either has to write the code or point me to where the change should be made (i.e., the code that starts the game, and how to access the game gui from there).

peter

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 16:36
by Agetian
@ pfps: I'll take a look at the code and see if I can figure out how to clear auto-yields in between games, will report soon-ish as to how that goes. ;)

EDIT: Done, I added the relevant code. :)

- Agetian

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 10 Jan 2017, 20:57
by pfps
Agetian wrote:@ pfps: I'll take a look at the code and see if I can figure out how to clear auto-yields in between games, will report soon-ish as to how that goes. ;)

EDIT: Done, I added the relevant code. :)

- Agetian
Looks good.

Thanks,

peter

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 11 Jan 2017, 07:31
by Agetian
In the recent revisions (probably in the last week or so) I started experiencing some random rare StackOverflow exceptions:

StackOverflowError | Open
Code: Select all
Forge Version:    SVN
Operating System: Linux 4.4.0-59-generic amd64
Java Version:     1.8.0_111 Oracle Corporation

java.lang.StackOverflowError
   at com.google.common.collect.Maps.safeGet(Maps.java:3346)
   at com.google.common.collect.AbstractTable.contains(AbstractTable.java:68)
   at com.google.common.collect.StandardTable.contains(StandardTable.java:81)
   at com.google.common.collect.HashBasedTable.contains(HashBasedTable.java:119)
   at forge.trackable.Tracker.hasObj(Tracker.java:33)
   at forge.trackable.TrackableTypes$TrackableObjectType.updateObjLookup(TrackableTypes.java:56)
   at forge.trackable.TrackableTypes$TrackableObjectType.updateObjLookup(TrackableTypes.java:39)
   at forge.trackable.TrackableProperty.updateObjLookup(TrackableProperty.java:173)
   at forge.trackable.TrackableObject.set(TrackableObject.java:70)
   at forge.game.spellability.SpellAbilityView.updateHostCard(SpellAbilityView.java:43)
   at forge.game.spellability.SpellAbilityView.<init>(SpellAbilityView.java:29)
   at forge.game.spellability.SpellAbility.<init>(SpellAbility.java:182)
   at forge.game.spellability.SpellAbility.<init>(SpellAbility.java:175)
   at forge.game.spellability.AbilitySub.<init>(AbilitySub.java:85)
   at forge.game.ability.AbilityFactory$AbilityRecordType.buildSpellAbility(AbilityFactory.java:73)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:182)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:227)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:139)
   at forge.game.ability.AbilityFactory.getSubAbility(AbilityFactory.java:403)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:235)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:144)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.java:127)
   at forge.game.ability.AbilityFactory.getAbility(AbilityFactory.
... (truncated)
It looks like this might be triggered by the fact that my opponent has Crazed Firecat in his deck, which seems to consistently cause this (even when just in the opponent's hand, not on the battlefield or anything). Does anyone know what could be going on and how to fix it?

- Agetian

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 11 Jan 2017, 07:59
by Hanmac
@Agetian: try if it works when you revert my changes for TrackableObjects. Probably my fault and my plan doesn't work.

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 11 Jan 2017, 11:20
by Agetian
Hanmac wrote:@Agetian: try if it works when you revert my changes for TrackableObjects. Probably my fault and my plan doesn't work.
Nope, I tried reverting your change but it still doesn't work, most likely FlipACoin would need an extra parameter or something as you said before...

- Agetian

Re: Upcoming Release: Forge version 1.5.58

PostPosted: 12 Jan 2017, 18:17
by Turbomoose
Description: Computer player trying to use beguiler of wills

NullPointerException | Open
Code: Select all
Forge Version:    1.5.58-SNAPSHOT-r-1
Operating System: Windows 10 10.0 amd64
Java Version:     1.8.0_111 Oracle Corporation

java.lang.NullPointerException
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:139)
   at forge.ai.ability.ControlGainAi$1.apply(ControlGainAi.java:128)
   at com.google.common.collect.Iterators$7.computeNext(Iterators.java:647)
   at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
   at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
   at forge.util.collect.FCollection.<init>(FCollection.java:90)
   at forge.game.card.CardCollection.<init>(CardCollection.java:115)
   at forge.game.card.CardLists.filter(CardLists.java:255)
   at forge.ai.ability.ControlGainAi.canPlayAI(ControlGainAi.java:128)
   at forge.ai.SpellAbilityAi.canPlayAIWithSubs(SpellAbilityAi.java:29)
   at forge.ai.AiController.canPlaySa(AiController.java:654)
   at forge.ai.AiController.canPlayAndPayFor(AiController.java:641)
   at forge.ai.AiController.chooseSpellAbilityToPlay(AiController.java:1158)
   at forge.ai.AiController.getSpellAbilityToPlay(AiController.java:1133)
   at forge.ai.AiController.chooseSpellAbilityToPlay(AiController.java:1072)
   at forge.ai.PlayerControllerAi.chooseSpellAbilityToPlay(PlayerControllerAi.java:392)
   at forge.game.phase.PhaseHandler.startFirstTurn(PhaseHandler.java:925)
   at forge.game.GameAction.startGame(GameAction.java:1462)
   at forge.game.Match.startGame(Match.java:95)
   at forge.match.HostedMatch$2.run(HostedMatch.java:220)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)