From d3850310cef75600e71c66ed7cbaca8457d19ede Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 19 Jun 2025 12:55:09 +0200 Subject: [PATCH] fancydialogs: Add dialog action system --- .../fancydialogs/FancyDialogsPlugin.java | 8 +++++ .../fancydialogs/actions/ActionRegistry.java | 31 +++++++++++++++++++ .../fancydialogs/actions/DialogAction.java | 10 ++++++ .../CustomClickActionPacketListener.java | 17 +++++++++- .../fancydialogs/registry/DefaultDialogs.java | 26 ++++++++-------- 5 files changed, 78 insertions(+), 14 deletions(-) create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/DialogAction.java diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java index ae1aeff0..88a4ce98 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java @@ -1,5 +1,6 @@ package com.fancyinnovations.fancydialogs; +import com.fancyinnovations.fancydialogs.actions.ActionRegistry; import com.fancyinnovations.fancydialogs.api.Dialog; import com.fancyinnovations.fancydialogs.api.FancyDialogs; import com.fancyinnovations.fancydialogs.api.data.DialogData; @@ -48,6 +49,7 @@ public class FancyDialogsPlugin extends JavaPlugin implements FancyDialogs { private Translator translator; private DialogRegistry dialogRegistry; private DialogStorage dialogStorage; + private ActionRegistry actionRegistry; public FancyDialogsPlugin() { INSTANCE = this; @@ -108,6 +110,8 @@ public class FancyDialogsPlugin extends JavaPlugin implements FancyDialogs { DefaultDialogs.registerDefaultDialogs(); + actionRegistry = new ActionRegistry(); + fancyLogger.info("Successfully loaded FancyDialogs version %s".formatted(getDescription().getVersion())); } @@ -202,4 +206,8 @@ public class FancyDialogsPlugin extends JavaPlugin implements FancyDialogs { public DialogStorage getDialogStorage() { return dialogStorage; } + + public ActionRegistry getActionRegistry() { + return actionRegistry; + } } diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java new file mode 100644 index 00000000..4b25dcc0 --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java @@ -0,0 +1,31 @@ +package com.fancyinnovations.fancydialogs.actions; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class ActionRegistry { + + private final Map actions; + + public ActionRegistry() { + this.actions = new ConcurrentHashMap<>(); + + registerDefaultActions(); + } + + private void registerDefaultActions() { + + } + + public void registerAction(String actionId, DialogAction action) { + if (actions.containsKey(actionId)) { + throw new IllegalArgumentException("Action with ID " + actionId + " is already registered."); + } + + actions.put(actionId, action); + } + + public DialogAction getAction(String actionId) { + return actions.get(actionId); + } +} diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/DialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/DialogAction.java new file mode 100644 index 00000000..9be28fe4 --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/DialogAction.java @@ -0,0 +1,10 @@ +package com.fancyinnovations.fancydialogs.actions; + +import com.fancyinnovations.fancydialogs.api.Dialog; +import org.bukkit.entity.Player; + +public interface DialogAction { + + void execute(Player player, Dialog dialog, String data); + +} diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/listener/CustomClickActionPacketListener.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/listener/CustomClickActionPacketListener.java index 04d90963..5ded20b9 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/listener/CustomClickActionPacketListener.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/listener/CustomClickActionPacketListener.java @@ -1,5 +1,8 @@ package com.fancyinnovations.fancydialogs.listener; +import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; +import com.fancyinnovations.fancydialogs.actions.DialogAction; +import com.fancyinnovations.fancydialogs.api.Dialog; import de.oliver.fancysitula.api.packets.FS_ServerboundCustomClickActionPacket; import de.oliver.fancysitula.api.packets.FS_ServerboundPacket; import de.oliver.fancysitula.api.utils.FS_PacketListener; @@ -36,7 +39,19 @@ public class CustomClickActionPacketListener { String actionId = packet.getPayload().get("action_id"); String actionData = packet.getPayload().get("action_data"); - // TODO process the dialog action + Dialog dialog = FancyDialogsPlugin.get().getDialogRegistry().get(dialogId); + if (dialog == null) { + FancyDialogsPlugin.get().getFancyLogger().warn("Received action for unknown dialog: " + dialogId); + return; // Ignore actions for unknown dialogs + } + + DialogAction action = FancyDialogsPlugin.get().getActionRegistry().getAction(actionId); + if (action == null) { + FancyDialogsPlugin.get().getFancyLogger().warn("Received unknown action: " + actionId); + return; // Ignore unknown actions + } + + action.execute(event.player(), dialog, actionData); } public FS_PacketListener getPacketListener() { diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java index a6e488c1..454e9499 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java @@ -44,13 +44,13 @@ public class DefaultDialogs { new DialogButton( "Close", "Enjoy using FancyDialogs", - "close_dialog", + "close", "" ), new DialogButton( "Run command", "Click to give yourself an apple :)", - "run_command:", + "console_command", "give {player} apple 1" ) ) @@ -74,26 +74,26 @@ public class DefaultDialogs { new DialogButton( "Read the rules", "Click to read our rules!", - "message", - "Visit our rules!" + "open_dialog", + "rules" ), new DialogButton( "Start playing", "Click to start playing!", - "close_dialog", + "close", "" ), new DialogButton( "Join our Discord", "Click to join our Discord server!", "message", - "Join our Discord server!" + "Join our Discord server here: LINK TO DISCORD" ), new DialogButton( "Visit our website", "Click to visit our website!", "message", - "Visit our website!" + "Visit our website here: LINK TO WEBSITE" ) ) ); @@ -114,30 +114,30 @@ public class DefaultDialogs { "Visit our website", "Click to visit our website!", "message", - "Visit our website!" + "Visit our website here: LINK TO WEBSITE" ), new DialogButton( "Read the rules", "Click to read our rules!", - "message", - "Visit our rules!" + "open_dialog", + "rules" ), new DialogButton( "Join our Discord", "Click to join our Discord server!", "message", - "Join our Discord server!" + "Join our Discord server here: LINK TO DISCORD" ), new DialogButton( "Support us", "Click to support us!", "message", - "Support us!" + "Support us here: LINK TO SUPPORT" ), new DialogButton( "Close", "Click to close this dialog!", - "close_dialog", + "close", "" ) )