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 30d9ebb3f1a..b213da70ed4 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3004,15 +3004,21 @@ public class Card extends GameEntity implements Comparable { // if the key already exists - merge entries final KeywordsChange cks = changedCardKeywords.get(timestamp); if (cks != null) { + cks.removeKeywords(this); List kws = new ArrayList<>(keywords); List rkws = new ArrayList<>(removeKeywords); boolean remAll = removeAllKeywords; kws.addAll(cks.getKeywords()); rkws.addAll(cks.getRemoveKeywords()); remAll |= cks.isRemoveAllKeywords(); - changedCardKeywords.put(timestamp, new KeywordsChange(kws, rkws, remAll)); + final KeywordsChange newCks = new KeywordsChange(kws, rkws, remAll); + newCks.addKeywordsToCard(this); + changedCardKeywords.put(timestamp, newCks); } else { + final KeywordsChange newCks = new KeywordsChange(keywords, removeKeywords, removeAllKeywords); + newCks.addKeywordsToCard(this); + changedCardKeywords.put(timestamp, newCks); changedCardKeywords.put(timestamp, new KeywordsChange(keywords, removeKeywords, removeAllKeywords)); } currentState.getView().updateKeywords(this, currentState); diff --git a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java index f3e61203583..31d40c526ba 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardFactoryUtil.java @@ -53,6 +53,7 @@ import forge.game.card.CardPredicates.Presets; import forge.game.cost.Cost; import forge.game.cost.CostPayment; import forge.game.event.GameEventCardStatsChanged; +import forge.game.keyword.KeywordsChange; import forge.game.phase.PhaseHandler; import forge.game.player.Player; import forge.game.replacement.ReplacementEffect; @@ -2909,6 +2910,13 @@ public class CardFactoryUtil { } } + public static void addTriggerAbility(final String keyword, final Card card, final KeywordsChange kws) { + + } + + public static void addReplacementEffect(final String keyword, final Card card, final KeywordsChange kws) { + + } /** * TODO: Write javadoc for this method. * @param card diff --git a/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java b/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java index 05706e59b63..dd71e942631 100644 --- a/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java +++ b/forge-game/src/main/java/forge/game/keyword/KeywordsChange.java @@ -21,6 +21,11 @@ import java.util.List; import com.google.common.collect.Lists; +import forge.game.card.Card; +import forge.game.card.CardFactoryUtil; +import forge.game.replacement.ReplacementEffect; +import forge.game.trigger.Trigger; + /** *

* Card_Keywords class. @@ -34,6 +39,8 @@ public class KeywordsChange { private final List removeKeywords; private final boolean removeAllKeywords; + private List triggers = Lists.newArrayList(); + private List replacements = Lists.newArrayList(); /** * * Construct a new {@link KeywordsChange}. @@ -86,4 +93,28 @@ public class KeywordsChange { && this.keywords.isEmpty() && this.removeKeywords.isEmpty(); } + + public final void addKeywordsToCard(final Card host) { + for (String k : keywords) { + CardFactoryUtil.addTriggerAbility(k, host, this); + CardFactoryUtil.addReplacementEffect(k, host, this); + } + } + + public final void removeKeywords(final Card host) { + for (Trigger t : triggers) { + host.removeTrigger(t); + } + for (ReplacementEffect r : replacements) { + host.removeReplacementEffect(r); + } + } + + public final void addTrigger(final Trigger trg) { + triggers.add(trg); + } + + public final void addReplacement(final ReplacementEffect trg) { + replacements.add(trg); + } }