Merge branch 'rockyhawk64:main' into clean

This commit is contained in:
Halogly 2025-10-29 10:17:27 +08:00 committed by GitHub
commit de90b4f94f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 29 additions and 14 deletions

View File

@ -48,7 +48,7 @@ public class Context {
// Register proxy channels
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(plugin, "BungeeCord");
// Register PlaceholderAPI
// Register PlaceholderAPI (delayed by a tick by being in scheduler)
Bukkit.getGlobalRegionScheduler().run(plugin, task -> {
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
new Placeholders(this).register();

View File

@ -1,10 +1,12 @@
package me.rockyhawk.commandpanels.session.inventory.listeners;
import me.rockyhawk.commandpanels.Context;
import me.rockyhawk.commandpanels.formatter.Placeholders;
import me.rockyhawk.commandpanels.interaction.commands.CommandRunner;
import me.rockyhawk.commandpanels.interaction.commands.RequirementRunner;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.inventory.InventoryPanel;
import org.bukkit.Bukkit;
import org.bukkit.NamespacedKey;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@ -35,8 +37,19 @@ public class InventoryEvents implements Listener {
public void onCloseEvent(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player player)) return;
// Only remove the session if the player has one
// Run in scheduler which delays by one tick
// This ensures inventory was actually closed and not refreshed
Bukkit.getGlobalRegionScheduler().run(ctx.plugin, task -> {
// If inventory event was for a panel
if (event.getInventory().getHolder() instanceof InventoryPanel panel) {
// Panel was just refreshed, not closed
if(player.getOpenInventory().getTopInventory().getHolder() instanceof InventoryPanel currentPanel
&& currentPanel == panel){
return;
}
itemSanitiser(player.getInventory());
itemDropper(player, event.getInventory());
@ -44,12 +57,14 @@ public class InventoryEvents implements Listener {
RequirementRunner requirements = new RequirementRunner(ctx);
CommandRunner commands = new CommandRunner(ctx);
CommandActions actions = panel.getCloseCommands();
if(!requirements.processRequirements(panel, player, actions.requirements())){
if (!requirements.processRequirements(panel, player, actions.requirements())) {
commands.runCommands(panel, player, actions.fail());
return;
}
commands.runCommands(panel, player, actions.commands());
}
});
}
@EventHandler