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 ba1cfdc9c7..c97996682a 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 @@ -2609,6 +2609,10 @@ public class HumanPlayer extends PlayerImpl { private boolean gameInCheckPlayableState(Game game, boolean ignoreWarning) { if (game.inCheckPlayableState()) { if (!ignoreWarning) { + logger.warn(String.format("Current stack: %d - %s", + game.getStack().size(), + game.getStack().stream().map(Object::toString).collect(Collectors.joining(", ")) + )); logger.warn("Player interaction in checkPlayableState", new Throwable()); } return true; diff --git a/Mage.Sets/src/mage/cards/f/FadeAway.java b/Mage.Sets/src/mage/cards/f/FadeAway.java index a9e70c3bb6..94b255845e 100644 --- a/Mage.Sets/src/mage/cards/f/FadeAway.java +++ b/Mage.Sets/src/mage/cards/f/FadeAway.java @@ -63,7 +63,7 @@ class FadeAwayEffect extends OneShotEffect { String message = "For how many creatures will you pay (up to " + creaturesNumber + ")?"; int payAmount = 0; boolean paid = false; - while (!paid) { + while (player.canRespond() && !paid) { payAmount = player.getAmount(0, creaturesNumber, message, game); ManaCostsImpl cost = new ManaCostsImpl(); cost.add(new GenericManaCost(payAmount)); diff --git a/Mage.Sets/src/mage/cards/s/ShroudedLore.java b/Mage.Sets/src/mage/cards/s/ShroudedLore.java index 1d74a8a34d..029746b868 100644 --- a/Mage.Sets/src/mage/cards/s/ShroudedLore.java +++ b/Mage.Sets/src/mage/cards/s/ShroudedLore.java @@ -84,13 +84,12 @@ class ShroudedLoreEffect extends OneShotEffect { } if (!done) { + done = true; if (cost.canPay(source, source, you.getId(), game) && you.chooseUse(Outcome.Benefit, "Pay {B} to choose a different card ?", source, game)) { cost.clearPaid(); - if (!cost.pay(source, game, source, you.getId(), false, null)) { - done = true; + if (cost.pay(source, game, source, you.getId(), false, null)) { + done = false; } - } else { - done = true; } } diff --git a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostImpl.java b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostImpl.java index 421ce7baae..d0503b870c 100644 --- a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostImpl.java +++ b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostImpl.java @@ -241,7 +241,7 @@ public abstract class ManaCostImpl extends CostImpl implements ManaCost { assignPayment(game, ability, player.getManaPool(), costToPay != null ? costToPay : this); } game.getState().getSpecialActions().removeManaActions(); - while (!isPaid()) { + while (player.canRespond() && !isPaid()) { ManaCost unpaid = this.getUnpaid(); String promptText = ManaUtil.addSpecialManaPayAbilities(ability, game, unpaid); if (player.playMana(ability, unpaid, promptText, game)) { @@ -251,7 +251,7 @@ public abstract class ManaCostImpl extends CostImpl implements ManaCost { } game.getState().getSpecialActions().removeManaActions(); } - return true; + return isPaid(); } @Override diff --git a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java index bb2580d96d..59e2e9dbd7 100644 --- a/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java +++ b/Mage/src/main/java/mage/abilities/costs/mana/ManaCostsImpl.java @@ -128,7 +128,7 @@ public class ManaCostsImpl<T extends ManaCost> extends ArrayList<T> implements M assignPayment(game, ability, player.getManaPool(), this); } game.getState().getSpecialActions().removeManaActions(); - while (!isPaid()) { + while (player.canRespond() && !isPaid()) { ManaCost unpaid = this.getUnpaid(); String promptText = ManaUtil.addSpecialManaPayAbilities(ability, game, unpaid); if (player.playMana(ability, unpaid, promptText, game)) { @@ -138,7 +138,7 @@ public class ManaCostsImpl<T extends ManaCost> extends ArrayList<T> implements M } game.getState().getSpecialActions().removeManaActions(); } - return true; + return isPaid(); } /**