diff --git a/forge-ai/src/main/java/forge/ai/GameState.java b/forge-ai/src/main/java/forge/ai/GameState.java index c989af62eba..d92dd261b5c 100644 --- a/forge-ai/src/main/java/forge/ai/GameState.java +++ b/forge-ai/src/main/java/forge/ai/GameState.java @@ -70,6 +70,7 @@ public abstract class GameState { private final Map> cardToChosenClrs = new HashMap<>(); private final Map cardToChosenType = new HashMap<>(); private final Map> cardToRememberedId = new HashMap<>(); + private final Map> cardToImprintedId = new HashMap<>(); private final Map cardToExiledWithId = new HashMap<>(); private final Map cardAttackMap = new HashMap<>(); @@ -160,11 +161,14 @@ public abstract class GameState { } for (Object o : card.getRemembered()) { // Remember the IDs of remembered cards - // TODO: we can currently support remembered cards only. Expand to support other remembered objects. if (o instanceof Card) { cardsReferencedByID.add((Card)o); } } + for (Card i : card.getImprintedCards()) { + // Remember the IDs of imprinted cards + cardsReferencedByID.add(i); + } if (game.getCombat() != null && game.getCombat().isAttacking(card)) { // Remember the IDs of attacked planeswalkers GameEntity def = game.getCombat().getDefenderByAttacker(card); @@ -274,6 +278,15 @@ public abstract class GameState { if (!rememberedCardIds.isEmpty()) { newText.append("|RememberedCards:").append(TextUtil.join(rememberedCardIds, ",")); } + + List imprintedCardIds = Lists.newArrayList(); + for (Card impr : c.getImprintedCards()) { + int id = impr.getId(); + imprintedCardIds.add(String.valueOf(id)); + } + if (!imprintedCardIds.isEmpty()) { + newText.append("|Imprinting:").append(TextUtil.join(imprintedCardIds, ",")); + } } if (zoneType == ZoneType.Exile) { @@ -558,6 +571,17 @@ public abstract class GameState { } } + // Imprinting: X + for (Entry> imprintedCards : cardToImprintedId.entrySet()) { + Card c = imprintedCards.getKey(); + List ids = imprintedCards.getValue(); + + for (String id : ids) { + Card tgt = idToCard.get(Integer.parseInt(id)); + c.addImprintedCard(tgt); + } + } + // Exiled with X for (Entry rememberedEnts : cardToExiledWithId.entrySet()) { Card c = rememberedEnts.getKey(); @@ -911,6 +935,8 @@ public abstract class GameState { cardToScript.put(c, info.substring(info.indexOf(':') + 1)); } else if (info.startsWith("RememberedCards:")) { cardToRememberedId.put(c, Arrays.asList(info.substring(info.indexOf(':') + 1).split(","))); + } else if (info.startsWith("Imprinting:")) { + cardToImprintedId.put(c, Arrays.asList(info.substring(info.indexOf(':') + 1).split(","))); } else if (info.startsWith("ExiledWith:")) { cardToExiledWithId.put(c, info.substring(info.indexOf(':') + 1)); } else if (info.startsWith("Attacking")) {