mirror of
https://github.com/rockyhawk64/CommandPanels.git
synced 2025-11-18 07:14:17 +01:00
clear session data on player leave
This commit is contained in:
parent
451867be70
commit
1001d8b6b8
@ -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
|
||||
|
||||
@ -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) {
|
||||
|
||||
33
src/me/rockyhawk/commandpanels/session/SessionDataUtils.java
Normal file
33
src/me/rockyhawk/commandpanels/session/SessionDataUtils.java
Normal 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));
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user