fancydialogs: Add confirmation dialog to api

This commit is contained in:
Oliver
2025-06-15 22:04:59 +02:00
committed by Oliver
parent 1b67a7048b
commit 888725c63d
5 changed files with 121 additions and 1 deletions

View File

@@ -0,0 +1,89 @@
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 org.bukkit.entity.Player;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CompletableFuture;
public class ConfirmationDialog {
private final String title;
private final String question;
private final String confirmText;
private final String cancelText;
private final DialogData dialogData;
public ConfirmationDialog(String title, String question, String confirmText, String cancelText) {
this.title = title;
this.question = question;
this.confirmText = confirmText;
this.cancelText = cancelText;
this.dialogData = new DialogData(
"confirmation_dialog_" + UUID.randomUUID(),
this.title,
this.title,
false,
List.of(
new DialogBodyData(this.question)
),
List.of(
new DialogButton(
this.confirmText,
this.confirmText,
"confirm"
),
new DialogButton(
this.cancelText,
this.cancelText,
"cancel"
)
)
);
}
public ConfirmationDialog(String question) {
this("Confirmation", question, "Confirm", "Cancel");
}
public ConfirmationDialog(String title, String question) {
this(title, question, "Confirm", "Cancel");
}
public static boolean ask(Player player, String question) {
return new ConfirmationDialog(question).ask(player).join();
}
public CompletableFuture<Boolean> ask(Player player) {
CompletableFuture<Boolean> future = new CompletableFuture<>();
FancyDialogs.get()
.createDialog(dialogData)
.open(player);
// TODO wait for user response
future.complete(true);
return future;
}
public String getTitle() {
return title;
}
public String getQuestion() {
return question;
}
public String getConfirmText() {
return confirmText;
}
public String getCancelText() {
return cancelText;
}
}

View File

@@ -0,0 +1,16 @@
package com.fancyinnovations.fancydialogs.api;
import com.fancyinnovations.fancydialogs.api.data.DialogData;
import org.bukkit.Bukkit;
import org.bukkit.plugin.Plugin;
public interface FancyDialogs {
static FancyDialogs get() {
Plugin plugin = Bukkit.getPluginManager().getPlugin("FancyDialogs");
return (FancyDialogs) plugin;
}
Dialog createDialog(DialogData data);
}

View File

@@ -1,6 +1,7 @@
package com.fancyinnovations.fancydialogs;
import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.api.FancyDialogs;
import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.commands.DialogCMD;
import com.fancyinnovations.fancydialogs.commands.FancyDialogsCMD;
@@ -38,7 +39,7 @@ import java.util.Collection;
import java.util.Date;
import java.util.List;
public class FancyDialogsPlugin extends JavaPlugin {
public class FancyDialogsPlugin extends JavaPlugin implements FancyDialogs {
private static FancyDialogsPlugin INSTANCE;
private final ExtendedFancyLogger fancyLogger;
@@ -173,6 +174,11 @@ public class FancyDialogsPlugin extends JavaPlugin {
lamp.register(TutorialCMD.INSTANCE);
}
@Override
public Dialog createDialog(DialogData data) {
return new DialogImpl(data.id(), data);
}
public ExtendedFancyLogger getFancyLogger() {
return fancyLogger;
}

View File

@@ -1,6 +1,7 @@
package com.fancyinnovations.fancydialogs.commands;
import com.fancyinnovations.fancydialogs.FancyDialogsPlugin;
import com.fancyinnovations.fancydialogs.api.ConfirmationDialog;
import com.fancyinnovations.fancydialogs.api.Dialog;
import com.fancyinnovations.fancydialogs.api.data.DialogData;
import com.fancyinnovations.fancydialogs.dialog.DialogImpl;
@@ -59,6 +60,13 @@ public final class FancyDialogsCMD {
public void storageLoad(
final BukkitCommandActor actor
) {
if (actor.isPlayer()) {
if (!ConfirmationDialog.ask(actor.asPlayer(), "Are you sure you want to load all dialogs from storage? This will clear the current registry.")) {
translator.translate("commands.fancydialogs.storage.load.cancelled").send(actor.sender());
return;
}
}
Collection<DialogData> dialogs = plugin.getDialogStorage().loadAll();
for (DialogData dialogData : dialogs) {

View File

@@ -18,6 +18,7 @@ messages:
success: "<dark_gray> <gray>Successfully saved {warningColor}{count}<gray> dialogs to the storage."
load:
success: "<dark_gray> <gray>Successfully loaded {warningColor}{count}<gray> dialogs from the storage."
cancelled: "<dark_gray> <gray>Loading dialogs from storage was cancelled."
reload:
success: "<dark_gray> <gray>Successfully reloaded {warningColor}{count}<gray> dialogs from the storage."
registry: