@Override public boolean apply(Game game, Ability source) { for (Cost cost : source.getCosts()) { if (cost instanceof DiscardTargetCost) { DiscardTargetCost discardCost = (DiscardTargetCost) cost; Card discardedCard = discardCost.getCards().get(0); if (discardedCard != null) { FilterCard filter = new FilterCard(); filter.add(new UrzasHotTubPredicate(discardedCard.getName())); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true).apply(game, source); } } } return false; } }
@Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getFirstTarget()); FilterCard filter = new FilterPermanentCard(); filter.add(new NamePredicate(permanent.getName())); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0,3, filter), true).apply(game, source); } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(getTargetPointer().getFirst(game, source)); Object object = game.getState().getValue(source.getSourceId().toString() + ChooseACardNameEffect.INFO_KEY); if (player != null && object instanceof String) { player.revealCards(player.getLogName() + " hand", player.getHand(), game, true); String namedCard = (String) object; for (Card card : player.getHand().getCards(game)) { if (card != null && card.getName().equals(namedCard)) { return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true).apply(game, source); } } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { int numYourLands = game.getBattlefield().countAll(new FilterLandPermanent(), source.getControllerId(), game); int numOpponentLands = game.getBattlefield().countAll(new FilterLandPermanent(), this.getTargetPointer().getFirst(game, source), game); new SearchLibraryPutInHandEffect(new TargetCardInLibrary(0, (numOpponentLands > numYourLands ? 2 : 1), filter), true).apply(game, source); return true; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player == null) { return false; } int critterCount = player.getGraveyard().count(StaticFilters.FILTER_CARD_CREATURE, game); FilterCard filter = new FilterCard("a black card with converted mana cost less than or equal to " + critterCount); filter.add(new ColorPredicate(ObjectColor.BLACK)); filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, critterCount + 1)); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true).apply(game, source); } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Target target = new TargetCardInHand(0, Integer.MAX_VALUE, new FilterCard("cards to discard")); while (controller.canRespond() && !target.isChosen()) { target.choose(Outcome.BoostCreature, controller.getId(), source.getSourceId(), game); } int numDiscarded = 0; for (UUID targetId : target.getTargets()) { Card card = controller.getHand().get(targetId, game); if (controller.discard(card, source, game)) { numDiscarded++; } } game.applyEffects(); return new SearchLibraryPutInHandEffect( new TargetCardInLibrary(0, numDiscarded, StaticFilters.FILTER_CARD_BASIC_LAND), true, true) .apply(game, source); } return false; } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); if (controller == null || controller.getHand().isEmpty() || sourceObject == null) { return false; } Card cardToReveal = null; Target target = new TargetCardInHand(StaticFilters.FILTER_CARD_CREATURE); target.setNotTarget(true); if (controller.chooseTarget(outcome, target, source, game)) { cardToReveal = game.getCard(target.getFirstTarget()); } if (cardToReveal == null) { return false; } controller.revealCards("from hand :" + sourceObject.getName(), new CardsImpl(cardToReveal), game); String nameToSearch = cardToReveal.isSplitCard() ? ((SplitCard) cardToReveal).getLeftHalfCard().getName() : cardToReveal.getName(); FilterCard filterCard = new FilterCard("card named " + nameToSearch); filterCard.add(new NamePredicate(nameToSearch)); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true).apply(game, source); } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); MageObject mageObject = game.getObject(source.getSourceId()); if (player != null && mageObject != null) { Cost cost = new DiscardTargetCost(new TargetCardInHand(new FilterNonlandCard())); String message = "Discard a nonland card to search your library?"; if (cost.canPay(source, source.getSourceId(), source.getControllerId(), game) && player.chooseUse(Outcome.Detriment, message, source, game)) { if (cost.pay(source, game, source.getSourceId(), source.getControllerId(), false, null)) { Card card = game.getCard(cost.getTargets().getFirstTarget()); if (card == null) { return false; } String targetName = "card with converted mana cost of " + card.getConvertedManaCost(); FilterCard filter = new FilterCard(targetName); filter.add(new ConvertedManaCostPredicate(ComparisonType.EQUAL_TO, card.getConvertedManaCost())); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true, true).apply(game, source); } } return true; } return false; } }
filterCard = new FilterCard(); return new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filterCard), true, true).apply(game, source);