/** * Returns a Set of opponents in range for the given playerId This return * also a player, that has dies this turn. * * @param playerId * @return */ default Set<UUID> getOpponents(UUID playerId) { Player player = getPlayer(playerId); return player.getInRange().stream() .filter(opponentId -> !opponentId.equals(playerId)) .collect(Collectors.toSet()); }
public Player getNextInRange(Player basePlayer, Game game) { UUID currentPlayerBefore = get(); UUID nextPlayerId = super.getNext(); do { if (basePlayer.getInRange().contains(nextPlayerId)) { return game.getPlayer(nextPlayerId); } nextPlayerId = super.getNext(); } while (!nextPlayerId.equals(currentPlayerBefore)); return null; }
/** * Returns all {@link Permanent} that are within the range of influence of * the specified player id. * * @param sourcePlayerId * @param game * @return a list of {@link Permanent} * @see Permanent */ public List<Permanent> getActivePermanents(UUID sourcePlayerId, Game game) { if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) { return getAllActivePermanents(); } else { Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); return field.values() .stream() .filter(perm -> perm.isPhasedIn() && range.contains(perm.getControllerId())) .collect(Collectors.toList()); } }
/** * Returns all {@link Permanent} that are within the range of influence of * the specified player id and that match the supplied filter. * * @param filter * @param sourcePlayerId * @param sourceId * @param game * @return a list of {@link Permanent} * @see Permanent */ public List<Permanent> getActivePermanents(FilterPermanent filter, UUID sourcePlayerId, UUID sourceId, Game game) { if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) { return field.values() .stream() .filter(perm -> perm.isPhasedIn() && filter.match(perm, sourceId, sourcePlayerId, game)) .collect(Collectors.toList()); } else { Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); return field.values() .stream() .filter(perm -> perm.isPhasedIn() && range.contains(perm.getControllerId()) && filter.match(perm, sourceId, sourcePlayerId, game)).collect(Collectors.toList()); } }
/** * Returns true if the battlefield contains num or more {@link Permanent} * that is within the range of influence of the specified player id and that * matches the supplied filter. * * @param filter * @param sourcePlayerId * @param game * @param num * @return boolean */ public boolean contains(FilterPermanent filter, UUID sourcePlayerId, Game game, int num) { if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) { return field.values().stream() .filter(permanent -> filter.match(permanent, null, sourcePlayerId, game) && permanent.isPhasedIn()).count() >= num; } else { Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); return field.values().stream() .filter(permanent -> range.contains(permanent.getControllerId()) && filter.match(permanent, null, sourcePlayerId, game) && permanent.isPhasedIn()) .count() >= num; } }
/** * Returns a count of all {@link Permanent} that are within the range of * influence of the specified player id and that match the supplied filter. * * @param filter * @param sourceId - sourceId of the MageObject the calling effect/ability * belongs to * @param sourcePlayerId * @param game * @return count */ public int count(FilterPermanent filter, UUID sourceId, UUID sourcePlayerId, Game game) { if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) { return (int) field.values() .stream() .filter(permanent -> filter.match(permanent, sourceId, sourcePlayerId, game) && permanent.isPhasedIn()) .count(); } else { Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); return (int) field.values() .stream() .filter(permanent -> range.contains(permanent.getControllerId()) && filter.match(permanent, sourceId, sourcePlayerId, game) && permanent.isPhasedIn()).count(); } }
@Override public boolean applies(Permanent permanent, Ability source, Game game) { Player controller = game.getPlayer(source.getControllerId()); if (controller == null) { return false; } return controller.getInRange().contains(permanent.getControllerId()) && permanent.getPower().getValue() > controller.getHand().size(); }
/** * Returns a list of all active players of the game in range of playerId, * also setting the playerId to the first/current player of the list. Also * returning the other players in turn order. * * @param playerId * @param game * @return playerList */ public PlayerList getPlayersInRange(UUID playerId, Game game) { PlayerList newPlayerList = new PlayerList(); Player currentPlayer = game.getPlayer(playerId); if (currentPlayer != null) { for (Player player : players.values()) { if (!player.hasLeft() && !player.hasLost() && currentPlayer.getInRange().contains(player.getId())) { newPlayerList.add(player.getId()); } } newPlayerList.setCurrent(playerId); } return newPlayerList; }
@Override public boolean checkTrigger(GameEvent event, Game game) { Permanent permanent = game.getPermanentOrLKIBattlefield(event.getSourceId()); if (permanent == null) { return false; } Player player = game.getPlayer(controllerId); if (player == null) { return false; } if (permanent.isLand() && player.getInRange().contains(permanent.getControllerId()) && !permanent.isControlledBy(game.getActivePlayerId())) { // intervening if clause getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getId())); return true; } return false; }
this.inRange.addAll(player.getInRange()); this.canPayLifeCost = player.canPayLifeCost(); this.sacrificeCostFilter = player.getSacrificeCostFilter() != null ? player.getSacrificeCostFilter().copy() : null;
@Override public boolean apply(Game game, Ability source) { int amount = 0; boolean result = false; Player you = game.getPlayer(source.getControllerId()); if (you != null) { for (UUID playerId : you.getInRange()) { if (!playerId.equals(source.getControllerId())) { Player otherPlayer = game.getPlayer(playerId); if (otherPlayer != null && !otherPlayer.getHand().isEmpty()) { TargetCardInHand target = new TargetCardInHand(); if (otherPlayer.choose(Outcome.Discard, target, source.getSourceId(), game)) { Card card = game.getCard(target.getFirstTarget()); if (card != null) { if (otherPlayer.discard(card, source, game)) { amount += 1; result = true; target.clearChosen(); } } } } } } you.drawCards(amount, game); } return result; } }
case NOT_YOU: Player controller = game.getPlayer(this.getControllerId()); if (controller != null && controller.getInRange().contains(event.getPlayerId()) && !event.getPlayerId().equals(this.getControllerId())) { if (getTargets().isEmpty()) { for (Effect effect : this.getEffects()) { case ANY: controller = game.getPlayer(this.getControllerId()); if (controller != null && controller.getInRange().contains(event.getPlayerId())) { if (getTargets().isEmpty()) { for (Effect effect : this.getEffects()) {