From f08fa67a84b2caea254968495a3e651f35868ffe Mon Sep 17 00:00:00 2001 From: Oliver Date: Sat, 28 Jun 2025 19:01:01 +0200 Subject: [PATCH] fancydialogs: Add open_random_dialog action --- docs/src/fancydialogs/changelog/v0.md | 4 ++ .../src/fancydialogs/tutorials/json-schema.md | 1 + plugins/fancydialogs/VERSION | 2 +- .../actions/ActionRegistryImpl.java | 1 + .../OpenRandomDialogDialogAction.java | 42 +++++++++++++++++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/OpenRandomDialogDialogAction.java diff --git a/docs/src/fancydialogs/changelog/v0.md b/docs/src/fancydialogs/changelog/v0.md index e689b15c..8fd22eb8 100644 --- a/docs/src/fancydialogs/changelog/v0.md +++ b/docs/src/fancydialogs/changelog/v0.md @@ -5,6 +5,10 @@ order: 1 # FancyDialogs v0.x.x +## v0.0.9 [!badge variant="info" text="2025-06-28"] + +- Added `open_random_dialog` action to open a random dialog from a list + ## v0.0.8 [!badge variant="info" text="2025-06-28"] - Fixed permission for dialog command diff --git a/docs/src/fancydialogs/tutorials/json-schema.md b/docs/src/fancydialogs/tutorials/json-schema.md index 6c20080e..a37ea76f 100644 --- a/docs/src/fancydialogs/tutorials/json-schema.md +++ b/docs/src/fancydialogs/tutorials/json-schema.md @@ -127,4 +127,5 @@ Available actions include: - `console_command`: Executes a command as the console (set `data` to the command) - `player_command`: Executes a command as the player (set `data` to the command) - `open_dialog`: Opens another dialog (set `data` to the ID of the dialog to open) +- `open_random_dialog`: Opens another dialog (set `data` to a list of dialog IDs separated by commas: 'dialog1,dialog2,dialog3') - `send_to_server`: Sends the player to another server (requires BungeeCord or Velocity) (set `data` to the server name) \ No newline at end of file diff --git a/plugins/fancydialogs/VERSION b/plugins/fancydialogs/VERSION index 7d6b3eb3..429d94ae 100644 --- a/plugins/fancydialogs/VERSION +++ b/plugins/fancydialogs/VERSION @@ -1 +1 @@ -0.0.8 \ No newline at end of file +0.0.9 \ No newline at end of file diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistryImpl.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistryImpl.java index 6a784586..0edeb5e7 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistryImpl.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistryImpl.java @@ -19,6 +19,7 @@ public class ActionRegistryImpl implements DialogActionRegistry { private void registerDefaultActions() { registerAction("open_dialog", OpenDialogDialogAction.INSTANCE); + registerAction("open_random_dialog", OpenRandomDialogDialogAction.INSTANCE); registerAction("message", MessageDialogAction.INSTANCE); registerAction("console_command", ConsoleCommandDialogAction.INSTANCE); registerAction("player_command", PlayerCommandDialogAction.INSTANCE); diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/OpenRandomDialogDialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/OpenRandomDialogDialogAction.java new file mode 100644 index 00000000..be1a64b6 --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/OpenRandomDialogDialogAction.java @@ -0,0 +1,42 @@ +package com.fancyinnovations.fancydialogs.actions.defaultActions; + +import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; +import com.fancyinnovations.fancydialogs.api.Dialog; +import com.fancyinnovations.fancydialogs.api.DialogAction; +import org.bukkit.entity.Player; + +public class OpenRandomDialogDialogAction implements DialogAction { + + public static final OpenRandomDialogDialogAction INSTANCE = new OpenRandomDialogDialogAction(); + + private OpenRandomDialogDialogAction() { + } + + private static String pickRandomDialogId(String[] ids) { + int randomIndex = (int) (Math.random() * ids.length); + return ids[randomIndex].trim(); + } + + @Override + public void execute(Player player, Dialog dialog, String data) { + if (data == null || data.isEmpty()) { + return; + } + + String[] ids = data.split(","); + if (ids.length == 0) { + FancyDialogsPlugin.get().getFancyLogger().warn("No dialog IDs provided in data: " + data); + return; + } + + String randomDialogId = pickRandomDialogId(ids); + + Dialog targetDialog = FancyDialogsPlugin.get().getDialogRegistry().get(randomDialogId); + if (targetDialog == null) { + FancyDialogsPlugin.get().getFancyLogger().warn("Dialog with ID '" + data + "' not found."); + return; + } + + targetDialog.open(player); + } +}