diff --git a/src/main/java/forge/Card.java b/src/main/java/forge/Card.java index b35b8b627b8..2233647a251 100644 --- a/src/main/java/forge/Card.java +++ b/src/main/java/forge/Card.java @@ -8236,7 +8236,7 @@ public class Card extends GameEntity implements Comparable { /** @return boolean */ public boolean isInPlay() { - return this.getGame().getCardsIn(ZoneType.Battlefield).contains(this); + return this.isInZone(ZoneType.Battlefield); } public void onCleanupPhase(final Player turn) { diff --git a/src/main/java/forge/CounterType.java b/src/main/java/forge/CounterType.java index bedc09bc98f..93336b14b87 100644 --- a/src/main/java/forge/CounterType.java +++ b/src/main/java/forge/CounterType.java @@ -307,12 +307,4 @@ public enum CounterType { final String replacedName = name.replace("/", "").replaceAll("\\+", "p").replaceAll("\\-", "m").toUpperCase(); return Enum.valueOf(CounterType.class, replacedName); } - - // although this should be in AI's code - public boolean isNegativeCounter() { - CounterType c = this; - return (c == CounterType.AGE) || (c == CounterType.BLAZE) || (c == CounterType.BRIBERY) || (c == CounterType.DOOM) - || (c == CounterType.ICE) || (c == CounterType.M1M1) || (c == CounterType.M0M2) || (c == CounterType.M0M1) - || (c == CounterType.TIME); - } } diff --git a/src/main/java/forge/card/ability/ai/CountersProliferateAi.java b/src/main/java/forge/card/ability/ai/CountersProliferateAi.java index 2cc08206c1b..06f41c939e0 100644 --- a/src/main/java/forge/card/ability/ai/CountersProliferateAi.java +++ b/src/main/java/forge/card/ability/ai/CountersProliferateAi.java @@ -9,6 +9,7 @@ import forge.CardLists; import forge.CounterType; import forge.card.ability.SpellAbilityAi; import forge.card.spellability.SpellAbility; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; @@ -22,7 +23,7 @@ public class CountersProliferateAi extends SpellAbilityAi { @Override public boolean apply(final Card crd) { for (final CounterType c1 : CounterType.values()) { - if (crd.getCounters(c1) != 0 && !c1.isNegativeCounter()) { + if (crd.getCounters(c1) != 0 && !ComputerUtil.isNegativeCounter(c1, crd)) { return true; } } @@ -34,7 +35,7 @@ public class CountersProliferateAi extends SpellAbilityAi { @Override public boolean apply(final Card crd) { for (final CounterType c1 : CounterType.values()) { - if (crd.getCounters(c1) != 0 && c1.isNegativeCounter()) { + if (crd.getCounters(c1) != 0 && ComputerUtil.isNegativeCounter(c1, crd)) { return true; } } diff --git a/src/main/java/forge/card/ability/effects/CountersProliferateEffect.java b/src/main/java/forge/card/ability/effects/CountersProliferateEffect.java index 98ab9860b34..987476913dc 100644 --- a/src/main/java/forge/card/ability/effects/CountersProliferateEffect.java +++ b/src/main/java/forge/card/ability/effects/CountersProliferateEffect.java @@ -12,6 +12,7 @@ import forge.GameEntity; import forge.Singletons; import forge.card.ability.SpellAbilityEffect; import forge.card.spellability.SpellAbility; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.input.InputProliferate; @@ -56,10 +57,10 @@ public class CountersProliferateEffect extends SpellAbilityEffect { @Override public boolean apply(Card crd) { for (final Entry c1 : crd.getCounters().entrySet()) { - if (c1.getKey().isNegativeCounter() && enemies.contains(crd.getController())) { + if (ComputerUtil.isNegativeCounter(c1.getKey(), crd) && enemies.contains(crd.getController())) { return true; } - if (!c1.getKey().isNegativeCounter() && allies.contains(crd.getController())) { + if (!ComputerUtil.isNegativeCounter(c1.getKey(), crd) && allies.contains(crd.getController())) { return true; } } @@ -102,12 +103,12 @@ public class CountersProliferateEffect extends SpellAbilityEffect { // computer for (final Card c : cardsToProliferate) { for (final Entry c1 : c.getCounters().entrySet()) { - if (c1.getKey().isNegativeCounter() && enemies.contains(c.getController())) + if (ComputerUtil.isNegativeCounter(c1.getKey(), c) && enemies.contains(c.getController())) { c.addCounter(c1.getKey(), 1, true); break; } - if (!c1.getKey().isNegativeCounter() && allies.contains(c.getController())) + if (!ComputerUtil.isNegativeCounter(c1.getKey(), c) && allies.contains(c.getController())) { c.addCounter(c1.getKey(), 1, true); break; diff --git a/src/main/java/forge/card/cost/CostRemoveAnyCounter.java b/src/main/java/forge/card/cost/CostRemoveAnyCounter.java index 83f31ed57a7..0bfbfd36271 100644 --- a/src/main/java/forge/card/cost/CostRemoveAnyCounter.java +++ b/src/main/java/forge/card/cost/CostRemoveAnyCounter.java @@ -29,6 +29,7 @@ import forge.Singletons; import forge.card.ability.AbilityUtils; import forge.card.spellability.SpellAbility; import forge.game.Game; +import forge.game.ai.ComputerUtil; import forge.game.player.Player; import forge.game.zone.ZoneType; import forge.gui.GuiChoose; @@ -183,7 +184,7 @@ public class CostRemoveAnyCounter extends CostPartWithList { } Card valid = decision.cards.get(0); for (CounterType c1 : valid.getCounters().keySet()) { - if (valid.getCounters(c1) >= c && c1.isNegativeCounter()) { + if (valid.getCounters(c1) >= c && ComputerUtil.isNegativeCounter(c1, valid)) { counterType = c1; break; } @@ -215,7 +216,7 @@ public class CostRemoveAnyCounter extends CostPartWithList { @Override public boolean apply(final Card crd) { for (final CounterType c1 : CounterType.values()) { - if (crd.getCounters(c1) >= c && c1.isNegativeCounter()) { + if (crd.getCounters(c1) >= c && ComputerUtil.isNegativeCounter(c1, crd)) { return true; } } diff --git a/src/main/java/forge/game/ai/ComputerUtil.java b/src/main/java/forge/game/ai/ComputerUtil.java index 352a9002906..7d5a47195ab 100644 --- a/src/main/java/forge/game/ai/ComputerUtil.java +++ b/src/main/java/forge/game/ai/ComputerUtil.java @@ -31,6 +31,7 @@ import forge.Card; import forge.CardLists; import forge.CardPredicates; import forge.Constant; +import forge.CounterType; import forge.CardPredicates.Presets; import forge.CardUtil; import forge.ITargetable; @@ -1695,4 +1696,14 @@ public class ComputerUtil { }); return safeCards; } + + + // although this should be in AI's code + public static boolean isNegativeCounter(CounterType type, Card c) { + return type == CounterType.AGE || type == CounterType.BLAZE || type == CounterType.BRIBERY || type == CounterType.DOOM + || type == CounterType.ICE || type == CounterType.M1M1 || type == CounterType.M0M2 || type == CounterType.M0M1 + || type == CounterType.M1M0 || type == CounterType.M2M1 || type == CounterType.M2M2 || type == CounterType.MUSIC + || type == CounterType.PARALYZATION || type == CounterType.SHELL || type == CounterType.SLEEP + || type == CounterType.SLEIGHT || (type == CounterType.TIME && !c.isInPlay()) || type == CounterType.WAGE; + } }