@Override
public boolean apply(Game game, Ability source) {
Player player = game.getPlayer(source.getControllerId());
Player targetPlayer = game.getPlayer(source.getFirstTarget());
if (targetPlayer != null && player != null) {
for (Card card : targetPlayer.getGraveyard().getCards(game)) {
if (!StaticFilters.FILTER_CARD_BASIC_LAND.match(card, game)) {
card.moveToExile(null, "", source.getSourceId(), game);
FilterCard filterCard = new FilterCard("cards named " + card.getName());
String nameToSearch = card.isSplitCard() ? ((SplitCard) card).getLeftHalfCard().getName() : card.getName();
filterCard.add(new NamePredicate(nameToSearch));
int count = targetPlayer.getLibrary().count(filterCard, game);
TargetCardInLibrary target = new TargetCardInLibrary(count, count, filterCard);
player.searchLibrary(target, game, targetPlayer.getId());
List<UUID> targets = target.getTargets();
for (UUID cardId : targets) {
Card libraryCard = game.getCard(cardId);
if (libraryCard != null) {
libraryCard.moveToExile(null, "", source.getSourceId(), game);
}
}
}
}
targetPlayer.shuffleLibrary(source, game);
return true;
}
return false;
}