diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index 2bcae9b1ffd..0d1a60d29dd 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -42,7 +42,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Random; import java.util.Set; import java.util.TreeMap; import java.util.UUID; @@ -1272,11 +1271,11 @@ public class ComputerPlayer extends PlayerImpl implements Player { @Override public boolean chooseUse(Outcome outcome, String message, Ability source, Game game) { - return this.chooseUse(outcome, new MessageToClient(message), source, game); + return this.chooseUse(outcome, message, null, null, null, source, game); } @Override - public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { + public boolean chooseUse(Outcome outcome, String message, String secondMessage, String trueText, String falseText, Ability source, Game game) { log.debug("chooseUse: " + outcome.isGood()); // Be proactive! Always use abilities, the evaluation function will decide if it's good or not // Otherwise some abilities won't be used by AI like LoseTargetEffect that has "bad" outcome 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 d5c1e37d4e7..7d619864c53 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 @@ -177,17 +177,25 @@ public class HumanPlayer extends PlayerImpl { @Override public boolean chooseUse(Outcome outcome, String message, Ability source, Game game) { - return this.chooseUse(outcome, new MessageToClient(message), source, game); + return this.chooseUse(outcome, message, null, null, null, source, game); } @Override - public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { + public boolean chooseUse(Outcome outcome, String message, String secondMessage, String trueText, String falseText, Ability source, Game game) { + MessageToClient messageToClient = new MessageToClient(message, secondMessage); + Map options = new HashMap<>(2); + if (trueText != null) { + options.put("UI.left.btn.text", trueText); + } + if (falseText != null) { + options.put("UI.right.btn.text", falseText); + } if (source != null) { - Boolean answer = requestAutoAnswerId.get(source.getOriginalId() + "#" + message.getMessage()); + Boolean answer = requestAutoAnswerId.get(source.getOriginalId() + "#" + message); if (answer != null) { return answer; } else { - answer = requestAutoAnswerText.get(message.getMessage()); + answer = requestAutoAnswerText.get(message); if (answer != null) { return answer; } @@ -195,10 +203,10 @@ public class HumanPlayer extends PlayerImpl { } updateGameStatePriority("chooseUse", game); do { - if (message.getSecondMessage() == null) { - message.setSecondMessage(getRelatedObjectName(source, game)); + if (messageToClient.getSecondMessage() == null) { + messageToClient.setSecondMessage(getRelatedObjectName(source, game)); } - game.fireAskPlayerEvent(playerId, message, source); + game.fireAskPlayerEvent(playerId, messageToClient, source, options); waitForResponse(game); } while (response.getBoolean() == null && !abort); if (!abort) { diff --git a/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java b/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java index a548203590f..8ea80002417 100644 --- a/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java +++ b/Mage.Sets/src/mage/sets/commander2015/DawnbreakReclaimer.java @@ -50,7 +50,6 @@ import mage.players.Player; import mage.target.common.TargetCardInGraveyard; import mage.target.common.TargetCardInOpponentsGraveyard; import mage.target.common.TargetOpponent; -import mage.util.MessageToClient; /** * @@ -157,10 +156,14 @@ class DawnbreakReclaimerEffect extends OneShotEffect { cards.add(controllerCreatureCard); } if (!cards.isEmpty()) { - MessageToClient message = new MessageToClient("Return those cards to the battlefield under their owners' control?", - "Opponent's creature card: " + (cardOpponentGraveyard == null ? "none" : cardOpponentGraveyard.getLogName()) - + ", your creature card: " + (controllerCreatureCard == null ? "none" : controllerCreatureCard.getLogName())); - if (controller.chooseUse(outcome, message, source, game)) { + if (controller.chooseUse( + outcome, + "Return those cards to the battlefield under their owners' control?", + "Opponent's creature card: " + (cardOpponentGraveyard == null ? "none" : cardOpponentGraveyard.getLogName()) + ", your creature card: " + (controllerCreatureCard == null ? "none" : controllerCreatureCard.getLogName()), + null, + null, + source, + game)) { controller.moveCards(cards, Zone.BATTLEFIELD, source, game, false, false, true, null); } } diff --git a/Mage.Sets/src/mage/sets/eldritchmoon/FortunesFavor.java b/Mage.Sets/src/mage/sets/eldritchmoon/FortunesFavor.java index bbae839ff03..148f580515b 100644 --- a/Mage.Sets/src/mage/sets/eldritchmoon/FortunesFavor.java +++ b/Mage.Sets/src/mage/sets/eldritchmoon/FortunesFavor.java @@ -43,7 +43,6 @@ import mage.game.Game; import mage.players.Player; import mage.target.TargetCard; import mage.target.common.TargetOpponent; -import mage.util.MessageToClient; /** * @@ -102,8 +101,7 @@ class FortunesFavorEffect extends OneShotEffect { cards.removeAll(target.getTargets()); controller.revealCards(sourceObject.getIdName() + " - cards in face-up pile", cards, game); game.informPlayers(targetOpponent.getLogName() + " puts " + faceDownPile.size() + " card(s) into the face-down pile"); - MessageToClient message = new MessageToClient("Put the face-down pile into your hand?", "(If you say yes, the face-up pile goes to the graveyard.)"); - if (controller.chooseUse(outcome, message, source, game)) { + if (controller.chooseUse(outcome, "Choose a pile to put in your hand.", null, "Face-down", "Face-up", source, game)) { controller.moveCards(faceDownPile, Zone.HAND, source, game); controller.moveCards(cards, Zone.GRAVEYARD, source, game); } else { diff --git a/Mage.Sets/src/mage/sets/oathofthegatewatch/RemorselessPunishment.java b/Mage.Sets/src/mage/sets/oathofthegatewatch/RemorselessPunishment.java index f7deb418094..e96dafa9322 100644 --- a/Mage.Sets/src/mage/sets/oathofthegatewatch/RemorselessPunishment.java +++ b/Mage.Sets/src/mage/sets/oathofthegatewatch/RemorselessPunishment.java @@ -42,7 +42,6 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.TargetPermanent; import mage.target.common.TargetOpponent; -import mage.util.MessageToClient; /** * @@ -95,26 +94,22 @@ class RemorselessPunishmentEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Player opponent = game.getPlayer(getTargetPointer().getFirst(game, source)); if (opponent != null) { - handleBaseEffect(game, source, opponent, 1); - handleBaseEffect(game, source, opponent, 2); + handleBaseEffect(game, source, opponent, "1st"); + handleBaseEffect(game, source, opponent, "2nd"); return true; } return false; } - private void handleBaseEffect(Game game, Ability source, Player opponent, int iteration) { + private void handleBaseEffect(Game game, Ability source, Player opponent, String iteration) { if (opponent.getHand().size() > 1) { - MessageToClient mtc = new MessageToClient("Discards two cards to prevent to lose 5 life?", - "If you want to sacrifice a creature or planeswalker instead click \"No\". (Iteration " + iteration + ")"); - if (opponent.chooseUse(outcome, mtc, source, game)) { + if (opponent.chooseUse(outcome, "Choose your " + iteration + " punishment.", null, "Discard two cards", "Choose another option", source, game)) { opponent.discard(2, false, source, game); return; } } if (game.getBattlefield().contains(filter, opponent.getId(), 1, game)) { - MessageToClient mtc = new MessageToClient("Sacrifice a creature or planeswalker?", - "If you don't sacrifice a creature or planeswalker, you lose 5 life instead. (Iteration " + iteration + ")"); - if (opponent.chooseUse(outcome, mtc, source, game)) { + if (opponent.chooseUse(outcome, "Choose your " + iteration + " punishment.", null, "Sacrifice a creature or planeswalker", "Lose 5 life", source, game)) { TargetPermanent target = new TargetPermanent(1, 1, filter, true); if (target.choose(Outcome.Sacrifice, opponent.getId(), source.getId(), game)) { for (UUID targetId : target.getTargets()) { diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 62e89e3e74f..5ede5fff409 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -104,7 +104,6 @@ import mage.target.common.TargetCardInYourGraveyard; import mage.target.common.TargetCreatureOrPlayer; import mage.target.common.TargetCreaturePermanentAmount; import mage.target.common.TargetPermanentOrPlayer; -import mage.util.MessageToClient; import org.junit.Ignore; /** @@ -976,12 +975,12 @@ public class TestPlayer implements Player { @Override public boolean chooseUse(Outcome outcome, String message, Ability source, Game game) { - return this.chooseUse(outcome, new MessageToClient(message), source, game); + return this.chooseUse(outcome, message, null, null, null, source, game); } @Override - public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { - if (message.getMessage().equals("Scry 1?")) { + public boolean chooseUse(Outcome outcome, String message, String secondMessage, String trueText, String falseText, Ability source, Game game) { + if (message.equals("Scry 1?")) { return false; } if (!choices.isEmpty()) { @@ -994,7 +993,7 @@ public class TestPlayer implements Player { return true; } } - return computerPlayer.chooseUse(outcome, message, source, game); + return computerPlayer.chooseUse(outcome, message, secondMessage, trueText, falseText, source, game); } @Override diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java index dbc17018ca1..81023463bab 100644 --- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -79,7 +79,6 @@ import mage.target.Target; import mage.target.TargetAmount; import mage.target.TargetCard; import mage.target.common.TargetCardInLibrary; -import mage.util.MessageToClient; /** * @@ -849,7 +848,7 @@ public class PlayerStub implements Player { } @Override - public boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game) { + public boolean chooseUse(Outcome outcome, String message, String secondMessage, String trueText, String falseText, Ability source, Game game) { return false; } diff --git a/Mage/src/main/java/mage/game/GameImpl.java b/Mage/src/main/java/mage/game/GameImpl.java index 16227b0073b..f020c0e1e14 100644 --- a/Mage/src/main/java/mage/game/GameImpl.java +++ b/Mage/src/main/java/mage/game/GameImpl.java @@ -40,7 +40,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; -import java.util.Random; import java.util.Set; import java.util.Stack; import java.util.UUID; @@ -1010,9 +1009,7 @@ public abstract class GameImpl implements Game, Serializable { for (UUID playerId : state.getPlayerList(startingPlayerId)) { Player player = getPlayer(playerId); if (player != null && player.getHand().size() < startingHandSize) { - if (player.chooseUse(Outcome.Benefit, new MessageToClient("Scry 1?", "Look at the top card of your library. You may put that card on the bottom of your library."), null, this)) { - player.scry(1, null, this); - } + player.scry(1, null, this); } } getState().setChoosingPlayerId(null); diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index f476c8c5a3f..9f28389214b 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -78,7 +78,6 @@ import mage.target.TargetAmount; import mage.target.TargetCard; import mage.target.common.TargetCardInLibrary; import mage.util.Copyable; -import mage.util.MessageToClient; /** * @@ -486,7 +485,7 @@ public interface Player extends MageItem, Copyable { boolean chooseUse(Outcome outcome, String message, Ability source, Game game); - boolean chooseUse(Outcome outcome, MessageToClient message, Ability source, Game game); + boolean chooseUse(Outcome outcome, String message, String secondMessage, String trueText, String falseText, Ability source, Game game); boolean choose(Outcome outcome, Choice choice, Game game);