コード例 #1
1
ファイル: Finder.java プロジェクト: taylorkelly/BigBrother
  private static final void mysqlFind(
      final Plugin plugin,
      final String playerName,
      final Location location,
      final int radius,
      final WorldManager manager,
      final ArrayList<Player> players) {

    BBPlayerInfo hunted = BBUsersTable.getInstance().getUserByName(playerName);

    PreparedStatement ps = null;
    ResultSet rs = null;

    HashMap<Integer, Integer> creations = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> destructions = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> explosions = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> burns = new HashMap<Integer, Integer>();

    Connection conn = null;

    try {
      conn = ConnectionManager.getConnection();
      if (conn == null) return;
      // TODO maybe more customizable actions?
      String actionString =
          "action IN('"
              + Action.BLOCK_BROKEN.ordinal()
              + "', '"
              + Action.BLOCK_PLACED.ordinal()
              + "', '"
              + Action.LEAF_DECAY.ordinal()
              + "', '"
              + Action.TNT_EXPLOSION.ordinal()
              + "', '"
              + Action.CREEPER_EXPLOSION.ordinal()
              + "', '"
              + Action.MISC_EXPLOSION.ordinal()
              + "', '"
              + Action.LAVA_FLOW.ordinal()
              + "', '"
              + Action.BLOCK_BURN.ordinal()
              + "')";
      ps =
          conn.prepareStatement(
              "SELECT action, type FROM "
                  + BBDataTable.getInstance().getTableName()
                  + " WHERE "
                  + actionString
                  + " AND rbacked = 0 AND x < ? AND x > ? AND y < ? AND y > ?  AND z < ? AND z > ? AND player = ? AND world = ? order by date desc");

      ps.setInt(1, location.getBlockX() + radius);
      ps.setInt(2, location.getBlockX() - radius);
      ps.setInt(3, location.getBlockY() + radius);
      ps.setInt(4, location.getBlockY() - radius);
      ps.setInt(5, location.getBlockZ() + radius);
      ps.setInt(6, location.getBlockZ() - radius);
      ps.setInt(7, hunted.getID());
      ps.setInt(8, manager.getWorld(location.getWorld().getName()));
      rs = ps.executeQuery();
      conn.commit();

      int size = 0;
      while (rs.next()) {
        Action action = Action.values()[rs.getInt("action")];
        int type = rs.getInt("type");

        switch (action) {
          case BLOCK_BROKEN:
          case LEAF_DECAY:
            if (destructions.containsKey(type)) {
              destructions.put(type, destructions.get(type) + 1);
              size++;
            } else {
              destructions.put(type, 1);
              size++;
            }
            break;
          case BLOCK_PLACED:
            if (creations.containsKey(type)) {
              creations.put(type, creations.get(type) + 1);
              size++;
            } else {
              creations.put(type, 1);
              size++;
            }
            break;
          case TNT_EXPLOSION:
          case CREEPER_EXPLOSION:
          case MISC_EXPLOSION:
            if (explosions.containsKey(type)) {
              explosions.put(type, explosions.get(type) + 1);
              size++;
            } else {
              explosions.put(type, 1);
              size++;
            }
          case BLOCK_BURN:
            if (burns.containsKey(type)) {
              burns.put(type, burns.get(type) + 1);
              size++;
            } else {
              burns.put(type, 1);
              size++;
            }
            break;
          case LAVA_FLOW:
            if (creations.containsKey(type)) {
              creations.put(type, creations.get(type) + 1);
              size++;
            } else {
              creations.put(type, 1);
              size++;
            }
            break;
        }
      }
      if (size > 0) {
        StringBuilder creationList = new StringBuilder();
        creationList.append(ChatColor.AQUA.toString());
        creationList.append("Placed Blocks: ");
        creationList.append(ChatColor.WHITE.toString());
        for (Entry<Integer, Integer> entry : creations.entrySet()) {
          creationList.append(Material.getMaterial(entry.getKey()));
          creationList.append(" (");
          creationList.append(entry.getValue());
          creationList.append("), ");
        }
        if (creationList.toString().contains(",")) {
          creationList.delete(creationList.lastIndexOf(","), creationList.length());
        }
        StringBuilder brokenList = new StringBuilder();
        brokenList.append(ChatColor.RED.toString());
        brokenList.append("Broken Blocks: ");
        brokenList.append(ChatColor.WHITE.toString());
        for (Entry<Integer, Integer> entry : destructions.entrySet()) {
          brokenList.append(Material.getMaterial(entry.getKey()));
          brokenList.append(" (");
          brokenList.append(entry.getValue());
          brokenList.append("), ");
        }
        if (brokenList.toString().contains(",")) {
          brokenList.delete(brokenList.lastIndexOf(","), brokenList.length());
        }
        StringBuilder explodeList = new StringBuilder();
        explodeList.append(ChatColor.RED.toString());
        explodeList.append("Exploded Blocks: ");
        explodeList.append(ChatColor.WHITE.toString());
        for (Entry<Integer, Integer> entry : explosions.entrySet()) {
          explodeList.append(Material.getMaterial(entry.getKey()));
          explodeList.append(" (");
          explodeList.append(entry.getValue());
          explodeList.append("), ");
        }
        if (explodeList.toString().contains(",")) {
          explodeList.delete(explodeList.lastIndexOf(","), explodeList.length());
        }

        StringBuilder burnList = new StringBuilder();
        burnList.append(ChatColor.RED.toString());
        burnList.append("Burned Blocks: ");
        burnList.append(ChatColor.WHITE.toString());
        for (Entry<Integer, Integer> entry : burns.entrySet()) {
          burnList.append(Material.getMaterial(entry.getKey()));
          burnList.append(" (");
          burnList.append(entry.getValue());
          burnList.append("), ");
        }
        if (burnList.toString().contains(",")) {
          burnList.delete(burnList.lastIndexOf(","), burnList.length());
        }
        for (Player player : players) {
          player.sendMessage(
              BigBrother.premessage + playerName + " has made " + size + " modifications");
          if (creations.entrySet().size() > 0) {
            player.sendMessage(creationList.toString());
          }
          if (destructions.entrySet().size() > 0) {
            player.sendMessage(brokenList.toString());
          }
          if (explosions.entrySet().size() > 0) {
            player.sendMessage(explodeList.toString());
          }
          if (burns.entrySet().size() > 0) {
            player.sendMessage(burnList.toString());
          }
        }
      } else {
        for (Player player : players) {
          player.sendMessage(
              BigBrother.premessage + playerName + " has no modifications in this area.");
        }
      }
    } catch (SQLException ex) {
      BBLogging.severe("Find SQL Exception", ex);
    } finally {
      ConnectionManager.cleanup("Find SQL", conn, ps, rs);
    }
  }
コード例 #2
1
ファイル: Finder.java プロジェクト: taylorkelly/BigBrother
  private static final void mysqlFind(
      final Plugin plugin,
      final Location location,
      final int radius,
      final WorldManager manager,
      final ArrayList<Player> players) {
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection conn = null;
    HashMap<BBPlayerInfo, Integer> modifications = new HashMap<BBPlayerInfo, Integer>();
    try {
      conn = ConnectionManager.getConnection();
      if (conn == null) return;
      // TODO maybe more customizable actions?
      String actionString =
          "action IN('"
              + Action.BLOCK_BROKEN.ordinal()
              + "', '"
              + Action.BLOCK_PLACED.ordinal()
              + "', '"
              + Action.LEAF_DECAY.ordinal()
              + "', '"
              + Action.TNT_EXPLOSION.ordinal()
              + "', '"
              + Action.CREEPER_EXPLOSION.ordinal()
              + "', '"
              + Action.MISC_EXPLOSION.ordinal()
              + "', '"
              + Action.LAVA_FLOW.ordinal()
              + "', '"
              + Action.BLOCK_BURN.ordinal()
              + "')";

      /*
       * org.h2.jdbc.JdbcSQLException: Column "ID" must be in the GROUP BY
       * list; SQL statement:
       */
      if (BBSettings.usingDBMS(DBMS.H2) || BBSettings.usingDBMS(DBMS.POSTGRES)) {
        ps =
            conn.prepareStatement(
                "SELECT player, count(player) AS modifications FROM "
                    + BBDataTable.getInstance().getTableName()
                    + " WHERE "
                    + actionString
                    + " AND rbacked = '0' AND x < ? AND x > ? AND y < ? AND y > ? AND z < ? AND z > ? AND world = ? GROUP BY id,player ORDER BY id DESC");
      } else {
        ps =
            conn.prepareStatement(
                "SELECT player, count(player) AS modifications FROM "
                    + BBDataTable.getInstance().getTableName()
                    + " WHERE "
                    + actionString
                    + " AND rbacked = '0' AND x < ? AND x > ? AND y < ? AND y > ? AND z < ? AND z > ? AND world = ? GROUP BY player ORDER BY id DESC");
      }
      ps.setInt(1, location.getBlockX() + radius);
      ps.setInt(2, location.getBlockX() - radius);
      ps.setInt(3, location.getBlockY() + radius);
      ps.setInt(4, location.getBlockY() - radius);
      ps.setInt(5, location.getBlockZ() + radius);
      ps.setInt(6, location.getBlockZ() - radius);
      ps.setInt(7, manager.getWorld(location.getWorld().getName()));
      rs = ps.executeQuery();
      conn.commit();

      int size = 0;
      while (rs.next()) {
        BBPlayerInfo player = BBUsersTable.getInstance().getUserByID(rs.getInt("player"));
        int mods = rs.getInt("modifications");
        modifications.put(player, mods);
        size++;
      }
      if (size > 0) {
        StringBuilder playerList = new StringBuilder();
        for (Entry<BBPlayerInfo, Integer> entry : modifications.entrySet()) {
          if (entry.getKey() != null) {
            playerList.append(entry.getKey().getName());
            playerList.append(" (");
            playerList.append(entry.getValue());
            playerList.append("), ");
          }
        }
        if (playerList.indexOf(",") != -1) {
          playerList.delete(playerList.lastIndexOf(","), playerList.length());
        }
        // TODO Put into sync'd runnable
        for (Player player : players) {
          player.sendMessage(
              BigBrother.premessage + playerList.length() + " player(s) have modified this area:");
          player.sendMessage(playerList.toString());
        }
      } else {
        for (Player player : players) {
          player.sendMessage(BigBrother.premessage + "No modifications in this area.");
        }
      }
    } catch (SQLException ex) {
      BBLogging.severe("Find SQL Exception", ex);
    } finally {
      ConnectionManager.cleanup("Find SQL", conn, ps, rs);
    }
  }
コード例 #3
1
ファイル: Finder.java プロジェクト: DanielChesters/BigBrother
  // TODO use IN(1,2,3)
  private void mysqlFind(boolean sqlite) {
    PreparedStatement ps = null;
    ResultSet rs = null;
    Connection conn = null;
    HashMap<String, Integer> modifications = new HashMap<String, Integer>();
    try {
      conn = ConnectionManager.getConnection();

      // TODO maybe more customizable actions?
      String actionString =
          "action IN('"
              + Action.BLOCK_BROKEN.ordinal()
              + "', '"
              + Action.BLOCK_PLACED.ordinal()
              + "', '"
              + Action.LEAF_DECAY.ordinal()
              + "', '"
              + Action.TNT_EXPLOSION.ordinal()
              + "', '"
              + Action.CREEPER_EXPLOSION.ordinal()
              + "', '"
              + Action.MISC_EXPLOSION.ordinal()
              + "', '"
              + Action.BLOCK_BURN.ordinal()
              + "')";
      ps =
          conn.prepareStatement(
              "SELECT player, count(player) AS modifications FROM "
                  + BBDataBlock.BBDATA_NAME
                  + " WHERE "
                  + actionString
                  + " AND rbacked = '0' AND x < ? AND x > ? AND y < ? AND y > ? AND z < ? AND z > ? AND world = ? GROUP BY player ORDER BY id DESC");

      ps.setInt(1, location.getBlockX() + radius);
      ps.setInt(2, location.getBlockX() - radius);
      ps.setInt(3, location.getBlockY() + radius);
      ps.setInt(4, location.getBlockY() - radius);
      ps.setInt(5, location.getBlockZ() + radius);
      ps.setInt(6, location.getBlockZ() - radius);
      ps.setInt(7, worlds.indexOf(location.getWorld()));
      rs = ps.executeQuery();
      conn.commit();

      int size = 0;
      while (rs.next()) {
        String player = rs.getString("player");
        int mods = rs.getInt("modifications");
        modifications.put(player, mods);
        size++;
      }
      if (size > 0) {
        StringBuilder playerList = new StringBuilder();
        for (Entry<String, Integer> entry : modifications.entrySet()) {
          playerList.append(entry.getKey());
          playerList.append(" (");
          playerList.append(entry.getValue());
          playerList.append("), ");
        }
        playerList.delete(playerList.lastIndexOf(","), playerList.length());
        for (Player player : players) {
          player.sendMessage(BigBrother.premessage + size + " player(s) have modified this area:");
          player.sendMessage(playerList.toString());
        }
      } else {
        for (Player player : players) {
          player.sendMessage(BigBrother.premessage + "No modifications in this area.");
        }
      }
    } catch (SQLException ex) {
      BigBrother.log.log(Level.SEVERE, "[BBROTHER]: Find SQL Exception", ex);
    } finally {
      try {
        if (rs != null) rs.close();
        if (ps != null) ps.close();
        if (conn != null) conn.close();
      } catch (SQLException ex) {
        BigBrother.log.log(Level.SEVERE, "[BBROTHER]: Find SQL Exception (on close)");
      }
    }
  }
コード例 #4
0
  @Override
  protected void do_addOrUpdatePlayer(BBPlayerInfo pi) {
    Connection conn = null;
    PreparedStatement ps = null;
    try {
      conn = ConnectionManager.getConnection();
      if (conn == null) return;
      if (pi.getNew() && getUserFromDB(pi.getName()) == null) {
        /*String statement = "IF EXISTS (SELECT \"name\" FROM \""+getTableName()+"\" WHERE \"name\" = ?) THEN"
        	+ " UPDATE \""+getTableName()+"\" SET \"flags\" = ? WHERE \"name\" = ?;"
        	+ " ELSE "
        	+ " INSERT INTO \""+getTableName()+"\" (name,flags) VALUES(?,?)"
        	+ " END IF;";
        ps = conn.prepareStatement(statement);*/
        ps = conn.prepareStatement("INSERT INTO " + getTableName() + " (name,flags) VALUES (?,?)");

        ps.setString(1, pi.getName());
        ps.setInt(2, pi.getFlags());

      } else {
        ps = conn.prepareStatement("UPDATE " + getTableName() + " SET flags = ? WHERE id=?");
        ps.setInt(1, pi.getFlags());
        ps.setInt(2, pi.getID());
      }
      BBLogging.debug(ps.toString());
      ps.executeUpdate();
      conn.commit();
    } catch (SQLException e) {
      BBLogging.severe("Can't update the user `" + pi.getName() + "`.", e);
    } finally {
      ConnectionManager.cleanup("BBUsersMySQL.do_addOrUpdatePlayer", conn, ps, null);
    }
  }
コード例 #5
0
  @Override
  public BBPlayerInfo getUserFromDB(int id) {
    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement ps = null;
    try {
      String sql = "SELECT id,name,flags FROM " + getTableName() + " WHERE \"id\"=?;";
      conn = ConnectionManager.getConnection();
      if (conn == null) return null;
      BBLogging.debug(sql);
      ps = conn.prepareStatement(sql);
      ps.setInt(1, id);
      rs = ps.executeQuery();
      conn.commit();
      if (!rs.next()) return null;

      return new BBPlayerInfo(rs.getInt("id"), rs.getString("name"), rs.getInt("flags"));

    } catch (SQLException e) {
      BBLogging.severe("Can't find user #" + id + ".", e);
    } finally {
      ConnectionManager.cleanup("BBUsersMySQL.getUserFromDB(int)", conn, ps, rs);
    }
    return null;
  }
コード例 #6
0
ファイル: Cleanser.java プロジェクト: gpmidi/BigBrother
    private void cleanByAge() {
      Connection conn = null;
      Statement stmt = null;
      try {
        conn = ConnectionManager.getConnection();
        stmt = conn.createStatement();
        long start = System.currentTimeMillis() / 1000;

        String cleansql =
            "DELETE FROM `bbdata` WHERE date < " + Long.valueOf(Time.ago(BBSettings.cleanseAge));
        if (BBSettings.deletesPerCleansing > 0)
          cleansql += " LIMIT " + Long.valueOf(BBSettings.deletesPerCleansing);
        cleansql += ";";
        cleanedSoFarAge = stmt.executeUpdate(cleansql);
        String timespent = Time.formatDuration(System.currentTimeMillis() / 1000 - start);

        String words =
            String.format(
                "Cleaned out %d records because of age in %s.", cleanedSoFarAge, timespent);
        if (player == null) BBLogging.info(words);
        else {
          synchronized (player) {
            player.sendMessage(ChatColor.BLUE + words);
          }
        }

        conn.commit();
      } catch (SQLException ex) {
        BBLogging.severe("Cleanse SQL exception (by age)", ex);
      } finally {
        try {
          if (stmt != null) {
            stmt.close();
          }
          if (conn != null) {
            conn.close();
          }
        } catch (SQLException ex) {
          BBLogging.severe("Cleanse SQL exception (by age) (on close)", ex);
        }
      }
    }
コード例 #7
0
ファイル: Fix4.java プロジェクト: stevenh/BigBrother
 private static boolean updateTable(boolean sqlite) {
   // SQLite sucks, just skip it.
   if (sqlite) {
     return true;
   } else {
     Connection conn = null;
     Statement st = null;
     try {
       conn = ConnectionManager.getConnection();
       st = conn.createStatement();
       for (String update : UPDATE_SQL) {
         st.executeUpdate(update);
       }
       conn.commit();
       return true;
     } catch (SQLException e) {
       BBLogging.severe(
           "[Fix4] Unable to remove/create new indices.  However, this shouldn't be a problem except performance-wise.");
       return false;
     } finally {
       ConnectionManager.cleanup("Fix 4", conn, st, null);
     }
   }
 }
コード例 #8
0
ファイル: Cleanser.java プロジェクト: gpmidi/BigBrother
    @SuppressWarnings("unused")
    private void cleanByNumber() {
      if (BBSettings.mysql) {
        if (BBSettings.maxRecords < 0) {
          // Fix exception caused when trying to delete -1 records.
          BBLogging.info("Skipping; max-records is negative.");
          return;
        }
        Connection conn = null;
        Statement stmt = null;
        try {
          conn = ConnectionManager.getConnection();
          stmt = conn.createStatement();
          long start = System.currentTimeMillis() / 1000;

          String cleansql =
              "DELETE FROM `bbdata` as b LEFT OUTER JOIN (SELECT `id` FROM `bbdata`  ORDER BY `id` DESC LIMIT 0,"
                  + Long.valueOf(BBSettings.maxRecords)
                  + ") as j on j.id=b.id where j.id is null";
          if (BBSettings.deletesPerCleansing > 0)
            cleansql += " LIMIT " + Long.valueOf(BBSettings.deletesPerCleansing);
          cleansql += ";";
          cleanedSoFarNumber = stmt.executeUpdate(cleansql);

          String timespent = Time.formatDuration(System.currentTimeMillis() / 1000 - start);

          String words =
              String.format(
                  "Cleaned out %d records because of number in %s.", cleanedSoFarNumber, timespent);
          if (player == null) BBLogging.info(words);
          else {
            synchronized (player) {
              player.sendMessage(ChatColor.BLUE + words);
            }
          }
          conn.commit();
        } catch (SQLException ex) {
          BBLogging.severe("Cleanse SQL exception (by #)", ex);
          if (player != null) {
            synchronized (player) {
              player.sendMessage(
                  ChatColor.RED + "Action failed, read server log for the gory details.");
            }
          }
        } finally {
          try {
            if (stmt != null) {
              stmt.close();
            }
            if (conn != null) {
              conn.close();
            }
          } catch (SQLException ex) {
            BBLogging.severe("Cleanse SQL exception (by #) (on close)", ex);
          }
        }

      } else {
        String words = "SQLite can't cleanse by # of records.";
        if (player == null) BBLogging.info(words);
        else {
          synchronized (player) {
            player.sendMessage(ChatColor.RED + words);
          }
        }
      }
    }
コード例 #9
0
ファイル: Finder.java プロジェクト: DanielChesters/BigBrother
  private void mysqlFind(boolean sqlite, String playerName) {
    PreparedStatement ps = null;
    ResultSet rs = null;

    HashMap<Integer, Integer> creations = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> destructions = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> explosions = new HashMap<Integer, Integer>();
    HashMap<Integer, Integer> burns = new HashMap<Integer, Integer>();

    Connection conn = null;

    try {
      conn = ConnectionManager.getConnection();

      // TODO maybe more customizable actions?
      String actionString =
          "action IN('"
              + Action.BLOCK_BROKEN.ordinal()
              + "', '"
              + Action.BLOCK_PLACED.ordinal()
              + "', '"
              + Action.LEAF_DECAY.ordinal()
              + "', '"
              + Action.TNT_EXPLOSION.ordinal()
              + "', '"
              + Action.CREEPER_EXPLOSION.ordinal()
              + "', '"
              + Action.MISC_EXPLOSION.ordinal()
              + "', '"
              + Action.BLOCK_BURN.ordinal()
              + "')";
      ps =
          conn.prepareStatement(
              "SELECT action, type FROM "
                  + BBDataBlock.BBDATA_NAME
                  + " WHERE "
                  + actionString
                  + " AND rbacked = 0 AND x < ? AND x > ? AND y < ? AND y > ?  AND z < ? AND z > ? AND player = ? AND world = ? order by date desc");

      ps.setInt(1, location.getBlockX() + radius);
      ps.setInt(2, location.getBlockX() - radius);
      ps.setInt(3, location.getBlockY() + radius);
      ps.setInt(4, location.getBlockY() - radius);
      ps.setInt(5, location.getBlockZ() + radius);
      ps.setInt(6, location.getBlockZ() - radius);
      ps.setString(7, playerName);
      ps.setInt(8, worlds.indexOf(location.getWorld()));
      rs = ps.executeQuery();
      conn.commit();

      int size = 0;
      while (rs.next()) {
        Action action = Action.values()[rs.getInt("action")];
        int type = rs.getInt("type");

        switch (action) {
          case BLOCK_BROKEN:
          case LEAF_DECAY:
            if (destructions.containsKey(type)) {
              destructions.put(type, destructions.get(type) + 1);
              size++;
            } else {
              destructions.put(type, 1);
              size++;
            }
            break;
          case BLOCK_PLACED:
            if (creations.containsKey(type)) {
              creations.put(type, creations.get(type) + 1);
              size++;
            } else {
              creations.put(type, 1);
              size++;
            }
            break;
          case TNT_EXPLOSION:
          case CREEPER_EXPLOSION:
          case MISC_EXPLOSION:
            if (explosions.containsKey(type)) {
              explosions.put(type, explosions.get(type) + 1);
              size++;
            } else {
              explosions.put(type, 1);
              size++;
            }
          case BLOCK_BURN:
            if (burns.containsKey(type)) {
              burns.put(type, burns.get(type) + 1);
              size++;
            } else {
              burns.put(type, 1);
              size++;
            }
            break;
        }
      }
      if (size > 0) {
        StringBuilder creationList = new StringBuilder();
        // creationList.append(Color.AQUA);
        creationList.append("Placed Blocks: ");
        // creationList.append(Color.WHITE);
        for (Entry<Integer, Integer> entry : creations.entrySet()) {
          creationList.append(Material.getMaterial(entry.getKey()));
          creationList.append(" (");
          creationList.append(entry.getValue());
          creationList.append("), ");
        }
        if (creationList.toString().contains(","))
          creationList.delete(creationList.lastIndexOf(","), creationList.length());
        StringBuilder brokenList = new StringBuilder();
        // brokenList.append(Color.RED);
        brokenList.append("Broken Blocks: ");
        // brokenList.append(Color.WHITE);
        for (Entry<Integer, Integer> entry : destructions.entrySet()) {
          brokenList.append(Material.getMaterial(entry.getKey()));
          brokenList.append(" (");
          brokenList.append(entry.getValue());
          brokenList.append("), ");
        }
        if (brokenList.toString().contains(","))
          brokenList.delete(brokenList.lastIndexOf(","), brokenList.length());
        StringBuilder explodeList = new StringBuilder();
        // brokenList.append(Color.RED);
        explodeList.append("Exploded Blocks: ");
        // brokenList.append(Color.WHITE);
        for (Entry<Integer, Integer> entry : explosions.entrySet()) {
          explodeList.append(Material.getMaterial(entry.getKey()));
          explodeList.append(" (");
          explodeList.append(entry.getValue());
          explodeList.append("), ");
        }
        if (explodeList.toString().contains(","))
          explodeList.delete(explodeList.lastIndexOf(","), explodeList.length());

        StringBuilder burnList = new StringBuilder();
        // brokenList.append(Color.RED);
        burnList.append("Burned Blocks: ");
        // brokenList.append(Color.WHITE);
        for (Entry<Integer, Integer> entry : burns.entrySet()) {
          burnList.append(Material.getMaterial(entry.getKey()));
          burnList.append(" (");
          burnList.append(entry.getValue());
          burnList.append("), ");
        }
        if (burnList.toString().contains(","))
          burnList.delete(burnList.lastIndexOf(","), burnList.length());
        for (Player player : players) {
          player.sendMessage(
              BigBrother.premessage + playerName + " has made " + size + " modifications");
          if (creations.entrySet().size() > 0) player.sendMessage(creationList.toString());
          if (destructions.entrySet().size() > 0) player.sendMessage(brokenList.toString());
          if (explosions.entrySet().size() > 0) player.sendMessage(explodeList.toString());
          if (burns.entrySet().size() > 0) player.sendMessage(burnList.toString());
        }
      } else {
        for (Player player : players) {
          player.sendMessage(
              BigBrother.premessage + playerName + " has no modifications in this area.");
        }
      }
    } catch (SQLException ex) {
      BigBrother.log.log(Level.SEVERE, "[BBROTHER]: Find SQL Exception", ex);
    } finally {
      try {
        if (rs != null) rs.close();
        if (ps != null) ps.close();
        if (conn != null) conn.close();
      } catch (SQLException ex) {
        BigBrother.log.log(Level.SEVERE, "[BBROTHER]: Find SQL Exception (on close)");
      }
    }
  }