Fix #9562 and add test for Vazi

This commit is contained in:
Alex W. Jackson 2022-09-24 09:57:22 -04:00
parent 3f09836c64
commit 17f6ca6b22
3 changed files with 47 additions and 10 deletions

View file

@ -4,10 +4,12 @@ import mage.cards.Card;
import mage.constants.WatcherScope;
import mage.game.Game;
import mage.game.events.GameEvent;
import mage.game.permanent.token.Token;
import mage.game.permanent.Permanent;
import mage.constants.SubType;
import mage.util.CardUtil;
import mage.watchers.Watcher;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
@ -19,7 +21,7 @@ public class CreatedTokenWatcher extends Watcher {
// Player ID to Number of tokens created
private final Map<UUID, Integer> playerMap = new HashMap<>();
private final Map<UUID, Map<Class<? extends Token>, Integer>> tokenCreatedMap = new HashMap<>();
private final Map<UUID, Map<SubType, Integer>> tokenCreatedMap = new HashMap<>();
public CreatedTokenWatcher() {
super(WatcherScope.GAME);
@ -31,9 +33,12 @@ public class CreatedTokenWatcher extends Watcher {
playerMap.compute(event.getPlayerId(), CardUtil::setOrIncrementValue);
tokenCreatedMap.putIfAbsent(event.getPlayerId(), new HashMap<>());
Class<? extends Token> tokenClazz = ((Token) game.getPermanent(event.getTargetId())).getClass();
Map<Class<? extends Token>, Integer> playersTokens = tokenCreatedMap.getOrDefault(event.getPlayerId(), new HashMap<>());
playersTokens.compute(tokenClazz, CardUtil::setOrIncrementValue);
Permanent token = game.getPermanent(event.getTargetId());
Map<SubType, Integer> playersTokens = tokenCreatedMap.getOrDefault(event.getPlayerId(), new EnumMap<>(SubType.class));
// TODO: this doesn't handle tokens that are all creature types
for (SubType subType : token.getSubtype(game)) {
playersTokens.compute(subType, CardUtil::setOrIncrementValue);
}
tokenCreatedMap.put(event.getPlayerId(), playersTokens);
}
}
@ -56,12 +61,12 @@ public class CreatedTokenWatcher extends Watcher {
.getOrDefault(playerId, 0);
}
public static int getTypeCreatedCountByPlayer(UUID playerId, Class<? extends Token> tokenCLazz, Game game) {
public static int getTypeCreatedCountByPlayer(UUID playerId, SubType tokenType, Game game) {
return game
.getState()
.getWatcher(CreatedTokenWatcher.class)
.tokenCreatedMap
.getOrDefault(playerId, new HashMap<>())
.getOrDefault(tokenCLazz, 0);
.getOrDefault(playerId, new EnumMap<>(SubType.class))
.getOrDefault(tokenType, 0);
}
}