packets: Add support for multi action dialogs

This commit is contained in:
Oliver
2025-06-15 16:36:59 +02:00
committed by Oliver
parent 4d43c08ed8
commit c20617b2e2
2 changed files with 73 additions and 0 deletions

View File

@@ -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<ActionButton> actionButtons = new ArrayList<>();
for (FS_DialogActionButton actionButton : multiActionDialog.getActions()) {
actionButtons.add(actionButtonToNms(actionButton));
}
Optional<ActionButton> 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()));

View File

@@ -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<FS_DialogActionButton> actions;
private @Nullable FS_DialogActionButton exitAction;
private int columns;
public FS_MultiActionDialog(FS_CommonDialogData dialogData, List<FS_DialogActionButton> 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<FS_DialogActionButton> getActions() {
return actions;
}
public void setActions(List<FS_DialogActionButton> 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;
}
}