clear session data on player leave

This commit is contained in:
rockyhawk64 2025-10-06 11:49:49 +11:00
parent 451867be70
commit 1001d8b6b8
4 changed files with 42 additions and 7 deletions

View File

@ -5,6 +5,7 @@ import me.rockyhawk.commandpanels.formatter.Placeholders;
import me.rockyhawk.commandpanels.formatter.language.TextFormatter;
import me.rockyhawk.commandpanels.formatter.data.DataLoader;
import me.rockyhawk.commandpanels.interaction.openpanel.PanelOpenCommand;
import me.rockyhawk.commandpanels.session.SessionDataUtils;
import me.rockyhawk.commandpanels.session.inventory.generator.GenerateManager;
import me.rockyhawk.commandpanels.session.inventory.listeners.ClickEvents;
import me.rockyhawk.commandpanels.session.inventory.listeners.InventoryEvents;
@ -38,6 +39,7 @@ public class Context {
Bukkit.getServer().getPluginManager().registerEvents(new InventoryEvents(this), plugin);
Bukkit.getServer().getPluginManager().registerEvents(panelCommand, plugin);
Bukkit.getServer().getPluginManager().registerEvents(new ClickEvents(this), plugin);
Bukkit.getServer().getPluginManager().registerEvents(new SessionDataUtils(this), plugin);
Bukkit.getServer().getPluginManager().registerEvents(generator, plugin);
// Register proxy channels

View File

@ -39,9 +39,7 @@ public class CommandRunner {
}
public void runCommands(Panel panel, Player player, List<String> commands) {
// Keep command execution thread safe
Bukkit.getGlobalRegionScheduler().run(ctx.plugin, task ->
runCommands(panel, player, commands, 0));
runCommands(panel, player, commands, 0);
}
private void runCommands(Panel panel, Player player, List<String> commands, int index) {

View File

@ -0,0 +1,33 @@
package me.rockyhawk.commandpanels.session;
import me.rockyhawk.commandpanels.Context;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
public class SessionDataUtils implements Listener {
private final Context ctx;
public SessionDataUtils(Context ctx) {
this.ctx = ctx;
}
@EventHandler
public void onJoinEvent(PlayerJoinEvent e) {
removeSessionData(e.getPlayer());
}
@EventHandler
public void onQuitEvent(PlayerQuitEvent e) {
removeSessionData(e.getPlayer());
}
private void removeSessionData(Player p){
p.getPersistentDataContainer().getKeys().stream()
.filter(key -> key.getNamespace().equalsIgnoreCase("commandpanels"))
.forEach(key -> p.getPersistentDataContainer().remove(key));
}
}

View File

@ -75,15 +75,17 @@ public class InventoryPanel extends Panel implements InventoryHolder {
// Run panel commands
CommandRunner runner = new CommandRunner(ctx);
runner.runCommands(this, player, this.getCommands());
// Start a panel updater
InventoryPanelUpdater updater = new InventoryPanelUpdater();
updater.start(ctx, player, this);
}
// Build and open the panel
PanelBuilder builder = new InventoryPanelBuilder(ctx, player);
builder.open(this);
if(isNewPanelSession) {
// Start a panel updater
InventoryPanelUpdater updater = new InventoryPanelUpdater();
updater.start(ctx, player, this);
}
}
// Do not open the same panel again if its already open