From c6db12a3f769c1b46a93e9329695e5cccb75ec88 Mon Sep 17 00:00:00 2001 From: Oliver Date: Sun, 15 Jun 2025 16:31:37 +0200 Subject: [PATCH] packets: Add support for confirmation dialogs --- .../ClientboundShowDialogPacketImpl.java | 11 +++++ .../dialogs/types/FS_ConfirmationDialog.java | 42 +++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_ConfirmationDialog.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 b776a464..2f90a960 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 @@ -13,6 +13,7 @@ import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogBooleanInput; import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogInput; 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_NoticeDialog; import de.oliver.fancysitula.api.entities.FS_RealPlayer; import de.oliver.fancysitula.api.packets.FS_ClientboundShowDialogPacket; @@ -62,6 +63,8 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac private Dialog toNms(FS_Dialog dialog) { if (dialog instanceof FS_NoticeDialog notice) { return noticeToNms(notice); + } else if (dialog instanceof FS_ConfirmationDialog confirmation) { + return confirmationToNms(confirmation); } return null; @@ -74,6 +77,14 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac return new NoticeDialog(common, actionButton); } + private Dialog confirmationToNms(FS_ConfirmationDialog notice) { + CommonDialogData common = commonToNms(notice.getDialogData()); + ActionButton yes = actionButtonToNms(notice.getYesButton()); + ActionButton no = actionButtonToNms(notice.getNoButton()); + + return new ConfirmationDialog(common, yes, no); + } + 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_ConfirmationDialog.java b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_ConfirmationDialog.java new file mode 100644 index 00000000..9710d7ae --- /dev/null +++ b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_ConfirmationDialog.java @@ -0,0 +1,42 @@ +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; + +public class FS_ConfirmationDialog implements FS_Dialog { + + private FS_CommonDialogData dialogData; + private FS_DialogActionButton yesButton; + private FS_DialogActionButton noButton; + + public FS_ConfirmationDialog(FS_CommonDialogData dialogData, FS_DialogActionButton yetButton, FS_DialogActionButton noButton) { + this.dialogData = dialogData; + this.yesButton = yetButton; + this.noButton = noButton; + } + + public FS_CommonDialogData getDialogData() { + return dialogData; + } + + public void setDialogData(FS_CommonDialogData dialogData) { + this.dialogData = dialogData; + } + + public FS_DialogActionButton getYesButton() { + return yesButton; + } + + public void setYesButton(FS_DialogActionButton yesButton) { + this.yesButton = yesButton; + } + + public FS_DialogActionButton getNoButton() { + return noButton; + } + + public void setNoButton(FS_DialogActionButton noButton) { + this.noButton = noButton; + } +}