@Override public boolean apply(Game game, Ability source) { Set<UUID> opponents = game.getOpponents(source.getControllerId()); for (UUID opponentId : opponents) { Player player = game.getPlayer(opponentId); Target target = new TargetControlledPermanent(filter); if (target.canChoose(player.getId(), game)) { while (!target.isChosen() && target.canChoose(player.getId(), game)) { player.choose(Outcome.Sacrifice, target, source.getSourceId(), game); } Permanent permanent = game.getPermanent(target.getFirstTarget()); if (permanent != null) { permanent.sacrifice(source.getSourceId(), game); } } } return true; }
@Override public boolean apply(Game game, Ability source) { List<Card> chosen = new ArrayList<>(); for (UUID playerId : game.getPlayerList()) { Player player = game.getPlayer(playerId); Target target1 = new TargetControlledPermanent(1, 1, new FilterControlledArtifactPermanent(), true); Target target2 = new TargetControlledPermanent(1, 1, new FilterControlledCreaturePermanent(), true); Target target3 = new TargetControlledPermanent(1, 1, new FilterControlledEnchantmentPermanent(), true); Target target4 = new TargetControlledPermanent(1, 1, new FilterControlledLandPermanent(), true); if (target1.canChoose(player.getId(), game)) { while (player.canRespond() && !target1.isChosen() && target1.canChoose(player.getId(), game)) { player.chooseTarget(Outcome.Benefit, target1, source, game); } Permanent artifact = game.getPermanent(target1.getFirstTarget()); if (artifact != null) { chosen.add(artifact); } target1.clearChosen(); } if (target2.canChoose(player.getId(), game)) { while (player.canRespond() && !target2.isChosen() && target2.canChoose(player.getId(), game)) { player.chooseTarget(Outcome.Benefit, target2, source, game); } Permanent creature = game.getPermanent(target2.getFirstTarget()); if (creature != null) { chosen.add(creature); } target2.clearChosen(); } if (target3.canChoose(player.getId(), game)) { while (player.canRespond() && !target3.isChosen() && target3.canChoose(player.getId(), game)) { player.chooseTarget(Outcome.Benefit, target3, source, game); } Permanent enchantment = game.getPermanent(target3.getFirstTarget()); if (enchantment != null) { chosen.add(enchantment); } target3.clearChosen(); } if (target4.canChoose(player.getId(), game)) { while (player.canRespond() && !target4.isChosen() && target4.canChoose(player.getId(), game)) { player.chooseTarget(Outcome.Benefit, target4, source, game); } Permanent land = game.getPermanent(target4.getFirstTarget()); if (land != null) { chosen.add(land); } target4.clearChosen(); } } for (Permanent permanent : game.getBattlefield().getAllActivePermanents()) { if (!chosen.contains(permanent)) { permanent.sacrifice(source.getSourceId(), game); } } return true; }