/** * Returns all (still) available modes of the ability * * @param source * @param game * @return */ public List<Mode> getAvailableModes(Ability source, Game game) { List<Mode> availableModes = new ArrayList<>(); Set<UUID> nonAvailableModes; if (isEachModeMoreThanOnce()) { nonAvailableModes = new HashSet<>(); } else { nonAvailableModes = getAlreadySelectedModes(source, game); } for (Mode mode : this.values()) { if (isEachModeOnlyOnce() && nonAvailableModes != null && nonAvailableModes.contains(mode.getId())) { continue; } availableModes.add(mode); } return availableModes; }
sb.append("choose one "); if (isEachModeOnlyOnce()) { sb.append("that hasn't been chosen ");
if (isEachModeOnlyOnce()) { onceSelectedModes = getAlreadySelectedModes(source, game); if ((!isEachModeOnlyOnce() || onceSelectedModes == null || !onceSelectedModes.contains(mode.getId())) && mode.getTargets().canChoose(source.getSourceId(), source.getControllerId(), game)) { this.addSelectedMode(mode.getId()); if (isEachModeOnlyOnce()) { setAlreadySelectedModes(selectedModes, source, game); Mode choice = player.chooseMode(this, source, game); if (choice == null) { if (isEachModeOnlyOnce()) { setAlreadySelectedModes(selectedModes, source, game); if (isEachModeOnlyOnce()) { setAlreadySelectedModes(selectedModes, source, game);