magefree / magefree/mage

SERVER - game error -- Strength of Harvest

Open
#15,547 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.4k
Forks
940
Avg merge
2d 12h
Merged PRs (30d)
160

Description

Xmage crashes whenever I am given the option of searching my library and selecting a card and I select Strength of Harvest.

Error type: SERVER - game error

Client version: 1.4.60-V2 (build: 2026-06-28 13:13)
Java version: 1.8.0_201
Default charset: UTF-8
Time: 2026-07-04T22:44:41Z

Game error occurred:

java.lang.IllegalArgumentException: Something wrong, found etb aura with empty spell ability or without any targets: Strength of the Harvest [f7b] (ModalDoubleFacedCard -> StrengthOfTheHarvest), source: When {this} dies, you may exile this card from your graveyard. If you do, search your library for an enchantment card, put that card onto the battlefield, then shuffle.
Server version: 1.4.60-V2 (build: 2026-06-28 13:13)

Game state:
Two Player Duel; T16.M1; active: spike; stack: 1 (top: stack ability ({T}, Sacrifice a creature: You gain 1 life.))

Stack trace:
```
mage.players.PlayerImpl.moveCards(PlayerImpl.java:5023)
mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect.apply(SearchLibraryPutInPlayEffect.java:72)
mage.abilities.effects.common.DoIfCostPaid.applyEffects(DoIfCostPaid.java:141)
mage.abilities.effects.common.DoIfCostPaid.apply(DoIfCostPaid.java:119)
mage.abilities.AbilityImpl.resolveMode(AbilityImpl.java:232)
mage.abilities.AbilityImpl.resolve(AbilityImpl.java:216)
mage.abilities.TriggeredAbilityImpl.resolve(TriggeredAbilityImpl.java:279)
mage.game.stack.StackAbility.resolve(StackAbility.java:85)
mage.game.GameImpl.resolve(GameImpl.java:1842)
mage.game.GameImpl.playPriority(GameImpl.java:1763)
mage.game.turn.Step.priority(Step.java:73)
mage.game.turn.Phase.playStep(Phase.java:205)
mage.game.turn.Phase.play(Phase.java:91)
mage.game.turn.Turn.play(Turn.java:132)
mage.game.GameImpl.playTurn(GameImpl.java:1180)
mage.game.GameImpl.play(GameImpl.java:1087)
mage.game.GameImpl.start(GameImpl.java:1063)
mage.server.game.GameWorker.call(GameWorker.java:35)
mage.server.game.GameWorker.call(GameWorker.java:16)
java.util.concurrent.FutureTask.run(FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)
```

Last game logs:
10:43 PM, T15.DR: zander draws a card
10:43 PM, T15.M1: zander puts Scattered Groves [47a] from hand onto the Battlefield
10:43 PM, T15.M1: zander plays Scattered Groves [47a]
10:43 PM, T15.DA: zander skip attack
10:43 PM: TURN 16 for spike (20 - 13)
10:43 PM, T16.DR: spike draws a card
10:43 PM, T16.M1: spike casts Academy Rector [938] from hand
10:43 PM, T16.M1: spike puts Academy Rector [938] from stack onto the Battlefield
10:43 PM, T16.M1: spike puts Hallowed Fountain [2c9] from hand onto the Battlefield
10:43 PM, T16.M1: spike plays Hallowed Fountain [2c9]
10:44 PM, T16.M1: spike sacrificed Academy Rector [938] (source: High Market [eb3])
10:44 PM, T16.M1: spike activates: you gain 1 life. from High Market [eb3]
10:44 PM, T16.M1: spike - Ability triggers: Academy Rector [938] - When Academy Rector [938] dies, you may exile this card from your graveyard. If you do, search your library for an enchantment card, put that card onto the battlefield, then shuffle.
10:44 PM, T16.M1: spike moves Academy Rector [938] from graveyard to the exile zone
10:44 PM, T16.M1: spike paid for Academy Rector [938] - Exile to search for an enchantment?
10:44 PM, T16.M1: spike searches their library (source: Academy Rector [938])

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with mage.players.PlayerImpl.moveCards and mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect, following the stack trace from the library search triggered by Academy Rector. Reproduce the Strength of the Harvest selection scenario and inspect why the selected card reaches the battlefield-move logic with an empty or untargeted ability. Done means selecting Strength of the Harvest no longer crashes the server and the search completes.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, game-dev
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
58/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.