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 1f62e486a64..a667b3900a3 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 @@ -215,7 +215,8 @@ public class HumanPlayer extends PlayerImpl { public boolean choose(Outcome outcome, Target target, UUID sourceId, Game game, Map options) { game.getState().setPriorityPlayerId(getId()); while (!abort) { - game.fireSelectTargetEvent(playerId, target.getMessage(), target.possibleTargets(null, playerId, game), target.isRequired(), options); + Set cards = target.possibleTargets(null, playerId, game); + game.fireSelectTargetEvent(playerId, target.getMessage(), cards, target.isRequired(), options); waitForResponse(); if (response.getUUID() != null) { if (target instanceof TargetPermanent) { @@ -238,6 +239,9 @@ public class HumanPlayer extends PlayerImpl { if (!target.isRequired()) { return false; } + if (cards == null || cards.isEmpty()) { + return false; + } } } return false; @@ -271,6 +275,9 @@ public class HumanPlayer extends PlayerImpl { if (!target.isRequired()) { return false; } + if (possibleTargets.size() == 0) { + return false; + } } } return false; @@ -286,7 +293,7 @@ public class HumanPlayer extends PlayerImpl { while (!abort) { boolean required = target.isRequired(); // if there is no cards to select from, then add possibility to cancel choosing action - if (cards == null) { + if (cards == null) { required = false; } else { int count = cards.count(target.getFilter(), game); @@ -305,7 +312,7 @@ public class HumanPlayer extends PlayerImpl { if (target.getTargets().size() >= target.getNumberOfTargets()) { return true; } - if (!target.isRequired()) { + if (!required) { return false; } } @@ -317,6 +324,14 @@ public class HumanPlayer extends PlayerImpl { public boolean chooseTarget(Outcome outcome, Cards cards, TargetCard target, Ability source, Game game) { game.getState().setPriorityPlayerId(getId()); while (!abort) { + boolean required = target.isRequired(); + // if there is no cards to select from, then add possibility to cancel choosing action + if (cards == null) { + required = false; + } else { + int count = cards.count(target.getFilter(), game); + if (count == 0) required = false; + } game.fireSelectTargetEvent(playerId, target.getMessage(), cards, target.isRequired(), null); waitForResponse(); if (response.getUUID() != null) { @@ -330,7 +345,7 @@ public class HumanPlayer extends PlayerImpl { if (target.getTargets().size() >= target.getNumberOfTargets()) { return true; } - if (!target.isRequired()) { + if (!required) { return false; } } diff --git a/Mage.Server/plugins/mage-player-ai-ma.jar b/Mage.Server/plugins/mage-player-ai-ma.jar index 3b2ddaf0147..04b9b53e506 100644 Binary files a/Mage.Server/plugins/mage-player-ai-ma.jar and b/Mage.Server/plugins/mage-player-ai-ma.jar differ diff --git a/Mage.Server/plugins/mage-player-ai.jar b/Mage.Server/plugins/mage-player-ai.jar index 7a5ccaf74ac..868726791dd 100644 Binary files a/Mage.Server/plugins/mage-player-ai.jar and b/Mage.Server/plugins/mage-player-ai.jar differ diff --git a/Mage.Server/plugins/mage-player-aiminimax.jar b/Mage.Server/plugins/mage-player-aiminimax.jar index aa26fbb5cd2..5dfb2d61573 100644 Binary files a/Mage.Server/plugins/mage-player-aiminimax.jar and b/Mage.Server/plugins/mage-player-aiminimax.jar differ diff --git a/Mage.Server/plugins/mage-player-human.jar b/Mage.Server/plugins/mage-player-human.jar index 32180e3e722..e8964ad55af 100644 Binary files a/Mage.Server/plugins/mage-player-human.jar and b/Mage.Server/plugins/mage-player-human.jar differ