cooldowns database bug fix

This commit is contained in:
SuperRonanCraft 2022-04-05 22:05:49 -04:00
parent ed4b0ea492
commit 852d25a619
5 changed files with 37 additions and 165 deletions

View File

@ -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<String> 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<Object> params = new ArrayList<Object>() {{
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<Object> params = new ArrayList<Object>() {{
add(data.getUuid().toString());
add(data.getTime());
//add(data.getUses());
}};
sqlUpdate(sql, params);
}
//Update multiple players cooldowns
public void setCooldown(List<CooldownData> 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<Object> param = new ArrayList<Object>() {{
add(data.getUuid().toString());
add(data.getTime());
//add(data.getUses());
}};
sqlUpdate(sql, param);
}
}
}

View File

@ -2,8 +2,6 @@ package me.SuperRonanCraft.BetterRTP.references.database;
import me.SuperRonanCraft.BetterRTP.BetterRTP; import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.CooldownData;
import org.bukkit.Bukkit;
import org.bukkit.World; import org.bukkit.World;
import java.sql.Connection; import java.sql.Connection;
@ -32,6 +30,7 @@ public class DatabasePlayers extends SQLite {
UUID("uuid", "varchar(32) PRIMARY KEY"), UUID("uuid", "varchar(32) PRIMARY KEY"),
//COOLDOWN DATA //COOLDOWN DATA
COUNT("count", "long"), COUNT("count", "long"),
LAST_COOLDOWN_DATE("last_rtp_date", "long"),
//USES("uses", "integer"), //USES("uses", "integer"),
; ;
@ -44,69 +43,44 @@ public class DatabasePlayers extends SQLite {
} }
} }
public boolean removePlayer(UUID uuid, World world) { public void setupData(PlayerData data) {
String sql = "DELETE FROM " + world.getName() + " WHERE "
+ COLUMNS.UUID.name + " = ?";
List<Object> params = new ArrayList<Object>() {{
add(uuid.toString());
}};
return sqlUpdate(sql, params);
}
public int getCount(UUID uuid) {
Connection conn = null; Connection conn = null;
PreparedStatement ps = null; PreparedStatement ps = null;
ResultSet rs = null; ResultSet rs = null;
try { try {
conn = getSQLConnection(); conn = getSQLConnection();
ps = conn.prepareStatement("SELECT * FROM " + tables.get(0) + " WHERE " + COLUMNS.UUID.name + " = ?"); 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(); rs = ps.executeQuery();
if (rs.next()) { if (rs.next()) {
long time = rs.getLong(COLUMNS.COUNT.name); long count = rs.getLong(COLUMNS.COUNT.name);
//int uses = rs.getInt(COLUMNS.USES.name); long time = rs.getLong(COLUMNS.LAST_COOLDOWN_DATE.name);
return Math.toIntExact(time); data.setRtpCount(Math.toIntExact(count));
data.setGlobalCooldown(time);
} }
} catch (SQLException ex) { } catch (SQLException ex) {
BetterRTP.getInstance().getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex); BetterRTP.getInstance().getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
} finally { } finally {
close(ps, rs, conn); close(ps, rs, conn);
} }
return 0;
} }
//Set a player Cooldown //Set a player Cooldown
public void setCount(PlayerData data) { public void setData(PlayerData data) {
String pre = "INSERT OR REPLACE INTO "; String pre = "INSERT OR REPLACE INTO ";
String sql = pre + tables.get(0) + " (" String sql = pre + tables.get(0) + " ("
+ COLUMNS.UUID.name + ", " + COLUMNS.UUID.name + ", "
+ COLUMNS.COUNT.name + " " + COLUMNS.COUNT.name + ", "
+ COLUMNS.LAST_COOLDOWN_DATE.name + " "
//+ COLUMNS.USES.name + " " //+ COLUMNS.USES.name + " "
+ ") VALUES(?, ?)"; + ") VALUES(?, ?, ?)";
List<Object> params = new ArrayList<Object>() {{ List<Object> params = new ArrayList<Object>() {{
add(data.player.getUniqueId().toString()); add(data.player.getUniqueId().toString());
add(data.getRtpCount()); add(data.getRtpCount());
add(data.getGlobalCooldown());
//add(data.getUses()); //add(data.getUses());
}}; }};
sqlUpdate(sql, params); sqlUpdate(sql, params);
} }
//Update multiple players cooldowns
/*public void setCooldown(List<CooldownData> 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<Object> param = new ArrayList<Object>() {{
add(data.getUuid().toString());
add(data.getTime());
add(data.getUses());
}};
sqlUpdate(sql, param);
}
}*/
} }

View File

@ -87,9 +87,9 @@ public abstract class SQLite {
}*/ }*/
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> { Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
Connection connection = getSQLConnection(); Connection connection = getSQLConnection();
for (String table : tables) { try {
try { Statement s = connection.createStatement();
Statement s = connection.createStatement(); for (String table : tables) {
s.executeUpdate(getCreateTable(table)); s.executeUpdate(getCreateTable(table));
//s.executeUpdate(createTable_bank); //s.executeUpdate(createTable_bank);
for (Enum<?> c : getColumns(type)) { //Add missing columns dynamically for (Enum<?> c : getColumns(type)) { //Add missing columns dynamically
@ -102,22 +102,22 @@ public abstract class SQLite {
//e.printStackTrace(); //e.printStackTrace();
} }
} }
s.close(); BetterRTP.debug("Database " + type.name() + ":" + table + " configured and loaded!");
} catch (SQLException e) { }
e.printStackTrace(); s.close();
} finally { } catch (SQLException e) {
if (connection != null) { e.printStackTrace();
try { } finally {
connection.close(); if (connection != null) {
} catch (SQLException e) { try {
e.printStackTrace(); connection.close();
} } catch (SQLException e) {
e.printStackTrace();
} }
} }
} }
initialize(); initialize();
loaded = true; 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) { private Enum<?>[] getColumns(DATABASE_TYPE type) {
switch (type) { switch (type) {
case PLAYERS: return DatabasePlayers.COLUMNS.values();
default: return DatabaseCooldownsWorlds.COLUMNS.values(); default: return DatabaseCooldownsWorlds.COLUMNS.values();
} }
} }
private String getColumnName(DATABASE_TYPE type, Enum<?> column) { private String getColumnName(DATABASE_TYPE type, Enum<?> column) {
switch (type) { switch (type) {
case PLAYERS: return ((DatabasePlayers.COLUMNS) column).name;
default: return ((DatabaseCooldownsWorlds.COLUMNS) column).name; default: return ((DatabaseCooldownsWorlds.COLUMNS) column).name;
} }
} }
private String getColumnType(DATABASE_TYPE type, Enum<?> column) { private String getColumnType(DATABASE_TYPE type, Enum<?> column) {
switch (type) { switch (type) {
case PLAYERS: return ((DatabasePlayers.COLUMNS) column).type;
default: return ((DatabaseCooldownsWorlds.COLUMNS) column).type; default: return ((DatabaseCooldownsWorlds.COLUMNS) column).type;
} }
} }

View File

@ -21,6 +21,7 @@ public class PlayerData {
//@Getter @Setter CooldownData globalCooldown; //@Getter @Setter CooldownData globalCooldown;
@Getter @Setter boolean rtping; @Getter @Setter boolean rtping;
@Getter @Setter int rtpCount; @Getter @Setter int rtpCount;
@Getter @Setter long globalCooldown;
PlayerData(Player player) { PlayerData(Player player) {
this.player = player; this.player = player;

View File

@ -1,11 +1,10 @@
package me.SuperRonanCraft.BetterRTP.references.rtpinfo; package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
import lombok.Getter; import lombok.Getter;
import me.SuperRonanCraft.BetterRTP.BetterRTP;
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldownsWorlds; 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.database.DatabasePlayers;
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics; 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.HelperPlayer;
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData; import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -16,13 +15,12 @@ import javax.annotation.Nullable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
public class CooldownHandler { public class CooldownHandler {
@Getter boolean enabled, loaded; @Getter boolean enabled, loaded;
private int private int
timer, //Cooldown timer timer, //Global Cooldown timer
lockedAfter; //Rtp's before being locked lockedAfter; //Rtp's before being locked
private final List<Player> downloading = new ArrayList<>(); private final List<Player> downloading = new ArrayList<>();
private final DatabaseCooldownsWorlds cooldowns = new DatabaseCooldownsWorlds(); private final DatabaseCooldownsWorlds cooldowns = new DatabaseCooldownsWorlds();
@ -65,6 +63,7 @@ public class CooldownHandler {
//Load any online players cooldowns (mostly after a reload) //Load any online players cooldowns (mostly after a reload)
for (Player p : Bukkit.getOnlinePlayers()) for (Player p : Bukkit.getOnlinePlayers())
loadPlayer(p); loadPlayer(p);
loaded = true;
}, 10L); }, 10L);
} }
@ -133,7 +132,7 @@ public class CooldownHandler {
} else { } else {
getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld()); getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld());
} }
players.setCount(getData(player)); players.setData(getData(player));
}); });
} }
@ -142,10 +141,12 @@ public class CooldownHandler {
downloading.add(player); downloading.add(player);
for (World world : Bukkit.getWorlds()) { for (World world : Bukkit.getWorlds()) {
PlayerData playerData = getData(player); PlayerData playerData = getData(player);
//Cooldowns
CooldownData cooldown = getDatabaseWorlds().getCooldown(player.getUniqueId(), world); CooldownData cooldown = getDatabaseWorlds().getCooldown(player.getUniqueId(), world);
if (cooldown != null) if (cooldown != null)
playerData.getCooldowns().put(world, cooldown); playerData.getCooldowns().put(world, cooldown);
playerData.setRtpCount(players.getCount(player.getUniqueId())); //Player Data
players.setupData(playerData);
} }
downloading.remove(player); downloading.remove(player);
} }