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
|
# 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"]
|
## v0.0.4 [!badge variant="info" text="2025-06-20"]
|
||||||
|
|
||||||
- Added fancyanalytics integration
|
- 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.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 org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -105,6 +106,7 @@ public class ConfirmationDialog {
|
|||||||
title,
|
title,
|
||||||
false,
|
false,
|
||||||
List.of(new DialogBodyData(question)),
|
List.of(new DialogBodyData(question)),
|
||||||
|
DialogInputs.EMPTY, // TODO add support for confirmation phrases
|
||||||
List.of(confirmBtn, cancelBtn)
|
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.DialogBodyData;
|
||||||
import com.fancyinnovations.fancydialogs.api.data.DialogData;
|
import com.fancyinnovations.fancydialogs.api.data.DialogData;
|
||||||
|
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -25,6 +26,7 @@ public class NoticeDialog {
|
|||||||
List.of(
|
List.of(
|
||||||
new DialogBodyData(this.text)
|
new DialogBodyData(this.text)
|
||||||
),
|
),
|
||||||
|
DialogInputs.EMPTY,
|
||||||
List.of()
|
List.of()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package com.fancyinnovations.fancydialogs.api.data;
|
package com.fancyinnovations.fancydialogs.api.data;
|
||||||
|
|
||||||
|
import com.fancyinnovations.fancydialogs.api.data.inputs.DialogInputs;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -9,6 +10,7 @@ public record DialogData(
|
|||||||
@NotNull String title,
|
@NotNull String title,
|
||||||
boolean canCloseWithEscape,
|
boolean canCloseWithEscape,
|
||||||
@NotNull List<DialogBodyData> body,
|
@NotNull List<DialogBodyData> body,
|
||||||
|
@NotNull DialogInputs inputs,
|
||||||
@NotNull List<DialogButton> buttons
|
@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.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.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;
|
||||||
import de.oliver.fancysitula.api.dialogs.actions.FS_CommonButtonData;
|
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.actions.FS_DialogCustomAction;
|
||||||
import de.oliver.fancysitula.api.dialogs.body.FS_DialogBody;
|
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_DialogInputControl;
|
||||||
|
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;
|
||||||
import de.oliver.fancysitula.factories.FancySitula;
|
import de.oliver.fancysitula.factories.FancySitula;
|
||||||
@@ -39,6 +44,30 @@ public class DialogImpl extends Dialog {
|
|||||||
body.add(fsDialogTextBody);
|
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<>();
|
List<FS_DialogActionButton> actions = new ArrayList<>();
|
||||||
for (DialogButton button : data.buttons()) {
|
for (DialogButton button : data.buttons()) {
|
||||||
FS_DialogActionButton fsDialogActionButton = new FS_DialogActionButton(
|
FS_DialogActionButton fsDialogActionButton = new FS_DialogActionButton(
|
||||||
@@ -66,7 +95,8 @@ public class DialogImpl extends Dialog {
|
|||||||
false,
|
false,
|
||||||
FS_DialogAction.CLOSE,
|
FS_DialogAction.CLOSE,
|
||||||
body,
|
body,
|
||||||
List.of(
|
inputs
|
||||||
|
// List.of(
|
||||||
// new FS_DialogInput(
|
// new FS_DialogInput(
|
||||||
// "input1",
|
// "input1",
|
||||||
// new FS_DialogTextInput(
|
// new FS_DialogTextInput(
|
||||||
@@ -112,7 +142,7 @@ public class DialogImpl extends Dialog {
|
|||||||
// true
|
// true
|
||||||
// )
|
// )
|
||||||
// )
|
// )
|
||||||
)
|
// )
|
||||||
),
|
),
|
||||||
actions, // actions
|
actions, // actions
|
||||||
null,
|
null,
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
|
|||||||
import com.fancyinnovations.fancydialogs.api.data.DialogBodyData;
|
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.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;
|
||||||
|
|
||||||
@@ -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("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 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(
|
List.of(
|
||||||
new DialogButton(
|
new DialogButton(
|
||||||
"<color:#ff4f19>Close</color>",
|
"<color:#ff4f19>Close</color>",
|
||||||
@@ -47,10 +61,10 @@ public class DefaultDialogs {
|
|||||||
List.of()
|
List.of()
|
||||||
),
|
),
|
||||||
new DialogButton(
|
new DialogButton(
|
||||||
"<color:#ffd000>Run command</color>",
|
"<color:#ffd000>Show favourite color</color>",
|
||||||
"<color:#ff4f19>Click to give yourself an apple :)</color>",
|
"<color:#ff4f19>Click to show your fav color :D</color>",
|
||||||
List.of(
|
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("We are glad to have you here!"),
|
||||||
new DialogBodyData("If you have any questions, feel free to ask our staff members.")
|
new DialogBodyData("If you have any questions, feel free to ask our staff members.")
|
||||||
),
|
),
|
||||||
|
DialogInputs.EMPTY,
|
||||||
List.of(
|
List.of(
|
||||||
new DialogButton(
|
new DialogButton(
|
||||||
"<color:red>Read the rules</color>",
|
"<color:red>Read the rules</color>",
|
||||||
@@ -111,6 +126,7 @@ public class DefaultDialogs {
|
|||||||
List.of(
|
List.of(
|
||||||
new DialogBodyData("Here you can quickly access some of the most important features of our server.")
|
new DialogBodyData("Here you can quickly access some of the most important features of our server.")
|
||||||
),
|
),
|
||||||
|
DialogInputs.EMPTY,
|
||||||
List.of(
|
List.of(
|
||||||
new DialogButton(
|
new DialogButton(
|
||||||
"<color:#ffee00>Visit our website</color>",
|
"<color:#ffee00>Visit our website</color>",
|
||||||
|
|||||||
Reference in New Issue
Block a user