From 5b72d1f682a01cf5f884f11448a0b069d5b1e722 Mon Sep 17 00:00:00 2001 From: TRT <> Date: Mon, 18 Oct 2021 15:26:09 +0200 Subject: [PATCH] Fix some more NPE related to gauntlets --- .../ability/effects/DamageDealEffect.java | 8 +---- .../home/gauntlet/CSubmenuGauntletBuild.java | 6 ++-- .../src/main/java/forge/deck/DeckgenUtil.java | 4 ++- .../gamemodes/gauntlet/GauntletUtil.java | 30 ++++++++++--------- .../gamemodes/tournament/TournamentUtil.java | 6 ++-- 5 files changed, 27 insertions(+), 27 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java index 00b3d408f14..fc01ff79c7f 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/DamageDealEffect.java @@ -197,13 +197,7 @@ public class DamageDealEffect extends DamageBaseEffect { return; } - CardCollection assigneeCards = new CardCollection(); - // Do we have a way of doing this in a better fashion? - for (GameObject obj : tgts) { - if (obj instanceof Card) { - assigneeCards.add((Card) obj); - } - } + CardCollection assigneeCards = new CardCollection(Iterables.filter(tgts, Card.class)); Player assigningPlayer = players.get(0); Map map = assigningPlayer.getController().assignCombatDamage(sourceLKI, assigneeCards, dmg, null, true); diff --git a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletBuild.java b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletBuild.java index 047b89af095..1bee7b3f346 100644 --- a/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletBuild.java +++ b/forge-gui-desktop/src/main/java/forge/screens/home/gauntlet/CSubmenuGauntletBuild.java @@ -122,8 +122,8 @@ public enum CSubmenuGauntletBuild implements ICDoc { } private void addDeck() { - final Deck deckToAdd = view.getLstLeft().getPlayer().getDeck(); - if ( null == deckToAdd ) { + final Deck deckToAdd = view.getLstLeft().getPlayer() != null ? view.getLstLeft().getPlayer().getDeck() : null; + if (null == deckToAdd) { return; } workingDecks.add(deckToAdd); @@ -145,7 +145,7 @@ public enum CSubmenuGauntletBuild implements ICDoc { private void deckUp() { final int oldIndex = view.getLstRight().getSelectedIndex(); - if (oldIndex == 0) { return; } + if (oldIndex <= 0) { return; } final Deck movingDeck = workingDecks.remove(oldIndex); workingDecks.add(oldIndex - 1, movingDeck); diff --git a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java index a83b31277da..013320d480b 100644 --- a/forge-gui/src/main/java/forge/deck/DeckgenUtil.java +++ b/forge-gui/src/main/java/forge/deck/DeckgenUtil.java @@ -144,7 +144,7 @@ public class DeckgenUtil { * @return */ public static Deck buildCardGenDeck(PaperCard card, PaperCard secondKeycard, GameFormat format, boolean isForAI){ - return buildLDACardGenDeck(card, format, isForAI); + return buildLDACardGenDeck(card, format, isForAI); } /** @@ -425,6 +425,8 @@ public class DeckgenUtil { /** @return {@link forge.deck.Deck} */ public static Deck getRandomCustomDeck() { final IStorage allDecks = FModel.getDecks().getConstructed(); + // in case user has not created any yet + if (allDecks.size() == 0) { return null; } final int rand = (int) (Math.floor(MyRandom.getRandom().nextDouble() * allDecks.size())); final String name = allDecks.getItemNames().toArray(new String[0])[rand]; return allDecks.get(name); diff --git a/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletUtil.java b/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletUtil.java index 7a6a9e10326..504304f3a57 100644 --- a/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/gauntlet/GauntletUtil.java @@ -37,30 +37,32 @@ public class GauntletUtil { deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getStandard().getFilterPrinted(),true); break; case STANDARD_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getStandard(),true); + break; case PIONEER_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getPioneer(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getPioneer(),true); + break; case HISTORIC_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getHistoric(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getHistoric(),true); + break; case MODERN_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().getModern(),true); + break; case LEGACY_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Legacy"),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Legacy"),true); + break; case VINTAGE_CARDGEN_DECK: - deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Vintage"),true); - break; + deck = DeckgenUtil.buildLDACArchetypeDeck(FModel.getFormats().get("Vintage"),true); + break; case MODERN_COLOR_DECK: deck = DeckgenUtil.getRandomColorDeck(FModel.getFormats().getModern().getFilterPrinted(),true); break; case CUSTOM_DECK: deck = DeckgenUtil.getRandomCustomDeck(); - eventNames.add(deck.getName()); - break; + if (deck != null) { // fall back to precon if none available + eventNames.add(deck.getName()); + break; + } case PRECONSTRUCTED_DECK: deck = DeckgenUtil.getRandomPreconDeck(); eventNames.add(deck.getName()); diff --git a/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentUtil.java b/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentUtil.java index 5ce8368abc7..666ceeae997 100644 --- a/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentUtil.java +++ b/forge-gui/src/main/java/forge/gamemodes/tournament/TournamentUtil.java @@ -56,8 +56,10 @@ public class TournamentUtil { break; case CUSTOM_DECK: deck = DeckgenUtil.getRandomCustomDeck(); - eventNames.add(deck.getName()); - break; + if (deck != null) { // fall back to precon if none available + eventNames.add(deck.getName()); + break; + } case PRECONSTRUCTED_DECK: deck = DeckgenUtil.getRandomPreconDeck(); eventNames.add(deck.getName());