From 466e524d6ef461806fe7fd0dcffecab7c08531b9 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 5 Sep 2017 16:39:43 +0200 Subject: [PATCH] Fixed possible exception during draft player repplacement. --- .../main/java/mage/game/draft/DraftImpl.java | 48 +++++++++---------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/Mage/src/main/java/mage/game/draft/DraftImpl.java b/Mage/src/main/java/mage/game/draft/DraftImpl.java index 702ae547fe9..409bc796f0a 100644 --- a/Mage/src/main/java/mage/game/draft/DraftImpl.java +++ b/Mage/src/main/java/mage/game/draft/DraftImpl.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,14 +20,14 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.game.draft; +import java.util.*; import mage.cards.Card; import mage.cards.ExpansionSet; import mage.game.draft.DraftOptions.TimingOption; @@ -36,8 +36,6 @@ import mage.game.events.TableEvent.EventType; import mage.players.Player; import mage.players.PlayerList; -import java.util.*; - /** * * @author BetaSteward_at_googlemail.com @@ -89,9 +87,9 @@ public abstract class DraftImpl implements Draft { DraftPlayer newDraftPlayer = new DraftPlayer(newPlayer); DraftPlayer oldDraftPlayer = players.get(oldPlayer.getId()); newDraftPlayer.setBooster(oldDraftPlayer.getBooster()); - Map newPlayers = new LinkedHashMap<>(); + Map newPlayers = new LinkedHashMap<>(); synchronized (players) { - for(Map.Entry entry :players.entrySet()) { + for (Map.Entry entry : players.entrySet()) { if (entry.getKey().equals(oldPlayer.getId())) { newPlayers.put(newPlayer.getId(), newDraftPlayer); } else { @@ -99,7 +97,7 @@ public abstract class DraftImpl implements Draft { } } players.clear(); - for (Map.Entry entry: newPlayers.entrySet()) { + for (Map.Entry entry : newPlayers.entrySet()) { players.put(entry.getKey(), entry.getValue()); } } @@ -109,7 +107,7 @@ public abstract class DraftImpl implements Draft { currentId = newPlayer.getId(); } table.clear(); - for(UUID playerId : players.keySet()) { + for (UUID playerId : players.keySet()) { table.add(playerId); } @@ -117,7 +115,9 @@ public abstract class DraftImpl implements Draft { } if (oldDraftPlayer.isPicking()) { newDraftPlayer.setPicking(); - newDraftPlayer.getPlayer().pickCard(newDraftPlayer.getBooster(), newDraftPlayer.getDeck(), this); + if (!newDraftPlayer.getBooster().isEmpty()) { + newDraftPlayer.getPlayer().pickCard(newDraftPlayer.getBooster(), newDraftPlayer.getDeck(), this); + } } return true; } @@ -143,7 +143,7 @@ public abstract class DraftImpl implements Draft { /** * Number of boosters that each player gets in this draft - * + * * @return */ @Override @@ -151,7 +151,6 @@ public abstract class DraftImpl implements Draft { return numberBoosters; } - @Override public List getSets() { return sets; @@ -219,10 +218,9 @@ public abstract class DraftImpl implements Draft { } } - protected void openBooster() { if (boosterNum < numberBoosters) { - for (DraftPlayer player: players.values()) { + for (DraftPlayer player : players.values()) { if (draftCube != null) { player.setBooster(draftCube.createBooster()); } else { @@ -237,25 +235,26 @@ public abstract class DraftImpl implements Draft { protected boolean pickCards() { cardNum++; - for (DraftPlayer player: players.values()) { + for (DraftPlayer player : players.values()) { if (player.getBooster().isEmpty()) { return false; } player.setPicking(); player.getPlayer().pickCard(player.getBooster(), player.getDeck(), this); } - synchronized(this) { + synchronized (this) { while (!donePicking()) { try { this.wait(); - } catch (InterruptedException ex) { } + } catch (InterruptedException ex) { + } } } return true; } protected boolean donePicking() { - if(isAbort()) { + if (isAbort()) { return true; } return players.values() @@ -304,14 +303,14 @@ public abstract class DraftImpl implements Draft { public boolean addPick(UUID playerId, UUID cardId, Set hiddenCards) { DraftPlayer player = players.get(playerId); if (player.isPicking()) { - for (Card card: player.booster) { + for (Card card : player.booster) { if (card.getId().equals(cardId)) { player.addPick(card, hiddenCards); player.booster.remove(card); break; } } - synchronized(this) { + synchronized (this) { this.notifyAll(); } } @@ -341,7 +340,7 @@ public abstract class DraftImpl implements Draft { @Override public void resetBufferedCards() { Set setsDone = new HashSet<>(); - for(ExpansionSet set: sets) { + for (ExpansionSet set : sets) { if (!setsDone.contains(set)) { set.removeSavedCards(); setsDone.add(set); @@ -350,5 +349,4 @@ public abstract class DraftImpl implements Draft { } - }