From 84aef29d69194602a68c6ead4c8ffa6d17625554 Mon Sep 17 00:00:00 2001 From: tool4EvEr Date: Mon, 20 Mar 2023 18:24:32 +0100 Subject: [PATCH] Fix NPE when trying to build Charm description --- .../main/java/forge/ai/ability/CharmAi.java | 2 +- .../game/ability/effects/CharmEffect.java | 25 +++++++++++-------- 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java index b1e981d9d6a..79de3c099e3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/CharmAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/CharmAi.java @@ -26,7 +26,7 @@ public class CharmAi extends SpellAbilityAi { @Override protected boolean checkApiLogic(Player ai, SpellAbility sa) { final Card source = sa.getHostCard(); - List choices = CharmEffect.makePossibleOptions(sa); + List choices = CharmEffect.makePossibleOptions(sa, false); final int num; final int min; diff --git a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java index 2cdc555a6a2..5b0233df5b1 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CharmEffect.java @@ -20,7 +20,7 @@ import forge.util.collect.FCollection; public class CharmEffect extends SpellAbilityEffect { - public static List makePossibleOptions(final SpellAbility sa) { + public static List makePossibleOptions(final SpellAbility sa, boolean forDesc) { final Card source = sa.getHostCard(); List restriction = null; @@ -29,16 +29,19 @@ public class CharmEffect extends SpellAbilityEffect { } List choices = Lists.newArrayList(sa.getAdditionalAbilityList("Choices")); - List toRemove = Lists.newArrayList(); - for (AbilitySub ch : choices) { - // 603.3c If one of the modes would be illegal, that mode can't be chosen. - if ((ch.usesTargeting() && ch.isTrigger() && ch.getMinTargets() > 0 && - ch.getTargetRestrictions().getNumCandidates(ch, true) == 0) || - (restriction != null && restriction.contains(ch.getDescription()))) { - toRemove.add(ch); + + if (!forDesc) { + List toRemove = Lists.newArrayList(); + for (AbilitySub ch : choices) { + // 603.3c If one of the modes would be illegal, that mode can't be chosen. + if ((ch.usesTargeting() && ch.isTrigger() && ch.getMinTargets() > 0 && + ch.getTargetRestrictions().getNumCandidates(ch, true) == 0) || + (restriction != null && restriction.contains(ch.getDescription()))) { + toRemove.add(ch); + } } + choices.removeAll(toRemove); } - choices.removeAll(toRemove); int indx = 0; // set CharmOrder @@ -52,7 +55,7 @@ public class CharmEffect extends SpellAbilityEffect { public static String makeFormatedDescription(SpellAbility sa) { Card source = sa.getHostCard(); - List list = CharmEffect.makePossibleOptions(sa); + List list = CharmEffect.makePossibleOptions(sa, true); final int num; boolean additionalDesc = sa.hasParam("AdditionalDescription"); boolean optional = sa.hasParam("Optional"); @@ -166,7 +169,7 @@ public class CharmEffect extends SpellAbilityEffect { //this resets all previous choices sa.setSubAbility(null); - List choices = makePossibleOptions(sa); + List choices = makePossibleOptions(sa, false); // Entwine does use all Choices if (sa.isEntwine()) {