@Override public boolean checkInterveningIfClause(Game game) { ExileZone exileZone = game.getExile().getExileZone(exileZoneId); return exileZone != null && !exileZone.getCards(game).isEmpty(); }
@Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { if (affectedControllerId.equals(source.getControllerId())) { ExileZone zone = game.getExile().getExileZone(exileId); if (zone != null && zone.contains(objectId)) { return true; } } return false; }
@Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { Card sourceCard = game.getCard(sourceId); if (sourceCard != null) { UUID exileId = sourceId; ExileZone exile = game.getExile().getExileZone(exileId); if (exile != null && !exile.isEmpty()) { return true; } } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); ExileZone zone = game.getExile().getExileZone(exileZoneId); if (controller != null && zone != null) { return controller.moveCards(zone, Zone.GRAVEYARD, source, game); } return false; }
@Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { Card sourceCard = game.getCard(sourceId); if (sourceCard != null) { UUID exileId = CardUtil.getCardExileZoneId(game, sourceId); ExileZone exile = game.getExile().getExileZone(exileId); if (exile != null && !exile.isEmpty()) { return true; } } return false; }
@Override public boolean canChoose(UUID sourceId, UUID sourceControllerId, Game game) { Card sourceCard = game.getCard(sourceId); if (sourceCard != null) { UUID exileId = CardUtil.getCardExileZoneId(game, sourceId); ExileZone exile = game.getExile().getExileZone(exileId); if (exile != null && !exile.isEmpty()) { return true; } } return false; }
@Override public boolean canTarget(UUID id, Game game) { Permanent permanent = game.getPermanent(id); if (permanent != null) { return filter.match(permanent, game); } Card card = game.getExile().getCard(id, game); return card != null && filter.match(card, game); }
@Override public boolean canPay(Ability ability, UUID sourceId, UUID controllerId, Game game) { Player controller = game.getPlayer(controllerId); if (controller != null) { for (Card card : game.getExile().getAllCards(game)) { if (controller.hasOpponent(card.getOwnerId(), game)) { return true; } } } return false; }
@Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { if (affectedControllerId.equals(source.getControllerId()) && game.getState().getZone(objectId) == Zone.EXILED) { ExileZone zone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); return zone != null && zone.contains(objectId); } return false; } }
@Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { if (affectedControllerId.equals(source.getControllerId()) && game.getState().getZone(objectId) == Zone.EXILED) { ExileZone zone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); return zone != null && zone.contains(objectId); } return false; } }
@Override public boolean apply(Game game, Ability source) { Player player = game.getPlayer(game.getActivePlayerId()); if (player != null) { Set<Card> cardsInExile = game.getExile().getExileZone(source.getSourceId()).getCards(game); if (cardsInExile != null) { player.moveCardsToGraveyardWithInfo(cardsInExile, source, game, Zone.EXILED); return true; } } return false; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { UUID exileId = source.getSourceId(); ExileZone exileZone = game.getExile().getExileZone(exileId); if (exileZone != null) { return controller.moveCards(exileZone.getCards(game), Zone.GRAVEYARD, source, game); } } return false; }
@Override public boolean replaceEvent(GameEvent event, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { Card card = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)).getRandom(game); if (card != null) { controller.moveCards(card, Zone.HAND, source, game); } } return true; }
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { ExileZone exile = game.getExile().getExileZone(source.getSourceId()); if (exile != null) { controller.moveCards(exile.getCards(game), Zone.BATTLEFIELD, source, game, false, false, true, null); } return true; } return false; }
@Override public boolean apply(Game game, Ability source) { ExileZone exile = game.getExile().getExileZone(exileId); Player controller = game.getPlayer(source.getControllerId()); if (controller != null && exile != null) { controller.moveCards(exile.getCards(new FilterCreatureCard(), game), Zone.BATTLEFIELD, source, game, false, false, this.byOwner, null); return true; } return false; } }
@Override public boolean applies(UUID objectId, Ability source, UUID affectedControllerId, Game game) { Card card = game.getCard(objectId); if (affectedControllerId.equals(source.getControllerId()) && card != null && game.getState().getZone(card.getId()) == Zone.EXILED) { ExileZone zone = game.getExile().getExileZone(CardUtil.getCardExileZoneId(game, source)); return zone != null && zone.contains(card.getId()); } return false; } }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { ExileZone exileZone = game.getExile().getExileZone(CardUtil.getExileZoneId(game, sourceAbility.getSourceId(), sourceAbility.getSourceObjectZoneChangeCounter())); if (exileZone != null) { Card exiledCard = exileZone.getRandom(game); if (exiledCard != null) { return exiledCard.getPower().getValue(); } } return 0; }
@Override public int calculate(Game game, Ability sourceAbility, Effect effect) { Player player = game.getPlayer(sourceAbility.getControllerId()); if (player != null) { return player.getGraveyard().count( StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game ) + game.getExile().getExileZone(player.getId()).count( StaticFilters.FILTER_CARD_INSTANT_OR_SORCERY, game ); } return 0; }
@Override public boolean apply(Game game, Ability source) { UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), source.getSourceObjectZoneChangeCounter()); ExileZone exileZone = game.getExile().getExileZone(exileId); if (exileZone == null) { return true; } Player controller = game.getPlayer(source.getControllerId()); if (controller != null) { return controller.moveCards(exileZone, Zone.BATTLEFIELD, source, game); } return false; }
@Override public boolean applies(UUID sourceId, Ability source, UUID affectedControllerId, Game game) { UUID exileId = CardUtil.getExileZoneId(game, source.getSourceId(), 0); ExileZone exile = game.getExile().getExileZone(exileId); return exile != null && getTargetPointer().getFirst(game, source) != null && getTargetPointer().getFirst(game, source).equals(sourceId) && source.isControlledBy(affectedControllerId) && game.getState().getZone(sourceId) == Zone.EXILED && exile.contains(sourceId); } }