player.declareAttacker(creature.getId(), defenders.iterator().next(), game, false); } else { if (!player.isHuman()) { // computer only for multiple defenders player.declareAttacker(creature.getId(), defenders.iterator().next(), game, false); } else { // human players only for multiple defenders TargetDefender target = new TargetDefender(defenders, creature.getId()); if (player.chooseTarget(Outcome.Damage, target, null, game)) { player.declareAttacker(creature.getId(), target.getFirstTarget(), game, false); player.declareAttacker(creature.getId(), defendersForcedToAttack.iterator().next(), game, false); } else { TargetDefender target = new TargetDefender(defendersForcedToAttack, creature.getId()); target.setRequired(true); if (player.chooseTarget(Outcome.Damage, target, null, game)) { player.declareAttacker(creature.getId(), target.getFirstTarget(), game, false);
@Override public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); TargetOpponent targetDefender = new TargetOpponent(); if (controller != null) { game.getBattlefield().getAllActivePermanents(CardType.CREATURE).stream().filter((permanent) -> (filter.match(permanent, source.getSourceId(), source.getControllerId(), game))).forEachOrdered((permanent) -> { if (game.getOpponents(controller.getId()).size() > 1) { controller.choose(outcome.Benefit, targetDefender, source.getSourceId(), game); } else { targetDefender.add(game.getOpponents(controller.getId()).iterator().next(), game); } if (permanent.canAttack(targetDefender.getFirstTarget(), game)) { controller.declareAttacker(permanent.getId(), targetDefender.getFirstTarget(), game, false); } }); } return false; }
@Override public boolean apply(Game game, Ability source) { Player opponent = game.getPlayer(game.getPermanent(getTargetPointer().getFirst(game, source)).getControllerId()); if (opponent != null) { filterOpponentCreatures.add(new ControllerIdPredicate(opponent.getId())); game.getBattlefield().getAllActivePermanents(CardType.CREATURE).stream().filter((permanent) -> (filterOpponentCreatures.match(permanent, source.getSourceId(), source.getControllerId(), game))).forEachOrdered((permanent) -> { //TODO: allow the player to choose between a planeswalker and player if (permanent.canAttack(source.getControllerId(), game)) { opponent.declareAttacker(permanent.getId(), source.getControllerId(), game, false); } }); return true; } return false; }
sim.getPlayer(attackerId).declareAttacker(attackId, defenderId, sim, false);
if (!killers.isEmpty()) { for (Permanent attacker : killers) { attackingPlayer.declareAttacker(attacker.getId(), defenderId, game, false); attackingPlayer.declareAttacker(attacker.getId(), defenderId, game, true);
for (CombatGroup group: engagement.getGroups()) { for (UUID attackerId: group.getAttackers()) { sim.getPlayer(activePlayerId).declareAttacker(attackerId, defenderId, sim, false);