2021-01-03 07:21:15 +00:00
|
|
|
package dev.plex.cache;
|
2020-10-27 21:04:05 +00:00
|
|
|
|
|
|
|
import com.google.common.reflect.TypeToken;
|
|
|
|
import com.google.gson.Gson;
|
2021-01-03 07:21:15 +00:00
|
|
|
import dev.plex.Plex;
|
|
|
|
import dev.plex.player.PlexPlayer;
|
2020-10-27 21:04:05 +00:00
|
|
|
import java.sql.Connection;
|
|
|
|
import java.sql.PreparedStatement;
|
|
|
|
import java.sql.ResultSet;
|
|
|
|
import java.sql.SQLException;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2022-02-05 23:14:23 +00:00
|
|
|
/**
|
|
|
|
* SQL fetching utilities for players
|
|
|
|
*/
|
2020-10-27 21:04:05 +00:00
|
|
|
public class SQLPlayerData
|
|
|
|
{
|
|
|
|
private final String SELECT = "SELECT * FROM `players` WHERE uuid=?";
|
2020-11-06 18:19:38 +00:00
|
|
|
private final String UPDATE = "UPDATE `players` SET name=?, login_msg=?, prefix=?, rank=?, ips=?, coins=?, vanished=? WHERE uuid=?";
|
|
|
|
private final String INSERT = "INSERT INTO `players` (`uuid`, `name`, `login_msg`, `prefix`, `rank`, `ips`, `coins`, `vanished`) VALUES (?, ?, ?, ?, ?, ?, ?, ?);";
|
2020-10-27 21:04:05 +00:00
|
|
|
|
2022-02-05 23:14:23 +00:00
|
|
|
/**
|
|
|
|
* Checks if a player exists in the SQL database
|
|
|
|
* @param uuid The unique ID of the player
|
|
|
|
* @return true if the player was found in the database
|
|
|
|
*/
|
2020-10-27 21:04:05 +00:00
|
|
|
public boolean exists(UUID uuid)
|
|
|
|
{
|
|
|
|
try (Connection con = Plex.get().getSqlConnection().getCon())
|
|
|
|
{
|
|
|
|
PreparedStatement statement = con.prepareStatement(SELECT);
|
|
|
|
statement.setString(1, uuid.toString());
|
|
|
|
ResultSet set = statement.executeQuery();
|
|
|
|
return set.next();
|
|
|
|
}
|
2020-10-28 03:49:56 +00:00
|
|
|
catch (SQLException throwables)
|
|
|
|
{
|
2020-10-27 21:04:05 +00:00
|
|
|
throwables.printStackTrace();
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2022-02-05 23:14:23 +00:00
|
|
|
/**
|
|
|
|
* Gets the player from cache or from the SQL database
|
|
|
|
* @param uuid The unique ID of the player
|
|
|
|
* @return a PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 21:04:05 +00:00
|
|
|
public PlexPlayer getByUUID(UUID uuid)
|
|
|
|
{
|
|
|
|
if (PlayerCache.getPlexPlayerMap().containsKey(uuid))
|
|
|
|
{
|
|
|
|
return PlayerCache.getPlexPlayerMap().get(uuid);
|
|
|
|
}
|
|
|
|
|
|
|
|
try (Connection con = Plex.get().getSqlConnection().getCon())
|
|
|
|
{
|
|
|
|
PreparedStatement statement = con.prepareStatement(SELECT);
|
|
|
|
statement.setString(1, uuid.toString());
|
|
|
|
ResultSet set = statement.executeQuery();
|
|
|
|
PlexPlayer plexPlayer = new PlexPlayer(uuid);
|
|
|
|
while (set.next())
|
|
|
|
{
|
|
|
|
String name = set.getString("name");
|
|
|
|
String loginMSG = set.getString("login_msg");
|
|
|
|
String prefix = set.getString("prefix");
|
|
|
|
String rankName = set.getString("rank").toUpperCase();
|
2020-10-27 21:30:57 +00:00
|
|
|
long coins = set.getLong("coins");
|
2020-11-06 18:19:38 +00:00
|
|
|
boolean vanished = set.getBoolean("vanished");
|
2022-01-30 21:03:47 +00:00
|
|
|
List<String> ips = new Gson().fromJson(set.getString("ips"), new TypeToken<List<String>>()
|
|
|
|
{
|
|
|
|
}.getType());
|
2020-10-27 21:04:05 +00:00
|
|
|
plexPlayer.setName(name);
|
|
|
|
plexPlayer.setLoginMSG(loginMSG);
|
|
|
|
plexPlayer.setPrefix(prefix);
|
2020-10-28 04:11:23 +00:00
|
|
|
plexPlayer.setRank(rankName);
|
2020-10-27 21:04:05 +00:00
|
|
|
plexPlayer.setIps(ips);
|
2020-10-27 21:30:57 +00:00
|
|
|
plexPlayer.setCoins(coins);
|
2020-11-06 18:19:38 +00:00
|
|
|
plexPlayer.setVanished(vanished);
|
2020-10-27 21:04:05 +00:00
|
|
|
}
|
|
|
|
return plexPlayer;
|
|
|
|
}
|
2020-10-28 03:49:56 +00:00
|
|
|
catch (SQLException throwables)
|
|
|
|
{
|
2020-10-27 21:04:05 +00:00
|
|
|
throwables.printStackTrace();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
2022-02-05 23:14:23 +00:00
|
|
|
/**
|
|
|
|
* Updates a player's information in the SQL database
|
|
|
|
* @param player The PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 21:04:05 +00:00
|
|
|
public void update(PlexPlayer player)
|
|
|
|
{
|
|
|
|
try (Connection con = Plex.get().getSqlConnection().getCon())
|
|
|
|
{
|
|
|
|
PreparedStatement statement = con.prepareStatement(UPDATE);
|
|
|
|
statement.setString(1, player.getName());
|
|
|
|
statement.setString(2, player.getLoginMSG());
|
|
|
|
statement.setString(3, player.getPrefix());
|
2020-10-28 03:45:01 +00:00
|
|
|
statement.setString(4, player.getRank().toLowerCase());
|
2020-10-27 21:04:05 +00:00
|
|
|
statement.setString(5, new Gson().toJson(player.getIps()));
|
2020-10-27 21:30:57 +00:00
|
|
|
statement.setLong(6, player.getCoins());
|
2020-11-06 18:19:38 +00:00
|
|
|
statement.setBoolean(7, player.isVanished());
|
|
|
|
statement.setString(8, player.getUuid());
|
2020-10-27 21:04:05 +00:00
|
|
|
statement.executeUpdate();
|
|
|
|
}
|
2020-10-28 03:49:56 +00:00
|
|
|
catch (SQLException throwables)
|
|
|
|
{
|
2020-10-27 21:04:05 +00:00
|
|
|
throwables.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-02-05 23:14:23 +00:00
|
|
|
/**
|
|
|
|
* Inserts the player's information in the database
|
|
|
|
* @param player The PlexPlayer object
|
|
|
|
* @see PlexPlayer
|
|
|
|
*/
|
2020-10-27 21:04:05 +00:00
|
|
|
public void insert(PlexPlayer player)
|
|
|
|
{
|
|
|
|
try (Connection con = Plex.get().getSqlConnection().getCon())
|
|
|
|
{
|
|
|
|
PreparedStatement statement = con.prepareStatement(INSERT);
|
|
|
|
statement.setString(1, player.getUuid());
|
|
|
|
statement.setString(2, player.getName());
|
|
|
|
statement.setString(3, player.getLoginMSG());
|
|
|
|
statement.setString(4, player.getPrefix());
|
2020-10-28 03:45:01 +00:00
|
|
|
statement.setString(5, player.getRank().toLowerCase());
|
2020-10-27 21:04:05 +00:00
|
|
|
statement.setString(6, new Gson().toJson(player.getIps()));
|
2020-11-06 18:19:38 +00:00
|
|
|
statement.setLong(7, player.getCoins());
|
|
|
|
statement.setBoolean(8, player.isVanished());
|
2020-10-27 21:04:05 +00:00
|
|
|
statement.execute();
|
|
|
|
}
|
2020-10-28 03:49:56 +00:00
|
|
|
catch (SQLException throwables)
|
|
|
|
{
|
2020-10-27 21:04:05 +00:00
|
|
|
throwables.printStackTrace();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|