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 2f90a960..0369c273 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 @@ -14,6 +14,7 @@ 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_DialogListDialog; 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; @@ -21,6 +22,7 @@ import de.oliver.fancysitula.versions.v1_21_6.utils.VanillaPlayerAdapter; import io.papermc.paper.adventure.PaperAdventure; import net.kyori.adventure.text.minimessage.MiniMessage; import net.minecraft.core.Holder; +import net.minecraft.core.HolderSet; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.common.ClientboundShowDialogPacket; import net.minecraft.server.dialog.*; @@ -65,6 +67,8 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac return noticeToNms(notice); } else if (dialog instanceof FS_ConfirmationDialog confirmation) { return confirmationToNms(confirmation); + } else if (dialog instanceof FS_DialogListDialog dialogList) { + return dialogListToNms(dialogList); } return null; @@ -85,6 +89,23 @@ public class ClientboundShowDialogPacketImpl extends FS_ClientboundShowDialogPac return new ConfirmationDialog(common, yes, no); } + private Dialog dialogListToNms(FS_DialogListDialog dialogList) { + CommonDialogData common = commonToNms(dialogList.getDialogData()); + List> dialogs = new ArrayList<>(); + + for (FS_Dialog dialog : dialogList.getDialogs()) { + dialogs.add(Holder.direct(toNms(dialog))); + } + + HolderSet dialogSet = HolderSet.direct(dialogs); + + Optional exitButton = dialogList.getExitButton() != null ? + Optional.of(actionButtonToNms(dialogList.getExitButton())) : + Optional.empty(); + + return new DialogListDialog(common, dialogSet, exitButton, dialogList.getColumns(), dialogList.getButtonWidth()); + } + 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_DialogListDialog.java b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_DialogListDialog.java new file mode 100644 index 00000000..afa228ac --- /dev/null +++ b/libraries/packets/packets-api/src/main/java/de/oliver/fancysitula/api/dialogs/types/FS_DialogListDialog.java @@ -0,0 +1,65 @@ +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_DialogListDialog implements FS_Dialog { + + private FS_CommonDialogData dialogData; + private List dialogs; + private @Nullable FS_DialogActionButton exitButton; + private int columns; + private int buttonWidth; + + public FS_DialogListDialog(FS_CommonDialogData dialogData, List dialogs, @Nullable FS_DialogActionButton exitButton, int columns, int buttonWidth) { + this.dialogData = dialogData; + this.dialogs = dialogs; + this.exitButton = exitButton; + this.columns = columns; + this.buttonWidth = buttonWidth; + } + + public FS_CommonDialogData getDialogData() { + return dialogData; + } + + public void setDialogData(FS_CommonDialogData dialogData) { + this.dialogData = dialogData; + } + + public List getDialogs() { + return dialogs; + } + + public void setDialogs(List dialogs) { + this.dialogs = dialogs; + } + + public @Nullable FS_DialogActionButton getExitButton() { + return exitButton; + } + + public void setExitButton(@Nullable FS_DialogActionButton exitButton) { + this.exitButton = exitButton; + } + + public int getColumns() { + return columns; + } + + public void setColumns(int columns) { + this.columns = columns; + } + + public int getButtonWidth() { + return buttonWidth; + } + + public void setButtonWidth(int buttonWidth) { + this.buttonWidth = buttonWidth; + } +}