Doubling Chant fix multiple of same name

This commit is contained in:
Steven Knipe 2025-05-25 13:39:07 -07:00
parent 43c45238d0
commit 437b0eedc9

View file

@ -67,14 +67,14 @@ class DoublingChantEffect extends OneShotEffect {
if (player == null) { if (player == null) {
return false; return false;
} }
Set<String> names = game.getBattlefield().getActivePermanents( List<String> names = game.getBattlefield().getActivePermanents(
StaticFilters.FILTER_CONTROLLED_CREATURE, StaticFilters.FILTER_CONTROLLED_CREATURE,
source.getControllerId(), source, game source.getControllerId(), source, game
) )
.stream() .stream()
.filter(Objects::nonNull) .filter(Objects::nonNull)
.map(MageObject::getName) .map(MageObject::getName)
.collect(Collectors.toSet()); .collect(Collectors.toList());
TargetCardInLibrary targetCardInLibrary = new DoublingChantTarget(names); TargetCardInLibrary targetCardInLibrary = new DoublingChantTarget(names);
player.searchLibrary(targetCardInLibrary, source, game); player.searchLibrary(targetCardInLibrary, source, game);
Cards cards = new CardsImpl(targetCardInLibrary.getTargets()); Cards cards = new CardsImpl(targetCardInLibrary.getTargets());
@ -88,7 +88,7 @@ class DoublingChantTarget extends TargetCardInLibrary {
private final Map<String, Integer> nameMap = new HashMap<>(); private final Map<String, Integer> nameMap = new HashMap<>();
DoublingChantTarget(Set<String> names) { DoublingChantTarget(List<String> names) {
super(0, names.size(), makeFilter(names)); super(0, names.size(), makeFilter(names));
this.populateNameMap(names); this.populateNameMap(names);
} }
@ -103,13 +103,13 @@ class DoublingChantTarget extends TargetCardInLibrary {
return new DoublingChantTarget(this); return new DoublingChantTarget(this);
} }
private static FilterCard makeFilter(Set<String> names) { private static FilterCard makeFilter(List<String> names) {
FilterCard filter = new FilterCreatureCard(); FilterCard filter = new FilterCreatureCard();
filter.add(Predicates.or(names.stream().map(name -> new NamePredicate(name)).collect(Collectors.toSet()))); filter.add(Predicates.or(names.stream().map(name -> new NamePredicate(name)).collect(Collectors.toSet())));
return filter; return filter;
} }
private void populateNameMap(Set<String> names) { private void populateNameMap(List<String> names) {
names.stream().forEach(name -> this.nameMap.compute(name, CardUtil::setOrIncrementValue)); names.stream().forEach(name -> this.nameMap.compute(name, CardUtil::setOrIncrementValue));
} }