You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
570 lines
22 KiB
570 lines
22 KiB
package cx.sfy.TheBridge.database;
|
|
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.PreparedStatement;
|
|
import java.sql.ResultSet;
|
|
import java.sql.SQLException;
|
|
import java.sql.Statement;
|
|
import java.util.TimeZone;
|
|
|
|
import org.bukkit.Bukkit;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.entity.Player;
|
|
import org.bukkit.scheduler.BukkitRunnable;
|
|
|
|
import cx.sfy.TheBridge.Main;
|
|
import cx.sfy.TheBridge.tops.BoardType;
|
|
import cx.sfy.TheBridge.tops.Top;
|
|
|
|
public class Database {
|
|
|
|
public Main plugin;
|
|
private Connection connection;
|
|
|
|
public Database(Main plugin) {
|
|
this.plugin = plugin;
|
|
conectar();
|
|
}
|
|
|
|
public void conectar() {
|
|
if (plugin.getConfig().getBoolean("MySQL.enabled")){
|
|
try {
|
|
Class.forName("com.mysql.jdbc.Driver");
|
|
connection = DriverManager.getConnection("jdbc:mysql://" + (plugin.getConfig().getString("MySQL.host") +":"+ plugin.getConfig().getString("MySQL.port")) + "/" + plugin.getConfig().getString("MySQL.database") + "?serverTimezone=" + TimeZone.getDefault().getID() + "&autoReconnect=true&wait_timeout=31536000&interactive_timeout=31536000", plugin.getConfig().getString("MySQL.username"), plugin.getConfig().getString("MySQL.password"));
|
|
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] MySQL connected.");
|
|
newTables();
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
File DataFile = new File(plugin.getDataFolder(), "/TheBridge.db");
|
|
if (!DataFile.exists()) {
|
|
try {
|
|
DataFile.createNewFile();
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
Bukkit.getPluginManager().disablePlugin(plugin);
|
|
}
|
|
}
|
|
try {
|
|
Class.forName("org.sqlite.JDBC");
|
|
try {
|
|
connection = DriverManager.getConnection("jdbc:sqlite:" + DataFile);
|
|
Bukkit.getConsoleSender().sendMessage(ChatColor.GREEN + "[TheBridge] SQLLite connected.");
|
|
newTables();
|
|
} catch (SQLException ex2) {
|
|
ex2.printStackTrace();
|
|
Bukkit.getPluginManager().disablePlugin(plugin);
|
|
}
|
|
} catch (ClassNotFoundException ex3) {
|
|
ex3.printStackTrace();
|
|
Bukkit.getPluginManager().disablePlugin(plugin);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void checkConnection() {
|
|
try {
|
|
if (connection.isClosed() || connection == null){
|
|
conectar();
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public void loadNormalKills() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `NKills` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `NKills` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_KILLS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getNormalKills() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getNormalKills(), BoardType.NORMAL_KILLS);
|
|
}
|
|
}
|
|
}, 0);
|
|
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void loadNormalWins() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `NWins` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `NWins` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_WINS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getNormalWins() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getNormalWins(), BoardType.NORMAL_WINS);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void loadNormalGoals() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `NGoals` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `NGoals` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.NORMAL_GOALS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getNormalGoals() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getNormalGoals(), BoardType.NORMAL_GOALS);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void loadFourKills() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `FKills` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `FKills` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_KILLS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getFourKills() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getFourKills(), BoardType.FOUR_KILLS);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void loadFourWins() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `FWins` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `FWins` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_WINS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getFourWins() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getFourWins(), BoardType.FOUR_WINS);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void loadFourGoals() {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `UUID`, `Name`, `FGoals` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("GROUP BY `UUID` ");
|
|
queryBuilder.append("ORDER BY `FGoals` DESC LIMIT 10;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
while (resultSet.next()) {
|
|
new Top(resultSet.getString(2), resultSet.getInt(3), BoardType.FOUR_GOALS);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (plugin.getLM().getFourGoals() != null) {
|
|
plugin.getTOP().createTop(plugin.getLM().getFourGoals(), BoardType.FOUR_GOALS);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void createNewPlayer(String fId, String name) {
|
|
PreparedStatement preparedStatement = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("INSERT INTO `BG_Data` ");
|
|
queryBuilder.append("(`UUID`, `Name`, `Coins`, `NKills`, `NWins`, `NGoals`, `FKills`, `FWins`, `FGoals`, `Inventory`, `XP`, `Placed`, `Broken`) ");
|
|
queryBuilder.append("VALUES ");
|
|
queryBuilder.append("(?, ?, 0, 0, 0, 0, 0, 0, 0, ?, 0, 0, 0);");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
preparedStatement.setString(1, fId);
|
|
preparedStatement.setString(2, name);
|
|
preparedStatement.setString(3, "none");
|
|
preparedStatement.executeUpdate();
|
|
} catch (final SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
|
|
} finally {
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (final SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean hasPlayer(Player p, String uuid) {
|
|
PreparedStatement statement = null;
|
|
try {
|
|
statement = this.connection.prepareStatement("SELECT UUID FROM BG_Data WHERE UUID ='" + uuid + "'");
|
|
ResultSet result = statement.executeQuery();
|
|
if (result.next()) {
|
|
return true;
|
|
}
|
|
} catch (SQLException e) {
|
|
e.printStackTrace();
|
|
if (statement != null) {
|
|
try {
|
|
statement.close();
|
|
}
|
|
catch (SQLException e2) {
|
|
e2.printStackTrace();
|
|
}
|
|
return false;
|
|
}
|
|
return false;
|
|
} finally {
|
|
if (statement != null) {
|
|
try {
|
|
statement.close();
|
|
}
|
|
catch (SQLException e2) {
|
|
e2.printStackTrace();
|
|
}
|
|
}
|
|
}
|
|
if (statement != null) {
|
|
try {
|
|
statement.close();
|
|
}
|
|
catch (SQLException e2) {
|
|
e2.printStackTrace();
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public void loadData(PlayerStat stat) {
|
|
new BukkitRunnable() {
|
|
@Override
|
|
public void run() {
|
|
Connection connection = getConnection();
|
|
if (!hasPlayer(stat.getPlayer(), stat.getUUID())) {
|
|
createNewPlayer(stat.getUUID(), stat.getPlayer().getName());
|
|
loadData(stat);
|
|
return;
|
|
}
|
|
PreparedStatement preparedStatement = null;
|
|
ResultSet resultSet = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("SELECT `NKills`, `NWins`, `NGoals`, `FKills`, `FWins`, `FGoals`, `Coins`, `Inventory`, `XP`, `Placed`, `Broken` ");
|
|
queryBuilder.append("FROM `BG_Data` ");
|
|
queryBuilder.append("WHERE `UUID` = ? ");
|
|
queryBuilder.append("LIMIT 1;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
preparedStatement.setString(1, stat.getUUID().toString());
|
|
resultSet = preparedStatement.executeQuery();
|
|
if (resultSet != null && resultSet.next()) {
|
|
stat.setNormalKills(resultSet.getInt("NKills"));
|
|
stat.setNormalWins(resultSet.getInt("NWins"));
|
|
stat.setNormalGoals(resultSet.getInt("NGoals"));
|
|
stat.setFourKills(resultSet.getInt("FKills"));
|
|
stat.setFourWins(resultSet.getInt("FWins"));
|
|
stat.setFourGoals(resultSet.getInt("FGoals"));
|
|
stat.setCoins(resultSet.getInt("Coins"));
|
|
if (!resultSet.getString("Inventory").equals("none")) {
|
|
try {
|
|
stat.setHotbar(plugin.getKit().fromBase64(resultSet.getString("Inventory")).getContents());
|
|
} catch (IOException e) {
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
stat.setHotbar(null);
|
|
}
|
|
stat.setXP(resultSet.getInt("XP"));
|
|
stat.setPlaced(resultSet.getInt("Placed"));
|
|
stat.setBroken(resultSet.getInt("Broken"));
|
|
Bukkit.getScheduler().scheduleSyncDelayedTask(plugin, new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
plugin.getTOP().createInfo(stat.getPlayer());
|
|
plugin.getSB().createLobbyBoard(stat.getPlayer());
|
|
for (Player on : plugin.getSB().getSB().keySet()) {
|
|
plugin.getSB().update(on);
|
|
}
|
|
}
|
|
}, 0);
|
|
}
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
} finally {
|
|
if (resultSet != null) {
|
|
try {
|
|
resultSet.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}.runTaskAsynchronously(plugin);
|
|
}
|
|
|
|
public void saveData(PlayerStat stat) {
|
|
checkConnection();
|
|
Connection connection = getConnection();
|
|
PreparedStatement preparedStatement = null;
|
|
try {
|
|
StringBuilder queryBuilder = new StringBuilder();
|
|
queryBuilder.append("UPDATE `BG_Data` SET ");
|
|
queryBuilder.append("`NKills` = ?, `NWins` = ?, `NGoals` = ?, `FKills` = ?, `FWins` = ?, `FGoals` = ?, `Coins` = ?, `Inventory` = ?, `XP` = ?, `Placed` = ?, `Broken` = ? ");
|
|
queryBuilder.append("WHERE `UUID` = ?;");
|
|
preparedStatement = connection.prepareStatement(queryBuilder.toString());
|
|
preparedStatement.setInt(1, stat.getNormalKills());
|
|
preparedStatement.setInt(2, stat.getNormalWins());
|
|
preparedStatement.setInt(3, stat.getNormalGoals());
|
|
preparedStatement.setInt(4, stat.getFourKills());
|
|
preparedStatement.setInt(5, stat.getFourWins());
|
|
preparedStatement.setInt(6, stat.getFourGoals());
|
|
preparedStatement.setInt(7, stat.getCoins());
|
|
if (stat.getHotbar() != null) {
|
|
preparedStatement.setString(8, plugin.getKit().itemStackArrayToBase64(stat.getHotbar()));
|
|
} else {
|
|
preparedStatement.setString(8, "none");
|
|
}
|
|
preparedStatement.setInt(9, stat.getXP());
|
|
preparedStatement.setInt(10, stat.getPlaced());
|
|
preparedStatement.setInt(11, stat.getBroken());
|
|
preparedStatement.setString(12, stat.getUUID());
|
|
preparedStatement.executeUpdate();
|
|
} catch (SQLException sqlException) {
|
|
sqlException.printStackTrace();
|
|
|
|
} finally {
|
|
if (preparedStatement != null) {
|
|
try {
|
|
preparedStatement.close();
|
|
} catch (SQLException ignored) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public Connection getConnection() {
|
|
return connection;
|
|
}
|
|
|
|
public void newTables() {
|
|
Connection connection = getConnection();
|
|
try {
|
|
Statement statement = connection.createStatement();
|
|
try {
|
|
statement.executeUpdate("CREATE TABLE IF NOT EXISTS BG_Data (UUID VARCHAR(60), Name VARCHAR(60), NKills INT, NWins INT, NGoals INT, FKills INT, FWins INT, FGoals INT, Coins INT, Inventory TEXT, XP INT, Placed INT, Broken INT, Cage TEXT)");
|
|
} catch (SQLException ex) {
|
|
try {
|
|
if (statement != null) {
|
|
statement.close();
|
|
}
|
|
} catch (SQLException ex2) {
|
|
}
|
|
return;
|
|
} finally {
|
|
try {
|
|
if (statement != null) {
|
|
statement.close();
|
|
}
|
|
} catch (SQLException ex3) {
|
|
}
|
|
} try {
|
|
if (statement != null) {
|
|
statement.close();
|
|
}
|
|
} catch (SQLException ex4) {
|
|
}
|
|
} catch (SQLException ex5) {
|
|
}
|
|
}
|
|
|
|
}
|