@Override public boolean removeFromLibrary(Card card, Game game) { if (card == null) { return false; } library.remove(card.getId(), game); return true; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { TargetCardInLibrary target = new TargetCardInLibrary(); if (player.searchLibrary(target, game)) { Card card = player.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { player.shuffleLibrary(source, game); player.putCardOnTopXOfLibrary(card, game, source, 3); } } return true; } return false; } }
private void searchLand(Player player, Ability source, Game game, Cards cards, String subtype) { FilterLandCard filter = new FilterLandCard(subtype); filter.add(new SubtypePredicate(SubType.byDescription(subtype))); TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { Card card = player.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { card.moveToZone(Zone.HAND, source.getSourceId(), game, false); cards.add(card); } } }
private void searchCard(Player player, Ability source, Game game, Cards cards, String subtype) { FilterCard filter = new FilterCard(subtype); filter.add(new SubtypePredicate(SubType.byDescription(subtype))); TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { Card card = player.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { card.moveToZone(Zone.HAND, source.getSourceId(), game, false); cards.add(card); } } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player == null) { return false; } TargetCardInLibrary target = new TargetCardInLibrary(new FilterLandCard()); if (player.searchLibrary(target, game)) { if (!target.getTargets().isEmpty()) { UUID cardId = target.getTargets().get(0); Card card = player.getLibrary().remove(cardId, game); if (card != null) { card.moveToExile(source.getSourceId(), "Strata Scythe", source.getSourceId(), game); Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { permanent.imprint(card.getId(), game); } } } } player.shuffleLibrary(source, game); return true; }
private void searchLand(Player player, Ability source, Game game, Cards cards, String subtype) { FilterLandCard filter = new FilterLandCard(subtype); filter.add(new SubtypePredicate(SubType.byDescription(subtype))); TargetCardInLibrary target = new TargetCardInLibrary(filter); if (player.searchLibrary(target, game)) { Card card = player.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { card.moveToZone(Zone.HAND, source.getSourceId(), game, false); cards.add(card); } } } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); Card sourceCard = game.getCard(source.getSourceId()); if (sourceCard != null && player != null && player.searchLibrary(target, game)) { if (!target.getTargets().isEmpty()) { Cards cards = new CardsImpl(); for (UUID cardId : target.getTargets()) { Card card = player.getLibrary().remove(cardId, game); if (card != null) { cards.add(card); } } player.revealCards(sourceCard.getIdName(), cards, game); player.moveCards(cards, Zone.HAND, source, game); } player.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, Integer.MAX_VALUE, new FilterNonlandCard()); if (player.searchLibrary(target, game)) { for (UUID targetId : target.getTargets()) { Card card = player.getLibrary().remove(targetId, game); if (card != null) { card.moveToExile(null, "", source.getSourceId(), game); } } } player.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player targetPlayer = game.getPlayer(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId()); if (player != null && targetPlayer != null) { TargetCardInLibrary target = new TargetCardInLibrary(1, 1, filter); if (player.searchLibrary(target, game, targetPlayer.getId())) { Card card = targetPlayer.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } targetPlayer.shuffleLibrary(source, game); return true; } 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 && sourceObject != null) { TargetCardInLibrary target = new TargetCardInLibrary(filter); if (controller.searchLibrary(target, game)) { if (!target.getTargets().isEmpty()) { Card card = controller.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); Cards cards = new CardsImpl(); cards.add(card); controller.revealCards(sourceObject.getIdName(), cards, game, true); } } } controller.discardOne(true, source, game); controller.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { int amount = ManacostVariableValue.instance.calculate(game, source, this); TargetCardInLibrary target = new TargetCardInLibrary(0, amount, new FilterCard()); Player player = game.getPlayer(source.getControllerId()); if (player == null) { return false; } if (player.searchLibrary(target, game)) { for (UUID cardId : target.getTargets()) { Card card = player.getLibrary().remove(cardId, game); if (card != null) { card.moveToZone(Zone.HAND, source.getSourceId(), game, false); } } } player.shuffleLibrary(source, game); return true; } }
@Override public boolean apply(Game game, Ability source) { Player targetPlayer = game.getPlayer(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId()); if (player != null && targetPlayer != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, 5, filter); if (player.searchLibrary(target, game, targetPlayer.getId())) { List<UUID> targetId = target.getTargets(); for (UUID targetCard : targetId) { Card card = targetPlayer.getLibrary().remove(targetCard, game); if (card != null) { player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } } targetPlayer.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player opponent = game.getPlayer(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId()); if (player != null && opponent != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, 3, new FilterCard("cards from opponents library to exile")); if (player.searchLibrary(target, game, opponent.getId())) { List<UUID> targets = target.getTargets(); for (UUID targetId : targets) { Card card = opponent.getLibrary().remove(targetId, game); if (card != null) { player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } } opponent.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getFirstTarget()); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && player != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, 7, new FilterCard("cards from player's library to exile")); if (controller.searchLibrary(target, game, player.getId())) { List<UUID> targets = target.getTargets(); for (UUID targetId : targets) { Card card = player.getLibrary().remove(targetId, game); if (card != null) { controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); } } } player.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player targetPlayer = game.getPlayer(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId()); if (player != null && targetPlayer != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, amount, new FilterCard("cards to exile")); if (player.searchLibrary(target, game, targetPlayer.getId())) { List<UUID> targets = target.getTargets(); for (UUID targetId : targets) { Card card = targetPlayer.getLibrary().remove(targetId, game); if (card != null) { card.moveToExile(null, "", source.getSourceId(), game); } } } targetPlayer.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Player opponent = game.getPlayer(this.getTargetPointer().getFirst(game, source)); if (controller != null && opponent != null) { TargetCardInLibrary target = new TargetCardInLibrary(0, 1, new FilterInstantOrSorceryCard()); if (controller.searchLibrary(target, game, opponent.getId())) { Card card = opponent.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { controller.cast(card.getSpellAbility(), game, true, new MageObjectReference(source.getSourceObject(game), game)); } } opponent.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { boolean result = false; Player controller = game.getPlayer(source.getControllerId()); Player targetPlayer = game.getPlayer(source.getFirstTarget()); if (controller != null && targetPlayer != null) { int amount = new PermanentsOnBattlefieldCount(filter).calculate(game, source, this); TargetCardInLibrary target = new TargetCardInLibrary(0, amount, new FilterCard()); if (controller.searchLibrary(target, game, targetPlayer.getId())) { List<UUID> targetId = target.getTargets(); for (UUID targetCard : targetId) { Card card = targetPlayer.getLibrary().remove(targetCard, game); if (card != null) { controller.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); result = true; } } } } if (targetPlayer != null) { targetPlayer.shuffleLibrary(source, game); } return result; } }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Player damagedPlayer = game.getPlayer(targetPointer.getFirst(game, source)); MageObject sourceObject = game.getObject(source.getSourceId()); if (controller == null || damagedPlayer == null || sourceObject == null) { return false; } TargetCardInLibrary target = new TargetCardInLibrary(new FilterArtifactCard()); if (controller.searchLibrary(target, game, damagedPlayer.getId())) { if (!target.getTargets().isEmpty()) { Card card = damagedPlayer.getLibrary().remove(target.getFirstTarget(), game); if (card != null) { controller.moveCardToExileWithInfo(card, source.getSourceId(), sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new ThadaAdelPlayFromExileEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); } } } damagedPlayer.shuffleLibrary(source, game); return true; }
@Override public boolean apply(Game game, Ability source) { Player opponent = game.getPlayer(source.getFirstTarget()); Player player = game.getPlayer(source.getControllerId()); if (player != null && opponent != null) { if (opponent.getLibrary().hasCards()) { TargetCardInLibrary target = new TargetCardInLibrary(); if (player.searchLibrary(target, game, opponent.getId())) { UUID targetId = target.getFirstTarget(); Card card = opponent.getLibrary().remove(targetId, game); if (card != null) { player.moveCardToExileWithInfo(card, null, null, source.getSourceId(), game, Zone.LIBRARY, true); int cmc = card.getConvertedManaCost(); if (cmc > 0) { player.gainLife(cmc, game, source); } } } } opponent.shuffleLibrary(source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source) { Player you = game.getPlayer(source.getControllerId()); Player targetOpponent = game.getPlayer(source.getFirstTarget()); MageObject sourceObject = game.getObject(source.getSourceId()); if (you != null && targetOpponent != null && sourceObject != null) { if (targetOpponent.getLibrary().hasCards()) { TargetCardInLibrary targetCard = new TargetCardInLibrary(); if (you.searchLibrary(targetCard, game, targetOpponent.getId())) { Card card = targetOpponent.getLibrary().remove(targetCard.getFirstTarget(), game); if (card != null) { UUID exileZoneId = CardUtil.getCardExileZoneId(game, source); you.moveCardToExileWithInfo(card, exileZoneId, sourceObject.getIdName(), source.getSourceId(), game, Zone.LIBRARY, true); ContinuousEffect effect = new GrinningTotemMayPlayEffect(); effect.setTargetPointer(new FixedTarget(card.getId())); game.addEffect(effect, source); game.addDelayedTriggeredAbility(new GrinningTotemDelayedTriggeredAbility(exileZoneId), source); } } } targetOpponent.shuffleLibrary(source, game); return true; } return false; }