From c20617b2e267396cf7358f313647e724343b08e3 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 15 Jun 2025 16:36:59 +0200 Subject: [PATCH] packets: Add support for multi action dialogs --- .../ClientboundShowDialogPacketImpl.java | 18 ++++++ .../dialogs/types/FS_MultiActionDialog.java | 55 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_MultiActionDialog.java diff --git a/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java b/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java index 0369c273..c56a922f 100644 --- a/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java +++ b/libraries/packets/implementations/1_21_6/src/main/java/de/oliver/fancysitula/versions/v1_21_6/packets/ClientboundShowDialogPacketImpl.java @@ -15,6 +15,7 @@ import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogNumberRangeInput; import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogSingleOptionInput; import de.oliver.fancysitula.api.dialogs.types.FS_ConfirmationDialog; import de.oliver.fancysitula.api.dialogs.types.FS_DialogListDialog; +import de.oliver.fancysitula.api.dialogs.types.FS_MultiActionDialog; import de.oliver.fancysitula.api.dialogs.types.FS_NoticeDialog; import de.oliver.fancysitula.api.entities.FS_RealPlayer; import de.oliver.fancysitula.api.packets.FS_ClientboundShowDialogPacket; @@ -69,6 +70,8 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac return confirmationToNms(confirmation); } else if (dialog instanceof FS_DialogListDialog dialogList) { return dialogListToNms(dialogList); + } else if (dialog instanceof FS_MultiActionDialog multiActionDialog) { + return multiActionDialogToNms(multiActionDialog); } return null; @@ -106,6 +109,21 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac return new DialogListDialog(common, dialogSet, exitButton, dialogList.getColumns(), dialogList.getButtonWidth()); } + private Dialog multiActionDialogToNms(FS_MultiActionDialog multiActionDialog) { + CommonDialogData common = commonToNms(multiActionDialog.getDialogData()); + List actionButtons = new ArrayList<>(); + + for (FS_DialogActionButton actionButton : multiActionDialog.getActions()) { + actionButtons.add(actionButtonToNms(actionButton)); + } + + Optional exitAction = multiActionDialog.getExitAction() != null ? + Optional.of(actionButtonToNms(multiActionDialog.getExitAction())) : + Optional.empty(); + + return new MultiActionDialog(common, actionButtons, exitAction, multiActionDialog.getColumns()); + } + private CommonDialogData commonToNms(FS_CommonDialogData dialogData) { Component title = PaperAdventure.asVanilla(MiniMessage.miniMessage().deserialize(dialogData.getTitle())); diff --git a/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_MultiActionDialog.java b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_MultiActionDialog.java new file mode 100644 index 00000000..18005f90 --- /dev/null +++ b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_MultiActionDialog.java @@ -0,0 +1,55 @@ +package de.oliver.fancysitula.api.dialogs.types; + +import de.oliver.fancysitula.api.dialogs.FS_CommonDialogData; +import de.oliver.fancysitula.api.dialogs.FS_Dialog; +import de.oliver.fancysitula.api.dialogs.actions.FS_DialogActionButton; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public class FS_MultiActionDialog implements FS_Dialog { + + private FS_CommonDialogData dialogData; + private List actions; + private @Nullable FS_DialogActionButton exitAction; + private int columns; + + public FS_MultiActionDialog(FS_CommonDialogData dialogData, List actions, @Nullable FS_DialogActionButton exitAction, int columns) { + this.dialogData = dialogData; + this.actions = actions; + this.exitAction = exitAction; + this.columns = columns; + } + + public FS_CommonDialogData getDialogData() { + return dialogData; + } + + public void setDialogData(FS_CommonDialogData dialogData) { + this.dialogData = dialogData; + } + + public List getActions() { + return actions; + } + + public void setActions(List actions) { + this.actions = actions; + } + + public @Nullable FS_DialogActionButton getExitAction() { + return exitAction; + } + + public void setExitAction(@Nullable FS_DialogActionButton exitAction) { + this.exitAction = exitAction; + } + + public int getColumns() { + return columns; + } + + public void setColumns(int columns) { + this.columns = columns; + } +}