From 01a0d23a55a3146fe506091d635bce6b307b4300 Mon Sep 17 00:00:00 2001 From: Evan Kranzler Date: Fri, 13 Nov 2020 09:40:18 -0500 Subject: [PATCH] removed method for preventing library search triggers --- .../mage/cards/j/JaceArchitectOfThought.java | 2 +- .../java/org/mage/test/player/TestPlayer.java | 13 +-- .../java/org/mage/test/stub/PlayerStub.java | 28 ++--- Mage/src/main/java/mage/players/Player.java | 21 ++-- .../main/java/mage/players/PlayerImpl.java | 100 ++++++++---------- 5 files changed, 65 insertions(+), 99 deletions(-) diff --git a/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java b/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java index a5fedec4070..ee213e36829 100644 --- a/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java +++ b/Mage.Sets/src/mage/cards/j/JaceArchitectOfThought.java @@ -259,7 +259,7 @@ class JaceArchitectOfThoughtEffect3 extends OneShotEffect { playerName = "your"; } TargetCardInLibrary target = new TargetCardInLibrary(new FilterNonlandCard("nonland card from " + playerName + " library")); - if (controller.searchLibrary(target, source, game, playerId, !checkList.contains(playerId))) { + if (controller.searchLibrary(target, source, game, playerId)) { checkList.add(playerId); UUID targetId = target.getFirstTarget(); Card card = player.getLibrary().remove(targetId, game); diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 977c05ebd40..dabb3552a05 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -3273,21 +3273,12 @@ public class TestPlayer implements Player { return computerPlayer.searchLibrary(target, source, game); } - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, boolean triggerEvents) { - return computerPlayer.searchLibrary(target, source, game, triggerEvents); - } @Override public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId) { return computerPlayer.searchLibrary(target, source, game, targetPlayerId); } - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId, boolean triggerEvents) { - return computerPlayer.searchLibrary(target, source, game, targetPlayerId, triggerEvents); - } - @Override public void lookAtAllLibraries(Ability source, Game game) { computerPlayer.lookAtAllLibraries(source, game); @@ -3402,12 +3393,12 @@ public class TestPlayer implements Player { public boolean canPayLifeCost(Ability ability) { return computerPlayer.canPayLifeCost(ability); } - + @Override public boolean getCanPayLifeCost() { return computerPlayer.getCanPayLifeCost(); } - + @Override public void setCanPayLifeCost(boolean canPayLifeCost) { computerPlayer.setCanPayLifeCost(canPayLifeCost); diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java index f812d0d0c75..f66037936a8 100644 --- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -1,6 +1,8 @@ package org.mage.test.stub; +import mage.ApprovingObject; import mage.MageObject; +import mage.Mana; import mage.abilities.*; import mage.abilities.costs.AlternativeSourceCosts; import mage.abilities.costs.Cost; @@ -40,8 +42,6 @@ import mage.target.common.TargetCardInLibrary; import java.io.Serializable; import java.util.*; -import mage.ApprovingObject; -import mage.Mana; /** * @author Quercitron @@ -179,12 +179,12 @@ public class PlayerStub implements Player { public void setCanPayLifeCost(boolean canPayLifeCost) { } - + @Override public boolean getCanPayLifeCost() { return false; } - + @Override public boolean canPayLifeCost(Ability ability) { return false; @@ -579,21 +579,11 @@ public class PlayerStub implements Player { return false; } - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, boolean triggerEvents) { - return false; - } - @Override public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId) { return false; } - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId, boolean triggerEvents) { - return false; - } - @Override public void lookAtAllLibraries(Ability source, Game game) { } @@ -1045,19 +1035,19 @@ public class PlayerStub implements Player { @Override public void addAvailableTriggeredMana(List availableTriggeredMan) { - - } - + + } + @Override public List> getAvailableTriggeredMana() { return null; } - + @Override public int announceXMana(int min, int max, String message, Game game, Ability ability) { return 0; } - + @Override public List getPlayable(Game game, boolean hidden) { return null; diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index da34ae28cf7..5e06145e978 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -1,7 +1,5 @@ package mage.players; -import java.io.Serializable; -import java.util.*; import mage.ApprovingObject; import mage.MageItem; import mage.MageObject; @@ -41,6 +39,9 @@ import mage.target.TargetCard; import mage.target.common.TargetCardInLibrary; import mage.util.Copyable; +import java.io.Serializable; +import java.util.*; + /** * @author BetaSteward_at_googlemail.com */ @@ -103,12 +104,12 @@ public interface Player extends MageItem, Copyable { /** * Is the player allowed to pay life for casting spells or activate activated abilities - * - * @param canPayLifeCost + * + * @param canPayLifeCost */ - + void setCanPayLifeCost(boolean canPayLifeCost); - + boolean getCanPayLifeCost(); /** @@ -345,19 +346,15 @@ public interface Player extends MageItem, Copyable { boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game); - boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, boolean triggerEvents); - - boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId); - /** * @param target * @param source * @param game * @param targetPlayerId player whose library will be searched - * @param triggerEvents whether searching will trigger any game events * @return true if search was successful */ - boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId, boolean triggerEvents); + + boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId); /** * Reveals all players' libraries. Useful for abilities like Jace, Architect diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 14dedf50a1b..d595afee7ff 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -2603,21 +2603,11 @@ public abstract class PlayerImpl implements Player, Serializable { @Override public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game) { - return searchLibrary(target, source, game, playerId, true); - } - - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, boolean triggerEvents) { - return searchLibrary(target, source, game, playerId, triggerEvents); + return searchLibrary(target, source, game, playerId); } @Override public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId) { - return searchLibrary(target, source, game, targetPlayerId, true); - } - - @Override - public boolean searchLibrary(TargetCardInLibrary target, Ability source, Game game, UUID targetPlayerId, boolean triggerEvents) { //20091005 - 701.14c Library searchedLibrary = null; String searchInfo = null; @@ -2636,59 +2626,57 @@ public abstract class PlayerImpl implements Player, Serializable { } GameEvent event = GameEvent.getEvent(GameEvent.EventType.SEARCH_LIBRARY, targetPlayerId, source.getSourceId(), playerId, Integer.MAX_VALUE); - if (!game.replaceEvent(event)) { - if (!game.isSimulation()) { - game.informPlayers(searchInfo); - } - TargetCardInLibrary newTarget = target.copy(); - int count; - int librarySearchLimit = event.getAmount(); - List cardsFromTop = null; - do { - // TODO: prevent shuffling from moving the visualized cards - if (librarySearchLimit == Integer.MAX_VALUE) { - count = searchedLibrary.count(target.getFilter(), game); + if (game.replaceEvent(event)) { + return false; + } + if (!game.isSimulation()) { + game.informPlayers(searchInfo); + } + TargetCardInLibrary newTarget = target.copy(); + int count; + int librarySearchLimit = event.getAmount(); + List cardsFromTop = null; + do { + // TODO: prevent shuffling from moving the visualized cards + if (librarySearchLimit == Integer.MAX_VALUE) { + count = searchedLibrary.count(target.getFilter(), game); + } else { + Player targetPlayer = game.getPlayer(targetPlayerId); + if (targetPlayer == null) { + return false; + } + if (cardsFromTop == null) { + cardsFromTop = new ArrayList<>(targetPlayer.getLibrary().getTopCards(game, librarySearchLimit)); } else { - Player targetPlayer = game.getPlayer(targetPlayerId); - if (targetPlayer == null) { - return false; - } - if (cardsFromTop == null) { - cardsFromTop = new ArrayList<>(targetPlayer.getLibrary().getTopCards(game, librarySearchLimit)); - } else { - cardsFromTop.retainAll(targetPlayer.getLibrary().getCards(game)); - } - newTarget.setCardLimit(Math.min(librarySearchLimit, cardsFromTop.size())); - count = Math.min(searchedLibrary.count(target.getFilter(), game), librarySearchLimit); + cardsFromTop.retainAll(targetPlayer.getLibrary().getCards(game)); } + newTarget.setCardLimit(Math.min(librarySearchLimit, cardsFromTop.size())); + count = Math.min(searchedLibrary.count(target.getFilter(), game), librarySearchLimit); + } - if (count < target.getNumberOfTargets()) { - newTarget.setMinNumberOfTargets(count); - } - if (newTarget.choose(Outcome.Neutral, playerId, targetPlayerId, game)) { - if (targetPlayerId.equals(playerId) && handleLibraryCastableCards(library, - game, targetPlayerId)) { // for handling Panglacial Wurm - newTarget.clearChosen(); - continue; - } - target.getTargets().clear(); - for (UUID targetId : newTarget.getTargets()) { - target.add(targetId, game); - } - - } else if (targetPlayerId.equals(playerId) && handleLibraryCastableCards(library, + if (count < target.getNumberOfTargets()) { + newTarget.setMinNumberOfTargets(count); + } + if (newTarget.choose(Outcome.Neutral, playerId, targetPlayerId, game)) { + if (targetPlayerId.equals(playerId) && handleLibraryCastableCards(library, game, targetPlayerId)) { // for handling Panglacial Wurm newTarget.clearChosen(); continue; } - if (triggerEvents) { - game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LIBRARY_SEARCHED, targetPlayerId, playerId)); + target.getTargets().clear(); + for (UUID targetId : newTarget.getTargets()) { + target.add(targetId, game); } - break; - } while (true); - return true; - } - return false; + + } else if (targetPlayerId.equals(playerId) && handleLibraryCastableCards(library, + game, targetPlayerId)) { // for handling Panglacial Wurm + newTarget.clearChosen(); + continue; + } + game.fireEvent(GameEvent.getEvent(GameEvent.EventType.LIBRARY_SEARCHED, targetPlayerId, playerId)); + break; + } while (true); + return true; } @Override