List of usage examples for com.google.common.io ByteArrayDataOutput write
@Override void write(byte b[]);
From source file:io.github.runelynx.runicparadise.RunicParadise.java
@SuppressWarnings("deprecation") public void updatePlayerInfoOnJoin(String name, UUID pUUID) { final Date now = new Date(); final String playerName = name; final UUID playerUUID = pUUID; MySQL MySQL = new MySQL(instance, instance.getConfig().getString("dbHost"), instance.getConfig().getString("dbPort"), instance.getConfig().getString("dbDatabase"), instance.getConfig().getString("dbUser"), instance.getConfig().getString("dbPassword")); final Connection dbConn = MySQL.openConnection(); int rowCount = -1; int rowCountnameMatch = -1; String previousName = ""; try {/*from w ww .ja v a2 s .c om*/ PreparedStatement dStmt = dbConn .prepareStatement("SELECT COUNT(*) as Total, PlayerName FROM rp_PlayerInfo WHERE UUID = ?;"); dStmt.setString(1, playerUUID.toString()); ResultSet dbResult = dStmt.executeQuery(); while (dbResult.next()) { rowCount = dbResult.getInt("Total"); previousName = dbResult.getString("PlayerName"); } dStmt.close(); PreparedStatement zStmt = dbConn .prepareStatement("SELECT COUNT(*) as Total FROM rp_PlayerInfo WHERE PlayerName = ?;"); zStmt.setString(1, playerName); ResultSet zResult = zStmt.executeQuery(); while (zResult.next()) { rowCountnameMatch = zResult.getInt("Total"); } zStmt.close(); } catch (SQLException e) { getLogger().log(Level.SEVERE, "Cant check for row count in updatePlayerInfoOnJoin for " + playerName + " because: " + e.getMessage()); } if (rowCount != rowCountnameMatch) { Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "sc Name change detected for " + playerName + " (" + previousName + ")"); Bukkit.getLogger().log(Level.INFO, "[RP] Name change detected for " + playerName + " (" + previousName + ")"); } try { // if this player has no rows in the table yet if (rowCount == 0) { Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(instance, new Runnable() { public void run() { // tell the other server this one is reconnected // to the universe ByteArrayDataOutput out = ByteStreams.newDataOutput(); out.writeUTF("Forward"); // So BungeeCord knows // to forward it out.writeUTF("ONLINE"); out.writeUTF("NewPlayer"); // The channel name // to check if this // your data ByteArrayOutputStream msgbytes = new ByteArrayOutputStream(); DataOutputStream msgout = new DataOutputStream(msgbytes); try { msgout.writeUTF(Bukkit.getPlayer(playerUUID).getDisplayName()); // You // can // do // anything // msgout msgout.writeShort(123); } catch (IOException e) { } out.writeShort(msgbytes.toByteArray().length); out.write(msgbytes.toByteArray()); // If you don't care about the player // Player player = // Iterables.getFirst(Bukkit.getOnlinePlayers(), // null); // Else, specify them Bukkit.getPlayer(playerUUID).sendPluginMessage(instance, "BungeeCord", out.toByteArray()); } }, 140); // ///////////////////// PreparedStatement dStmt = dbConn.prepareStatement( "INSERT INTO rp_PlayerInfo (`PlayerName`, `UUID`, `ActiveFaith`, `LastIP`, `FirstSeen`, `LastSeen`) VALUES " + "(?, ?, ?, ?, ?, ?);"); dStmt.setString(1, playerName); dStmt.setString(2, playerUUID.toString()); dStmt.setString(3, "Sun"); dStmt.setString(4, Bukkit.getPlayer(playerUUID).getAddress().getAddress().getHostAddress()); dStmt.setLong(5, now.getTime()); dStmt.setLong(6, now.getTime()); dStmt.executeUpdate(); PreparedStatement pStmt = dbConn .prepareStatement("INSERT INTO rp_PlayerMobKills (`UUID`) VALUES " + "(?);"); pStmt.setString(1, playerUUID.toString()); pStmt.executeUpdate(); pStmt.close(); dStmt.close(); // if this player has 1 row in the table } else if (rowCount == 1) { PreparedStatement dStmt = dbConn.prepareStatement( "UPDATE `rp_PlayerInfo` SET LastSeen=?, PlayerName=?, LastIP=? WHERE UUID=?;"); dStmt.setLong(1, now.getTime()); dStmt.setString(2, playerName); dStmt.setString(3, Bukkit.getPlayer(playerUUID).getAddress().getAddress().getHostAddress()); dStmt.setString(4, playerUUID.toString()); dStmt.executeUpdate(); dStmt.close(); Bukkit.getLogger().log(Level.INFO, "[RP] PlayerInfo data updated for " + playerName); // if this player has MORE than 1 row in the // table } else if (rowCount > 1) { int counter = 1; PreparedStatement zStmt = dbConn .prepareStatement("SELECT * FROM rp_PlayerInfo WHERE UUID = ? ORDER BY ID ASC;"); zStmt.setString(1, playerUUID.toString()); ResultSet zResult = zStmt.executeQuery(); while (zResult.next()) { // The first row is our valid one - update // it! if (counter == 1) { PreparedStatement dStmt = dbConn.prepareStatement( "UPDATE `rp_PlayerInfo` SET LastSeen=?, PlayerName=? WHERE UUID=?;"); dStmt.setLong(1, now.getTime()); dStmt.setString(2, playerName); dStmt.setString(3, playerUUID.toString()); dStmt.executeUpdate(); dStmt.close(); Bukkit.getLogger().log(Level.INFO, "[RP] PlayerInfo data [row " + zResult.getInt("ID") + "] updated for " + playerName); // All further rows are invalid, delete // them! } else if (counter > 1) { PreparedStatement dStmt = dbConn .prepareStatement("DELETE FROM `rp_PlayerInfo` WHERE ID = ? LIMIT 1;"); dStmt.setInt(1, zResult.getInt("ID")); dStmt.executeUpdate(); dStmt.close(); Bukkit.getLogger().log(Level.INFO, "[RP] PlayerInfo dupe row cleanup (name change?)! Deleted row " + zResult.getInt("ID")); } counter++; } zStmt.close(); } dbConn.close(); } catch (SQLException e) { getLogger().log(Level.SEVERE, "Cant work with DB updatePlayerInfoOnJoin for " + playerName + " because: " + e.getMessage()); } }