fancydialogs: Add support for the select input

This commit is contained in:
Oliver
2025-06-26 19:34:39 +02:00
parent 9beafac5cd
commit 68c8826343
5 changed files with 72 additions and 6 deletions

View File

@@ -79,6 +79,14 @@ The fields in this dialog are as follows:
- `placeholder`: The initial text to display in the text field - `placeholder`: The initial text to display in the text field
- `maxLength`: The maximum length of the input - `maxLength`: The maximum length of the input
- `maxLines`: The maximum number of lines for the input (greater than 1 will create a multiline text field) - `maxLines`: The maximum number of lines for the input (greater than 1 will create a multiline text field)
- `selects`: A list of text fields that can be used to collect input from the player
- `key`: The key to use to store the input value (can be used as a placeholder in actions)
- `order`: The order of the text field in the dialog
- `label`: The label to display above the text field (supports MiniMessage & PlaceholderAPI)
- `options`: A list of options that can be selected by the player
- `value`: The value that will be returned when the player selects this option
- `display`: The text to display in the select field (supports MiniMessage & PlaceholderAPI)
- `initial`: Whether this option is selected by default (default: false)
- `buttons`: The buttons of the dialog, which can contain text, tooltips and actions - `buttons`: The buttons of the dialog, which can contain text, tooltips and actions
- `label`: The text to display on the button (supports MiniMessage & PlaceholderAPI) - `label`: The text to display on the button (supports MiniMessage & PlaceholderAPI)
- `tooltip`: The tooltip to display when hovering over the button (supports MiniMessage & PlaceholderAPI) - `tooltip`: The tooltip to display when hovering over the button (supports MiniMessage & PlaceholderAPI)

View File

@@ -4,10 +4,11 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public record DialogInputs( public record DialogInputs(
List<DialogTextField> textFields List<DialogTextField> textFields,
List<DialogSelect> selects
) { ) {
public static final DialogInputs EMPTY = new DialogInputs(List.of()); public static final DialogInputs EMPTY = new DialogInputs(List.of(), List.of());
public List<DialogInput> all() { public List<DialogInput> all() {
List<DialogInput> all = new ArrayList<>(); List<DialogInput> all = new ArrayList<>();
@@ -15,6 +16,10 @@ public record DialogInputs(
all.addAll(textFields); all.addAll(textFields);
} }
if (selects != null) {
all.addAll(selects);
}
all.sort((o1, o2) -> { all.sort((o1, o2) -> {
if (o1.getOrder() == o2.getOrder()) { if (o1.getOrder() == o2.getOrder()) {
return 0; return 0;

View File

@@ -0,0 +1,26 @@
package com.fancyinnovations.fancydialogs.api.data.inputs;
import java.util.List;
public class DialogSelect extends DialogInput {
private final List<Entry> options;
public DialogSelect(String key, String label, int order, List<Entry> options) {
super(key, label, order);
this.options = options;
}
public List<Entry> getOptions() {
return options;
}
public record Entry(
String value,
String display,
boolean initial
) {
}
}

View File

@@ -5,6 +5,7 @@ import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
import com.fancyinnovations.fancydialogs.api.data.DialogButton; import com.fancyinnovations.fancydialogs.api.data.DialogButton;
import com.fancyinnovations.fancydialogs.api.data.DialogData; import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInput; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInput;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogSelect;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogTextField; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogTextField;
import de.oliver.fancysitula.api.dialogs.FS_CommonDialogData; import de.oliver.fancysitula.api.dialogs.FS_CommonDialogData;
import de.oliver.fancysitula.api.dialogs.FS_DialogAction; import de.oliver.fancysitula.api.dialogs.FS_DialogAction;
@@ -15,6 +16,7 @@ import de.oliver.fancysitula.api.dialogs.body.FS_DialogBody;
import de.oliver.fancysitula.api.dialogs.body.FS_DialogTextBody; import de.oliver.fancysitula.api.dialogs.body.FS_DialogTextBody;
import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogInput; import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogInput;
import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogInputControl; import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogInputControl;
import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogSingleOptionInput;
import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogTextInput; import de.oliver.fancysitula.api.dialogs.inputs.FS_DialogTextInput;
import de.oliver.fancysitula.api.dialogs.types.FS_MultiActionDialog; import de.oliver.fancysitula.api.dialogs.types.FS_MultiActionDialog;
import de.oliver.fancysitula.api.entities.FS_RealPlayer; import de.oliver.fancysitula.api.entities.FS_RealPlayer;
@@ -58,6 +60,17 @@ public class DialogImpl extends Dialog {
new FS_DialogTextInput.MultilineOptions(textField.getMaxLines(), null) : new FS_DialogTextInput.MultilineOptions(textField.getMaxLines(), null) :
null null
); );
} else if (input instanceof DialogSelect select) {
List<FS_DialogSingleOptionInput.Entry> entries = new ArrayList<>();
for (DialogSelect.Entry entry : select.getOptions()) {
entries.add(new FS_DialogSingleOptionInput.Entry(entry.value(), entry.display(), entry.initial()));
}
control = new FS_DialogSingleOptionInput(
200, // default width
entries,
select.getLabel(),
!select.getLabel().isEmpty()
);
} }
if (control == null) { if (control == null) {

View File

@@ -5,6 +5,7 @@ import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
import com.fancyinnovations.fancydialogs.api.data.DialogButton; import com.fancyinnovations.fancydialogs.api.data.DialogButton;
import com.fancyinnovations.fancydialogs.api.data.DialogData; import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogSelect;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogTextField; import com.fancyinnovations.fancydialogs.api.data.inputs.DialogTextField;
import com.fancyinnovations.fancydialogs.dialog.DialogImpl; import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
import com.fancyinnovations.fancydialogs.storage.DialogStorage; import com.fancyinnovations.fancydialogs.storage.DialogStorage;
@@ -45,13 +46,26 @@ public class DefaultDialogs {
new DialogInputs( new DialogInputs(
List.of( List.of(
new DialogTextField( new DialogTextField(
"fav_color", "nickname",
"<color:#ff7300>What is your favorite color?</color>", "<color:#ff7300>What is your nickname?</color>",
1, 1,
"gold", "",
50, 50,
1 1
) )
),
List.of(
new DialogSelect(
"color_choice",
"<color:#ff7300>Choose your favorite color</color>",
2,
List.of(
new DialogSelect.Entry("red", "<color:red>Red</color>", true),
new DialogSelect.Entry("green", "<color:green>Green</color>", false),
new DialogSelect.Entry("blue", "<color:blue>Blue</color>", false),
new DialogSelect.Entry("yellow", "<color:yellow>Yellow</color>", false)
)
)
) )
), ),
List.of( List.of(
@@ -64,7 +78,7 @@ public class DefaultDialogs {
"<color:#ffd000>Show favourite color</color>", "<color:#ffd000>Show favourite color</color>",
"<color:#ff4f19>Click to show your fav color :D</color>", "<color:#ff4f19>Click to show your fav color :D</color>",
List.of( List.of(
new DialogButton.DialogAction("message", "Your favorite color is: <color:{fav_color}>{fav_color}</color>") new DialogButton.DialogAction("message", "Hi {nickname}, your favorite color is: <color:{color_choice}>{color_choice}</color>")
) )
) )
) )