From 42906f519be1579da92c13fcc25dade0f2e90d22 Mon Sep 17 00:00:00 2001 From: Alexander Novotny Date: Mon, 22 Apr 2024 23:58:26 -0400 Subject: [PATCH] Fixed remembering self-referential choices (#12167) * Fixed remembering self-referential choices * Rename filtered message to auto answer message * Always use auto answer message --- .../java/mage/client/game/FeedbackPanel.java | 6 ++++++ .../main/java/mage/client/game/HelperPanel.java | 17 +++++++++++++---- .../src/main/java/mage/constants/Constants.java | 1 + .../src/mage/player/human/HumanPlayer.java | 8 ++++++-- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java index d78a361b226..4780781b871 100644 --- a/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/FeedbackPanel.java @@ -89,6 +89,12 @@ public class FeedbackPanel extends javax.swing.JPanel { // allows yes/no auto-answers for ability related this.helper.setOriginalId((UUID) options.get(ORIGINAL_ID)); } + if (options != null && options.containsKey(AUTO_ANSWER_MESSAGE)) { + // Uses a filtered message for remembering choice if the original message contains a self-reference + this.helper.setAutoAnswerMessage((String) options.get(AUTO_ANSWER_MESSAGE)); + } else { + this.helper.setAutoAnswerMessage(message); + } break; case CONFIRM: setButtonState("OK", "Cancel", mode); diff --git a/Mage.Client/src/main/java/mage/client/game/HelperPanel.java b/Mage.Client/src/main/java/mage/client/game/HelperPanel.java index 18a4b4a7f34..92982857036 100644 --- a/Mage.Client/src/main/java/mage/client/game/HelperPanel.java +++ b/Mage.Client/src/main/java/mage/client/game/HelperPanel.java @@ -64,6 +64,7 @@ public class HelperPanel extends JPanel { // originalId of feedback causing ability private UUID originalId; private String message; + private String autoAnswerMessage; // Filtered version of message which is used for remembering answers to text private UUID gameId; private boolean gameNeedFeedback = false; @@ -462,6 +463,10 @@ public class HelperPanel extends JPanel { this.dialogTextArea.setText(message, this.getWidth()); } + public void setAutoAnswerMessage(String autoAnswerMessage) { + this.autoAnswerMessage = autoAnswerMessage; + } + public void setTextArea(String message) { this.dialogTextArea.setText(message, this.getWidth()); } @@ -523,19 +528,23 @@ public class HelperPanel extends JPanel { public void handleAutoAnswerPopupMenuEvent(ActionEvent e) { switch (e.getActionCommand()) { case CMD_AUTO_ANSWER_ID_YES: - SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_ID_YES, gameId, originalId.toString() + '#' + message); + SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_ID_YES, gameId, + originalId.toString() + '#' + autoAnswerMessage); clickButton(btnLeft); break; case CMD_AUTO_ANSWER_ID_NO: - SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_ID_NO, gameId, originalId.toString() + '#' + message); + SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_ID_NO, gameId, + originalId.toString() + '#' + autoAnswerMessage); clickButton(btnRight); break; case CMD_AUTO_ANSWER_NAME_YES: - SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_YES, gameId, message); + SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_YES, gameId, + autoAnswerMessage); clickButton(btnLeft); break; case CMD_AUTO_ANSWER_NAME_NO: - SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_NO, gameId, message); + SessionHandler.sendPlayerAction(REQUEST_AUTO_ANSWER_TEXT_NO, gameId, + autoAnswerMessage); clickButton(btnRight); break; case CMD_AUTO_ANSWER_RESET_ALL: diff --git a/Mage.Common/src/main/java/mage/constants/Constants.java b/Mage.Common/src/main/java/mage/constants/Constants.java index 0b603870732..b0df56e4c5f 100644 --- a/Mage.Common/src/main/java/mage/constants/Constants.java +++ b/Mage.Common/src/main/java/mage/constants/Constants.java @@ -59,5 +59,6 @@ public final class Constants { public static final String ORIGINAL_ID = "originalId"; public static final String SECOND_MESSAGE = "secondMessage"; public static final String HINT_TEXT = "hintText"; + public static final String AUTO_ANSWER_MESSAGE = "autoAnswerMessage"; } } diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index ffe0e1419b8..055ef65e00d 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -406,6 +406,7 @@ public class HumanPlayer extends PlayerImpl { MessageToClient messageToClient = new MessageToClient(message, secondMessage); Map options = new HashMap<>(2); + String autoAnswerMessage = message; // Removes self-referential text for the purposes of auto-answering if (trueText != null) { options.put("UI.left.btn.text", trueText); } @@ -414,18 +415,21 @@ public class HumanPlayer extends PlayerImpl { } if (source != null) { //options.put(Constants.Option.ORIGINAL_ID, "") + autoAnswerMessage = autoAnswerMessage.replace(getRelatedObjectName(source, game), "{this}"); } + options.put(Constants.Option.AUTO_ANSWER_MESSAGE, autoAnswerMessage); // auto-answer Boolean answer = null; if (source != null) { // ability + text - answer = requestAutoAnswerId.get(source.getOriginalId() + "#" + message); + answer = requestAutoAnswerId + .get(source.getOriginalId() + "#" + autoAnswerMessage); } if (answer == null) { // text - answer = requestAutoAnswerText.get(message); + answer = requestAutoAnswerText.get(autoAnswerMessage); } if (answer != null) { return answer;