From 5350e77125519c55a64045bbbda80061b2a28e69 Mon Sep 17 00:00:00 2001 From: Agetian Date: Sat, 12 Aug 2017 14:56:22 +0000 Subject: [PATCH] - When a permanent leaves the battlefield, remove all changed keywords on it (fixes e.g. the results of Magical Hack on Leviathan still partially persisting after it dies and is reanimated by something). --- forge-game/src/main/java/forge/game/GameAction.java | 2 ++ forge-game/src/main/java/forge/game/card/Card.java | 7 +++++++ .../src/main/java/forge/game/card/CardChangedWords.java | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index c6e63ab6966..1b94afa2e08 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -437,6 +437,8 @@ public class GameAction { copied.setState(CardStateName.Original, true); } unattachCardLeavingBattlefield(copied); + // Remove all changed keywords + copied.removeAllChangedText(game.getNextTimestamp()); } else if (toBattlefield) { // reset timestamp in changezone effects so they have same timestamp if ETB simutaneously copied.setTimestamp(game.getNextTimestamp()); 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 0a4157d6f0c..f079a095ec1 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3371,6 +3371,13 @@ public class Card extends GameEntity implements Comparable { updateChangedText(); } + public final void removeAllChangedText(final Long timestamp) { + changedTextTypes.removeAll(); + changedTextColors.removeAll(); + updateKeywordsOnRemoveChangedText(removeChangedCardKeywords(timestamp)); + updateChangedText(); + } + private void updateKeywordsChangedText(final Long timestamp) { if (hasSVar("LockInKeywords")) { return; diff --git a/forge-game/src/main/java/forge/game/card/CardChangedWords.java b/forge-game/src/main/java/forge/game/card/CardChangedWords.java index 7ada078ea1d..9844179cc1b 100644 --- a/forge-game/src/main/java/forge/game/card/CardChangedWords.java +++ b/forge-game/src/main/java/forge/game/card/CardChangedWords.java @@ -29,6 +29,11 @@ public final class CardChangedWords { isDirty = true; } + public void removeAll() { + map.clear(); + isDirty = true; + } + void copyFrom(final CardChangedWords other) { map.clear(); map.putAll(other.map);