added close commands and new open command layout

This commit is contained in:
rockyhawk64 2025-10-21 15:56:36 +11:00
parent 484a1a6ed3
commit 2eaedcb704
12 changed files with 144 additions and 49 deletions

View File

@ -7,7 +7,7 @@ import me.rockyhawk.commandpanels.builder.logic.ConditionNode;
import me.rockyhawk.commandpanels.builder.logic.ConditionParser;
import me.rockyhawk.commandpanels.interaction.commands.CommandRunner;
import me.rockyhawk.commandpanels.interaction.commands.RequirementRunner;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.dialog.DialogComponent;
import me.rockyhawk.commandpanels.session.dialog.DialogPanel;
import me.rockyhawk.commandpanels.session.dialog.components.DialogButton;
@ -40,7 +40,7 @@ public class ActionBuilder implements Listener {
Component tooltip = ctx.text.parseTextToComponent(player, button.getTooltip());
DialogAction action = DialogAction.customClick((options, audience) -> {
ClickActions actions = button.getClickActions();
CommandActions actions = button.getClickActions();
CommandRunner commands = new CommandRunner(ctx);
RequirementRunner requirements = new RequirementRunner(ctx);

View File

@ -6,7 +6,7 @@ import me.rockyhawk.commandpanels.builder.logic.ConditionParser;
import me.rockyhawk.commandpanels.formatter.language.Message;
import me.rockyhawk.commandpanels.interaction.commands.CommandRunner;
import me.rockyhawk.commandpanels.interaction.commands.RequirementRunner;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.floodgate.FloodgatePanel;
import me.rockyhawk.commandpanels.session.floodgate.components.FloodgateButton;
import org.bukkit.entity.Player;
@ -72,7 +72,7 @@ public class SimpleForm {
if (clickedButtonId >= buttonList.size()) return;
// Run commands
ClickActions actions = buttonList.get(clickedButtonId).getClickActions();
CommandActions actions = buttonList.get(clickedButtonId).getClickActions();
CommandRunner commands = new CommandRunner(ctx);
RequirementRunner requirements = new RequirementRunner(ctx);

View File

@ -4,14 +4,14 @@ import org.bukkit.configuration.ConfigurationSection;
import java.util.List;
public record ClickActions(
public record CommandActions(
List<String> requirements,
List<String> commands,
List<String> fail
) {
public static ClickActions fromSection(ConfigurationSection section) {
if (section == null) return new ClickActions(List.of(), List.of(), List.of());
return new ClickActions(
public static CommandActions fromSection(ConfigurationSection section) {
if (section == null) return new CommandActions(List.of(), List.of(), List.of());
return new CommandActions(
section.getStringList("requirements"),
section.getStringList("commands"),
section.getStringList("fail")

View File

@ -23,7 +23,8 @@ public abstract class Panel {
private final List<String> observedPerms; // List of permissions used in conditions for a panel
private final String command; // Command used to open the panel
private final List<String> aliases; // Aliases for command that opens the panel
private final List<String> commands; // Commands that run when panel is opened
private final List<String> commands; // DEPRECATED OLD COMMANDS LAYOUT
private final CommandActions open; // Commands that run when panel is opened
private final String type;
public Panel(String name, YamlConfiguration config) {
@ -32,9 +33,15 @@ public abstract class Panel {
this.title = config.getString("title", "Panel");
this.command = config.getString("command", "");
this.aliases = config.getStringList("aliases");
this.commands = config.getStringList("commands");
this.commands = config.getStringList("commands"); // DEPRECATED OLD COMMANDS
this.type = config.getString("type", "inventory");
this.observedPerms = new ArrayList<>();
open = new CommandActions(
config.getStringList("open.requirements"),
config.getStringList("open.commands"),
config.getStringList("open.fail")
);
}
// Check run for permission checks with commands
@ -103,10 +110,15 @@ public abstract class Panel {
return aliases;
}
// DEPRECATED OLD COMMANDS
public List<String> getCommands() {
return commands;
}
public CommandActions getOpenCommands() {
return open;
}
public String getTitle() {
return title;
}

View File

@ -1,6 +1,6 @@
package me.rockyhawk.commandpanels.session.dialog;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.dialog.components.*;
import org.bukkit.configuration.ConfigurationSection;
@ -9,14 +9,14 @@ public abstract class DialogComponent {
private final String name;
private final String conditions;
private final String type;
private final ClickActions actions;
private final CommandActions actions;
public DialogComponent(String id, ConfigurationSection config) {
this.id = id;
this.conditions = config.getString("conditions", "");
this.name = config.getString("name", "");
this.type = config.getString("type", "button");
this.actions = ClickActions.fromSection(config.getConfigurationSection("actions"));
this.actions = CommandActions.fromSection(config.getConfigurationSection("actions"));
}
public static DialogComponent fromSection(String id, ConfigurationSection section) {
@ -48,7 +48,7 @@ public abstract class DialogComponent {
return id;
}
public ClickActions getClickActions() {
public CommandActions getClickActions() {
return actions;
}
}

View File

@ -4,8 +4,12 @@ import me.rockyhawk.commandpanels.Context;
import me.rockyhawk.commandpanels.builder.PanelBuilder;
import me.rockyhawk.commandpanels.builder.dialog.DialogPanelBuilder;
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.Panel;
import me.rockyhawk.commandpanels.session.floodgate.FloodgatePanel;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
@ -70,9 +74,25 @@ public class DialogPanel extends Panel {
}
updatePanelData(ctx, player);
// RUN DEPRECATED PANEL COMMANDS; WILL BE REMOVED SOON
CommandRunner runnerOld = new CommandRunner(ctx);
if(!this.getCommands().isEmpty()){
if(player.hasPermission("commandpanels.command.reload"))
player.sendMessage(
Component.text("[CommandPanels] Commands is now deprecated, use new layout Open Commands instead.",
NamedTextColor.RED));
}
runnerOld.runCommands(this, player, this.getCommands());
// Run panel commands
CommandRunner runner = new CommandRunner(ctx);
runner.runCommands(this, player, this.getCommands());
RequirementRunner requirements = new RequirementRunner(ctx);
CommandRunner commands = new CommandRunner(ctx);
CommandActions actions = this.getOpenCommands();
if(!requirements.processRequirements(this, player, actions.requirements())){
commands.runCommands(this, player, actions.fail());
return;
}
commands.runCommands(this, player, actions.commands());
}
// Build and open panel

View File

@ -1,6 +1,6 @@
package me.rockyhawk.commandpanels.session.floodgate;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.floodgate.components.*;
import org.bukkit.configuration.ConfigurationSection;
@ -9,14 +9,14 @@ public abstract class FloodgateComponent {
private final String name;
private final String conditions;
private final String type;
private final ClickActions actions;
private final CommandActions actions;
public FloodgateComponent(String id, ConfigurationSection config) {
this.id = id;
this.conditions = config.getString("conditions", "");
this.name = config.getString("name", "");
this.type = config.getString("type", "button");
this.actions = ClickActions.fromSection(config.getConfigurationSection("actions"));
this.actions = CommandActions.fromSection(config.getConfigurationSection("actions"));
}
public static FloodgateComponent fromSection(String id, ConfigurationSection section) {
@ -48,7 +48,7 @@ public abstract class FloodgateComponent {
return id;
}
public ClickActions getClickActions() {
public CommandActions getClickActions() {
return actions;
}
}

View File

@ -4,7 +4,11 @@ import me.rockyhawk.commandpanels.Context;
import me.rockyhawk.commandpanels.builder.PanelBuilder;
import me.rockyhawk.commandpanels.builder.floodgate.FloodgatePanelBuilder;
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.Panel;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
@ -60,9 +64,25 @@ public class FloodgatePanel extends Panel {
}
updatePanelData(ctx, player);
// RUN DEPRECATED PANEL COMMANDS; WILL BE REMOVED SOON
CommandRunner runnerOld = new CommandRunner(ctx);
if(!this.getCommands().isEmpty()){
if(player.hasPermission("commandpanels.command.reload"))
player.sendMessage(
Component.text("[CommandPanels] Commands is now deprecated, use new layout Open Commands instead.",
NamedTextColor.RED));
}
runnerOld.runCommands(this, player, this.getCommands());
// Run panel commands
CommandRunner runner = new CommandRunner(ctx);
runner.runCommands(this, player, this.getCommands());
RequirementRunner requirements = new RequirementRunner(ctx);
CommandRunner commands = new CommandRunner(ctx);
CommandActions actions = this.getOpenCommands();
if(!requirements.processRequirements(this, player, actions.requirements())){
commands.runCommands(this, player, actions.fail());
return;
}
commands.runCommands(this, player, actions.commands());
}
// Build and open panel

View File

@ -4,9 +4,12 @@ import me.rockyhawk.commandpanels.Context;
import me.rockyhawk.commandpanels.builder.PanelBuilder;
import me.rockyhawk.commandpanels.builder.inventory.InventoryPanelBuilder;
import me.rockyhawk.commandpanels.interaction.commands.CommandRunner;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.interaction.commands.RequirementRunner;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.Panel;
import me.rockyhawk.commandpanels.session.floodgate.FloodgatePanel;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.Bukkit;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.YamlConfiguration;
@ -23,7 +26,8 @@ public class InventoryPanel extends Panel implements InventoryHolder {
private final String rows;
private final Map<String, PanelItem> items = new HashMap<>();
private final Map<String, List<String>> slots = new HashMap<>();
private final ClickActions outside;
private final CommandActions outside;
private final CommandActions close;
private final String floodgate;
private final String inventoryLock;
private final String updateDelay;
@ -36,11 +40,16 @@ public class InventoryPanel extends Panel implements InventoryHolder {
this.updateDelay = config.getString("update-delay", "20");
this.inventoryLock = config.getString("inventory-lock", "false");
outside = new ClickActions(
outside = new CommandActions(
config.getStringList("outside.requirements"),
config.getStringList("outside.commands"),
config.getStringList("outside.fail")
);
close = new CommandActions(
config.getStringList("close.requirements"),
config.getStringList("close.commands"),
config.getStringList("close.fail")
);
ConfigurationSection slotSection = config.getConfigurationSection("layout");
if (slotSection != null) {
@ -82,9 +91,26 @@ public class InventoryPanel extends Panel implements InventoryHolder {
}
updatePanelData(ctx, player);
// RUN DEPRECATED PANEL COMMANDS; WILL BE REMOVED SOON
CommandRunner runnerOld = new CommandRunner(ctx);
if(!this.getCommands().isEmpty()){
if(player.hasPermission("commandpanels.command.reload"))
player.sendMessage(
Component.text("[CommandPanels] Commands is now deprecated, use new layout Open Commands instead.",
NamedTextColor.RED));
}
runnerOld.runCommands(this, player, this.getCommands());
// Run panel commands
CommandRunner runner = new CommandRunner(ctx);
runner.runCommands(this, player, this.getCommands());
RequirementRunner requirements = new RequirementRunner(ctx);
CommandRunner commands = new CommandRunner(ctx);
CommandActions actions = this.getOpenCommands();
if(!requirements.processRequirements(this, player, actions.requirements())){
commands.runCommands(this, player, actions.fail());
return;
}
commands.runCommands(this, player, actions.commands());
}
// Build and open the panel
@ -114,10 +140,14 @@ public class InventoryPanel extends Panel implements InventoryHolder {
return updateDelay;
}
public ClickActions getOutsideCommands() {
public CommandActions getOutsideCommands() {
return outside;
}
public CommandActions getCloseCommands() {
return close;
}
public String getInventoryLock() {
return inventoryLock;
}

View File

@ -1,6 +1,6 @@
package me.rockyhawk.commandpanels.session.inventory;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.inventory.ClickType;
@ -16,11 +16,11 @@ public record PanelItem(
String tooltip,
String animate,
String conditions,
ClickActions actions,
ClickActions leftClick,
ClickActions rightClick,
ClickActions shiftLeftClick,
ClickActions shiftRightClick,
CommandActions actions,
CommandActions leftClick,
CommandActions rightClick,
CommandActions shiftLeftClick,
CommandActions shiftRightClick,
String damage,
String itemModel,
String customModelData,
@ -42,11 +42,11 @@ public record PanelItem(
String tooltip,
String animate,
String conditions,
ClickActions actions,
ClickActions leftClick,
ClickActions rightClick,
ClickActions shiftLeftClick,
ClickActions shiftRightClick,
CommandActions actions,
CommandActions leftClick,
CommandActions rightClick,
CommandActions shiftLeftClick,
CommandActions shiftRightClick,
String damage,
String itemModel,
String customModelData,
@ -94,11 +94,11 @@ public record PanelItem(
String animate = section.getString("animate", "");
String conditions = section.getString("conditions", "");
ClickActions actions = ClickActions.fromSection(section.getConfigurationSection("actions"));
ClickActions leftClick = ClickActions.fromSection(section.getConfigurationSection("left-click"));
ClickActions rightClick = ClickActions.fromSection(section.getConfigurationSection("right-click"));
ClickActions shiftLeftClick = ClickActions.fromSection(section.getConfigurationSection("shift-left-click"));
ClickActions shiftRightClick = ClickActions.fromSection(section.getConfigurationSection("shift-right-click"));
CommandActions actions = CommandActions.fromSection(section.getConfigurationSection("actions"));
CommandActions leftClick = CommandActions.fromSection(section.getConfigurationSection("left-click"));
CommandActions rightClick = CommandActions.fromSection(section.getConfigurationSection("right-click"));
CommandActions shiftLeftClick = CommandActions.fromSection(section.getConfigurationSection("shift-left-click"));
CommandActions shiftRightClick = CommandActions.fromSection(section.getConfigurationSection("shift-right-click"));
String damage = section.getString("damage", "0");
String itemModel = section.getString("item-model", null);
@ -140,7 +140,7 @@ public record PanelItem(
);
}
public ClickActions getClickActions(ClickType clickType) {
public CommandActions getClickActions(ClickType clickType) {
if(!actions.requirements().isEmpty() || !actions.commands().isEmpty()) return actions;
// LEFT case defaults
return switch (clickType) {

View File

@ -3,7 +3,7 @@ package me.rockyhawk.commandpanels.session.inventory.listeners;
import me.rockyhawk.commandpanels.Context;
import me.rockyhawk.commandpanels.interaction.commands.CommandRunner;
import me.rockyhawk.commandpanels.interaction.commands.RequirementRunner;
import me.rockyhawk.commandpanels.session.ClickActions;
import me.rockyhawk.commandpanels.session.CommandActions;
import me.rockyhawk.commandpanels.session.inventory.InventoryPanel;
import me.rockyhawk.commandpanels.session.inventory.PanelItem;
import org.bukkit.NamespacedKey;
@ -53,7 +53,7 @@ public class ClickEvents implements Listener {
if (!(player.getOpenInventory().getTopInventory().getHolder() instanceof InventoryPanel panel)) return;
// Run outside command actions
ClickActions actions = panel.getOutsideCommands();
CommandActions actions = panel.getOutsideCommands();
if(!requirements.processRequirements(panel, player, actions.requirements())){
commands.runCommands(panel, player, actions.fail());
return;
@ -96,7 +96,7 @@ public class ClickEvents implements Listener {
switch (e.getClick()) {
case LEFT, RIGHT, SHIFT_LEFT, SHIFT_RIGHT -> {
PanelItem panelItem = panel.getItems().get(itemId);
ClickActions actions = panelItem.getClickActions(e.getClick());
CommandActions actions = panelItem.getClickActions(e.getClick());
if(!requirements.processRequirements(panel, player, actions.requirements())){
commands.runCommands(panel, player, actions.fail());
return;

View File

@ -1,6 +1,9 @@
package me.rockyhawk.commandpanels.session.inventory.listeners;
import me.rockyhawk.commandpanels.Context;
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.NamespacedKey;
import org.bukkit.entity.Player;
@ -33,9 +36,19 @@ public class InventoryEvents implements Listener {
if (!(event.getPlayer() instanceof Player player)) return;
// Only remove the session if the player has one
if (event.getInventory().getHolder() instanceof InventoryPanel) {
if (event.getInventory().getHolder() instanceof InventoryPanel panel) {
itemSanitiser(player.getInventory());
itemDropper(player, event.getInventory());
// Run close commands
RequirementRunner requirements = new RequirementRunner(ctx);
CommandRunner commands = new CommandRunner(ctx);
CommandActions actions = panel.getCloseCommands();
if(!requirements.processRequirements(panel, player, actions.requirements())){
commands.runCommands(panel, player, actions.fail());
return;
}
commands.runCommands(panel, player, actions.commands());
}
}