@Override public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { Player controller = game.getPlayer(controllerId); if(controller == null) { return false; } return controller.getGraveyard().size() >= amount; }
@Override public Set<UUID> possibleTargets(UUID sourceControllerId, Cards cards, Game game) { Set<UUID> possibleTargets = new HashSet<>(); Player player = game.getPlayer(sourceControllerId); for (Card card : cards.getCards(filter, game)) { if (player.getGraveyard().getCards(game).contains(card)) { possibleTargets.add(card.getId()); } } return possibleTargets; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); return player != null && player.getGraveyard().count(filter, game) > 0; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); return player != null && player.getGraveyard().count(filter, game) >= 20; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (filter != null) { return player != null && player.getGraveyard().count(filter, source.getSourceId(), source.getControllerId(), game) >= value; } return player != null && player.getGraveyard().size() >= value; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); return player != null && player.getGraveyard().count(filter, game) > 0; } }
@Override public void init(Ability source, Game game) { super.init(source, game); if (this.affectedObjectsSet) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { player.getGraveyard().stream().map((cardId) -> game.getCard(cardId)).filter((card) -> (card.isInstant() || card.isSorcery())).forEachOrdered((card) -> { affectedObjectList.add(new MageObjectReference(card, game)); }); } } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { Player player = game.getPlayer(effect.getTargetPointer().getFirst(game, sourceAbility)); if (player != null) { if (filter == null) { return player.getGraveyard().size(); } else { return player.getGraveyard().count(filter, sourceAbility.getControllerId(), sourceAbility.getSourceId(), game); } } return 0; }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { Set<Card> cards = player.getGraveyard().getCards(filter2orLess, game); player.moveCards(cards, Zone.HAND, source, game); return true; } return false; } }
@Override public boolean apply(Game game, Ability source, Ability abilityToModify) { Player player = game.getPlayer(source.getControllerId()); if (player != null) { int reductionAmount = player.getGraveyard().count(filter, game); CardUtil.reduceCost(abilityToModify, reductionAmount); return true; } return false; }
@Override public boolean apply(Game game, Ability source, Ability abilityToModify) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { CardUtil.reduceCost(abilityToModify, controller.getGraveyard().count(StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game)); } return true; }
@Override public boolean apply(Game game, Ability source) { Player p = game.getPlayer(source.getControllerId()); if (p != null && p.getGraveyard().count(new FilterInstantOrSorceryCard(), game) >= value) { return true; } return false; } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { int amount = 0; Player player = game.getPlayer(sourceAbility.getControllerId()); if (player != null) { amount += player.getGraveyard().count( filter, sourceAbility.getSourceId(), sourceAbility.getControllerId(), game ); } return amount + 2; }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { int count = 0; for (UUID playerId : game.getState().getPlayersInRange(sourceAbility.getControllerId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { count += player.getGraveyard().size(); } } return count; }
@Override public int calculate(Game game, Ability source, Effect effect) { int amount = 0; Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { amount += controller.getGraveyard().count(filter, source.getSourceId(), source.getControllerId(), game); } return amount + 2; }
@Override public boolean apply(Game game, Ability source) { Player targetPlayer = game.getPlayer(targetPointer.getFirst(game, source)); if (targetPlayer != null) { for (Card card : targetPlayer.getGraveyard().getCards(filter, game)) { card.moveToExile(null, "", source.getSourceId(), game); } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { Player player = game.getPlayer(playerId); if (player != null) { player.moveCards(player.getGraveyard().getCards(StaticFilters.FILTER_CARD_ARTIFACT, game), Zone.BATTLEFIELD, source, game); } } return true; } }
@Override public boolean canTarget(UUID controllerId, UUID id, Ability source, Game game) { if (super.canTarget(controllerId, id, source, game)) { Permanent target = game.getPermanent(id); if (target != null) { return target.getPower().getValue() < game.getPlayer(source.getControllerId()).getGraveyard().size(); } return false; } return false; }
@Override public boolean canTarget(UUID id, Ability source, Game game) { Card card = game.getCard(id); if (card != null && game.getState().getZone(card.getId()) == Zone.GRAVEYARD) { UUID firstTarget = source.getFirstTarget(); if (firstTarget != null && game.getPlayer(firstTarget).getGraveyard().contains(id)) { return filter.match(card, game); } } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { controller.moveCards(controller.getLibrary().getTopCards(game, 2), Zone.GRAVEYARD, source, game); if (controller.getGraveyard().count(filter, source.getSourceId(), source.getControllerId(), game) >= 1) { return new TransformSourceEffect(true).apply(game, source); } } return false; } }