partial fix for Syrix, Carrier of the Flame

closes #10057, related to #10550
This commit is contained in:
xenohedron 2024-01-21 00:11:16 -05:00
parent 4959ef4d49
commit 038cf01aa8
4 changed files with 165 additions and 85 deletions

View file

@ -0,0 +1,56 @@
package mage.watchers.common;
import mage.cards.Card;
import mage.constants.WatcherScope;
import mage.constants.Zone;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.events.ZoneChangeEvent;
import mage.watchers.Watcher;
import java.util.*;
import java.util.stream.Collectors;
/**
* Keeps track of the UUIDs of the cards that left graveyard this turn.
*/
public class CardsLeftGraveyardWatcher extends Watcher {
// Player id -> card ids
private final Map<UUID, Set<UUID>> cardsLeftGraveyardThisTurn = new HashMap<>();
public CardsLeftGraveyardWatcher() {
super(WatcherScope.GAME);
}
@Override
public void watch(GameEvent event, Game game) {
if (event.getType() != GameEvent.EventType.ZONE_CHANGE
|| ((ZoneChangeEvent) event).getFromZone() != Zone.GRAVEYARD) {
return;
}
UUID playerId = event.getPlayerId();
if (playerId == null || game.getCard(event.getTargetId()) == null) {
return;
}
cardsLeftGraveyardThisTurn.computeIfAbsent(playerId, k -> new HashSet<>())
.add(event.getTargetId());
}
/**
* The cards that left a specific player's graveyard this turn.
*/
public Set<Card> getCardsThatLeftGraveyard(UUID playerId, Game game) {
return cardsLeftGraveyardThisTurn.getOrDefault(playerId, Collections.emptySet())
.stream()
.map(game::getCard)
.filter(Objects::nonNull)
.collect(Collectors.toSet());
}
@Override
public void reset() {
super.reset();
cardsLeftGraveyardThisTurn.clear();
}
}