diff --git a/docs/src/fancydialogs/getting-started.md b/docs/src/fancydialogs/getting-started.md index 597fa4f7..58e01b46 100644 --- a/docs/src/fancydialogs/getting-started.md +++ b/docs/src/fancydialogs/getting-started.md @@ -79,6 +79,14 @@ The fields in this dialog are as follows: - `placeholder`: The initial text to display in the text field - `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) + - `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 - `label`: The text to display on the button (supports MiniMessage & PlaceholderAPI) - `tooltip`: The tooltip to display when hovering over the button (supports MiniMessage & PlaceholderAPI) diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogInputs.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogInputs.java index cd388d8b..2241b2cd 100644 --- a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogInputs.java +++ b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogInputs.java @@ -4,10 +4,11 @@ import java.util.ArrayList; import java.util.List; public record DialogInputs( - List textFields + List textFields, + List selects ) { - public static final DialogInputs EMPTY = new DialogInputs(List.of()); + public static final DialogInputs EMPTY = new DialogInputs(List.of(), List.of()); public List all() { List all = new ArrayList<>(); @@ -15,6 +16,10 @@ public record DialogInputs( all.addAll(textFields); } + if (selects != null) { + all.addAll(selects); + } + all.sort((o1, o2) -> { if (o1.getOrder() == o2.getOrder()) { return 0; diff --git a/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogSelect.java b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogSelect.java new file mode 100644 index 00000000..78d2e724 --- /dev/null +++ b/plugins/fancydialogs/fd-api/src/main/java/com/fancyinnovations/fancydialogs/api/data/inputs/DialogSelect.java @@ -0,0 +1,26 @@ +package com.fancyinnovations.fancydialogs.api.data.inputs; + +import java.util.List; + +public class DialogSelect extends DialogInput { + + private final List options; + + public DialogSelect(String key, String label, int order, List options) { + super(key, label, order); + this.options = options; + } + + public List getOptions() { + return options; + } + + public record Entry( + String value, + String display, + boolean initial + ) { + + } + +} diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java index 15efaf37..be98a5ea 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/dialog/DialogImpl.java @@ -5,6 +5,7 @@ import com.fancyinnovations.fancydialogs.api.data.DialogBodyData; import com.fancyinnovations.fancydialogs.api.data.DialogButton; import com.fancyinnovations.fancydialogs.api.data.DialogData; 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 de.oliver.fancysitula.api.dialogs.FS_CommonDialogData; 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.inputs.FS_DialogInput; 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.types.FS_MultiActionDialog; import de.oliver.fancysitula.api.entities.FS_RealPlayer; @@ -58,6 +60,17 @@ public class DialogImpl extends Dialog { new FS_DialogTextInput.MultilineOptions(textField.getMaxLines(), null) : null ); + } else if (input instanceof DialogSelect select) { + List 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) { diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java index 3f62b236..acf6a0be 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/registry/DefaultDialogs.java @@ -5,6 +5,7 @@ import com.fancyinnovations.fancydialogs.api.data.DialogBodyData; import com.fancyinnovations.fancydialogs.api.data.DialogButton; import com.fancyinnovations.fancydialogs.api.data.DialogData; 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.dialog.DialogImpl; import com.fancyinnovations.fancydialogs.storage.DialogStorage; @@ -45,13 +46,26 @@ public class DefaultDialogs { new DialogInputs( List.of( new DialogTextField( - "fav_color", - "What is your favorite color?", + "nickname", + "What is your nickname?", 1, - "gold", + "", 50, 1 ) + ), + List.of( + new DialogSelect( + "color_choice", + "Choose your favorite color", + 2, + List.of( + new DialogSelect.Entry("red", "Red", true), + new DialogSelect.Entry("green", "Green", false), + new DialogSelect.Entry("blue", "Blue", false), + new DialogSelect.Entry("yellow", "Yellow", false) + ) + ) ) ), List.of( @@ -64,7 +78,7 @@ public class DefaultDialogs { "Show favourite color", "Click to show your fav color :D", List.of( - new DialogButton.DialogAction("message", "Your favorite color is: {fav_color}") + new DialogButton.DialogAction("message", "Hi {nickname}, your favorite color is: {color_choice}") ) ) )