mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-17 17:15:47 +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.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);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user