Beispiel #1
0
 public synchronized boolean submitDeck(UUID userId, DeckCardLists deckList) throws MageException {
   UUID playerId = userPlayerMap.get(userId);
   if (table.isTournament()) {
     TournamentPlayer player = tournament.getPlayer(playerId);
     if (player == null || player.hasQuit()) {
       return true; // so the construct panel closes after submit
     }
   } else if (table.getMatch() != null) {
     MatchPlayer mPlayer = table.getMatch().getPlayer(playerId);
     if (mPlayer == null || mPlayer.hasQuit()) {
       return true; // so the construct panel closes after submit
     }
     if (table.isTournamentSubTable()) {
       TournamentPlayer tournamentPlayer =
           table.getTournament().getPlayer(mPlayer.getPlayer().getId());
       if (tournamentPlayer != null) {
         tournamentPlayer.setStateInfo(""); // reset sideboarding state
       }
     }
   }
   if (table.getState() != TableState.SIDEBOARDING
       && table.getState() != TableState.CONSTRUCTING) {
     return false;
   }
   Deck deck = Deck.load(deckList, false, false);
   if (table.getState() == TableState.SIDEBOARDING && table.getMatch() != null) {
     MatchPlayer mPlayer = table.getMatch().getPlayer(playerId);
     if (mPlayer != null) {
       deck.setName(mPlayer.getDeck().getName());
     }
   }
   if (!Main.isTestMode() && !table.getValidator().validate(deck)) {
     throw new InvalidDeckException(
         "Invalid deck for this format", table.getValidator().getInvalid());
   }
   submitDeck(userId, playerId, deck);
   return true;
 }
Beispiel #2
0
 public synchronized void leaveTable(UUID userId) {
   if (table == null) {
     logger.error("No table object - userId: " + userId);
     return;
   }
   if (table.isTournament() && tournament == null) {
     logger.error("No tournament object - userId: " + userId + "  table: " + table.getId());
     return;
   }
   if (table != null
       && this.userId != null
       && this.userId.equals(userId) // tourn. sub tables have no creator user
       && (table.getState().equals(TableState.WAITING)
           || table.getState().equals(TableState.READY_TO_START))) {
     // table not started yet and user is the owner, remove the table
     TableManager.getInstance().removeTable(table.getId());
   } else {
     UUID playerId = userPlayerMap.get(userId);
     if (playerId != null) {
       if (table.getState() == TableState.WAITING
           || table.getState() == TableState.READY_TO_START) {
         table.leaveNotStartedTable(playerId);
         if (table.isTournament()) {
           tournament.removePlayer(playerId);
         } else {
           match.quitMatch(playerId);
         }
         User user = UserManager.getInstance().getUser(userId);
         if (user != null) {
           ChatManager.getInstance()
               .broadcast(
                   chatId,
                   user.getName(),
                   "has left the table",
                   ChatMessage.MessageColor.BLUE,
                   true,
                   ChatMessage.MessageType.STATUS,
                   ChatMessage.SoundToPlay.PlayerLeft);
           if (!table.isTournamentSubTable()) {
             user.removeTable(playerId);
           }
         } else {
           logger.debug("User not found - userId: " + userId + " tableId:" + table.getId());
         }
         userPlayerMap.remove(userId);
       } else if (!table.getState().equals(TableState.FINISHED)) {
         if (table.isTournament()) {
           logger.debug("Quit tournament sub tables for userId: " + userId);
           TableManager.getInstance().userQuitTournamentSubTables(tournament.getId(), userId);
           logger.debug(
               "Quit tournament  Id: "
                   + table.getTournament().getId()
                   + "("
                   + table.getTournament().getTournamentState()
                   + ")");
           TournamentManager.getInstance().quit(tournament.getId(), userId);
         } else {
           MatchPlayer matchPlayer = match.getPlayer(playerId);
           if (matchPlayer != null && !match.hasEnded() && !matchPlayer.hasQuit()) {
             Game game = match.getGame();
             if (game != null && !game.hasEnded()) {
               Player player = match.getPlayer(playerId).getPlayer();
               if (player != null && player.isInGame()) {
                 GameManager.getInstance().quitMatch(game.getId(), userId);
               }
               match.quitMatch(playerId);
             } else {
               if (table.getState().equals(TableState.SIDEBOARDING)) {
                 if (!matchPlayer.isDoneSideboarding()) {
                   // submit deck to finish sideboarding and trigger match start / end
                   matchPlayer.submitDeck(matchPlayer.getDeck());
                 }
               }
               match.quitMatch(playerId);
             }
           }
         }
       }
     } else {
       logger.error("No playerId found for userId: " + userId);
     }
   }
 }