From f1767a57a30aeba5d0cfbccc57de63bc6dc58a56 Mon Sep 17 00:00:00 2001 From: Anthony Calosa Date: Mon, 7 Dec 2020 23:01:15 +0800 Subject: [PATCH] try to fix StackOverflow --- .../main/java/forge/game/card/CardView.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index f2d162494e8..a6487422fc2 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -392,6 +392,7 @@ public class CardView extends GameEntityView { if (viewers == null || Iterables.isEmpty(viewers)) { return true; } return Iterables.any(viewers, new Predicate() { + @Override public final boolean apply(final PlayerView input) { return canBeShownTo(input); } @@ -456,14 +457,17 @@ public class CardView extends GameEntityView { } public boolean canFaceDownBeShownToAny(final Iterable viewers) { + if (viewers == null || Iterables.isEmpty(viewers)) { return true; } + return Iterables.any(viewers, new Predicate() { - @Override public final boolean apply(final PlayerView input) { - return canFaceDownBeShownTo(input); + @Override + public final boolean apply(final PlayerView input) { + return canFaceDownBeShownTo(input, false); } }); } - private boolean canFaceDownBeShownTo(final PlayerView viewer) { + private boolean canFaceDownBeShownTo(final PlayerView viewer, boolean skip) { if (!isFaceDown()) { return true; } @@ -472,13 +476,15 @@ public class CardView extends GameEntityView { if (mayPlayerLook(viewer)) { return true; } - final PlayerView controller = getController(); - //if viewer is controlled by another player, also check if face can be shown to that player - final PlayerView mindSlaveMaster = viewer.getMindSlaveMaster(); - if (mindSlaveMaster != null && mindSlaveMaster != controller && canFaceDownBeShownTo(mindSlaveMaster)) { - return true; + if (!skip) { + //if viewer is controlled by another player, also check if face can be shown to that player + final PlayerView mindSlaveMaster = viewer.getMindSlaveMaster(); + if (mindSlaveMaster != null) { + return canFaceDownBeShownTo(mindSlaveMaster, true); + } } - return isInZone(EnumSet.of(ZoneType.Battlefield, ZoneType.Stack, ZoneType.Sideboard)) && controller.equals(viewer); + + return isInZone(EnumSet.of(ZoneType.Battlefield, ZoneType.Stack, ZoneType.Sideboard)) && getController().equals(viewer); } public FCollectionView getEncodedCards() {