diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java index dd4d009e..a95e4002 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java @@ -25,6 +25,7 @@ public class Bot { private final String _username; @Getter private final boolean kaboom; @Getter private final String serverName; + @Getter private final boolean useChat; @Getter private final List allBots; @Getter private final Configuration config; @@ -60,12 +61,13 @@ public class Bot { @Getter private CloopPlugin cloop; @Getter private MazePlugin maze; - public Bot (String host, int port, String _username, boolean kaboom, String serverName, List allBots, Configuration config) { + public Bot (String host, int port, String _username, boolean kaboom, String serverName, boolean useChat, List allBots, Configuration config) { this.host = host; this.port = port; this._username = _username; this.kaboom = kaboom; this.serverName = serverName; + this.useChat = useChat; this.allBots = allBots; this.config = config; diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java index 540459a9..a5d3e817 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java @@ -66,5 +66,6 @@ public class Configuration { @Getter public String username; @Getter public boolean kaboom = false; @Getter public String serverName; + @Getter public boolean useChat = false; } } diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java index e4af31b2..c343b968 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java @@ -70,8 +70,9 @@ public class Main { final String username = botOption.username(); final boolean kaboom = botOption.kaboom(); final String serverName = botOption.serverName(); + final boolean useChat = botOption.useChat(); - final Bot bot = new Bot(host, port, username, kaboom, serverName, allBots, config); + final Bot bot = new Bot(host, port, username, kaboom, serverName, useChat, allBots, config); allBots.add(bot); } diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ChatPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ChatPlugin.java index 73f40b91..a4834871 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ChatPlugin.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/ChatPlugin.java @@ -23,6 +23,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.UUID; +import java.util.concurrent.TimeUnit; public class ChatPlugin extends SessionAdapter { private final Bot bot; @@ -83,32 +84,63 @@ public class ChatPlugin extends SessionAdapter { } } - public void send (String message) { - if (message.startsWith("/")) { - bot.session().send(new ServerboundChatCommandPacket( - message.substring(1), - Instant.now().toEpochMilli(), - 0L, - new ArrayList<>(), - false, - new ArrayList<>(), - null - )); - } else { - bot.session().send(new ServerboundChatPacket( - message, - Instant.now().toEpochMilli(), - 0L, - new byte[0], - false, - new ArrayList<>(), - null - )); + public void send (String _message, String prefix) { + final String message = prefix + _message; + + final String[] splitted = message.split("(?<=\\G.{100})|\\n"); + + int i = 200; + for (String splitMessage : splitted) { + if (splitMessage.trim().equals("")) continue; + + bot.executor().schedule(() -> { + if (splitMessage.startsWith("/")) { + bot.session().send(new ServerboundChatCommandPacket( + splitMessage.substring(1), + Instant.now().toEpochMilli(), + 0L, + new ArrayList<>(), + false, + new ArrayList<>(), + null + )); + } else { + bot.session().send(new ServerboundChatPacket( + splitMessage, + Instant.now().toEpochMilli(), + 0L, + new byte[0], + false, + new ArrayList<>(), + null + )); + } + }, i, TimeUnit.MILLISECONDS); + + i = i + 200; } } + public void send (String message) { + send(message, ""); + } + + public void whisper (String targets, String message) { + send(message, "/tell " + targets + " "); + } + public void tellraw (Component component, String targets) { - bot.core().run("minecraft:tellraw " + targets + " " + GsonComponentSerializer.gson().serialize(component)); + if (bot.useChat()) { + if (targets.equals("@a")) { + final String stringified = ComponentUtilities.stringifyMotd(component).replace("ยง", "&"); + send(stringified); + } else { + final String stringified = ComponentUtilities.stringify(component); + whisper(targets, stringified); + } + } else { + bot.core().run("minecraft:tellraw " + targets + " " + GsonComponentSerializer.gson().serialize(component)); + } } public void tellraw (Component component, UUID uuid) { tellraw(component, UUIDUtilities.selector(uuid)); } diff --git a/src/main/resources/default-config.yml b/src/main/resources/default-config.yml index 25178bf2..b3a7ff0f 100644 --- a/src/main/resources/default-config.yml +++ b/src/main/resources/default-config.yml @@ -60,3 +60,4 @@ bots: username: 'ChomeNS_Bot' kaboom: false serverName: 'Localhost' # name it whatever you like, it will be used as server name in trusted broadcast + useChat: false # when the bot sends output (tellraw) it will chat instead of using the core to run tellraw