From 50844fa59b642adfc5d54d7af7e88e60485c7f81 Mon Sep 17 00:00:00 2001 From: Oliver Date: Thu, 19 Jun 2025 16:22:37 +0200 Subject: [PATCH] fancydialogs: Add console_command, player_command and send_to_server actions --- .../fancydialogs/FancyDialogsPlugin.java | 2 + .../fancydialogs/actions/ActionRegistry.java | 6 ++- .../ConsoleCommandDialogAction.java | 38 +++++++++++++++++++ .../defaultActions/MessageDialogAction.java | 7 +++- .../PlayerCommandDialogAction.java | 31 +++++++++++++++ .../SendToServerDialogAction.java | 24 ++++++++++++ 6 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/ConsoleCommandDialogAction.java create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/PlayerCommandDialogAction.java create mode 100644 plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/SendToServerDialogAction.java diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java index ee22cf3a..5b7b256c 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/FancyDialogsPlugin.java @@ -150,6 +150,8 @@ public class FancyDialogsPlugin extends JavaPlugin implements FancyDialogs { new OpenDialogNpcAction().register(); } + getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord"); + fancyLogger.info("Successfully enabled FancyDialogs version %s".formatted(getDescription().getVersion())); } diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java index 0642d48f..1eb4a88d 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/ActionRegistry.java @@ -1,7 +1,6 @@ package com.fancyinnovations.fancydialogs.actions; -import com.fancyinnovations.fancydialogs.actions.defaultActions.MessageDialogAction; -import com.fancyinnovations.fancydialogs.actions.defaultActions.OpenDialogDialogAction; +import com.fancyinnovations.fancydialogs.actions.defaultActions.*; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -19,6 +18,9 @@ public class ActionRegistry { private void registerDefaultActions() { registerAction("open_dialog", OpenDialogDialogAction.INSTANCE); registerAction("message", MessageDialogAction.INSTANCE); + registerAction("console_command", ConsoleCommandDialogAction.INSTANCE); + registerAction("player_command", PlayerCommandDialogAction.INSTANCE); + registerAction("send_to_server", SendToServerDialogAction.INSTANCE); } public void registerAction(String actionId, DialogAction action) { diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/ConsoleCommandDialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/ConsoleCommandDialogAction.java new file mode 100644 index 00000000..ac07ee5e --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/ConsoleCommandDialogAction.java @@ -0,0 +1,38 @@ +package com.fancyinnovations.fancydialogs.actions.defaultActions; + +import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; +import com.fancyinnovations.fancydialogs.actions.DialogAction; +import com.fancyinnovations.fancydialogs.api.Dialog; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +public class ConsoleCommandDialogAction implements DialogAction { + + public static final ConsoleCommandDialogAction INSTANCE = new ConsoleCommandDialogAction(); + + private ConsoleCommandDialogAction() { + } + + @Override + public void execute(Player player, Dialog dialog, String data) { + if (data == null || data.isEmpty()) { + return; + } + + String command = data; + if (player != null) { + command = data.replace("{player}", player.getName()); + } + + String finalCommand = command; + + // Execute the command on the server console + Bukkit.getScheduler().runTask(FancyDialogsPlugin.get(), () -> { + try { + player.getServer().dispatchCommand(player.getServer().getConsoleSender(), finalCommand); + } catch (Exception e) { + player.sendMessage("§cFailed to execute command: " + finalCommand); + } + }); + } +} diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/MessageDialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/MessageDialogAction.java index fc7eddd6..6fb68676 100644 --- a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/MessageDialogAction.java +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/MessageDialogAction.java @@ -19,7 +19,12 @@ public class MessageDialogAction implements DialogAction { return; } - Component msg = ModernChatColorHandler.translate(data); + String raw = data; + if (player != null) { + raw = data.replace("{player}", player.getName()); + } + + Component msg = ModernChatColorHandler.translate(raw); player.sendMessage(msg); } diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/PlayerCommandDialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/PlayerCommandDialogAction.java new file mode 100644 index 00000000..d6c00b13 --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/PlayerCommandDialogAction.java @@ -0,0 +1,31 @@ +package com.fancyinnovations.fancydialogs.actions.defaultActions; + +import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; +import com.fancyinnovations.fancydialogs.actions.DialogAction; +import com.fancyinnovations.fancydialogs.api.Dialog; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.lushplugins.chatcolorhandler.ChatColorHandler; +import org.lushplugins.chatcolorhandler.parsers.ParserTypes; + +public class PlayerCommandDialogAction implements DialogAction { + + public static final PlayerCommandDialogAction INSTANCE = new PlayerCommandDialogAction(); + + private PlayerCommandDialogAction() { + } + + @Override + public void execute(Player player, Dialog dialog, String data) { + if (data == null || data.isEmpty()) { + return; + } + + String command = ChatColorHandler.translate(data, player, ParserTypes.placeholder()); + + Bukkit.getScheduler().runTask(FancyDialogsPlugin.get(), () -> { + player.chat("/" + command); + }); + } + +} diff --git a/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/SendToServerDialogAction.java b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/SendToServerDialogAction.java new file mode 100644 index 00000000..1e58826a --- /dev/null +++ b/plugins/fancydialogs/src/main/java/com/fancyinnovations/fancydialogs/actions/defaultActions/SendToServerDialogAction.java @@ -0,0 +1,24 @@ +package com.fancyinnovations.fancydialogs.actions.defaultActions; + +import com.fancyinnovations.fancydialogs.FancyDialogsPlugin; +import com.fancyinnovations.fancydialogs.actions.DialogAction; +import com.fancyinnovations.fancydialogs.api.Dialog; +import com.google.common.io.ByteArrayDataOutput; +import com.google.common.io.ByteStreams; +import org.bukkit.entity.Player; + +public class SendToServerDialogAction implements DialogAction { + + public static final SendToServerDialogAction INSTANCE = new SendToServerDialogAction(); + + private SendToServerDialogAction() { + } + + @Override + public void execute(Player player, Dialog dialog, String data) { + ByteArrayDataOutput out = ByteStreams.newDataOutput(); + out.writeUTF("Connect"); + out.writeUTF(data); + player.sendPluginMessage(FancyDialogsPlugin.get(), "BungeeCord", out.toByteArray()); + } +}