mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fancydialogs: Add support for the select input
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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>")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user