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.language.TextFormatter;
|
||||||
import me.rockyhawk.commandpanels.formatter.data.DataLoader;
|
import me.rockyhawk.commandpanels.formatter.data.DataLoader;
|
||||||
import me.rockyhawk.commandpanels.interaction.openpanel.PanelOpenCommand;
|
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.generator.GenerateManager;
|
||||||
import me.rockyhawk.commandpanels.session.inventory.listeners.ClickEvents;
|
import me.rockyhawk.commandpanels.session.inventory.listeners.ClickEvents;
|
||||||
import me.rockyhawk.commandpanels.session.inventory.listeners.InventoryEvents;
|
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(new InventoryEvents(this), plugin);
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(panelCommand, plugin);
|
Bukkit.getServer().getPluginManager().registerEvents(panelCommand, plugin);
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(new ClickEvents(this), plugin);
|
Bukkit.getServer().getPluginManager().registerEvents(new ClickEvents(this), plugin);
|
||||||
|
Bukkit.getServer().getPluginManager().registerEvents(new SessionDataUtils(this), plugin);
|
||||||
Bukkit.getServer().getPluginManager().registerEvents(generator, plugin);
|
Bukkit.getServer().getPluginManager().registerEvents(generator, plugin);
|
||||||
|
|
||||||
// Register proxy channels
|
// Register proxy channels
|
||||||
|
|||||||
@ -39,9 +39,7 @@ public class CommandRunner {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void runCommands(Panel panel, Player player, List<String> commands) {
|
public void runCommands(Panel panel, Player player, List<String> commands) {
|
||||||
// Keep command execution thread safe
|
runCommands(panel, player, commands, 0);
|
||||||
Bukkit.getGlobalRegionScheduler().run(ctx.plugin, task ->
|
|
||||||
runCommands(panel, player, commands, 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runCommands(Panel panel, Player player, List<String> commands, int index) {
|
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
|
// Run panel commands
|
||||||
CommandRunner runner = new CommandRunner(ctx);
|
CommandRunner runner = new CommandRunner(ctx);
|
||||||
runner.runCommands(this, player, this.getCommands());
|
runner.runCommands(this, player, this.getCommands());
|
||||||
|
|
||||||
// Start a panel updater
|
|
||||||
InventoryPanelUpdater updater = new InventoryPanelUpdater();
|
|
||||||
updater.start(ctx, player, this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build and open the panel
|
// Build and open the panel
|
||||||
PanelBuilder builder = new InventoryPanelBuilder(ctx, player);
|
PanelBuilder builder = new InventoryPanelBuilder(ctx, player);
|
||||||
builder.open(this);
|
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
|
// Do not open the same panel again if its already open
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user