mirror of
https://github.com/rockyhawk64/CommandPanels.git
synced 2025-11-18 07:14:17 +01:00
Using panel close for data @ SessionHandler.java 100
This commit is contained in:
parent
4367bd36ce
commit
eac421cc35
@ -16,9 +16,6 @@ config:
|
||||
disabled-world-message: true
|
||||
panel-snooper: false
|
||||
enable-import-command: false
|
||||
autosave:
|
||||
enabled: false
|
||||
interval: '30m' # Supports: s (seconds), m (minutes), h (hours), d (days)
|
||||
format:
|
||||
tag: '&6[&bCommandPanels&6]'
|
||||
perms: '&cNo permission.'
|
||||
|
||||
@ -48,11 +48,6 @@ public class CommandPanels extends JavaPlugin{
|
||||
}
|
||||
|
||||
try {
|
||||
//stop autosave system
|
||||
if (ctx.autoSave != null) {
|
||||
ctx.autoSave.stop();
|
||||
}
|
||||
|
||||
//close all the panels
|
||||
if (ctx.openPanels != null && ctx.openPanels.openPanels != null) {
|
||||
for(String name : ctx.openPanels.openPanels.keySet()){
|
||||
|
||||
@ -28,7 +28,6 @@ import me.rockyhawk.commandpanels.builder.floodgate.OpenFloodgateGUI;
|
||||
import me.rockyhawk.commandpanels.generate.GenerateCommand;
|
||||
import me.rockyhawk.commandpanels.generate.GenUtils;
|
||||
import me.rockyhawk.commandpanels.generate.GenTabComplete;
|
||||
import me.rockyhawk.commandpanels.manager.autosave.AutoSaveManager;
|
||||
import me.rockyhawk.commandpanels.manager.refresh.PanelRefresher;
|
||||
import me.rockyhawk.commandpanels.manager.PlayerJoinEvent;
|
||||
import me.rockyhawk.commandpanels.interaction.input.PlayerInputUtils;
|
||||
@ -96,7 +95,6 @@ public class Context {
|
||||
public ItemStackSerializer itemSerializer;
|
||||
public PlayerInputUtils inputUtils;
|
||||
public SchedulerAdapter scheduler;
|
||||
public AutoSaveManager autoSave;
|
||||
|
||||
public Context(CommandPanels pl) {
|
||||
plugin = pl;
|
||||
@ -152,9 +150,6 @@ public class Context {
|
||||
itemSerializer = new ItemStackSerializer(this);
|
||||
inputUtils = new PlayerInputUtils(this);
|
||||
|
||||
// Initialize autosave manager
|
||||
autoSave = new AutoSaveManager(this);
|
||||
|
||||
//setup class files
|
||||
setupEconomy();
|
||||
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, "BungeeCord");
|
||||
|
||||
@ -73,11 +73,6 @@ public class ConfigHandler {
|
||||
}
|
||||
}
|
||||
saveExamplePanels();
|
||||
|
||||
// Initialize autosave system after config is loaded
|
||||
if (ctx.autoSave != null) {
|
||||
ctx.autoSave.initialize();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveExamplePanels(){
|
||||
|
||||
@ -1,158 +0,0 @@
|
||||
package me.rockyhawk.commandpanels.manager.autosave;
|
||||
|
||||
import me.rockyhawk.commandpanels.Context;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class AutoSaveManager {
|
||||
private final Context ctx;
|
||||
private BukkitTask task = null;
|
||||
private boolean enabled = false;
|
||||
private long intervalTicks = 0;
|
||||
|
||||
public AutoSaveManager(Context ctx) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize the autosave system based on config settings
|
||||
*/
|
||||
public void initialize() {
|
||||
// Stop any existing task
|
||||
stop();
|
||||
|
||||
// Check if autosave is enabled
|
||||
enabled = ctx.configHandler.config.getBoolean("config.autosave.enabled", false);
|
||||
if (!enabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Parse the interval
|
||||
String intervalString = ctx.configHandler.config.getString("config.autosave.interval", "30m");
|
||||
intervalTicks = parseIntervalToTicks(intervalString);
|
||||
|
||||
if (intervalTicks <= 0) {
|
||||
Bukkit.getLogger().warning("[CommandPanels] Invalid autosave interval: " + intervalString + ". Autosave disabled.");
|
||||
enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
// Start the autosave task
|
||||
start();
|
||||
|
||||
Bukkit.getLogger().info("[CommandPanels] Autosave enabled with interval: " + intervalString + " (" + intervalTicks + " ticks)");
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the autosave task
|
||||
*/
|
||||
private void start() {
|
||||
if (!enabled || intervalTicks <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Use runTaskTimer for repeating tasks, then run the actual save asynchronously
|
||||
task = ctx.scheduler.runTaskTimer(() -> {
|
||||
// Run the actual save operation asynchronously to avoid blocking
|
||||
ctx.scheduler.runTaskAsynchronously(() -> {
|
||||
try {
|
||||
// Save data files (not inventory files as requested)
|
||||
if (ctx.panelData != null) {
|
||||
ctx.panelData.saveDataFile();
|
||||
Bukkit.getLogger().info("[CommandPanels] Autosave: Data file saved successfully");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Bukkit.getLogger().severe("[CommandPanels] Autosave failed: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
}, intervalTicks, intervalTicks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop the autosave task
|
||||
*/
|
||||
public void stop() {
|
||||
if (task != null) {
|
||||
task.cancel();
|
||||
task = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse interval string to ticks
|
||||
* Supports: s (seconds), m (minutes), h (hours), d (days)
|
||||
* Examples: "30s", "5m", "2h", "1d"
|
||||
*/
|
||||
private long parseIntervalToTicks(String interval) {
|
||||
if (interval == null || interval.trim().isEmpty()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Pattern to match number followed by time unit
|
||||
Pattern pattern = Pattern.compile("^(\\d+)([smhd])$", Pattern.CASE_INSENSITIVE);
|
||||
Matcher matcher = pattern.matcher(interval.trim().toLowerCase());
|
||||
|
||||
if (!matcher.matches()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
long amount = Long.parseLong(matcher.group(1));
|
||||
String unit = matcher.group(2);
|
||||
|
||||
long seconds;
|
||||
switch (unit) {
|
||||
case "s":
|
||||
seconds = amount;
|
||||
break;
|
||||
case "m":
|
||||
seconds = amount * 60;
|
||||
break;
|
||||
case "h":
|
||||
seconds = amount * 60 * 60;
|
||||
break;
|
||||
case "d":
|
||||
seconds = amount * 60 * 60 * 24;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Convert seconds to ticks (20 ticks = 1 second)
|
||||
return seconds * 20;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if autosave is currently enabled
|
||||
*/
|
||||
public boolean isEnabled() {
|
||||
return enabled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the current interval in ticks
|
||||
*/
|
||||
public long getIntervalTicks() {
|
||||
return intervalTicks;
|
||||
}
|
||||
|
||||
/**
|
||||
* Manually trigger a save (useful for commands or other triggers)
|
||||
*/
|
||||
public void forceSave() {
|
||||
ctx.scheduler.runTaskAsynchronously(() -> {
|
||||
try {
|
||||
if (ctx.panelData != null) {
|
||||
ctx.panelData.saveDataFile();
|
||||
Bukkit.getLogger().info("[CommandPanels] Manual save: Data file saved successfully");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
Bukkit.getLogger().severe("[CommandPanels] Manual save failed: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user