mirror of
https://github.com/RonanPlugins/BetterRTP.git
synced 2025-08-17 17:15:47 +00:00
Database Handler + Queue System blueprint
This commit is contained in:
parent
d8129df29b
commit
3fe5c25e7b
@ -3,8 +3,10 @@ package me.SuperRonanCraft.BetterRTP;
|
||||
import lombok.Getter;
|
||||
import me.SuperRonanCraft.BetterRTP.player.PlayerInfo;
|
||||
import me.SuperRonanCraft.BetterRTP.player.commands.Commands;
|
||||
import me.SuperRonanCraft.BetterRTP.player.events.Listener;
|
||||
import me.SuperRonanCraft.BetterRTP.player.events.EventListener;
|
||||
import me.SuperRonanCraft.BetterRTP.player.rtp.RTP;
|
||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
|
||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.QueueHandler;
|
||||
import me.SuperRonanCraft.BetterRTP.references.Permissions;
|
||||
import me.SuperRonanCraft.BetterRTP.references.web.Updater;
|
||||
import me.SuperRonanCraft.BetterRTP.references.depends.DepEconomy;
|
||||
@ -27,7 +29,7 @@ public class BetterRTP extends JavaPlugin {
|
||||
private final DepEconomy eco = new DepEconomy();
|
||||
private final Commands cmd = new Commands(this);
|
||||
private final RTP rtp = new RTP();
|
||||
private final Listener listener = new Listener();
|
||||
private final EventListener listener = new EventListener();
|
||||
private static BetterRTP instance;
|
||||
private final Files files = new Files();
|
||||
private final RTPInventories invs = new RTPInventories();
|
||||
@ -35,6 +37,8 @@ public class BetterRTP extends JavaPlugin {
|
||||
@Getter private final PlayerDataManager playerDataManager = new PlayerDataManager();
|
||||
private final Settings settings = new Settings();
|
||||
@Getter private final CooldownHandler cooldowns = new CooldownHandler();
|
||||
private final QueueHandler queue = new QueueHandler();
|
||||
@Getter private final DatabaseHandler databaseHandler = new DatabaseHandler();
|
||||
|
||||
public void onEnable() {
|
||||
instance = this;
|
||||
@ -42,6 +46,7 @@ public class BetterRTP extends JavaPlugin {
|
||||
new Metrics(this);
|
||||
loadAll();
|
||||
listener.registerEvents(this);
|
||||
queue.registerEvents(this);
|
||||
}
|
||||
|
||||
public void onDisable() {
|
||||
@ -113,6 +118,7 @@ public class BetterRTP extends JavaPlugin {
|
||||
//(Re)Load all plugin systems/files/cache
|
||||
private void loadAll() {
|
||||
playerDataManager.clear();
|
||||
databaseHandler.load();
|
||||
files.loadAll();
|
||||
settings.load();
|
||||
invs.load();
|
||||
|
@ -2,6 +2,7 @@ package me.SuperRonanCraft.BetterRTP.player.events;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.block.SignChangeEvent;
|
||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||
import org.bukkit.event.player.PlayerInteractEvent;
|
||||
@ -10,7 +11,7 @@ import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
public class Listener implements org.bukkit.event.Listener {
|
||||
public class EventListener implements Listener {
|
||||
private final Join join = new Join();
|
||||
private final Leave leave = new Leave();
|
||||
private final Interact interact = new Interact();
|
@ -1,31 +0,0 @@
|
||||
package me.SuperRonanCraft.BetterRTP.player.rtp.queue;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
|
||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class RTPQueue implements Listener { //Randomly queues up some randomly safe locations
|
||||
|
||||
HashMap<RTPWorld, List<Location>> queue = new HashMap<>();
|
||||
|
||||
public void load() {
|
||||
Bukkit.getPluginManager().registerEvents(this, BetterRTP.getInstance());
|
||||
//queue();
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onRtpFindLoc(RTP_FindLocationEvent e) {
|
||||
RTPWorld world = e.getWorld();
|
||||
}
|
||||
|
||||
private void queue(RTPWorld world) {
|
||||
|
||||
}
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package me.SuperRonanCraft.BetterRTP.references.database;
|
||||
|
||||
import lombok.Getter;
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import org.bukkit.Bukkit;
|
||||
|
||||
public class DatabaseHandler {
|
||||
|
||||
@Getter private final DatabasePlayers databasePlayers = new DatabasePlayers();
|
||||
@Getter private final DatabaseCooldownsWorlds databaseCooldownsWorlds = new DatabaseCooldownsWorlds();
|
||||
@Getter private final DatabaseQueue databaseQueue = new DatabaseQueue();
|
||||
|
||||
public void load() {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
|
||||
databasePlayers.load();
|
||||
databaseCooldownsWorlds.load();
|
||||
databaseQueue.load();
|
||||
});
|
||||
}
|
||||
|
||||
public static DatabasePlayers getPlayers() {
|
||||
return BetterRTP.getInstance().getDatabaseHandler().getDatabasePlayers();
|
||||
}
|
||||
|
||||
public static DatabaseCooldownsWorlds getWorldCooldowns() {
|
||||
return BetterRTP.getInstance().getDatabaseHandler().getDatabaseCooldownsWorlds();
|
||||
}
|
||||
|
||||
public static DatabaseQueue getQueue() {
|
||||
return BetterRTP.getInstance().getDatabaseHandler().getDatabaseQueue();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
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.QueueData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class DatabaseQueue extends SQLite {
|
||||
|
||||
public DatabaseQueue() {
|
||||
super(DATABASE_TYPE.PLAYERS);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTables() {
|
||||
List<String> list = new ArrayList<>();
|
||||
list.add("Queue");
|
||||
return list;
|
||||
}
|
||||
|
||||
public enum COLUMNS {
|
||||
ID("id", "long PRIMARY KEY AUTOINCREMENT"),
|
||||
//COOLDOWN DATA
|
||||
X("x", "long"),
|
||||
Y("y", "long"),
|
||||
Z("z", "long"),
|
||||
WORLD("world", "varchar(32)"),
|
||||
GENERATED("generated", "long"),
|
||||
//USES("uses", "integer"),
|
||||
;
|
||||
|
||||
public final String name;
|
||||
public final String type;
|
||||
|
||||
COLUMNS(String name, String type) {
|
||||
this.name = name;
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
|
||||
public List<QueueData> getQueues() {
|
||||
Connection conn = null;
|
||||
PreparedStatement ps = null;
|
||||
ResultSet rs = null;
|
||||
List<QueueData> queueDataList = new ArrayList<>();
|
||||
try {
|
||||
conn = getSQLConnection();
|
||||
ps = conn.prepareStatement("SELECT * FROM " + tables.get(0));
|
||||
|
||||
rs = ps.executeQuery();
|
||||
while (rs.next()) {
|
||||
long x = rs.getLong(COLUMNS.X.name);
|
||||
long y = rs.getLong(COLUMNS.Y.name);
|
||||
long z = rs.getLong(COLUMNS.Z.name);
|
||||
String worldName = rs.getString(COLUMNS.WORLD.name);
|
||||
long generated = rs.getLong(COLUMNS.GENERATED.name);
|
||||
World world = Bukkit.getWorld(worldName);
|
||||
if (world != null) {
|
||||
QueueData data = new QueueData(new Location(world, x, y, z), generated);
|
||||
queueDataList.add(data);
|
||||
}
|
||||
}
|
||||
} catch (SQLException ex) {
|
||||
BetterRTP.getInstance().getLogger().log(Level.SEVERE, Errors.sqlConnectionExecute(), ex);
|
||||
} finally {
|
||||
close(ps, rs, conn);
|
||||
}
|
||||
return queueDataList;
|
||||
}
|
||||
|
||||
//Set a queue to save
|
||||
public void addQueue(QueueData data) {
|
||||
String pre = "INSERT INTO ";
|
||||
String sql = pre + tables.get(0) + " ("
|
||||
+ COLUMNS.X.name + ", "
|
||||
+ COLUMNS.Y.name + ", "
|
||||
+ COLUMNS.Z.name + ", "
|
||||
+ COLUMNS.WORLD.name + ", "
|
||||
+ COLUMNS.GENERATED.name + " "
|
||||
//+ COLUMNS.USES.name + " "
|
||||
+ ") VALUES(?, ?, ?, ?, ?)";
|
||||
List<Object> params = new ArrayList<Object>() {{
|
||||
add(data.getLocation().getX());
|
||||
add(data.getLocation().getY());
|
||||
add(data.getLocation().getZ());
|
||||
add(data.getLocation().getWorld().getName());
|
||||
add(data.getGenerated());
|
||||
//add(data.getUses());
|
||||
}};
|
||||
sqlUpdate(sql, params);
|
||||
}
|
||||
}
|
@ -4,7 +4,7 @@ import lombok.Getter;
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTP.references.PermissionNode;
|
||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseCooldownsWorlds;
|
||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabasePlayers;
|
||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
|
||||
import me.SuperRonanCraft.BetterRTP.references.file.FileBasics;
|
||||
import me.SuperRonanCraft.BetterRTP.references.player.HelperPlayer;
|
||||
import me.SuperRonanCraft.BetterRTP.references.player.playerdata.PlayerData;
|
||||
@ -25,8 +25,6 @@ public class CooldownHandler {
|
||||
@Getter private int cooldownTime; //Global Cooldown timer
|
||||
private int lockedAfter; //Rtp's before being locked
|
||||
private final List<Player> downloading = new ArrayList<>();
|
||||
private final DatabaseCooldownsWorlds cooldowns = new DatabaseCooldownsWorlds();
|
||||
private final DatabasePlayers players = new DatabasePlayers();
|
||||
//private final DatabaseCooldownsGlobal globalCooldown = new DatabaseCooldownsGlobal();
|
||||
|
||||
public void load() {
|
||||
@ -40,22 +38,17 @@ public class CooldownHandler {
|
||||
lockedAfter = config.getInt("Settings.Cooldown.LockAfter");
|
||||
cooldownByWorld = config.getBoolean("Settings.Cooldown.PerWorld");
|
||||
}
|
||||
Bukkit.getScheduler().runTaskAsynchronously(BetterRTP.getInstance(), () -> {
|
||||
//globalCooldown.load();
|
||||
players.load();
|
||||
cooldowns.load();
|
||||
checkLater();
|
||||
});
|
||||
queueDownload();
|
||||
}
|
||||
|
||||
private void checkLater() {
|
||||
private void queueDownload() {
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> {
|
||||
if (cooldownByWorld && !cooldowns.isLoaded()) {
|
||||
checkLater();
|
||||
if (cooldownByWorld && !DatabaseHandler.getWorldCooldowns().isLoaded()) {
|
||||
queueDownload();
|
||||
return;
|
||||
}
|
||||
if (!players.isLoaded()) {
|
||||
checkLater();
|
||||
if (!DatabaseHandler.getPlayers().isLoaded()) {
|
||||
queueDownload();
|
||||
return;
|
||||
}
|
||||
//OldCooldownConverter.loadOldCooldowns();
|
||||
@ -141,7 +134,7 @@ public class CooldownHandler {
|
||||
else
|
||||
getDatabaseWorlds().removePlayer(data.getUuid(), data.getWorld());
|
||||
}
|
||||
players.setData(getData(player));
|
||||
DatabaseHandler.getPlayers().setData(getData(player));
|
||||
});
|
||||
}
|
||||
|
||||
@ -157,7 +150,7 @@ public class CooldownHandler {
|
||||
playerData.getCooldowns().put(world, cooldown);
|
||||
}
|
||||
//Player Data
|
||||
players.setupData(playerData);
|
||||
DatabaseHandler.getPlayers().setupData(playerData);
|
||||
downloading.remove(player);
|
||||
}
|
||||
|
||||
@ -168,7 +161,7 @@ public class CooldownHandler {
|
||||
@Nullable
|
||||
private DatabaseCooldownsWorlds getDatabaseWorlds() {
|
||||
if (cooldownByWorld)
|
||||
return cooldowns;
|
||||
return DatabaseHandler.getWorldCooldowns();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,16 @@
|
||||
package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
|
||||
|
||||
import lombok.Getter;
|
||||
import org.bukkit.Location;
|
||||
|
||||
public class QueueData {
|
||||
|
||||
@Getter Location location;
|
||||
@Getter long generated;
|
||||
|
||||
public QueueData(Location location, long generated) {
|
||||
this.location = location;
|
||||
this.generated = generated;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,64 @@
|
||||
package me.SuperRonanCraft.BetterRTP.references.rtpinfo;
|
||||
|
||||
import me.SuperRonanCraft.BetterRTP.BetterRTP;
|
||||
import me.SuperRonanCraft.BetterRTP.references.customEvents.RTP_FindLocationEvent;
|
||||
import me.SuperRonanCraft.BetterRTP.references.database.DatabaseHandler;
|
||||
import me.SuperRonanCraft.BetterRTP.references.rtpinfo.worlds.RTPWorld;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class QueueHandler implements Listener { //Randomly queues up some randomly safe locations
|
||||
|
||||
boolean loaded = false;
|
||||
List<QueueData> queueList = new ArrayList<>();
|
||||
private final int queueSize = 32;
|
||||
|
||||
public void registerEvents(BetterRTP pl) {
|
||||
PluginManager pm = pl.getServer().getPluginManager();
|
||||
pm.registerEvents(this, pl);
|
||||
}
|
||||
|
||||
public void load() {
|
||||
loaded = false;
|
||||
queueDownload();
|
||||
}
|
||||
|
||||
private void queueDownload() {
|
||||
//LOAD FROM DATABASE
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(BetterRTP.getInstance(), () -> {
|
||||
|
||||
if (!DatabaseHandler.getQueue().isLoaded()) {
|
||||
queueDownload();
|
||||
return;
|
||||
}
|
||||
//Download all queue cached from last session
|
||||
queueList = DatabaseHandler.getQueue().getQueues();
|
||||
loaded = true;
|
||||
}, 10L);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onRtpFindLoc(RTP_FindLocationEvent e) {
|
||||
//RTPWorld world = e.getWorld();
|
||||
Location location = e.getLocation();
|
||||
List<QueueData> deleteList = new ArrayList<>();
|
||||
for (QueueData data : queueList) {
|
||||
Location dataLoc = data.getLocation();
|
||||
if (location.getBlockX() == dataLoc.getBlockX()
|
||||
&& location.getBlockY() == dataLoc.getBlockY()
|
||||
&& location.getBlockZ() == dataLoc.getBlockZ()
|
||||
&& location.getWorld().getName().equals(dataLoc.getWorld().getName())) {
|
||||
deleteList.add(data);
|
||||
}
|
||||
}
|
||||
deleteList.forEach(queueData -> queueList.remove(queueData));
|
||||
}
|
||||
}
|
||||
|
@ -8,17 +8,19 @@ permissions:
|
||||
betterrtp.player: true
|
||||
betterrtp.reload: true
|
||||
betterrtp.updater: true
|
||||
betterrtp.group.*: true
|
||||
betterrtp.world:
|
||||
description: RTP into other worlds
|
||||
description: Ability to use the world command
|
||||
betterrtp.world.*:
|
||||
description: RTP in all enabled worlds
|
||||
betterrtp.world.<world>:
|
||||
description: RTP in <world>
|
||||
description: RTP in world named world
|
||||
betterrtp.bypass.*:
|
||||
children:
|
||||
betterrtp.bypass.cooldown: true
|
||||
betterrtp.bypass.delay: true
|
||||
betterrtp.bypass.economy: true
|
||||
children:
|
||||
betterrtp.bypass.cooldown: true
|
||||
betterrtp.bypass.delay: true
|
||||
betterrtp.bypass.economy: true
|
||||
betterrtp.bypass.hunger: true
|
||||
betterrtp.use:
|
||||
description: Use RTP command
|
||||
default: true
|
||||
@ -41,6 +43,8 @@ permissions:
|
||||
description: Bypass delays
|
||||
betterrtp.bypass.economy:
|
||||
description: Bypass economy
|
||||
betterrtp.bypass.hunger:
|
||||
description: Bypass hunger
|
||||
#Reload
|
||||
betterrtp.reload:
|
||||
description: Reload the config
|
||||
@ -51,3 +55,7 @@ permissions:
|
||||
betterrtp.test:
|
||||
description: While debugger enabled, be able to test particles, potion effects and sounds
|
||||
default: op
|
||||
#Permission Groups
|
||||
betterrtp.group.*:
|
||||
description: Allow access to all permission groups
|
||||
default: op
|
Loading…
x
Reference in New Issue
Block a user