diff --git a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java index 0bd597ae759..ebbebbc3042 100644 --- a/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java +++ b/forge-ai/src/main/java/forge/ai/CreatureEvaluator.java @@ -217,7 +217,7 @@ public class CreatureEvaluator implements Function { value += addValue(14, "paired"); } - if (!c.getEncodedCards().isEmpty()) { + if (!c.hasEncodedCard()) { value += addValue(24, "encoded"); } diff --git a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java index e06ef26b268..0aadf73c21d 100644 --- a/forge-ai/src/main/java/forge/ai/ability/AttachAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/AttachAi.java @@ -1333,7 +1333,7 @@ public class AttachAi extends SpellAbilityAi { CardCollection preferred = CardLists.filter(list, new Predicate() { @Override public boolean apply(final Card card) { - return card.getAttachedCards().isEmpty(); + return !card.hasCardAttachments(); } }); return preferred.isEmpty() ? Aggregates.random(list) : Aggregates.random(preferred); diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index 4da6445d96d..c2fd590cdd9 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -2387,9 +2387,6 @@ public class AbilityUtils { return doXMath(player.getCounters(CounterType.getType(counterType)), expr, c, ctb); } - if (sq[0].contains("YourPoisonCounters")) { - return doXMath(player.getPoisonCounters(), expr, c, ctb); - } if (sq[0].contains("TotalOppPoisonCounters")) { return doXMath(player.getOpponentsTotalPoisonCounters(), expr, c, ctb); } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java index 85f94302707..9c74ce0685b 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManaEffect.java @@ -144,26 +144,36 @@ public class ManaEffect extends SpellAbilityEffect { if (type.equals("EnchantedManaCost")) { Card enchanted = card.getEnchantingCard(); - if (enchanted == null ) + if (enchanted == null) continue; StringBuilder sb = new StringBuilder(); int generic = enchanted.getManaCost().getGenericCost(); - if (generic > 0) - sb.append(generic); for (ManaCostShard s : enchanted.getManaCost()) { ColorSet cs = ColorSet.fromMask(s.getColorMask()); + byte chosenColor; if (cs.isColorless()) continue; - sb.append(' '); - if (cs.isMonoColor()) - sb.append(MagicColor.toShortString(s.getColorMask())); - else /* (cs.isMulticolor()) */ { - byte chosenColor = p.getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs); - sb.append(MagicColor.toShortString(chosenColor)); + if (s.isOr2Generic()) { // CR 106.8 + chosenColor = p.getController().chooseColorAllowColorless(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), card, cs); + if (chosenColor == MagicColor.COLORLESS) { + generic += 2; + continue; + } } + else if (cs.isMonoColor()) + chosenColor = s.getColorMask(); + else /* (cs.isMulticolor()) */ { + chosenColor = p.getController().chooseColor(Localizer.getInstance().getMessage("lblChooseSingleColorFromTarget", s.toString()), sa, cs); + } + sb.append(MagicColor.toShortString(chosenColor)); + sb.append(' '); } + if (generic > 0) { + sb.append(generic); + } + abMana.setExpressChoice(sb.toString().trim()); } else if (type.equals("LastNotedType")) { final StringBuilder sb = new StringBuilder(); 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 944179bf86c..6f91cccab4c 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -4819,7 +4819,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { } setPhasedOut(!phasedOut); - final Combat combat = getGame().getPhaseHandler().getCombat(); + final Combat combat = getGame().getCombat(); if (combat != null && phasedOut) { combat.saveLKI(this); combat.removeFromCombat(this); diff --git a/forge-game/src/main/java/forge/game/cost/CostPartMana.java b/forge-game/src/main/java/forge/game/cost/CostPartMana.java index a264d889bcf..d07ce100a12 100644 --- a/forge-game/src/main/java/forge/game/cost/CostPartMana.java +++ b/forge-game/src/main/java/forge/game/cost/CostPartMana.java @@ -141,7 +141,7 @@ public class CostPartMana extends CostPart { // back from the brink return sa.getPaidList(CostExile.HashLKIListKey).get(0).getManaCost(); } - if (isEnchantedCreatureCost() && sa.getHostCard().getEnchantingCard() != null) { + if (isEnchantedCreatureCost() && sa.getHostCard().isEnchantingCard()) { return sa.getHostCard().getEnchantingCard().getManaCost(); } if (isCostPayAnyNumberOfTimes) {