From 69adfc6e4612092289795f6010bc90261cdaf5d4 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Mon, 14 Aug 2023 18:37:41 +0800 Subject: [PATCH] Update AiController.java prevent crash - closes #3626 --- forge-ai/src/main/java/forge/ai/AiController.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 08791bf1750..f114b32f0dc 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -1197,16 +1197,17 @@ public class AiController { } public boolean confirmAction(SpellAbility sa, PlayerActionConfirmMode mode, String message, Map params) { - if (mode == PlayerActionConfirmMode.AlternativeDamageAssignment) { + if (mode == PlayerActionConfirmMode.AlternativeDamageAssignment || mode == PlayerActionConfirmMode.ChangeZoneToAltDestination) { + System.err.printf("Overriding AI confirmAction decision for %s, defaulting to true.\n", mode); return true; } - ApiType api = sa.getApi(); + ApiType api = sa == null ? null : sa.getApi(); // Abilities without api may also use this routine, However they should provide a unique mode value ?? How could this work? - if (api == null) { - String exMsg = String.format("AI confirmAction does not know what to decide about %s mode (api is null).", - mode); + if (sa == null || api == null) { + String exMsg = String.format("AI confirmAction does not know what to decide about %s mode (%s is null).", + mode, sa == null ? "SA" : "API"); throw new IllegalArgumentException(exMsg); } return SpellApiToAi.Converter.get(api).confirmAction(player, sa, mode, message, params);