From 7bea472fff775e0000375bfc4acc75d362e33754 Mon Sep 17 00:00:00 2001 From: BetaSteward Date: Mon, 3 Jan 2011 23:52:28 -0500 Subject: [PATCH] initial drafting stuff --- .../main/java/mage/client/remote/Session.java | 24 +++ Mage.Common/src/mage/interfaces/Server.java | 4 + .../src/mage/player/ai/ComputerPlayer.java | 7 + .../src/mage/player/human/HumanPlayer.java | 9 +- .../src/main/java/mage/server/ServerImpl.java | 34 +++ Mage/src/mage/game/draft/Draft.java | 54 +++++ Mage/src/mage/game/draft/DraftImpl.java | 199 ++++++++++++++++++ Mage/src/mage/game/draft/DraftPlayer.java | 94 +++++++++ .../mage/game/events/PlayerQueryEvent.java | 21 +- .../game/events/PlayerQueryEventSource.java | 6 + Mage/src/mage/game/events/TableEvent.java | 13 ++ .../mage/game/events/TableEventSource.java | 5 + Mage/src/mage/players/Player.java | 2 + 13 files changed, 469 insertions(+), 3 deletions(-) create mode 100644 Mage/src/mage/game/draft/Draft.java create mode 100644 Mage/src/mage/game/draft/DraftImpl.java create mode 100644 Mage/src/mage/game/draft/DraftPlayer.java diff --git a/Mage.Client/src/main/java/mage/client/remote/Session.java b/Mage.Client/src/main/java/mage/client/remote/Session.java index c3330228f85..a3d2fce0e4d 100644 --- a/Mage.Client/src/main/java/mage/client/remote/Session.java +++ b/Mage.Client/src/main/java/mage/client/remote/Session.java @@ -321,6 +321,18 @@ public class Session { return false; } + public boolean sendCardPick(UUID draftId, UUID cardId) { + try { + server.sendPlayerUUID(draftId, sessionId, cardId); + return true; + } catch (RemoteException ex) { + handleRemoteException(ex); + } catch (MageException ex) { + handleMageException(ex); + } + return false; + } + public boolean joinChat(UUID chatId, ChatPanel chat) { try { server.joinChat(chatId, sessionId, userName); @@ -465,6 +477,18 @@ public class Session { return false; } + public boolean startDraft(UUID roomId, UUID tableId) { + try { + server.startDraft(sessionId, roomId, tableId); + return true; + } catch (RemoteException ex) { + handleRemoteException(ex); + } catch (MageException ex) { + handleMageException(ex); + } + return false; + } + public boolean submitDeck(UUID tableId, DeckCardLists deck) { try { server.submitDeck(sessionId, tableId, deck); diff --git a/Mage.Common/src/mage/interfaces/Server.java b/Mage.Common/src/mage/interfaces/Server.java index fe80a748fdb..a97162992c4 100644 --- a/Mage.Common/src/mage/interfaces/Server.java +++ b/Mage.Common/src/mage/interfaces/Server.java @@ -86,6 +86,10 @@ public interface Server extends Remote, CallbackServer { public void sendPlayerInteger(UUID gameId, UUID sessionId, Integer data) throws RemoteException, MageException; public void concedeGame(UUID gameId, UUID sessionId) throws RemoteException, MageException; + //draft methods + public void startDraft(UUID sessionId, UUID roomId, UUID tableId) throws RemoteException, MageException; + public void sendCardPick(UUID draftId, UUID sessionId, UUID cardId) throws RemoteException, MageException; + //replay methods public void replayGame(UUID sessionId) throws RemoteException, MageException; public void stopReplay(UUID sessionId) throws RemoteException, MageException; diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java index fb432c9fe13..14bd0d9b2db 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/mage/player/ai/ComputerPlayer.java @@ -72,6 +72,7 @@ import mage.abilities.keyword.FirstStrikeAbility; import mage.abilities.keyword.TrampleAbility; import mage.abilities.mana.ManaAbility; import mage.abilities.mana.ManaOptions; +import mage.game.draft.Draft; import mage.player.ai.simulators.CombatGroupSimulator; import mage.player.ai.simulators.CombatSimulator; import mage.player.ai.simulators.CreatureSimulator; @@ -773,6 +774,12 @@ public class ComputerPlayer> extends PlayerImpl i table.fireSubmitDeckEvent(playerId, deck); } + @Override + public void pickCard(List cards, Deck deck, Draft draft) { + //TODO: improve this + draft.addPick(playerId, cards.get(0).getId()); + } + protected Attackers getPotentialAttackers(Game game) { logger.fine("getAvailableAttackers"); Attackers attackers = new Attackers(); diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 68a04966eb2..b386cd7e6a6 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -32,8 +32,10 @@ import java.util.List; import mage.abilities.TriggeredAbilities; import mage.abilities.TriggeredAbility; import mage.abilities.effects.ReplacementEffect; +import mage.cards.Card; import mage.cards.Cards; import mage.choices.Choice; +import mage.game.draft.Draft; import mage.players.*; import java.util.Map; import java.util.Set; @@ -477,6 +479,11 @@ public class HumanPlayer extends PlayerImpl { table.fireSideboardEvent(playerId, deck); } + @Override + public void pickCard(List cards, Deck deck, Draft draft) { + draft.firePickCardEvent(playerId); + } + protected void specialAction(Game game) { Map specialActions = game.getState().getSpecialActions().getControlledBy(playerId); game.fireGetChoiceEvent(playerId, name, specialActions.values()); @@ -543,8 +550,6 @@ public class HumanPlayer extends PlayerImpl { } } - - @Override public HumanPlayer copy() { return new HumanPlayer(this); diff --git a/Mage.Server/src/main/java/mage/server/ServerImpl.java b/Mage.Server/src/main/java/mage/server/ServerImpl.java index 11e8a938f11..67f5d161164 100644 --- a/Mage.Server/src/main/java/mage/server/ServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/ServerImpl.java @@ -231,6 +231,23 @@ public class ServerImpl extends RemoteServer implements Server { } } + @Override + public void startDraft(final UUID sessionId, final UUID roomId, final UUID draftId) throws MageException { + try { + rmiExecutor.execute( + new Runnable() { + @Override + public void run() { +// TableManager.getInstance().startMatch(sessionId, roomId, tableId); + } + } + ); + } + catch (Exception ex) { + handleException(ex); + } + } + @Override public void sendChatMessage(final UUID chatId, final String userName, final String message) throws MageException { try { @@ -456,6 +473,23 @@ public class ServerImpl extends RemoteServer implements Server { } } + @Override + public void sendCardPick(final UUID gameId, final UUID sessionId, final UUID cardPick) throws MageException { + try { + rmiExecutor.execute( + new Runnable() { + @Override + public void run() { +// GameManager.getInstance().sendPlayerUUID(gameId, sessionId, data); + } + } + ); + } + catch (Exception ex) { + handleException(ex); + } + } + @Override public void concedeGame(final UUID gameId, final UUID sessionId) throws MageException { try { diff --git a/Mage/src/mage/game/draft/Draft.java b/Mage/src/mage/game/draft/Draft.java new file mode 100644 index 00000000000..71cf6577596 --- /dev/null +++ b/Mage/src/mage/game/draft/Draft.java @@ -0,0 +1,54 @@ +/* + * 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 + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * 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.io.Serializable; +import java.util.UUID; +import mage.MageItem; +import mage.game.events.Listener; +import mage.game.events.PlayerQueryEvent; +import mage.game.events.TableEvent; +import mage.players.Player; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public interface Draft extends MageItem, Serializable { + + public void addPlayer(Player player); + public void addPick(UUID playerId, UUID cardId); + public void start(); + + public void addTableEventListener(Listener listener); + public void fireUpdatePlayersEvent(); + public void addPlayerQueryEventListener(Listener listener); + public void firePickCardEvent(UUID playerId); + +} diff --git a/Mage/src/mage/game/draft/DraftImpl.java b/Mage/src/mage/game/draft/DraftImpl.java new file mode 100644 index 00000000000..cacb0d054df --- /dev/null +++ b/Mage/src/mage/game/draft/DraftImpl.java @@ -0,0 +1,199 @@ +/* + * 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 + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * 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.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.logging.Level; +import java.util.logging.Logger; +import mage.cards.Card; +import mage.cards.ExpansionSet; +import mage.game.events.Listener; +import mage.game.events.PlayerQueryEvent; +import mage.game.events.PlayerQueryEventSource; +import mage.game.events.TableEvent; +import mage.game.events.TableEvent.EventType; +import mage.game.events.TableEventSource; +import mage.players.Player; +import mage.players.PlayerList; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class DraftImpl> implements Draft { + + protected final UUID id; + protected Map players = new HashMap(); + protected PlayerList table = new PlayerList(); + protected List sets; + protected int boosterNum = 0; + + protected transient TableEventSource tableEventSource = new TableEventSource(); + protected transient PlayerQueryEventSource playerQueryEventSource = new PlayerQueryEventSource(); + + public DraftImpl(List sets) { + id = UUID.randomUUID(); + this.sets = sets; + } + + @Override + public UUID getId() { + return id; + } + + @Override + public void addPlayer(Player player) { + DraftPlayer draftPlayer = new DraftPlayer(player); + players.put(draftPlayer.getId(), draftPlayer); + table.add(draftPlayer.getId()); + } + + protected void passLeft() { + UUID startId = table.get(0); + UUID currentId = startId; + UUID nextId = table.getNext(); + DraftPlayer current = players.get(currentId); + DraftPlayer next = players.get(nextId); + List currentBooster = current.booster; + while (true) { + List nextBooster = next.booster; + next.setBooster(currentBooster); + if (nextId == startId) + break; + currentBooster = nextBooster; + current = next; + currentId = nextId; + nextId = table.getNext(); + next = players.get(nextId); + } + } + + protected void passRight() { + UUID startId = table.get(0); + UUID currentId = startId; + UUID prevId = table.getPrevious(); + DraftPlayer current = players.get(currentId); + DraftPlayer prev = players.get(prevId); + List currentBooster = current.booster; + while (true) { + List prevBooster = prev.booster; + prev.setBooster(currentBooster); + if (prevId == startId) + break; + currentBooster = prevBooster; + current = prev; + currentId = prevId; + prevId = table.getPrevious(); + prev = players.get(prevId); + } + } + + protected void openBooster() { + if (sets.size() < boosterNum) { + for (DraftPlayer player: players.values()) { + player.setBooster(sets.get(boosterNum).createBooster()); + } + } + boosterNum++; + } + + protected boolean pickCards() { + for (DraftPlayer player: players.values()) { + if (player.getBooster().size() == 0) + return false; + player.getPlayer().pickCard(player.getBooster(), player.getDeck(), this); + player.setPicking(); + } + while (!donePicking()) { + try { + Thread.sleep(1000); + } catch (InterruptedException ex) { + Logger.getLogger(DraftImpl.class.getName()).log(Level.SEVERE, null, ex); + } + } + return true; + } + + protected boolean donePicking() { + for (DraftPlayer player: players.values()) { + if (player.picking) + return false; + } + return true; + } + + @Override + public void start() { + while (boosterNum < sets.size()) { + openBooster(); + while (pickCards()) { + if (boosterNum % 2 == 1) + passLeft(); + else + passRight(); + fireUpdatePlayersEvent(); + } + } + } + + @Override + public void addTableEventListener(Listener listener) { + tableEventSource.addListener(listener); + } + + @Override + public void fireUpdatePlayersEvent() { + tableEventSource.fireTableEvent(EventType.UPDATE, null, this); + } + + @Override + public void addPlayerQueryEventListener(Listener listener) { + playerQueryEventSource.addListener(listener); + } + + @Override + public void firePickCardEvent(UUID playerId) { + playerQueryEventSource.pickCard(playerId, "Pick card", players.get(playerId).booster); + } + + @Override + public void addPick(UUID playerId, UUID cardId) { + DraftPlayer player = players.get(playerId); + for (Card card: player.booster) { + if (card.getId().equals(cardId)) { + player.addPick(card); + break; + } + } + } + +} diff --git a/Mage/src/mage/game/draft/DraftPlayer.java b/Mage/src/mage/game/draft/DraftPlayer.java new file mode 100644 index 00000000000..49715c9e305 --- /dev/null +++ b/Mage/src/mage/game/draft/DraftPlayer.java @@ -0,0 +1,94 @@ +/* + * Copyright 2011 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 + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * 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.List; +import java.util.UUID; +import mage.cards.Card; +import mage.cards.ExpansionSet; +import mage.cards.decks.Deck; +import mage.players.Player; + +/** + * + * @author BetaSteward_at_googlemail.com + */ +public class DraftPlayer { + + protected UUID id; + protected Player player; + protected Deck deck; + protected List booster; + protected boolean picking; + + public DraftPlayer(Player player) { + id = UUID.randomUUID(); + this.player = player; + this.deck = new Deck(); + } + + public UUID getId() { + return id; + } + + public Player getPlayer() { + return player; + } + + public Deck getDeck() { + return deck; + } + + public void addPick(Card card) { + deck.getSideboard().add(card); + booster.remove(card); + picking = false; + } + + public void openBooster(ExpansionSet set) { + booster = set.createBooster(); + } + + public void setBooster(List booster) { + this.booster = booster; + } + + public List getBooster() { + return booster; + } + + public void setPicking() { + picking = true; + } + + public boolean isPicking() { + return picking; + } + +} diff --git a/Mage/src/mage/game/events/PlayerQueryEvent.java b/Mage/src/mage/game/events/PlayerQueryEvent.java index 5b000717860..4a7dfa295e0 100644 --- a/Mage/src/mage/game/events/PlayerQueryEvent.java +++ b/Mage/src/mage/game/events/PlayerQueryEvent.java @@ -31,11 +31,13 @@ package mage.game.events; import java.io.Serializable; import java.util.Collection; import java.util.EventObject; +import java.util.List; import java.util.Set; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; import mage.abilities.TriggeredAbilities; +import mage.cards.Card; import mage.cards.Cards; /** @@ -45,7 +47,7 @@ import mage.cards.Cards; public class PlayerQueryEvent extends EventObject implements ExternalEvent, Serializable { public enum QueryType { - ASK, CHOOSE, CHOOSE_ABILITY, PICK_TARGET, PICK_ABILITY, SELECT, PLAY_MANA, PLAY_X_MANA, AMOUNT, LOOK + ASK, CHOOSE, CHOOSE_ABILITY, PICK_TARGET, PICK_ABILITY, SELECT, PLAY_MANA, PLAY_X_MANA, AMOUNT, LOOK, PICK_CARD } private String message; @@ -53,6 +55,7 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri private Set choices; private Set targets; private Cards cards; + private List booster; private QueryType queryType; private UUID playerId; private boolean required; @@ -73,6 +76,14 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri this.max = max; } + private PlayerQueryEvent(UUID playerId, String message, List booster, QueryType queryType) { + super(playerId); + this.queryType = queryType; + this.message = message; + this.playerId = playerId; + this.booster = booster; + } + public static PlayerQueryEvent askEvent(UUID playerId, String message) { return new PlayerQueryEvent(playerId, message, null, null, null, null, QueryType.ASK, 0, 0, false); } @@ -116,6 +127,10 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri return new PlayerQueryEvent(playerId, message, null, null, null, cards, QueryType.LOOK, 0, 0, false); } + public static PlayerQueryEvent pickCard(UUID playerId, String message, List booster) { + return new PlayerQueryEvent(playerId, message, booster, QueryType.PICK_CARD); + } + public String getMessage() { return message; } @@ -148,6 +163,10 @@ public class PlayerQueryEvent extends EventObject implements ExternalEvent, Seri return cards; } + public List getBooster() { + return booster; + } + public int getMin() { return min; } diff --git a/Mage/src/mage/game/events/PlayerQueryEventSource.java b/Mage/src/mage/game/events/PlayerQueryEventSource.java index 1f939a25dcb..0052211c0bd 100644 --- a/Mage/src/mage/game/events/PlayerQueryEventSource.java +++ b/Mage/src/mage/game/events/PlayerQueryEventSource.java @@ -30,10 +30,12 @@ package mage.game.events; import java.io.Serializable; import java.util.Collection; +import java.util.List; import java.util.Set; import java.util.UUID; import mage.abilities.ActivatedAbility; import mage.abilities.TriggeredAbilities; +import mage.cards.Card; import mage.cards.Cards; /** @@ -93,4 +95,8 @@ public class PlayerQueryEventSource implements EventSource, Se dispatcher.fireEvent(PlayerQueryEvent.playXManaEvent(playerId, message)); } + public void pickCard(UUID playerId, String message, List booster) { + dispatcher.fireEvent(PlayerQueryEvent.pickCard(playerId, message, booster)); + } + } diff --git a/Mage/src/mage/game/events/TableEvent.java b/Mage/src/mage/game/events/TableEvent.java index a7f52d8d650..e558a9ef426 100644 --- a/Mage/src/mage/game/events/TableEvent.java +++ b/Mage/src/mage/game/events/TableEvent.java @@ -34,6 +34,7 @@ import java.util.UUID; import mage.cards.Cards; import mage.cards.decks.Deck; import mage.game.Game; +import mage.game.draft.Draft; /** * @@ -46,6 +47,7 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab } private Game game; + private Draft draft; private EventType eventType; private String message; private Cards cards; @@ -67,10 +69,21 @@ public class TableEvent extends EventObject implements ExternalEvent, Serializab this.eventType = eventType; } + public TableEvent(EventType eventType, String message, Draft draft) { + super(draft); + this.draft = draft; + this.message = message; + this.eventType = eventType; + } + public Game getGame() { return game; } + public Draft getDraft() { + return draft; + } + public EventType getEventType() { return eventType; } diff --git a/Mage/src/mage/game/events/TableEventSource.java b/Mage/src/mage/game/events/TableEventSource.java index 4b46273a35d..a2a07b721c0 100644 --- a/Mage/src/mage/game/events/TableEventSource.java +++ b/Mage/src/mage/game/events/TableEventSource.java @@ -33,6 +33,7 @@ import java.util.UUID; import mage.cards.Cards; import mage.cards.decks.Deck; import mage.game.Game; +import mage.game.draft.Draft; import mage.game.events.TableEvent.EventType; /** @@ -52,6 +53,10 @@ public class TableEventSource implements EventSource, Serializable { dispatcher.fireEvent(new TableEvent(eventType, message, null, game)); } + public void fireTableEvent(EventType eventType, String message, Draft draft) { + dispatcher.fireEvent(new TableEvent(eventType, message, draft)); + } + public void fireTableEvent(EventType eventType, String message, Cards cards, Game game) { dispatcher.fireEvent(new TableEvent(eventType, message, cards, game)); } diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index 1423bc9c540..3e60997f0b5 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -53,6 +53,7 @@ import mage.filter.FilterAbility; import mage.game.events.GameEvent; import mage.game.Game; import mage.game.Table; +import mage.game.draft.Draft; import mage.game.permanent.Permanent; import mage.target.Target; import mage.target.TargetAmount; @@ -148,6 +149,7 @@ public interface Player extends MageItem, Copyable { public abstract void assignDamage(int damage, List targets, UUID sourceId, Game game); public abstract int getAmount(int min, int max, String message, Game game); public abstract void sideboard(Table table, Deck deck); + public abstract void pickCard(List cards, Deck deck, Draft draft); public void declareAttacker(UUID attackerId, UUID defenderId, Game game); public void declareBlocker(UUID blockerId, UUID attackerId, Game game);