@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); Cards cards = new CardsImpl(Zone.PICK); int count = Math.min(player.getLibrary().size(), 4); for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); cards.add(card); game.setZone(card.getId(), Zone.PICK); } if (cards.size() == 0) { return false; } TargetCard target1 = new TargetCard(Zone.PICK, filter1); if (player.choose(Outcome.Detriment, cards, target1, game)) { Card card = cards.get(target1.getFirstTarget(), game); if (card != null) { cards.remove(card); card.moveToExile(getId(), "Clone Shell (Imprint)", source.getSourceId(), game); card.setFaceDown(true, game); Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { permanent.imprint(card.getId(), game); } } target1.clearChosen(); } if (cards.size() > 0) { TargetCard target2 = new TargetCard(Zone.PICK, filter2); while (player.canRespond() && cards.size() > 1) { player.choose(Outcome.Benefit, cards, target2, game); Card card = cards.get(target2.getFirstTarget(), game); if (card != null) { cards.remove(card); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); } target2.clearChosen(); } Card card = cards.get(cards.iterator().next(), game); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); } return true; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); int amount = new GetXValue().calculate(game, source, this); if (controller != null && sourceObject != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, amount, new FilterCard()); if (controller.searchLibrary(target, game)) { Cards chosen = new CardsImpl(); for (UUID cardId : (List<UUID>) target.getTargets()) { Card card = controller.getLibrary().remove(cardId, game); chosen.add(card); } controller.shuffleLibrary(source, game); TargetCard targetToLib = new TargetCard(Zone.LIBRARY, new FilterCard(textTop)); while (chosen.size() > 1 && controller.canRespond()) { controller.choose(Outcome.Neutral, chosen, targetToLib, game); Card card = chosen.get(targetToLib.getFirstTarget(), game); if (card != null) { chosen.remove(card); controller.moveCardToLibraryWithInfo( card, source.getSourceId(), game, Zone.LIBRARY, true, false); } targetToLib.clearChosen(); } if (chosen.size() == 1) { Card card = chosen.get(chosen.iterator().next(), game); controller.moveCardToLibraryWithInfo( card, source.getSourceId(), game, Zone.LIBRARY, true, false); } } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); MageObject sourceObject = game.getObject(source.getSourceId()); if (player == null || sourceObject == null) { return false; } int xValue; xValue = source.getManaCostsToPay().getX(); Cards cards = new CardsImpl(Zone.PICK); int count = Math.min(player.getLibrary().size(), xValue); for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); game.setZone(card.getId(), Zone.PICK); } } player.lookAtCards(sourceObject.getName(), cards, game); TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put into your hand")); if (player.choose(Outcome.DrawCard, cards, target, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); card.moveToZone(Zone.HAND, source.getSourceId(), game, false); game.informPlayers( sourceObject.getName() + ": " + player.getLogName() + " puts a card into his or her hand"); } } target = new TargetCard(Zone.PICK, new FilterCard("card to put on the bottom of your library")); if (cards.size() > 0) { game.informPlayers( new StringBuilder(sourceObject.getName()) .append(": ") .append(player.getLogName()) .append(" puts ") .append(cards.size() == 1 ? "a" : cards.size()) .append(" card") .append(cards.size() > 1 ? "s" : "") .append(" on the bottom of his or her library") .toString()); } while (player.isInGame() && cards.size() > 1) { player.choose(Outcome.Neutral, cards, target, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); } target.clearChosen(); } if (cards.size() == 1) { Card card = cards.get(cards.iterator().next(), game); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); } return true; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); Permanent enchantment = game.getPermanent(source.getSourceId()); if (player == null || enchantment.getAttachedTo() == null) { return false; } Permanent creature = game.getPermanent(enchantment.getAttachedTo()); if (creature == null) { return false; } Cards cards = new CardsImpl(Zone.PICK); int count = Math.min(player.getLibrary().size(), 5); for (int i = 0; i < count; i++) { Card card = player.getLibrary().removeFromTop(game); if (card != null) { cards.add(card); game.setZone(card.getId(), Zone.PICK); } } player.lookAtCards("Call to the Kindred", cards, game); FilterCreatureCard filter = new FilterCreatureCard(); StringBuilder sb = new StringBuilder("creature card with at least one subtype from: "); ArrayList<Predicate<MageObject>> subtypes = new ArrayList<Predicate<MageObject>>(); for (String subtype : creature.getSubtype()) { subtypes.add(new SubtypePredicate(subtype)); sb.append(subtype).append(", "); } filter.add(Predicates.or(subtypes)); sb.delete(sb.length() - 2, sb.length()); filter.setMessage(sb.toString()); if (cards.count(filter, game) > 0 && player.chooseUse( Outcome.DrawCard, "Do you wish to put a creature card onto the battlefield?", source, game)) { TargetCard target = new TargetCard(Zone.PICK, filter); if (player.choose(Outcome.PutCreatureInPlay, cards, target, game)) { Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); card.putOntoBattlefield(game, Zone.PICK, source.getSourceId(), source.getControllerId()); } } } TargetCard target = new TargetCard(Zone.PICK, new FilterCard("card to put on the bottom of your library")); while (player.isInGame() && cards.size() > 1) { player.choose(Outcome.Neutral, cards, target, game); Card card = cards.get(target.getFirstTarget(), game); if (card != null) { cards.remove(card); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); } target.clearChosen(); } if (cards.size() == 1) { Card card = cards.get(cards.iterator().next(), game); card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, false); } return true; }