diff --git a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.form b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.form index 56d2b74137b..420454a9b19 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.form @@ -26,11 +26,18 @@ + + + + + + + @@ -41,7 +48,12 @@ - + + + + + + @@ -70,5 +82,15 @@ + + + + + + + + + + diff --git a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java index a0017becdb3..445468653c6 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/JoinTableDialog.java @@ -50,6 +50,7 @@ public class JoinTableDialog extends MageDialog { public JoinTableDialog() { initComponents(); newPlayerPanel.showLevel(false); + txtPassword.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, "")); } public void showDialog(UUID roomId, UUID tableId) { @@ -74,6 +75,8 @@ public class JoinTableDialog extends MageDialog { btnCancel = new javax.swing.JButton(); btnOK = new javax.swing.JButton(); newPlayerPanel = new mage.client.table.NewPlayerPanel(); + lblPassword = new javax.swing.JLabel(); + txtPassword = new javax.swing.JTextField(); setTitle("Join Table"); @@ -91,6 +94,10 @@ public class JoinTableDialog extends MageDialog { } }); + lblPassword.setText("Password:"); + + txtPassword.setText("password"); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( @@ -99,10 +106,16 @@ public class JoinTableDialog extends MageDialog { .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) .addComponent(btnOK) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(btnCancel)) - .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE)) + .addComponent(newPlayerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 414, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(lblPassword) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -110,6 +123,10 @@ public class JoinTableDialog extends MageDialog { .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addComponent(newPlayerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(lblPassword) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(btnCancel) @@ -128,7 +145,8 @@ public class JoinTableDialog extends MageDialog { private void btnOKActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOKActionPerformed Session session = MageFrame.getSession(); try { - joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile())); + PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, txtPassword.getText()); + joined = session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile()), this.txtPassword.getText()); } catch (Exception ex) { handleError(ex); } @@ -151,7 +169,9 @@ public class JoinTableDialog extends MageDialog { // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton btnCancel; private javax.swing.JButton btnOK; + private javax.swing.JLabel lblPassword; private mage.client.table.NewPlayerPanel newPlayerPanel; + private javax.swing.JTextField txtPassword; // End of variables declaration//GEN-END:variables } diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.form b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.form index 6f96a74f41b..874bb5df50b 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.form @@ -40,14 +40,22 @@ - - + + + + + - + + + + - + + + + - @@ -102,6 +110,8 @@ + + @@ -155,7 +165,7 @@ - + @@ -186,6 +196,16 @@ + + + + + + + + + + @@ -196,7 +216,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java index 29af39e8a46..c45cb305fdf 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/NewTableDialog.java @@ -92,6 +92,8 @@ public class NewTableDialog extends MageDialog { lblName = new javax.swing.JLabel(); txtName = new javax.swing.JTextField(); + lblPassword = new javax.swing.JLabel(); + txtPassword = new javax.swing.JTextField(); lbDeckType = new javax.swing.JLabel(); cbDeckType = new javax.swing.JComboBox(); lbTimeLimit = new javax.swing.JLabel(); @@ -123,10 +125,13 @@ public class NewTableDialog extends MageDialog { lblName.setLabelFor(txtName); lblName.setText("Name:"); + lblPassword.setLabelFor(txtName); + lblPassword.setText("Password:"); + lbDeckType.setText("Deck Type:"); lbTimeLimit.setText("Time Limit:"); - lbTimeLimit.setToolTipText("The activie time a player may use to finish the match. If the time runs out, the player looses the current game."); + lbTimeLimit.setToolTipText("The active time a player may use to finish the match. If his or her time runs out, the player looses the current game."); lblGameType.setText("Game Type:"); @@ -206,13 +211,18 @@ public class NewTableDialog extends MageDialog { .addComponent(lblFreeMulligans) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 12, Short.MAX_VALUE) .addComponent(spnFreeMulligans, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(cbDeckType, javax.swing.GroupLayout.PREFERRED_SIZE, 338, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(txtName, javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(cbDeckType, javax.swing.GroupLayout.Alignment.LEADING, 0, 338, Short.MAX_VALUE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(lbTimeLimit) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(lbTimeLimit, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(lblPassword, javax.swing.GroupLayout.Alignment.TRAILING)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(cbTimeLimit, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(txtName, javax.swing.GroupLayout.Alignment.TRAILING))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, 125, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(cbTimeLimit, javax.swing.GroupLayout.PREFERRED_SIZE, 126, javax.swing.GroupLayout.PREFERRED_SIZE))))) .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2, javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() @@ -253,7 +263,9 @@ public class NewTableDialog extends MageDialog { .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(txtName, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(lblName)) + .addComponent(lblName) + .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(lblPassword)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(cbDeckType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) @@ -296,7 +308,7 @@ public class NewTableDialog extends MageDialog { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(pnlOtherPlayers, javax.swing.GroupLayout.DEFAULT_SIZE, 185, Short.MAX_VALUE) + .addComponent(pnlOtherPlayers, javax.swing.GroupLayout.DEFAULT_SIZE, 189, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) @@ -334,6 +346,7 @@ public class NewTableDialog extends MageDialog { options.setRange((RangeOfInfluence) this.cbRange.getSelectedItem()); options.setWinsNeeded((Integer)this.spnNumWins.getValue()); options.setFreeMulligans((Integer)this.spnFreeMulligans.getValue()); + options.setPassword(this.txtPassword.getText()); saveGameSettingsToPrefs(options, this.player1Panel.getDeckFile()); table = session.createTable(roomId, options); @@ -342,7 +355,14 @@ public class NewTableDialog extends MageDialog { return; } try { - if (session.joinTable(roomId, table.getTableId(), this.player1Panel.getPlayerName(), "Human", 1, DeckImporterUtil.importDeck(this.player1Panel.getDeckFile()))) { + if (session.joinTable( + roomId, + table.getTableId(), + this.player1Panel.getPlayerName(), + "Human", 1, + DeckImporterUtil.importDeck(this.player1Panel.getDeckFile()), + this.txtPassword.getText()) + ) { for (TablePlayerPanel player: players) { if (!player.getPlayerType().equals("Human")) { if (!player.joinTable(roomId, table.getTableId())) { @@ -488,6 +508,7 @@ public class NewTableDialog extends MageDialog { */ private void setGameSettingsFromPrefs () { txtName.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_NAME, "Game")); + txtPassword.setText(PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, "")); String playerTypes = PreferencesDialog.getCachedValue(PreferencesDialog.KEY_NEW_TABLE_PLAYER_TYPES, "Human"); prefPlayerTypes.clear(); @@ -539,6 +560,7 @@ public class NewTableDialog extends MageDialog { */ private void saveGameSettingsToPrefs(MatchOptions options, String deckFile) { PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_NAME, options.getName()); + PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_PASSWORD, options.getPassword()); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_DECK_TYPE, options.getDeckType()); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_TIME_LIMIT, Integer.toString(options.getPriorityTime())); PreferencesDialog.saveValue(PreferencesDialog.KEY_NEW_TABLE_GAME_TYPE, options.getGameType()); @@ -580,6 +602,7 @@ public class NewTableDialog extends MageDialog { private javax.swing.JLabel lblName; private javax.swing.JLabel lblNumPlayers; private javax.swing.JLabel lblNumWins; + private javax.swing.JLabel lblPassword; private javax.swing.JLabel lblRange; private mage.client.table.NewPlayerPanel player1Panel; private javax.swing.JPanel pnlOtherPlayers; @@ -587,6 +610,7 @@ public class NewTableDialog extends MageDialog { private javax.swing.JSpinner spnNumPlayers; private javax.swing.JSpinner spnNumWins; private javax.swing.JTextField txtName; + private javax.swing.JTextField txtPassword; // End of variables declaration//GEN-END:variables } diff --git a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java index 676d35e42c0..68e6a178358 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/PreferencesDialog.java @@ -144,6 +144,7 @@ public class PreferencesDialog extends javax.swing.JDialog { // pref setting for new table dialog public static final String KEY_NEW_TABLE_NAME = "newTableName"; + public static final String KEY_NEW_TABLE_PASSWORD = "newTablePassword"; public static final String KEY_NEW_TABLE_DECK_TYPE = "newTableDeckType"; public static final String KEY_NEW_TABLE_TIME_LIMIT = "newTableTimeLimit"; public static final String KEY_NEW_TABLE_GAME_TYPE = "newTableGameType"; diff --git a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.form b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.form index eaf7c22dac9..8d71cceb0ee 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.form +++ b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.form @@ -1,4 +1,4 @@ - +
diff --git a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java index 102ecf1f514..99f0bed4253 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablePlayerPanel.java @@ -81,7 +81,7 @@ public class TablePlayerPanel extends javax.swing.JPanel { public boolean joinTable(UUID roomId, UUID tableId) throws FileNotFoundException, IOException, ClassNotFoundException { if (!this.cbPlayerType.getSelectedItem().equals("Human")) { - return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (String)this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile())); + return session.joinTable(roomId, tableId, this.newPlayerPanel.getPlayerName(), (String)this.cbPlayerType.getSelectedItem(), this.newPlayerPanel.getLevel(), DeckImporterUtil.importDeck(this.newPlayerPanel.getDeckFile()),""); } return true; } diff --git a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java index 7093b72ffa0..71b09123bc0 100644 --- a/Mage.Client/src/main/java/mage/client/table/TablesPanel.java +++ b/Mage.Client/src/main/java/mage/client/table/TablesPanel.java @@ -632,8 +632,8 @@ public class TablesPanel extends javax.swing.JPanel { options.setFreeMulligans(2); table = session.createTable(roomId, options); - session.joinTable(roomId, table.getTableId(), "Human", "Human", 1, DeckImporterUtil.importDeck("test.dck")); - session.joinTable(roomId, table.getTableId(), "Computer", "Computer - mad", 5, DeckImporterUtil.importDeck("test.dck")); + session.joinTable(roomId, table.getTableId(), "Human", "Human", 1, DeckImporterUtil.importDeck("test.dck"),""); + session.joinTable(roomId, table.getTableId(), "Computer", "Computer - mad", 5, DeckImporterUtil.importDeck("test.dck"),""); session.startMatch(roomId, table.getTableId()); } catch (HeadlessException ex) { handleError(ex); diff --git a/Mage.Common/src/mage/interfaces/MageServer.java b/Mage.Common/src/mage/interfaces/MageServer.java index 380dbe71590..a1b86e31136 100644 --- a/Mage.Common/src/mage/interfaces/MageServer.java +++ b/Mage.Common/src/mage/interfaces/MageServer.java @@ -81,7 +81,7 @@ public interface MageServer { //table methods TableView createTable(String sessionId, UUID roomId, MatchOptions matchOptions) throws MageException; TableView createTournamentTable(String sessionId, UUID roomId, TournamentOptions tournamentOptions) throws MageException; - boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException, GameException; + boolean joinTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws MageException, GameException; boolean joinTournamentTable(String sessionId, UUID roomId, UUID tableId, String name, String playerType, int skill) throws MageException, GameException; boolean submitDeck(String sessionId, UUID tableId, DeckCardLists deckList) throws MageException, GameException; void updateDeck(String sessionId, UUID tableId, DeckCardLists deckList) throws MageException, GameException; diff --git a/Mage.Common/src/mage/remote/SessionImpl.java b/Mage.Common/src/mage/remote/SessionImpl.java index 0f9d2b796ed..3470a7fbae2 100644 --- a/Mage.Common/src/mage/remote/SessionImpl.java +++ b/Mage.Common/src/mage/remote/SessionImpl.java @@ -570,10 +570,10 @@ public class SessionImpl implements Session { } @Override - public boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList) { + public boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList, String password) { try { if (isConnected()) { - return server.joinTable(sessionId, roomId, tableId, playerName, playerType, skill, deckList); + return server.joinTable(sessionId, roomId, tableId, playerName, playerType, skill, deckList, password); } } catch (InvalidDeckException iex) { handleInvalidDeckException(iex); diff --git a/Mage.Common/src/mage/remote/interfaces/PlayerActions.java b/Mage.Common/src/mage/remote/interfaces/PlayerActions.java index d6a0dab6371..f547306352c 100644 --- a/Mage.Common/src/mage/remote/interfaces/PlayerActions.java +++ b/Mage.Common/src/mage/remote/interfaces/PlayerActions.java @@ -69,7 +69,7 @@ public interface PlayerActions { boolean watchTournamentTable(UUID tableId); - boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList); + boolean joinTable(UUID roomId, UUID tableId, String playerName, String playerType, int skill, DeckCardLists deckList, String password); TableView getTable(UUID roomId, UUID tableId); diff --git a/Mage.Common/src/mage/view/TableView.java b/Mage.Common/src/mage/view/TableView.java index 474f1f791d9..1d3e9b4ce60 100644 --- a/Mage.Common/src/mage/view/TableView.java +++ b/Mage.Common/src/mage/view/TableView.java @@ -106,11 +106,16 @@ public class TableView implements Serializable { } this.controllerName += sb.toString(); this.deckType = table.getDeckType(); + StringBuilder addInfo = new StringBuilder(); if (table.getMatch().getGames().isEmpty()) { - this.additionalInfo = new StringBuilder("Timer: ").append(table.getMatch().getOptions().getMatchTimeLimit().toString()).toString(); + if (!table.getMatch().getOptions().getPassword().isEmpty()) { + addInfo.append("PW -"); + } + addInfo.append("Timer: ").append(table.getMatch().getOptions().getMatchTimeLimit().toString()); } else { - this.additionalInfo = sbScore.toString(); + addInfo.append(sbScore.toString()); } + this.additionalInfo = addInfo.toString(); } else { this.wins = table.getTournament().getOptions().getMatchOptions().getWinsNeeded(); if (table.getTournament().getOptions().getNumberRounds() > 0) { diff --git a/Mage.Server/src/main/java/mage/server/MageServerImpl.java b/Mage.Server/src/main/java/mage/server/MageServerImpl.java index da76da21be4..709d261e3fc 100644 --- a/Mage.Server/src/main/java/mage/server/MageServerImpl.java +++ b/Mage.Server/src/main/java/mage/server/MageServerImpl.java @@ -219,7 +219,7 @@ public class MageServerImpl implements MageServer { } @Override - public boolean joinTable(final String sessionId, final UUID roomId, final UUID tableId, final String name, final String playerType, final int skill, final DeckCardLists deckList) throws MageException, GameException { + public boolean joinTable(final String sessionId, final UUID roomId, final UUID tableId, final String name, final String playerType, final int skill, final DeckCardLists deckList, final String password) throws MageException, GameException { return executeWithResult("joinTable", sessionId, new ActionWithBooleanResult() { @Override public Boolean execute() throws MageException { @@ -229,7 +229,7 @@ public class MageServerImpl implements MageServer { logger.fatal("Got no userId from sessionId" + sessionId + " tableId" + tableId); return false; } - boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList); + boolean ret = GamesRoomManager.getInstance().getRoom(roomId).joinTable(userId, tableId, name, playerType, skill, deckList, password); return ret; } }); diff --git a/Mage.Server/src/main/java/mage/server/TableController.java b/Mage.Server/src/main/java/mage/server/TableController.java index 196440f1838..de210c88bde 100644 --- a/Mage.Server/src/main/java/mage/server/TableController.java +++ b/Mage.Server/src/main/java/mage/server/TableController.java @@ -208,7 +208,7 @@ public class TableController { return true; } - public synchronized boolean joinTable(UUID userId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException { + public synchronized boolean joinTable(UUID userId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws MageException { User user = UserManager.getInstance().getUser(userId); if (user == null) { return false; @@ -217,6 +217,13 @@ public class TableController { user.showUserMessage("Join Table", "No available seats."); return false; } + // check password + if (!table.getMatch().getOptions().getPassword().isEmpty()) { + if (!table.getMatch().getOptions().getPassword().equals(password)) { + user.showUserMessage("Join Table", "Wrong password."); + return false; + } + } Seat seat = table.getNextAvailableSeat(playerType); if (seat == null) { user.showUserMessage("Join Table", "No available seats."); @@ -240,7 +247,7 @@ public class TableController { Player player = createPlayer(name, seat.getPlayerType(), skill); if (player == null) { - String message = new StringBuilder("Could not create player ").append(name).append(" of type ").append(seat.getPlayerType().toString()).toString(); + String message = new StringBuilder("Could not create player ").append(name).append(" of type ").append(seat.getPlayerType()).toString(); logger.warn(new StringBuilder("User: ").append(user.getName()).append(" => ").append(message).toString()); user.showUserMessage("Join Table",message); return false; diff --git a/Mage.Server/src/main/java/mage/server/TableManager.java b/Mage.Server/src/main/java/mage/server/TableManager.java index d0ff3637dc4..2f2aa76c1dd 100644 --- a/Mage.Server/src/main/java/mage/server/TableManager.java +++ b/Mage.Server/src/main/java/mage/server/TableManager.java @@ -141,9 +141,9 @@ public class TableManager { return controllers.get(tableId); } - public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException { + public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws MageException { if (controllers.containsKey(tableId)) { - return controllers.get(tableId).joinTable(userId, name, playerType, skill, deckList); + return controllers.get(tableId).joinTable(userId, name, playerType, skill, deckList, password); } return false; } diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java index 695bb82660f..20d2f9f0bb1 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoom.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoom.java @@ -50,7 +50,7 @@ public interface GamesRoom extends Room { List getTables(); List getFinished(); List getRoomUsersInfo(); - boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException; + boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws MageException; boolean joinTournamentTable(UUID userId, UUID tableId, String name, String playerType, int skill) throws GameException; TableView createTable(UUID userId, MatchOptions options); TableView createTournamentTable(UUID userId, TournamentOptions options); diff --git a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java index 80e609304c1..a56648aaf42 100644 --- a/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java +++ b/Mage.Server/src/main/java/mage/server/game/GamesRoomImpl.java @@ -139,9 +139,9 @@ public class GamesRoomImpl extends RoomImpl implements GamesRoom, Serializable { } @Override - public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList) throws MageException { + public boolean joinTable(UUID userId, UUID tableId, String name, String playerType, int skill, DeckCardLists deckList, String password) throws MageException { if (tables.containsKey(tableId)) { - return TableManager.getInstance().joinTable(userId, tableId, name, playerType, skill, deckList); + return TableManager.getInstance().joinTable(userId, tableId, name, playerType, skill, deckList, password); } else { return false; } diff --git a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java index 14e9c23aa4e..4687365d313 100644 --- a/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/load/LoadTest.java @@ -105,7 +105,7 @@ public class LoadTest { TableView table = session.createTable(roomId, options); - if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList)) { + if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList,"")) { log.error("Error while joining table"); Assert.assertTrue("Error while joining table", false); return; @@ -119,7 +119,7 @@ public class LoadTest { UUID roomId2 = session2.getMainRoomId(); // connect to the table with the same deck - if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList)) { + if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList,"")) { log.error("Error while joining table"); Assert.assertTrue("Error while joining table", false); return; @@ -180,7 +180,7 @@ public class LoadTest { TableView table = session.createTable(roomId, options); - if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList)) { + if (!session.joinTable(roomId, table.getTableId(), TEST_USER_NAME + i, "Human", 1, deckList,"")) { log.error("Error while joining table"); Assert.assertTrue("Error while joining table", false); return true; @@ -196,7 +196,7 @@ public class LoadTest { UUID roomId2 = session2.getMainRoomId(); // connect to the table with the same deck - if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList)) { + if (!session2.joinTable(roomId2, table.getTableId(), TEST_USER_NAME_2 + i, "Human", 1, deckList,"")) { log.error("Error while joining table"); Assert.assertTrue("Error while joining table", false); return true; diff --git a/Mage/src/mage/game/match/MatchOptions.java b/Mage/src/mage/game/match/MatchOptions.java index 9308319144b..9b554e4caf3 100644 --- a/Mage/src/mage/game/match/MatchOptions.java +++ b/Mage/src/mage/game/match/MatchOptions.java @@ -50,6 +50,8 @@ public class MatchOptions implements Serializable { protected String deckType; protected boolean limited; protected List playerTypes = new ArrayList<>(); + protected String password; + /** * Time each player has during the game to play using his\her priority. */ @@ -140,4 +142,12 @@ public class MatchOptions implements Serializable { this.matchTimeLimit = matchTimeLimit; } + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + }