forked from External/mage
Fix #9562 and add test for Vazi
This commit is contained in:
parent
3f09836c64
commit
17f6ca6b22
3 changed files with 47 additions and 10 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue