packets: Add support for dialog list dialogs

This commit is contained in:
Oliver
2025-06-15 16:35:01 +02:00
committed by Oliver
parent c6db12a3f7
commit 4d43c08ed8
2 changed files with 86 additions and 0 deletions

View File

@@ -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<Holder<Dialog>> dialogs = new ArrayList<>();
for (FS_Dialog dialog : dialogList.getDialogs()) {
dialogs.add(Holder.direct(toNms(dialog)));
}
HolderSet<Dialog> dialogSet = HolderSet.direct(dialogs);
Optional<ActionButton> 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()));

View File

@@ -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<FS_Dialog> dialogs;
private @Nullable FS_DialogActionButton exitButton;
private int columns;
private int buttonWidth;
public FS_DialogListDialog(FS_CommonDialogData dialogData, List<FS_Dialog> 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<FS_Dialog> getDialogs() {
return dialogs;
}
public void setDialogs(List<FS_Dialog> 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;
}
}