diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index 2d604096343..9e64d515deb 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -4211,13 +4211,13 @@ public class Card extends GameEntity implements Comparable { * @param timestamp * the timestamp */ - public final void addChangedCardKeywords(final ArrayList keywords, final ArrayList removeKeywords, + public final void addChangedCardKeywords(final List keywords, final List removeKeywords, final boolean removeAllKeywords, final long timestamp) { // if the key already exists - merge entries if (changedCardKeywords.containsKey(timestamp)) { - ArrayList kws = keywords; - ArrayList rkws = removeKeywords; + List kws = keywords; + List rkws = removeKeywords; boolean remAll = removeAllKeywords; CardKeywords cks = changedCardKeywords.get(timestamp); kws.addAll(cks.getKeywords()); diff --git a/src/main/java/forge/CardKeywords.java b/src/main/java/forge/CardKeywords.java index 9200532ede4..9f72a9db082 100644 --- a/src/main/java/forge/CardKeywords.java +++ b/src/main/java/forge/CardKeywords.java @@ -17,6 +17,7 @@ */ package forge; +import java.util.List; import java.util.ArrayList; /** @@ -29,8 +30,8 @@ import java.util.ArrayList; */ public class CardKeywords { // takes care of individual card types - private ArrayList keywords = new ArrayList(); - private ArrayList removeKeywords = new ArrayList(); + private List keywords = new ArrayList(); + private List removeKeywords = new ArrayList(); private boolean removeAllKeywords = false; /** @@ -46,7 +47,7 @@ public class CardKeywords { * @param stamp * a long */ - CardKeywords(final ArrayList keywordList, final ArrayList removeKeywordList, final boolean removeAll) { + CardKeywords(final List keywordList, final List removeKeywordList, final boolean removeAll) { this.keywords = keywordList; this.removeKeywords = removeKeywordList; this.removeAllKeywords = removeAll; @@ -58,7 +59,7 @@ public class CardKeywords { * * @return ArrayList */ - public final ArrayList getKeywords() { + public final List getKeywords() { return this.keywords; } @@ -68,7 +69,7 @@ public class CardKeywords { * * @return ArrayList */ - public final ArrayList getRemoveKeywords() { + public final List getRemoveKeywords() { return this.removeKeywords; } diff --git a/src/main/java/forge/card/ability/effects/DebuffEffect.java b/src/main/java/forge/card/ability/effects/DebuffEffect.java index c0fbd3a2e59..681910e12ae 100644 --- a/src/main/java/forge/card/ability/effects/DebuffEffect.java +++ b/src/main/java/forge/card/ability/effects/DebuffEffect.java @@ -57,6 +57,7 @@ public class DebuffEffect extends SpellAbilityEffect { public void resolve(SpellAbility sa) { final List kws = sa.hasParam("Keywords") ? Arrays.asList(sa.getParam("Keywords").split(" & ")) : new ArrayList(); final GameState game = sa.getActivatingPlayer().getGame(); + final long timestamp = game.getNextTimestamp(); for (final Card tgtC : getTargetCards(sa)) { final ArrayList hadIntrinsic = new ArrayList(); @@ -67,6 +68,7 @@ public class DebuffEffect extends SpellAbilityEffect { } tgtC.removeIntrinsicKeyword(kw); tgtC.removeAllExtrinsicKeyword(kw); + tgtC.addChangedCardKeywords(new ArrayList(), kws, false, timestamp); } } if (!sa.hasParam("Permanent")) { @@ -75,6 +77,7 @@ public class DebuffEffect extends SpellAbilityEffect { @Override public void run() { + tgtC.removeChangedCardKeywords(timestamp); if (tgtC.isInPlay()) { for (final String kw : hadIntrinsic) { tgtC.addIntrinsicKeyword(kw); diff --git a/src/main/java/forge/card/ability/effects/PumpAllEffect.java b/src/main/java/forge/card/ability/effects/PumpAllEffect.java index f72382093fb..f5f595351ab 100644 --- a/src/main/java/forge/card/ability/effects/PumpAllEffect.java +++ b/src/main/java/forge/card/ability/effects/PumpAllEffect.java @@ -19,6 +19,22 @@ public class PumpAllEffect extends SpellAbilityEffect { final int d, final List keywords, final ArrayList affectedZones) { final GameState game = sa.getActivatingPlayer().getGame(); + final long timestamp = game.getNextTimestamp(); + final ArrayList kws = new ArrayList(); + final ArrayList hiddenkws = new ArrayList(); + boolean suspend = false; + + for (String kw : keywords) { + if (kw.startsWith("HIDDEN")) { + hiddenkws.add(kw); + } else { + kws.add(kw); + if (kw.equals("Suspend")) { + suspend = true; + } + } + } + for (final Card tgtC : list) { // only pump things in the affected zones. @@ -35,12 +51,13 @@ public class PumpAllEffect extends SpellAbilityEffect { tgtC.addTempAttackBoost(a); tgtC.addTempDefenseBoost(d); + tgtC.addChangedCardKeywords(kws, new ArrayList(), false, timestamp); - for (int i = 0; i < keywords.size(); i++) { - tgtC.addExtrinsicKeyword(keywords.get(i)); - if (keywords.get(i).equals("Suspend")) { - tgtC.setSuspend(true); - } + for (String kw : hiddenkws) { + tgtC.addHiddenExtrinsicKeyword(kw); + } + if (suspend) { + tgtC.setSuspend(true); } if (sa.hasParam("RememberAllPumped")) { @@ -56,11 +73,10 @@ public class PumpAllEffect extends SpellAbilityEffect { public void run() { tgtC.addTempAttackBoost(-1 * a); tgtC.addTempDefenseBoost(-1 * d); + tgtC.removeChangedCardKeywords(timestamp); - if (keywords.size() > 0) { - for (int i = 0; i < keywords.size(); i++) { - tgtC.removeExtrinsicKeyword(keywords.get(i)); - } + for (String kw : hiddenkws) { + tgtC.removeHiddenExtrinsicKeyword(kw); } } }; diff --git a/src/main/java/forge/card/ability/effects/PumpEffect.java b/src/main/java/forge/card/ability/effects/PumpEffect.java index 92ec1fa6bde..645c532129c 100644 --- a/src/main/java/forge/card/ability/effects/PumpEffect.java +++ b/src/main/java/forge/card/ability/effects/PumpEffect.java @@ -43,7 +43,7 @@ public class PumpEffect extends SpellAbilityEffect { applyTo.addTempAttackBoost(a); applyTo.addTempDefenseBoost(d); - applyTo.addChangedCardKeywords(kws, null, false, timestamp); + applyTo.addChangedCardKeywords(kws, new ArrayList(), false, timestamp); if (!sa.hasParam("Permanent")) { // If not Permanent, remove Pumped at EOT