fancydialgos: Add support for text fields

This commit is contained in:
Oliver
2025-06-21 14:52:25 +02:00
parent d5665109e8
commit 450082b6f1
10 changed files with 143 additions and 6 deletions

View File

@@ -1 +1 @@
0.0.4
0.0.5

View File

@@ -3,6 +3,7 @@ package com.fancyinnovations.fancydialogs.api;
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 org.bukkit.entity.Player;
import java.util.List;
@@ -105,6 +106,7 @@ public class ConfirmationDialog {
title,
false,
List.of(new DialogBodyData(question)),
DialogInputs.EMPTY, // TODO add support for confirmation phrases
List.of(confirmBtn, cancelBtn)
);

View File

@@ -2,6 +2,7 @@ package com.fancyinnovations.fancydialogs.api;
import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
import org.bukkit.entity.Player;
import java.util.List;
@@ -25,6 +26,7 @@ public class NoticeDialog {
List.of(
new DialogBodyData(this.text)
),
DialogInputs.EMPTY,
List.of()
);
}

View File

@@ -1,5 +1,6 @@
package com.fancyinnovations.fancydialogs.api.data;
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -9,6 +10,7 @@ public record DialogData(
@NotNull String title,
boolean canCloseWithEscape,
@NotNull List<DialogBodyData> body,
@NotNull DialogInputs inputs,
@NotNull List<DialogButton> buttons
) {

View File

@@ -0,0 +1,26 @@
package com.fancyinnovations.fancydialogs.api.data.inputs;
public abstract class DialogInput {
protected final String key;
protected final String label;
protected final int order;
public DialogInput(String key, String label, int order) {
this.key = key;
this.label = label;
this.order = order;
}
public String getKey() {
return key;
}
public String getLabel() {
return label;
}
public int getOrder() {
return order;
}
}

View File

@@ -0,0 +1,28 @@
package com.fancyinnovations.fancydialogs.api.data.inputs;
import java.util.ArrayList;
import java.util.List;
public record DialogInputs(
List<DialogTextField> textFields
) {
public static final DialogInputs EMPTY = new DialogInputs(List.of());
public List<DialogInput> all() {
List<DialogInput> all = new ArrayList<>();
if (textFields != null) {
all.addAll(textFields);
}
all.sort((o1, o2) -> {
if (o1.getOrder() == o2.getOrder()) {
return 0;
}
return o1.getOrder() < o2.getOrder() ? -1 : 1;
});
return all;
}
}

View File

@@ -0,0 +1,27 @@
package com.fancyinnovations.fancydialogs.api.data.inputs;
public class DialogTextField extends DialogInput {
private final String placeholder;
private final int maxLength;
private final int maxLines;
public DialogTextField(String key, String label, int order, String placeholder, int maxLength, int maxLines) {
super(key, label, order);
this.placeholder = placeholder;
this.maxLength = maxLength;
this.maxLines = maxLines;
}
public String getPlaceholder() {
return placeholder;
}
public int getMaxLength() {
return maxLength;
}
public int getMaxLines() {
return maxLines;
}
}

View File

@@ -4,6 +4,8 @@ import com.fancyinnovations.fancydialogs.api.Dialog;
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.DialogTextField;
import de.oliver.fancysitula.api.dialogs.FS_CommonDialogData;
import de.oliver.fancysitula.api.dialogs.FS_DialogAction;
import de.oliver.fancysitula.api.dialogs.actions.FS_CommonButtonData;
@@ -11,6 +13,9 @@ import de.oliver.fancysitula.api.dialogs.actions.FS_DialogActionButton;
import de.oliver.fancysitula.api.dialogs.actions.FS_DialogCustomAction;
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_DialogTextInput;
import de.oliver.fancysitula.api.dialogs.types.FS_MultiActionDialog;
import de.oliver.fancysitula.api.entities.FS_RealPlayer;
import de.oliver.fancysitula.factories.FancySitula;
@@ -39,6 +44,30 @@ public class DialogImpl extends Dialog {
body.add(fsDialogTextBody);
}
List<FS_DialogInput> inputs = new ArrayList<>();
for (DialogInput input : data.inputs().all()) {
FS_DialogInputControl control = null;
if (input instanceof DialogTextField textField) {
control = new FS_DialogTextInput(
200, // default width
textField.getLabel(),
!textField.getLabel().isEmpty(),
textField.getPlaceholder(),
textField.getMaxLength(),
textField.getMaxLines() > 0 ?
new FS_DialogTextInput.MultilineOptions(textField.getMaxLines(), null) :
null
);
}
if (control == null) {
throw new IllegalArgumentException("Unsupported input type: " + input.getClass().getSimpleName());
}
FS_DialogInput fsDialogInput = new FS_DialogInput(input.getKey(), control);
inputs.add(fsDialogInput);
}
List<FS_DialogActionButton> actions = new ArrayList<>();
for (DialogButton button : data.buttons()) {
FS_DialogActionButton fsDialogActionButton = new FS_DialogActionButton(
@@ -66,7 +95,8 @@ public class DialogImpl extends Dialog {
false,
FS_DialogAction.CLOSE,
body,
List.of(
inputs
// List.of(
// new FS_DialogInput(
// "input1",
// new FS_DialogTextInput(
@@ -112,7 +142,7 @@ public class DialogImpl extends Dialog {
// true
// )
// )
)
// )
),
actions, // actions
null,

View File

@@ -4,6 +4,8 @@ import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
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.DialogTextField;
import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
import com.fancyinnovations.fancydialogs.storage.DialogStorage;
@@ -40,6 +42,18 @@ public class DefaultDialogs {
new DialogBodyData("Explore more features in the documentation (<click:open_url:'https://docs.fancyinnovations.com/fancyholograms/'><u>click here</u></click>)."),
new DialogBodyData("<gradient:#ff7300:#ffd199:#ff7300>Enjoy using FancyDialogs :D</gradient>")
),
new DialogInputs(
List.of(
new DialogTextField(
"fav_color",
"<color:#ff7300>What is your favorite color?</color>",
1,
"Gold",
50,
1
)
)
),
List.of(
new DialogButton(
"<color:#ff4f19>Close</color>",
@@ -47,10 +61,10 @@ public class DefaultDialogs {
List.of()
),
new DialogButton(
"<color:#ffd000>Run command</color>",
"<color:#ff4f19>Click to give yourself an apple :)</color>",
"<color:#ffd000>Show favourite color</color>",
"<color:#ff4f19>Click to show your fav color :D</color>",
List.of(
new DialogButton.DialogAction("console_command", "give @p minecraft:apple 1")
new DialogButton.DialogAction("message", "Your favorite color is: {fav_color}")
)
)
)
@@ -70,6 +84,7 @@ public class DefaultDialogs {
new DialogBodyData("We are glad to have you here!"),
new DialogBodyData("If you have any questions, feel free to ask our staff members.")
),
DialogInputs.EMPTY,
List.of(
new DialogButton(
"<color:red>Read the rules</color>",
@@ -111,6 +126,7 @@ public class DefaultDialogs {
List.of(
new DialogBodyData("Here you can quickly access some of the most important features of our server.")
),
DialogInputs.EMPTY,
List.of(
new DialogButton(
"<color:#ffee00>Visit our website</color>",