mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-18 01:25:45 +00:00
cooldowns database bug fix
This commit is contained in:
parent
ed4b0ea492
commit
852d25a619
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}*/
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user