From 32df03d045252a09086fa768b7f4f58bf399d6a1 Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Sat, 8 Sep 2018 09:16:03 -0600 Subject: [PATCH 1/3] fix an error in the Human multi-select logic Closes: core-developers/forge#673 Signed-off-by: Jamin W. Collins --- .../main/java/forge/player/PlayerControllerHuman.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 49b32d26133..3b7744cc474 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -18,6 +18,7 @@ import forge.control.FControlGamePlayback; import forge.deck.CardPool; import forge.deck.Deck; import forge.deck.DeckSection; +import forge.error.BugReporter; import forge.events.UiEventNextGameDecision; import forge.game.*; import forge.game.ability.AbilityFactory; @@ -60,6 +61,7 @@ import forge.util.TextUtil; import forge.util.collect.FCollection; import forge.util.collect.FCollectionView; import forge.util.gui.SOptionPane; +import io.sentry.Sentry; import org.apache.commons.lang3.Range; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.tuple.ImmutablePair; @@ -458,6 +460,11 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public List chooseEntitiesForEffect(final FCollectionView optionList, final DelayedReveal delayedReveal, final SpellAbility sa, final String title, final Player targetedPlayer) { + + // useful details for debugging problems with the mass select logic + Sentry.getContext().addExtra("Card", sa.getCardView().toString()); + Sentry.getContext().addExtra("SpellAbility", sa.toString()); + // Human is supposed to read the message and understand from it what to // choose if (optionList.isEmpty()) { @@ -493,7 +500,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont input.setCancelAllowed(true); input.setMessage(MessageUtil.formatMessage(title, player, targetedPlayer)); input.showAndWait(); - return (List) Iterables.getFirst(input.getSelected(), null); + return (List) input.getSelected(); } tempShow(optionList); From 353dc885c14e62f7c4a22a8abab3c6b5d85679a5 Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Sat, 8 Sep 2018 10:39:28 -0600 Subject: [PATCH 2/3] gracefully handle port already in use Closes: core-developers/forge#676 Signed-off-by: Jamin W. Collins --- .../screens/home/online/CSubmenuOnlineLobby.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/online/CSubmenuOnlineLobby.java b/forge-gui-desktop/src/main/java/forge/screens/home/online/CSubmenuOnlineLobby.java index 2a266eca88a..76ecd651a30 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/online/CSubmenuOnlineLobby.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/online/CSubmenuOnlineLobby.java @@ -1,5 +1,6 @@ package forge.screens.home.online; +import java.net.BindException; import java.util.ArrayList; import java.util.List; @@ -7,6 +8,7 @@ import javax.swing.JMenu; import javax.swing.SwingUtilities; import forge.FThreads; +import forge.error.BugReporter; import forge.gui.FNetOverlay; import forge.gui.SOverlayUtils; import forge.gui.framework.EDocID; @@ -19,6 +21,7 @@ import forge.screens.home.CHomeUI; import forge.screens.home.CLobby; import forge.screens.home.VLobby; import forge.screens.home.sanctioned.ConstructedGameMenu; +import forge.util.gui.SOptionPane; public enum CSubmenuOnlineLobby implements ICDoc, IMenuProvider { SINGLETON_INSTANCE; @@ -41,7 +44,18 @@ public enum CSubmenuOnlineLobby implements ICDoc, IMenuProvider { join(url); } else { - host(); + try { + host(); + } catch (Exception ex) { + // IntelliJ swears that BindException isn't thrown in this try block, but it is! + if (ex.getClass() == BindException.class) { + SOptionPane.showErrorDialog("Unable to start server, port already in use!"); + SOverlayUtils.hideOverlay(); + } else { + BugReporter.reportException(ex); + } + ; + } } } }); From e4b146128c5ff4f9c127419a42be056e62a43e1c Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Sat, 8 Sep 2018 10:56:59 -0600 Subject: [PATCH 3/3] avoid an NPE when no cards are chosen Closes: core-developers/forge#680 Signed-off-by: Jamin W. Collins --- .../main/java/forge/game/ability/effects/ChangeZoneEffect.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java index 5e72cd9fdf4..dcf79e209af 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneEffect.java @@ -891,7 +891,7 @@ public class ChangeZoneEffect extends SpellAbilityEffect { // ensure that selection is within maximum allowed changeNum do { selectedCards = decider.getController().chooseCardsForZoneChange(destination, origin, sa, fetchList, delayedReveal, selectPrompt, decider); - } while (selectedCards.size() > changeNum); + } while (selectedCards != null && selectedCards.size() > changeNum); for (Card card : selectedCards) { chosenCards.add(card); };