diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java index 71e8fc7ba97..e1dfaf0231b 100644 --- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java +++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java @@ -270,7 +270,7 @@ public class DraftPanel extends javax.swing.JPanel { public void event(Event event) { if (event.getEventName().equals("pick-a-card")) { SimpleCardView source = (SimpleCardView) event.getSource(); - DraftPickView view = session.sendCardPick(draftId, source.getId()); + DraftPickView view = session.sendCardPick(draftId, source.getId(), cardsHidden); if (view != null) { loadCardsToPickedCardsArea(view.getPicks()); draftBooster.loadBooster(emptyView, bigCard); diff --git a/Mage.Common/src/mage/interfaces/MageServer.java b/Mage.Common/src/mage/interfaces/MageServer.java index ea2456cfca2..52188eb8a97 100644 --- a/Mage.Common/src/mage/interfaces/MageServer.java +++ b/Mage.Common/src/mage/interfaces/MageServer.java @@ -29,6 +29,7 @@ package mage.interfaces; import java.util.List; +import java.util.Set; import java.util.UUID; import mage.MageException; import mage.cards.decks.DeckCardLists; @@ -130,7 +131,7 @@ public interface MageServer { //draft methods void joinDraft(UUID draftId, String sessionId) throws MageException; void quitDraft(UUID draftId, String sessionId) throws MageException; - DraftPickView sendCardPick(UUID draftId, String sessionId, UUID cardId) throws MageException; + DraftPickView sendCardPick(UUID draftId, String sessionId, UUID cardId, Set hiddenCards) throws MageException; void sendCardMark(UUID draftId, String sessionId, UUID cardId) throws MageException; //challenge methods diff --git a/Mage.Common/src/mage/remote/SessionImpl.java b/Mage.Common/src/mage/remote/SessionImpl.java index c879dd66287..c424c62df91 100644 --- a/Mage.Common/src/mage/remote/SessionImpl.java +++ b/Mage.Common/src/mage/remote/SessionImpl.java @@ -758,10 +758,10 @@ public class SessionImpl implements Session { } @Override - public DraftPickView sendCardPick(UUID draftId, UUID cardId) { + public DraftPickView sendCardPick(UUID draftId, UUID cardId, Set hiddenCards) { try { if (isConnected()) { - return server.sendCardPick(draftId, sessionId, cardId); + return server.sendCardPick(draftId, sessionId, cardId, hiddenCards); } } catch (MageException ex) { handleMageException(ex); diff --git a/Mage.Common/src/mage/remote/interfaces/GamePlay.java b/Mage.Common/src/mage/remote/interfaces/GamePlay.java index 3c08a51799f..15134d550c9 100644 --- a/Mage.Common/src/mage/remote/interfaces/GamePlay.java +++ b/Mage.Common/src/mage/remote/interfaces/GamePlay.java @@ -27,6 +27,7 @@ */ package mage.remote.interfaces; +import java.util.Set; import java.util.UUID; import mage.cards.decks.DeckCardLists; import mage.constants.ManaType; @@ -64,7 +65,7 @@ public interface GamePlay { boolean updateDeck(UUID tableId, DeckCardLists deck); - DraftPickView sendCardPick(UUID draftId, UUID cardId); + DraftPickView sendCardPick(UUID draftId, UUID cardId, Set hiddenCards); DraftPickView sendCardMark(UUID draftId, UUID cardId); /** diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index f0106a7b9bd..6aa56c9bb65 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -1716,10 +1716,10 @@ public class ComputerPlayer extends PlayerImpl implements Player { } } log.debug("[DEBUG] AI picked: " + bestCard.getName() + ", score=" + maxScore + ", deck colors=" + colors); - draft.addPick(playerId, bestCard.getId()); + draft.addPick(playerId, bestCard.getId(), null); } catch (Exception e) { e.printStackTrace(); - draft.addPick(playerId, cards.get(0).getId()); + draft.addPick(playerId, cards.get(0).getId(), null); } } diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index 6738fcc0ab2..25d06db3cbf 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -31,6 +31,7 @@ package mage.server; import java.util.ArrayList; import java.util.List; import java.util.Locale; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutorService; import mage.MageException; @@ -667,13 +668,13 @@ public class MageServerImpl implements MageServer { } @Override - public DraftPickView sendCardPick(final UUID draftId, final String sessionId, final UUID cardPick) throws MageException { + public DraftPickView sendCardPick(final UUID draftId, final String sessionId, final UUID cardPick, final Set hiddenCards) throws MageException { return executeWithResult("sendCardPick", sessionId, new ActionWithNullNegativeResult() { @Override public DraftPickView execute() { Session session = SessionManager.getInstance().getSession(sessionId); if (session != null) { - return DraftManager.getInstance().sendCardPick(draftId, session.getUserId(), cardPick); + return DraftManager.getInstance().sendCardPick(draftId, session.getUserId(), cardPick, hiddenCards); } else{ logger.error("Session not found sessionId: "+ sessionId + " draftId:" + draftId); } diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 69dab317e52..0a66445ce3f 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -854,6 +854,7 @@ public class TableController { public void endDraft(Draft draft) { for (DraftPlayer player: draft.getPlayers()) { + player.prepareDeck(); tournament.getPlayer(player.getPlayer().getId()).setDeck(player.getDeck()); } tournament.nextStep(); diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftController.java b/Mage.Server/src/main/java/mage/server/draft/DraftController.java index b642ed5c9e8..c2efed6945d 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftController.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftController.java @@ -30,6 +30,7 @@ package mage.server.draft; import java.io.File; import java.util.Map.Entry; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import mage.MageException; @@ -60,7 +61,7 @@ public class DraftController { private final UUID draftSessionId; private final Draft draft; private final UUID tableId; - private UUID markedCard; + private final UUID markedCard; public DraftController(Draft draft, ConcurrentHashMap userPlayerMap, UUID tableId) { draftSessionId = UUID.randomUUID(); @@ -214,7 +215,7 @@ public class DraftController { if (draftSession != null) { UUID cardId = draftSession.getMarkedCard(); if (cardId != null) { - sendCardPick(userId, cardId); + sendCardPick(userId, cardId, null); return; } } @@ -227,11 +228,11 @@ public class DraftController { return this.draftSessionId; } - public DraftPickView sendCardPick(UUID userId, UUID cardId) { + public DraftPickView sendCardPick(UUID userId, UUID cardId, Set hiddenCards) { DraftSession draftSession = draftSessions.get(userPlayerMap.get(userId)); if (draftSession != null) { draftSession.setMarkedCard(null); - return draftSession.sendCardPick(cardId); + return draftSession.sendCardPick(cardId, hiddenCards); } return null; } diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java b/Mage.Server/src/main/java/mage/server/draft/DraftManager.java index de740cd9543..943d2e673d8 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftManager.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftManager.java @@ -28,6 +28,7 @@ package mage.server.draft; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import mage.game.draft.Draft; @@ -62,8 +63,8 @@ public class DraftManager { draftControllers.remove(gameId); } - public DraftPickView sendCardPick(UUID draftId, UUID userId, UUID cardId) { - return draftControllers.get(draftId).sendCardPick(userId, cardId); + public DraftPickView sendCardPick(UUID draftId, UUID userId, UUID cardId, Set hiddenCards) { + return draftControllers.get(draftId).sendCardPick(userId, cardId, hiddenCards); } public void sendCardMark(UUID draftId, UUID userId, UUID cardId) { diff --git a/Mage.Server/src/main/java/mage/server/draft/DraftSession.java b/Mage.Server/src/main/java/mage/server/draft/DraftSession.java index 763ad6d10af..7a7d045fc1d 100644 --- a/Mage.Server/src/main/java/mage/server/draft/DraftSession.java +++ b/Mage.Server/src/main/java/mage/server/draft/DraftSession.java @@ -29,6 +29,7 @@ package mage.server.draft; import java.rmi.RemoteException; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; @@ -150,9 +151,9 @@ public class DraftSession { killed = true; } - public DraftPickView sendCardPick(UUID cardId) { + public DraftPickView sendCardPick(UUID cardId, Set hiddenCards) { cancelTimeout(); - if (draft.addPick(playerId, cardId)) { + if (draft.addPick(playerId, cardId, hiddenCards)) { return getDraftPickView(0); } return null; diff --git a/Mage/src/mage/game/draft/Draft.java b/Mage/src/mage/game/draft/Draft.java index 12aef514840..de1e7f674c9 100644 --- a/Mage/src/mage/game/draft/Draft.java +++ b/Mage/src/mage/game/draft/Draft.java @@ -31,6 +31,7 @@ package mage.game.draft; import java.io.Serializable; import java.util.Collection; import java.util.List; +import java.util.Set; import java.util.UUID; import mage.MageItem; import mage.cards.ExpansionSet; @@ -54,7 +55,7 @@ public interface Draft extends MageItem, Serializable { List getSets(); int getBoosterNum(); int getCardNum(); - boolean addPick(UUID playerId, UUID cardId); + boolean addPick(UUID playerId, UUID cardId, Set hiddenCards); void start(); boolean isStarted(); void setStarted(); diff --git a/Mage/src/mage/game/draft/DraftImpl.java b/Mage/src/mage/game/draft/DraftImpl.java index 8f6712a51b2..4cd801cd0c6 100644 --- a/Mage/src/mage/game/draft/DraftImpl.java +++ b/Mage/src/mage/game/draft/DraftImpl.java @@ -32,6 +32,7 @@ import java.util.Collection; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.UUID; import mage.cards.Card; import mage.cards.ExpansionSet; @@ -180,7 +181,7 @@ public abstract class DraftImpl implements Draft { @Override public void autoPick(UUID playerId) { - this.addPick(playerId, players.get(playerId).getBooster().get(0).getId()); + this.addPick(playerId, players.get(playerId).getBooster().get(0).getId(), null); } protected void passLeft() { @@ -313,12 +314,12 @@ public abstract class DraftImpl implements Draft { } @Override - public boolean addPick(UUID playerId, UUID cardId) { + public boolean addPick(UUID playerId, UUID cardId, Set hiddenCards) { DraftPlayer player = players.get(playerId); if (player.isPicking()) { for (Card card: player.booster) { if (card.getId().equals(cardId)) { - player.addPick(card); + player.addPick(card, hiddenCards); player.booster.remove(card); break; } diff --git a/Mage/src/mage/game/draft/DraftPlayer.java b/Mage/src/mage/game/draft/DraftPlayer.java index 9e798bd22ec..19ce58e99c1 100644 --- a/Mage/src/mage/game/draft/DraftPlayer.java +++ b/Mage/src/mage/game/draft/DraftPlayer.java @@ -29,7 +29,9 @@ package mage.game.draft; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.UUID; import mage.cards.Card; import mage.cards.ExpansionSet; @@ -48,11 +50,13 @@ public class DraftPlayer { protected List booster; protected boolean picking; protected boolean joined = false; + protected Set hiddenCards; public DraftPlayer(Player player) { id = UUID.randomUUID(); this.player = player; this.deck = new Deck(); + hiddenCards = new HashSet<>(); } public UUID getId() { @@ -63,12 +67,30 @@ public class DraftPlayer { return player; } + public void prepareDeck() { + if (!hiddenCards.isEmpty()) { + Set cardsToDeck = new HashSet<>(); + for(Card card: deck.getSideboard()) { + if (!hiddenCards.contains(card.getId())) { + cardsToDeck.add(card); + } + } + for(Card card: cardsToDeck) { + deck.getSideboard().remove(card); + deck.getCards().add(card); + } + } + } + public Deck getDeck() { return deck; } - public void addPick(Card card) { + public void addPick(Card card, Set hiddenCards) { deck.getSideboard().add(card); + if (hiddenCards != null) { + this.hiddenCards = hiddenCards; + } synchronized(booster) { booster.remove(card); }