From 852d25a619a417c35155fd7623c261aed5832415 Mon Sep 17 00:00:00 2001 From: SuperRonanCraft Date: Tue, 5 Apr 2022 22:05:49 -0400 Subject: [PATCH] cooldowns database bug fix --- .../database/DatabaseCooldownsGlobal.java | 107 ------------------ .../references/database/DatabasePlayers.java | 50 ++------ .../BetterRTP/references/database/SQLite.java | 31 ++--- .../player/playerdata/PlayerData.java | 1 + .../references/rtpinfo/CooldownHandler.java | 13 ++- 5 files changed, 37 insertions(+), 165 deletions(-) delete mode 100644 src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldownsGlobal.java diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldownsGlobal.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldownsGlobal.java deleted file mode 100644 index 31d2e4a..0000000 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabaseCooldownsGlobal.java +++ /dev/null @@ -1,107 +0,0 @@ -package me.SuperRonanCraft.BetterRTP.references.database; - -import me.SuperRonanCraft.BetterRTP.BetterRTP; -import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData; -import org.bukkit.Bukkit; -import org.bukkit.World; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.*; -import java.util.logging.Level; - -public class DatabaseCooldownsGlobal extends SQLite { - - public DatabaseCooldownsGlobal() { - super(DATABASE_TYPE.COOLDOWN_GLOBAL); - } - - @Override - public List getTables() { - return Collections.singletonList("BetterRTP_Cooldown"); - } - - public enum COLUMNS { - UUID("uuid", "varchar(32) PRIMARY KEY"), - //COOLDOWN DATA - COOLDOWN_DATE("date", "long"), - //USES("uses", "integer"), - ; - - public final String name; - public final String type; - - COLUMNS(String name, String type) { - this.name = name; - this.type = type; - } - } - - public boolean removePlayer(UUID uuid) { - String sql = "DELETE FROM " + tables.get(0) + " WHERE " - + COLUMNS.UUID.name + " = ?"; - List params = new ArrayList() {{ - add(uuid.toString()); - }}; - return sqlUpdate(sql, params); - } - - public CooldownData getCooldown(UUID uuid) { - Connection conn = null; - PreparedStatement ps = null; - ResultSet rs = null; - try { - conn = getSQLConnection(); - ps = conn.prepareStatement("SELECT * FROM " + tables.get(0) + " WHERE " + COLUMNS.UUID.name + " = ?"); - ps.setString(1, uuid.toString()); - - rs = ps.executeQuery(); - if (rs.next()) { - Long time = rs.getLong(COLUMNS.COOLDOWN_DATE.name); - //int uses = rs.getInt(COLUMNS.USES.name); - return new CooldownData(uuid, time, null); - } - } catch (SQLException ex) { - BetterRTP.getInstance().getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex); - } finally { - close(ps, rs, conn); - } - return null; - } - - //Set a player Cooldown - public void setCooldown(CooldownData data) { - String pre = "INSERT OR REPLACE INTO "; - String sql = pre + tables.get(0) + " (" - + COLUMNS.UUID.name + ", " - + COLUMNS.COOLDOWN_DATE.name + " " - //+ COLUMNS.USES.name + " " - + ") VALUES(?, ?)"; - List params = new ArrayList() {{ - add(data.getUuid().toString()); - add(data.getTime()); - //add(data.getUses()); - }}; - sqlUpdate(sql, params); - } - - //Update multiple players cooldowns - public void setCooldown(List cooldownData) { - String pre = "INSERT OR REPLACE INTO "; - String sql = pre + tables.get(0) + " (" - + COLUMNS.UUID.name + ", " - + COLUMNS.COOLDOWN_DATE.name + " " - //+ COLUMNS.USES.name + " " - + ") VALUES(?, ?)"; - for (CooldownData data : cooldownData) { - List param = new ArrayList() {{ - add(data.getUuid().toString()); - add(data.getTime()); - //add(data.getUses()); - }}; - sqlUpdate(sql, param); - } - } -} \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabasePlayers.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabasePlayers.java index 1b486fb..6fdedf1 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabasePlayers.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/DatabasePlayers.java @@ -2,8 +2,6 @@ package me.SuperRonanCraft.BetterRTP.references.database; import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; -import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData; -import org.bukkit.Bukkit; import org.bukkit.World; import java.sql.Connection; @@ -32,6 +30,7 @@ public class DatabasePlayers extends SQLite { UUID("uuid", "varchar(32) PRIMARY KEY"), //COOLDOWN DATA COUNT("count", "long"), + LAST_COOLDOWN_DATE("last_rtp_date", "long"), //USES("uses", "integer"), ; @@ -44,69 +43,44 @@ public class DatabasePlayers extends SQLite { } } - public boolean removePlayer(UUID uuid, World world) { - String sql = "DELETE FROM " + world.getName() + " WHERE " - + COLUMNS.UUID.name + " = ?"; - List params = new ArrayList() {{ - add(uuid.toString()); - }}; - return sqlUpdate(sql, params); - } - - public int getCount(UUID uuid) { + public void setupData(PlayerData data) { Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { conn = getSQLConnection(); ps = conn.prepareStatement("SELECT * FROM " + tables.get(0) + " WHERE " + COLUMNS.UUID.name + " = ?"); - ps.setString(1, uuid.toString()); + ps.setString(1, data.player.getUniqueId().toString()); rs = ps.executeQuery(); if (rs.next()) { - long time = rs.getLong(COLUMNS.COUNT.name); - //int uses = rs.getInt(COLUMNS.USES.name); - return Math.toIntExact(time); + long count = rs.getLong(COLUMNS.COUNT.name); + long time = rs.getLong(COLUMNS.LAST_COOLDOWN_DATE.name); + data.setRtpCount(Math.toIntExact(count)); + data.setGlobalCooldown(time); } } catch (SQLException ex) { BetterRTP.getInstance().getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex); } finally { close(ps, rs, conn); } - return 0; } //Set a player Cooldown - public void setCount(PlayerData data) { + public void setData(PlayerData data) { String pre = "INSERT OR REPLACE INTO "; String sql = pre + tables.get(0) + " (" + COLUMNS.UUID.name + ", " - + COLUMNS.COUNT.name + " " + + COLUMNS.COUNT.name + ", " + + COLUMNS.LAST_COOLDOWN_DATE.name + " " //+ COLUMNS.USES.name + " " - + ") VALUES(?, ?)"; + + ") VALUES(?, ?, ?)"; List params = new ArrayList() {{ add(data.player.getUniqueId().toString()); add(data.getRtpCount()); + add(data.getGlobalCooldown()); //add(data.getUses()); }}; sqlUpdate(sql, params); } - - //Update multiple players cooldowns - /*public void setCooldown(List cooldownData) { - String pre = "INSERT OR REPLACE INTO "; - String sql = pre + table + " (" - + COLUMNS.UUID.name + ", " - + COLUMNS.COOLDOWN_DATE.name + ", " - + COLUMNS.USES.name + " " - + ") VALUES(?, ?, ?)"; - for (CooldownData data : cooldownData) { - List param = new ArrayList() {{ - add(data.getUuid().toString()); - add(data.getTime()); - add(data.getUses()); - }}; - sqlUpdate(sql, param); - } - }*/ } \ No newline at end of file diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/SQLite.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/SQLite.java index 6d83e20..75c7dea 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/SQLite.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/database/SQLite.java @@ -87,9 +87,9 @@ public abstract class SQLite { }*/ Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { Connection connection = getSQLConnection(); - for (String table : tables) { - try { - Statement s = connection.createStatement(); + try { + Statement s = connection.createStatement(); + for (String table : tables) { s.executeUpdate(getCreateTable(table)); //s.executeUpdate(createTable_bank); for (Enum c : getColumns(type)) { //Add missing columns dynamically @@ -102,22 +102,22 @@ public abstract class SQLite { //e.printStackTrace(); } } - s.close(); - } catch (SQLException e) { - e.printStackTrace(); - } finally { - if (connection != null) { - try { - connection.close(); - } catch (SQLException e) { - e.printStackTrace(); - } + BetterRTP.debug("Database " + type.name() + ":" + table + " configured and loaded!"); + } + s.close(); + } catch (SQLException e) { + e.printStackTrace(); + } finally { + if (connection != null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); } } } initialize(); loaded = true; - //BetterRTP.getInstance().debug("Database " + type.name() + ":" + table + " configured and loaded!"); }); } @@ -139,18 +139,21 @@ public abstract class SQLite { private Enum[] getColumns(DATABASE_TYPE type) { switch (type) { + case PLAYERS: return DatabasePlayers.COLUMNS.values(); default: return DatabaseCooldownsWorlds.COLUMNS.values(); } } private String getColumnName(DATABASE_TYPE type, Enum column) { switch (type) { + case PLAYERS: return ((DatabasePlayers.COLUMNS) column).name; default: return ((DatabaseCooldownsWorlds.COLUMNS) column).name; } } private String getColumnType(DATABASE_TYPE type, Enum column) { switch (type) { + case PLAYERS: return ((DatabasePlayers.COLUMNS) column).type; default: return ((DatabaseCooldownsWorlds.COLUMNS) column).type; } } diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/player/playerdata/PlayerData.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/player/playerdata/PlayerData.java index d64fb02..23f8f3b 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/player/playerdata/PlayerData.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/player/playerdata/PlayerData.java @@ -21,6 +21,7 @@ public class PlayerData { //@Getter @Setter CooldownData globalCooldown; @Getter @Setter boolean rtping; @Getter @Setter int rtpCount; + @Getter @Setter long globalCooldown; PlayerData(Player player) { this.player = player; diff --git a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java index defa1d6..6974fed 100644 --- a/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java +++ b/src/main/java/me/SuperRonanCraft/BetterRTP/references/rtpinfo/CooldownHandler.java @@ -1,11 +1,10 @@ package me.SuperRonanCraft.BetterRTP.references.rtpinfo; import lombok.Getter; +import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldownsWorlds; -import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldownsGlobal; import me.SuperRonanCraft.BetterRTP.references.database.DatabasePlayers; import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; -import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; import org.bukkit.Bukkit; @@ -16,13 +15,12 @@ import javax.annotation.Nullable; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.concurrent.atomic.AtomicBoolean; public class CooldownHandler { @Getter boolean enabled, loaded; private int - timer, //Cooldown timer + timer, //Global Cooldown timer lockedAfter; //Rtp's before being locked private final List downloading = new ArrayList<>(); private final DatabaseCooldownsWorlds cooldowns = new DatabaseCooldownsWorlds(); @@ -65,6 +63,7 @@ public class CooldownHandler { //Load any online players cooldowns (mostly after a reload) for (Player p : Bukkit.getOnlinePlayers()) loadPlayer(p); + loaded = true; }, 10L); } @@ -133,7 +132,7 @@ public class CooldownHandler { } else { getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld()); } - players.setCount(getData(player)); + players.setData(getData(player)); }); } @@ -142,10 +141,12 @@ public class CooldownHandler { downloading.add(player); for (World world : Bukkit.getWorlds()) { PlayerData playerData = getData(player); + //Cooldowns CooldownData cooldown = getDatabaseWorlds().getCooldown(player.getUniqueId(), world); if (cooldown != null) playerData.getCooldowns().put(world, cooldown); - playerData.setRtpCount(players.getCount(player.getUniqueId())); + //Player Data + players.setupData(playerData); } downloading.remove(player); }