/** Creates tables if they do not exist. */
  private void initializeTables() {
    Connection conn = null;
    Statement statement = null;
    try {
      conn = retrieveConnection();
      statement = conn.createStatement();
      statement.setQueryTimeout(30);

      // One table holding the playername id relation
      String playerQuery =
          String.format(
              "CREATE TABLE IF NOT EXISTS %s (id INTEGER PRIMARY KEY AUTOINCREMENT, %s STRING)",
              playerTable, "name");
      statement.executeUpdate(playerQuery);

      // One column for every message
      StringBuilder columns = new StringBuilder();
      for (MessageNode node : MessageNode.getMessageNodes()) {
        MsgCategory cat = messages.getCat(node);
        if (node.getColumnName() != null
            && (cat == MsgCategory.TUTORIAL || cat == MsgCategory.ONE_TIME)) {
          columns.append(',');
          columns.append(node.getColumnName());
        }
      }

      String msgQuery =
          String.format(
              "CREATE TABLE IF NOT EXISTS %s (id INTEGER PRIMARY KEY UNIQUE %s)",
              msgTable, columns);
      statement.executeUpdate(msgQuery);

      // Check if all columns are present
      DatabaseMetaData dmd = conn.getMetaData();
      // Add missing columns
      for (MessageNode node : MessageNode.getMessageNodes()) {
        MsgCategory cat = messages.getCat(node);
        if (cat == MsgCategory.TUTORIAL || cat == MsgCategory.ONE_TIME) {
          ResultSet set = dmd.getColumns(null, null, msgTable, node.getColumnName());
          if (!set.next()) {
            String updateQuery =
                String.format("ALTER TABLE %s ADD COLUMN %s", msgTable, node.getColumnName());
            statement.executeUpdate(updateQuery);
          }
        }
      }
    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      try {
        if (conn != null) conn.close();
        if (statement != null) statement.close();
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
  }
Example #2
0
 /**
  * Send the player an informative message to explain what he's doing wrong. Play an optional sound
  * aswell
  *
  * <p>
  *
  * @param player to send msg to
  * @param perm permission to silence the message
  * @param sound errorsound to play after the event got cancelled
  * @param soundPitch 20-35 is good
  */
 public void send(
     Player player, MessageNode node, PermissionNode perm, Sound sound, float soundPitch) {
   if (!player.hasPermission(perm.getNode())) {
     send(player, node, messages.getString(node));
     if (sound != null) player.playSound(player.getLocation(), sound, 1, soundPitch);
   }
 }
Example #3
0
  private void send(Player player, MessageNode node, String message) {
    switch (messages.getCat(node)) {
      case NOTIFICATION:
        if (player == null) {
          plugin.getLogger().warning("Could not send the following message: " + message);
        } else {
          // FEATURE: don't spam messages
          PlayerData playerData =
              plugin.getModuleForClass(DataStoreModule.class).getPlayerData(player.getName());
          long now = Calendar.getInstance().getTimeInMillis();

          if (!node.equals(playerData.lastMessageSent)
              || now - playerData.lastMessageTimestamp > 30000) {
            if (popupsAreEnabled(MsgCategory.NOTIFICATION))
              sendPopup(player, MsgCategory.NOTIFICATION, message);
            else player.sendMessage(message);
            playerData.lastMessageSent = node;
            playerData.lastMessageTimestamp = now;
          }
        }
        break;
      case TUTORIAL:
        Validate.notNull(player);
        if (persistModule.getCountFor(node, player.getName()) < messages.getMsgCount(node)) {
          long now = Calendar.getInstance().getTimeInMillis();

          if (!timeouts.contains(player.getName(), node)
              || now - timeouts.get(player.getName(), node) > 120000) // only if contains
          {
            timeouts.put(player.getName(), node, now);
            String msgText = messages.getString(node);
            if (manager != null) sendPopup(player, MsgCategory.TUTORIAL, msgText);
            else
              player.sendMessage(
                  ChatColor.DARK_RED + plugin.getTag() + ChatColor.WHITE + " " + msgText);
            persistModule.increment(node, player.getName());
          }
        } else timeouts.remove(player, message);
        break;
      case BROADCAST:
        plugin.getServer().broadcastMessage(message);
        break;
      default:
        throw new UnsupportedOperationException(messages.getCat(node) + " not implemented");
    }
  }
Example #4
0
 /**
  * Are popops enabled
  *
  * @return if popupmanager is loaded
  */
 public boolean popupsAreEnabled(MsgCategory category) {
   if (messages.getBoolean(MessageNode.SB_MSG_ENABLE))
     switch (category.getSubcategory() != null
         ? category.getSubcategory()
         : category) // Some messages might inherit from another MsgCategory
     {
       case TUTORIAL:
         return messages.getBoolean(MessageNode.SB_MSG_TUTORIAL);
       case NOTIFICATION:
         return messages.getBoolean(MessageNode.SB_MSG_NOTIFICATION);
       case BROADCAST:
         return messages.getBoolean(MessageNode.SB_MSG_BROADCAST);
       default:
         return false;
     }
   return false;
 }
Example #5
0
 /**
  * Sends a message with variables which will be inserted in the specified areas
  *
  * @param player Player to send the message to
  * @param message to send
  */
 public void send(Player player, MessageNode message, FindAndReplace... fars) {
   String msgText = messages.getString(message);
   for (FindAndReplace far : fars) {
       /* Replace the placeholder with the actual value */
     msgText = far.replace(msgText);
   }
   send(player, message, msgText);
 }
Example #6
0
  /**
   * Send a short message using SbPopupAPI
   *
   * @param player player to send the message to
   * @param category type defines the length color for consistency
   * @param message text to display
   */
  public void sendPopup(Player player, MsgCategory category, String message) {
    if (popupsAreEnabled(category)) {
      int length;
      ChatColor titleColor;
      ChatColor textColor;
      String titleText = messages.getString(MessageNode.SB_MSG_TITLE);

      if (messages.getBoolean(MessageNode.SB_MSG_REMOVE_COLOR))
        message = ChatColor.stripColor(message);

      switch (category) {
        case BROADCAST:
          length = messages.getInt(MessageNode.SB_MSG_BROADCAST_LEN);
          titleColor = null;
          textColor = messages.getColor(MessageNode.SB_MSG_BROADCAST_TEXT_CLR);
          break;
        case ONE_TIME:
        case NOTIFICATION:
          length = messages.getInt(MessageNode.SB_MSG_NOTIFICATION_LEN);
          titleColor = null;
          textColor = messages.getColor(MessageNode.SB_MSG_NOTIFICATION_TEXT_CLR);
          break;
        case TUTORIAL:
          length = messages.getInt(MessageNode.SB_MSG_TUTORIAL_LEN);
          titleColor = null;
          textColor = messages.getColor(MessageNode.SB_MSG_TUTORIAL_TEXT_CLR);
          break;
        case DISABLED:
        default:
          length = 0;
          titleColor = null;
          textColor = null;
      }

      manager.showPopup(
          player.getName(),
          category.getUniqueIdentifier(),
          length,
          titleColor,
          textColor,
          titleText,
          message);
    }
  }
Example #7
0
 /**
  * Send a short message using SbPopupAPI
  *
  * @param player player to send the message to
  * @param category type defines the length color for consistency
  * @param message text already seperated into lines
  */
 public void sendPopup(Player player, MsgCategory category, List<String> message) {
   sendPopup(player, category, message, messages.getBoolean(MessageNode.SB_MSG_REMOVE_COLOR));
 }
Example #8
0
 /**
  * Send a message to a Player.
  *
  * @param player to send the message to
  * @param node message, gets loaded from the config
  */
 public void send(Player player, MessageNode node) {
   send(player, node, messages.getString(node));
 }