fancydialogs: Add console_command, player_command and send_to_server actions

This commit is contained in:
Oliver
2025-06-19 16:22:37 +02:00
parent 819e6a4ed8
commit 50844fa59b
6 changed files with 105 additions and 3 deletions

View File

@@ -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()));
}

View File

@@ -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) {

View File

@@ -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);
}
});
}
}

View File

@@ -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);
}

View File

@@ -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);
});
}
}

View File

@@ -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());
}
}