diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index 206fffaa29b..e53b717fb7b 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -356,7 +356,7 @@ public class GameCopier { newCard.setChangedCardTypes(c.getChangedCardTypesTable()); newCard.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable()); - newCard.setChangedCardKeywords(c.getChangedCardKeywords()); + newCard.setChangedCardKeywords(c.getChangedCardKeywords(), true); newCard.setChangedCardNames(c.getChangedCardNames()); for (Table.Cell> kw : c.getHiddenExtrinsicKeywordsTable().cellSet()) { diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 3da5755451b..56f5ca612b2 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -268,7 +268,7 @@ public class GameAction { // when moving to stack, copy changed card information copied.setChangedCardColors(c.getChangedCardColorsTable()); copied.setChangedCardColorsCharacterDefining(c.getChangedCardColorsCharacterDefiningTable()); - copied.setChangedCardKeywords(c.getChangedCardKeywords()); + copied.setChangedCardKeywords(c.getChangedCardKeywords(), false); copied.setChangedCardTypes(c.getChangedCardTypesTable()); copied.setChangedCardTypesCharacterDefining(c.getChangedCardTypesCharacterDefiningTable()); copied.setChangedCardNames(c.getChangedCardNames()); @@ -622,7 +622,9 @@ public class GameAction { if (zoneTo.is(ZoneType.Stack) && cause != null && cause.isSpell() && !cause.isIntrinsic() && c.equals(cause.getHostCard())) { if (cause.getKeyword() != null) { if (!copied.getKeywords().contains(cause.getKeyword())) { - copied.addChangedCardKeywordsInternal(ImmutableList.of(cause.getKeyword()), null, false, game.getTimestamp(), 0, false); + copied.addChangedCardKeywordsInternal(ImmutableList.of(cause.getKeyword()), null, false, game.getNextTimestamp(), 0, false); + // update Keyword Cache + copied.updateKeywords(); } } } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 6a7f9726588..27ede8ab54d 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -6876,10 +6876,19 @@ public class Card extends GameEntity implements Comparable, IHasSVars { this.changedCardTypesCharacterDefining.putAll(changedCardTypes); } - public void setChangedCardKeywords(Table changedCardKeywords) { + public void setChangedCardKeywords(Table changedCardKeywords, boolean copy) { this.changedCardKeywords.clear(); for (Table.Cell entry : changedCardKeywords.cellSet()) { - this.changedCardKeywords.put(entry.getRowKey(), entry.getColumnKey(), entry.getValue().copy(this, true)); + KeywordsChange result = entry.getValue(); + if (copy) { + result = result.copy(this, true); + } else { + // do not copy the keywords, just update the host + for (KeywordInterface k : result.getKeywords()) { + k.setHostCard(this); + } + } + this.changedCardKeywords.put(entry.getRowKey(), entry.getColumnKey(), result); } } diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index 6b266177464..96ded79da40 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -287,7 +287,7 @@ public final class CardUtil { newCopy.setChangedCardColors(in.getChangedCardColorsTable()); newCopy.setChangedCardColorsCharacterDefining(in.getChangedCardColorsCharacterDefiningTable()); - newCopy.setChangedCardKeywords(in.getChangedCardKeywords()); + newCopy.setChangedCardKeywords(in.getChangedCardKeywords(), true); newCopy.setChangedCardTypes(in.getChangedCardTypesTable()); newCopy.setChangedCardTypesCharacterDefining(in.getChangedCardTypesCharacterDefiningTable()); newCopy.setChangedCardNames(in.getChangedCardNames());