diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index b2c2ed02f05..9276dd1e0ff 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -1816,7 +1816,8 @@ public class ComputerPlayer extends PlayerImpl implements Player { abilityControllerId = target.getAbilityController(); } - List cardChoices = new ArrayList<>(cards.getCards(target.getFilter(), game)); + // we still use playerId when getting cards even if they don't control the search + List cardChoices = new ArrayList<>(cards.getCards(target.getFilter(), source != null ? source.getSourceId() : null, playerId, game)); while (!target.doneChosing()) { Card card = pickTarget(abilityControllerId, cardChoices, outcome, target, source, game); if (card != null) { diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/single/khm/FrostpyreArcanistTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/single/khm/FrostpyreArcanistTest.java new file mode 100644 index 00000000000..cadc11f5e1b --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/single/khm/FrostpyreArcanistTest.java @@ -0,0 +1,50 @@ +package org.mage.test.cards.single.khm; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author TheElk801 + */ +public class FrostpyreArcanistTest extends CardTestPlayerBase { + + private static final String arcanist = "Frostpyre Arcanist"; + private static final String bolt = "Lightning Bolt"; + + @Test + public void testCanFind() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 5); + addCard(Zone.LIBRARY, playerA, bolt); + addCard(Zone.GRAVEYARD, playerA, bolt); + addCard(Zone.HAND, playerA, arcanist); + + addTarget(playerA, bolt); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, arcanist); + + setStrictChooseMode(true); + setStopAt(1, PhaseStep.END_TURN); + execute(); + assertAllCommandsUsed(); + + assertLibraryCount(playerA, bolt, 0); + assertHandCount(playerA, bolt, 1); + } + + @Test + public void testCantFind() { + addCard(Zone.BATTLEFIELD, playerA, "Island", 5); + addCard(Zone.LIBRARY, playerA, bolt); + addCard(Zone.HAND, playerA, arcanist); + + addTarget(playerA, bolt); + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, arcanist); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertLibraryCount(playerA, bolt, 1); + assertHandCount(playerA, bolt, 0); + } +} diff --git a/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java b/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java index a3401641de6..bbbd6d63a50 100644 --- a/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java +++ b/Mage/src/main/java/mage/target/common/TargetCardInLibrary.java @@ -1,11 +1,5 @@ - package mage.target.common; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.UUID; - import mage.MageObject; import mage.abilities.Ability; import mage.cards.Card; @@ -14,12 +8,17 @@ import mage.cards.CardsImpl; import mage.constants.Outcome; import mage.constants.Zone; import mage.filter.FilterCard; +import mage.filter.StaticFilters; import mage.game.Game; import mage.players.Player; import mage.target.TargetCard; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.UUID; + /** - * * @author BetaSteward_at_googlemail.com */ public class TargetCardInLibrary extends TargetCard { @@ -27,7 +26,7 @@ public class TargetCardInLibrary extends TargetCard { private int librarySearchLimit; public TargetCardInLibrary() { - this(1, 1, new FilterCard()); + this(1, 1, StaticFilters.FILTER_CARD); } public TargetCardInLibrary(FilterCard filter) { @@ -93,7 +92,7 @@ public class TargetCardInLibrary extends TargetCard { @Override public boolean canTarget(UUID id, Ability source, Game game) { Card card = game.getPlayer(source.getControllerId()).getLibrary().getCard(id, game); - return card != null && filter.match(card, game); + return card != null && filter.match(card, source.getSourceId(), source.getControllerId(), game); } @Override