mirror of
https://github.com/FancyInnovations/FancyPlugins.git
synced 2025-12-06 07:43:36 +00:00
fancydialgos: Add support for text fields
This commit is contained in:
@@ -5,6 +5,10 @@ order: 1
|
||||
|
||||
# FancyDialogs v0.x.x
|
||||
|
||||
## v0.0.5 [!badge variant="info" text="2025-06-20"]
|
||||
|
||||
- Added support for text fields in dialogs
|
||||
|
||||
## v0.0.4 [!badge variant="info" text="2025-06-20"]
|
||||
|
||||
- Added fancyanalytics integration
|
||||
|
||||
@@ -1 +1 @@
|
||||
0.0.4
|
||||
0.0.5
|
||||
@@ -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)
|
||||
);
|
||||
|
||||
|
||||
@@ -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()
|
||||
);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
) {
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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,
|
||||
|
||||
@@ -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>",
|
||||
|
||||
Reference in New Issue
Block a user