diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/ConfirmationDialog.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/ConfirmationDialog.java index da61932b..1a1e67b7 100644 --- a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/ConfirmationDialog.java +++ b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/ConfirmationDialog.java @@ -35,14 +35,12 @@ public class ConfirmationDialog { new DialogButton( this.confirmText, this.confirmText, - "confirm", - "" + List.of() ), new DialogButton( this.cancelText, this.cancelText, - "cancel", - "" + List.of() ) ) ); diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogAction.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogAction.java deleted file mode 100644 index 6e6062ee..00000000 --- a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogAction.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.fancyinnovations.fancydialogs.api.data; - -public abstract class DialogAction { -} diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogButton.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogButton.java index b7177730..c957389c 100644 --- a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogButton.java +++ b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogButton.java @@ -1,9 +1,43 @@ package com.fancyinnovations.fancydialogs.api.data; -public record DialogButton( - String label, - String tooltip, - String action, - String actionData -) { +import java.util.List; +import java.util.UUID; + +public class DialogButton { + + private final transient String id; + private final String label; + private final String tooltip; + private final List actions; + + public DialogButton(String label, String tooltip, List actions) { + this.id = UUID.randomUUID().toString(); + this.label = label; + this.tooltip = tooltip; + this.actions = actions; + } + + public String id() { + return id; + } + + public String label() { + return label; + } + + public String tooltip() { + return tooltip; + } + + public List actions() { + return actions; + } + + public record DialogAction( + String name, + String data + ) { + + } + } diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogData.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogData.java index b34174cc..a26936aa 100644 --- a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogData.java +++ b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/DialogData.java @@ -12,4 +12,14 @@ public record DialogData( @NotNull List buttons ) { + public DialogButton getButtonById(@NotNull String buttonId) { + for (DialogButton button : buttons) { + if (button.id().equals(buttonId)) { + return button; + } + } + + return null; + } + } diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java index 4ad9ccb6..114df873 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java @@ -51,8 +51,7 @@ public class DialogImpl extends Dialog { "fancydialogs_dialog_action", Map.of( "dialog_id", id, - "action_id", button.action(), - "action_data", button.actionData() + "button_id", button.id() ) ) ); 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 5ded20b9..81aa9bc7 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 @@ -3,6 +3,7 @@ package com.fancyinnovations.fancydialogs.listener; import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; import com.fancyinnovations.fancydialogs.actions.DialogAction; import com.fancyinnovations.fancydialogs.api.Dialog; +import com.fancyinnovations.fancydialogs.api.data.DialogButton; 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,22 +37,29 @@ public class CustomClickActionPacketListener { } String dialogId = packet.getPayload().get("dialog_id"); - String actionId = packet.getPayload().get("action_id"); - String actionData = packet.getPayload().get("action_data"); + String buttonId = packet.getPayload().get("button_id"); 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 + return; } - DialogAction action = FancyDialogsPlugin.get().getActionRegistry().getAction(actionId); - if (action == null) { - FancyDialogsPlugin.get().getFancyLogger().warn("Received unknown action: " + actionId); - return; // Ignore unknown actions + DialogButton btn = dialog.getData().getButtonById(buttonId); + if (btn == null) { + FancyDialogsPlugin.get().getFancyLogger().warn("Received action for unknown button: " + buttonId + " in dialog: " + dialogId); + return; } - action.execute(event.player(), dialog, actionData); + for (DialogButton.DialogAction btnAction : btn.actions()) { + DialogAction action = FancyDialogsPlugin.get().getActionRegistry().getAction(btnAction.name()); + if (action == null) { + FancyDialogsPlugin.get().getFancyLogger().warn("Received action for unknown action: " + btnAction.name() + " in button: " + buttonId); + continue; + } + + action.execute(event.player(), dialog, btnAction.data()); + } } 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 454e9499..43865a07 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,14 +44,14 @@ public class DefaultDialogs { new DialogButton( "Close", "Enjoy using FancyDialogs", - "close", - "" + List.of() ), new DialogButton( "Run command", "Click to give yourself an apple :)", - "console_command", - "give {player} apple 1" + List.of( + new DialogButton.DialogAction("console_command", "give @p minecraft:apple 1") + ) ) ) ); @@ -74,26 +74,28 @@ public class DefaultDialogs { new DialogButton( "Read the rules", "Click to read our rules!", - "open_dialog", - "rules" + List.of( + new DialogButton.DialogAction("open_dialog", "rules") + ) ), new DialogButton( "Start playing", "Click to start playing!", - "close", - "" + List.of() ), new DialogButton( "Join our Discord", "Click to join our Discord server!", - "message", - "Join our Discord server here: LINK TO DISCORD" + List.of( + new DialogButton.DialogAction("message", "Join our Discord server here: LINK TO DISCORD") + ) ), new DialogButton( "Visit our website", "Click to visit our website!", - "message", - "Visit our website here: LINK TO WEBSITE" + List.of( + new DialogButton.DialogAction("message", "Visit our website here: LINK TO WEBSITE") + ) ) ) ); @@ -113,32 +115,35 @@ public class DefaultDialogs { new DialogButton( "Visit our website", "Click to visit our website!", - "message", - "Visit our website here: LINK TO WEBSITE" + List.of( + new DialogButton.DialogAction("message", "Visit our website here: LINK TO WEBSITE") + ) ), new DialogButton( "Read the rules", "Click to read our rules!", - "open_dialog", - "rules" + List.of( + new DialogButton.DialogAction("open_dialog", "rules") + ) ), new DialogButton( "Join our Discord", "Click to join our Discord server!", - "message", - "Join our Discord server here: LINK TO DISCORD" + List.of( + new DialogButton.DialogAction("message", "Join our Discord server here: LINK TO DISCORD") + ) ), new DialogButton( "Support us", "Click to support us!", - "message", - "Support us here: LINK TO SUPPORT" + List.of( + new DialogButton.DialogAction("message", "Support us by donating here: LINK TO DONATE") + ) ), new DialogButton( "Close", "Click to close this dialog!", - "close", - "" + List.of() ) ) );