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.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<Object> params = new ArrayList<Object>() {{
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<Object> params = new ArrayList<Object>() {{
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> 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(), () -> {
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;
}
}

View File

@ -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;

View File

@ -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<Player> 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);
}