286 lines
12 KiB
Java
286 lines
12 KiB
Java
package pk.ajneb97.database;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.configuration.file.FileConfiguration;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
import pk.ajneb97.PlayerKits2;
|
|
import pk.ajneb97.managers.MessagesManager;
|
|
import pk.ajneb97.model.PlayerData;
|
|
import pk.ajneb97.model.PlayerDataKit;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.util.ArrayList;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
public class MySQLConnection {
|
|
|
|
private PlayerKits2 plugin;
|
|
private HikariConnection connection;
|
|
private String host;
|
|
private String database;
|
|
private String username;
|
|
private String password;
|
|
private int port;
|
|
|
|
public MySQLConnection(PlayerKits2 plugin){
|
|
this.plugin = plugin;
|
|
}
|
|
|
|
public void setupMySql(){
|
|
FileConfiguration config = plugin.getConfigsManager().getMainConfigManager().getConfig();
|
|
try {
|
|
host = config.getString("mysql_database.host");
|
|
port = Integer.valueOf(config.getString("mysql_database.port"));
|
|
database = config.getString("mysql_database.database");
|
|
username = config.getString("mysql_database.username");
|
|
password = config.getString("mysql_database.password");
|
|
connection = new HikariConnection(host,port,database,username,password);
|
|
connection.getHikari().getConnection();
|
|
createTables();
|
|
loadData();
|
|
Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage(plugin.prefix+" &aSuccessfully connected to the Database."));
|
|
}catch(Exception e) {
|
|
Bukkit.getConsoleSender().sendMessage(MessagesManager.getColoredMessage(plugin.prefix+" &cError while connecting to the Database."));
|
|
}
|
|
}
|
|
|
|
|
|
public String getDatabase() {
|
|
return this.database;
|
|
}
|
|
|
|
public Connection getConnection() {
|
|
try {
|
|
return connection.getHikari().getConnection();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public void loadData(){
|
|
ArrayList<PlayerData> players = new ArrayList<>();
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = connection.prepareStatement(
|
|
"SELECT playerkits_players.UUID, playerkits_players.PLAYER_NAME, " +
|
|
"playerkits_players_kits.NAME, " +
|
|
"playerkits_players_kits.COOLDOWN, " +
|
|
"playerkits_players_kits.ONE_TIME, " +
|
|
"playerkits_players_kits.BOUGHT " +
|
|
"FROM playerkits_players LEFT JOIN playerkits_players_kits " +
|
|
"ON playerkits_players.UUID = playerkits_players_kits.UUID");
|
|
|
|
ResultSet result = statement.executeQuery();
|
|
|
|
Set<String> existingUUIDs = new HashSet<>();
|
|
while(result.next()){
|
|
String uuid = result.getString("UUID");
|
|
String playerName = result.getString("PLAYER_NAME");
|
|
String kitName = result.getString("NAME");
|
|
long cooldown = result.getLong("COOLDOWN");
|
|
boolean oneTime = result.getBoolean("ONE_TIME");
|
|
boolean bought = result.getBoolean("BOUGHT");
|
|
|
|
PlayerData currentPlayer;
|
|
if(!existingUUIDs.contains(uuid)){
|
|
//Create and add it
|
|
currentPlayer = new PlayerData(playerName,uuid);
|
|
players.add(currentPlayer);
|
|
existingUUIDs.add(uuid);
|
|
}else{
|
|
currentPlayer = players.stream()
|
|
.filter(p -> p.getUuid().equals(uuid))
|
|
.findFirst()
|
|
.orElse(null);
|
|
}
|
|
|
|
if(kitName != null){
|
|
PlayerDataKit playerDataKit = new PlayerDataKit(kitName);
|
|
playerDataKit.setCooldown(cooldown);
|
|
playerDataKit.setOneTime(oneTime);
|
|
playerDataKit.setBought(bought);
|
|
currentPlayer.addKit(playerDataKit);
|
|
}
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
plugin.getPlayerDataManager().setPlayers(players);
|
|
}
|
|
|
|
public void createTables() {
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement1 = connection.prepareStatement(
|
|
"CREATE TABLE IF NOT EXISTS playerkits_players" +
|
|
" (UUID varchar(200) NOT NULL, " +
|
|
" PLAYER_NAME varchar(50), " +
|
|
" PRIMARY KEY ( UUID ))"
|
|
);
|
|
statement1.executeUpdate();
|
|
PreparedStatement statement2 = connection.prepareStatement(
|
|
"CREATE TABLE IF NOT EXISTS playerkits_players_kits" +
|
|
" (ID int NOT NULL AUTO_INCREMENT, " +
|
|
" UUID varchar(200) NOT NULL, " +
|
|
" NAME varchar(100), " +
|
|
" COOLDOWN BIGINT, " +
|
|
" ONE_TIME BOOLEAN, " +
|
|
" BOUGHT BOOLEAN, " +
|
|
" PRIMARY KEY ( ID ), " +
|
|
" FOREIGN KEY (UUID) REFERENCES playerkits_players(UUID))");
|
|
statement2.executeUpdate();
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void getPlayer(String uuid,PlayerCallback callback){
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
PlayerData player = null;
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = connection.prepareStatement(
|
|
"SELECT playerkits_players.UUID, playerkits_players.PLAYER_NAME, " +
|
|
"playerkits_players_kits.NAME, " +
|
|
"playerkits_players_kits.COOLDOWN, " +
|
|
"playerkits_players_kits.ONE_TIME, " +
|
|
"playerkits_players_kits.BOUGHT " +
|
|
"FROM playerkits_players LEFT JOIN playerkits_players_kits " +
|
|
"ON playerkits_players.UUID = playerkits_players_kits.UUID " +
|
|
"WHERE playerkits_players.UUID = ?");
|
|
|
|
statement.setString(1, uuid);
|
|
ResultSet result = statement.executeQuery();
|
|
|
|
boolean firstFind = true;
|
|
while(result.next()){
|
|
String playerName = result.getString("PLAYER_NAME");
|
|
String kitName = result.getString("NAME");
|
|
long cooldown = result.getLong("COOLDOWN");
|
|
boolean oneTime = result.getBoolean("ONE_TIME");
|
|
boolean bought = result.getBoolean("BOUGHT");
|
|
if(firstFind){
|
|
firstFind = false;
|
|
player = new PlayerData(playerName,uuid);
|
|
}
|
|
if(kitName != null){
|
|
PlayerDataKit playerDataKit = new PlayerDataKit(kitName);
|
|
playerDataKit.setCooldown(cooldown);
|
|
playerDataKit.setOneTime(oneTime);
|
|
playerDataKit.setBought(bought);
|
|
player.addKit(playerDataKit);
|
|
}
|
|
}
|
|
|
|
PlayerData finalPlayer = player;
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
callback.onDone(finalPlayer);
|
|
}
|
|
}.runTask(plugin);
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void createPlayer(PlayerData player){
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = connection.prepareStatement(
|
|
"INSERT INTO playerkits_players " +
|
|
"(UUID, PLAYER_NAME) VALUE (?,?)");
|
|
|
|
statement.setString(1, player.getUuid());
|
|
statement.setString(2, player.getName());
|
|
statement.executeUpdate();
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void updatePlayerName(PlayerData player){
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = connection.prepareStatement(
|
|
"UPDATE playerkits_players SET " +
|
|
"PLAYER_NAME=? WHERE UUID=?");
|
|
|
|
statement.setString(1, player.getName());
|
|
statement.setString(2, player.getUuid());
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void updateKit(PlayerData player,PlayerDataKit kit,boolean mustCreate){
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = null;
|
|
if(mustCreate){
|
|
// Insert
|
|
statement = connection.prepareStatement(
|
|
"INSERT INTO playerkits_players_kits " +
|
|
"(UUID, NAME, COOLDOWN, ONE_TIME, BOUGHT) VALUE (?,?,?,?,?)");
|
|
|
|
statement.setString(1, player.getUuid());
|
|
statement.setString(2, kit.getName());
|
|
statement.setLong(3, kit.getCooldown());
|
|
statement.setBoolean(4, kit.isOneTime());
|
|
statement.setBoolean(5, kit.isBought());
|
|
}else{
|
|
// Update
|
|
statement = connection.prepareStatement(
|
|
"UPDATE playerkits_players_kits SET " +
|
|
"COOLDOWN=?, ONE_TIME=?, BOUGHT=? WHERE UUID=? AND NAME=?");
|
|
|
|
statement.setLong(1, kit.getCooldown());
|
|
statement.setBoolean(2, kit.isOneTime());
|
|
statement.setBoolean(3, kit.isBought());
|
|
statement.setString(4, player.getUuid());
|
|
statement.setString(5, kit.getName());
|
|
}
|
|
statement.executeUpdate();
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void resetKit(String uuid,String kitName){
|
|
new BukkitRunnable(){
|
|
@Override
|
|
public void run() {
|
|
try(Connection connection = getConnection()){
|
|
PreparedStatement statement = connection.prepareStatement(
|
|
"DELETE FROM playerkits_players_kits " +
|
|
"WHERE UUID=? AND NAME=?");
|
|
|
|
statement.setString(1, uuid);
|
|
statement.setString(2, kitName);
|
|
statement.executeUpdate();
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
}
|