diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index cec8a5f..27b09d1 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,31 +4,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
@@ -117,13 +94,6 @@
1680245437032
-
- 1681001658785
-
-
-
- 1681001658785
-
1681003794277
@@ -460,7 +430,14 @@
1681972329498
-
+
+ 1681984879688
+
+
+
+ 1681984879688
+
+
@@ -475,7 +452,6 @@
-
@@ -500,7 +476,8 @@
-
+
+
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 cf0eb9f..1ae964d 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 @Setter private boolean useCore;
@Getter @Setter private boolean useChat;
@Getter private final boolean hasEssentials;
@Getter private final List allBots;
@@ -63,12 +64,13 @@ public class Bot {
@Getter private MazePlugin maze;
@Getter private ExploitsPlugin exploits;
- public Bot (String host, int port, String _username, boolean kaboom, String serverName, boolean useChat, boolean hasEssentials, List allBots, Configuration config) {
+ public Bot (String host, int port, String _username, boolean kaboom, String serverName, boolean useCore, boolean useChat, boolean hasEssentials, List allBots, Configuration config) {
this.host = host;
this.port = port;
this._username = _username;
this.kaboom = kaboom;
this.serverName = serverName;
+ this.useCore = useCore;
this.useChat = useChat;
this.hasEssentials = hasEssentials;
this.allBots = allBots;
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 7fb1361..e4ae346 100644
--- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Configuration.java
@@ -79,7 +79,8 @@ public class Configuration {
@Getter public String username;
@Getter public boolean kaboom = false;
@Getter public String serverName;
+ @Getter public boolean useCore = true;
@Getter public boolean useChat = false;
- @Getter public boolean hasEssentials = false;
+ @Getter public boolean hasEssentials = true;
}
}
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 38deec9..3bfaf88 100644
--- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Main.java
@@ -70,10 +70,11 @@ public class Main {
final String username = botOption.username();
final boolean kaboom = botOption.kaboom();
final String serverName = botOption.serverName();
+ final boolean useCore = botOption.useCore();
final boolean useChat = botOption.useChat();
final boolean hasEssentials = botOption.hasEssentials();
- final Bot bot = new Bot(host, port, username, kaboom, serverName, useChat, hasEssentials, allBots, config);
+ final Bot bot = new Bot(host, port, username, kaboom, serverName, useCore, useChat, hasEssentials, allBots, config);
allBots.add(bot);
}
diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/ClearChatQueueCommand.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/ClearChatQueueCommand.java
new file mode 100644
index 0000000..749876d
--- /dev/null
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/commands/ClearChatQueueCommand.java
@@ -0,0 +1,43 @@
+package land.chipmunk.chayapak.chomens_bot.commands;
+
+import land.chipmunk.chayapak.chomens_bot.Bot;
+import land.chipmunk.chayapak.chomens_bot.command.Command;
+import land.chipmunk.chayapak.chomens_bot.command.CommandContext;
+import net.kyori.adventure.text.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ClearChatQueueCommand implements Command {
+ public String name() { return "clearchatqueue"; }
+
+ public String description() {
+ return "Clears the bot's chat queue";
+ }
+
+ public List usage() {
+ final List usages = new ArrayList<>();
+ usages.add("");
+
+ return usages;
+ }
+
+ public List alias() {
+ final List aliases = new ArrayList<>();
+ aliases.add("ccq");
+
+ return aliases;
+ }
+
+ public int trustLevel() {
+ return 0;
+ }
+
+ public Component execute(CommandContext context, String[] args, String[] fullArgs) {
+ final Bot bot = context.bot();
+
+ bot.chat().queue().clear();
+
+ return Component.text("success");
+ }
+}
diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/BossbarManagerPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/BossbarManagerPlugin.java
index d0baf00..e2f595b 100644
--- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/BossbarManagerPlugin.java
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/BossbarManagerPlugin.java
@@ -52,6 +52,7 @@ public class BossbarManagerPlugin extends SessionAdapter {
}
private void update() {
+ if (!enabled) return;
for (Map.Entry _bossBar : bossBars.entrySet()) {
final String name = _bossBar.getKey();
final BossBar bossBar = _bossBar.getValue();
@@ -84,6 +85,7 @@ public class BossbarManagerPlugin extends SessionAdapter {
}
private void createBossBar (String name, String players) {
+ if (!enabled) return;
bot.core().run("minecraft:bossbar add " + bossBarPrefix + name + " \"\"");
bot.core().run("minecraft:bossbar set " + bossBarPrefix + name + " players " + players);
}
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 dc395fd..96523c1 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
@@ -17,6 +17,7 @@ import land.chipmunk.chayapak.chomens_bot.chatParsers.data.MutablePlayerListEntr
import land.chipmunk.chayapak.chomens_bot.chatParsers.data.PlayerMessage;
import land.chipmunk.chayapak.chomens_bot.util.ComponentUtilities;
import land.chipmunk.chayapak.chomens_bot.util.UUIDUtilities;
+import lombok.Getter;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.TranslatableComponent;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
@@ -32,6 +33,8 @@ public class ChatPlugin extends SessionAdapter {
private final CommandSpyParser commandSpyParser;
+ @Getter private final List queue = new ArrayList<>();
+
private final List listeners = new ArrayList<>();
public ChatPlugin (Bot bot) {
@@ -45,6 +48,8 @@ public class ChatPlugin extends SessionAdapter {
chatParsers.add(new MinecraftChatParser(bot));
chatParsers.add(new KaboomChatParser(bot));
chatParsers.add(new ChomeNSCustomChatParser(bot));
+
+ bot.executor().scheduleAtFixedRate(this::sendChatTick, 0, 125, TimeUnit.MILLISECONDS);
}
@Override
@@ -131,26 +136,28 @@ public class ChatPlugin extends SessionAdapter {
}
}
- public void send (String message) {
- final String[] splitted = message.split("(?<=\\G.{100})|\\n");
+ private void sendChatTick () {
+ if (queue.size() == 0) return;
+
+ final String message = queue.get(0);
+
+ final String[] splitted = message.split("(?<=\\G.{255})|\\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,
- Collections.emptyList(),
- 0,
- new BitSet()
- ));
- } else {
- // Temporary fix for the bot getting kicked instead of chatting
- bot.core().run("essentials:sudo " + bot.players().getBotEntry().profile().getIdAsString() + " c:" + splitMessage);
+ if (splitMessage.startsWith("/")) {
+ bot.session().send(new ServerboundChatCommandPacket(
+ splitMessage.substring(1),
+ Instant.now().toEpochMilli(),
+ 0L,
+ Collections.emptyList(),
+ 0,
+ new BitSet()
+ ));
+ } else {
+ // Temporary fix for the bot getting kicked instead of chatting
+ bot.core().run("essentials:sudo " + bot.players().getBotEntry().profile().getIdAsString() + " c:" + splitMessage);
// bot.session().send(new ServerboundChatPacket(
// splitMessage,
// Instant.now().toEpochMilli(),
@@ -159,11 +166,14 @@ public class ChatPlugin extends SessionAdapter {
// 0,
// new BitSet()
// ));
- }
- }, i, TimeUnit.MILLISECONDS);
-
- i = i + 200;
+ }
}
+
+ queue.remove(0);
+ }
+
+ public void send (String message) {
+ queue.add(message);
}
public void tellraw (Component component, String targets) {
diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java
index 40b8617..2fd9b47 100644
--- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CommandHandlerPlugin.java
@@ -58,6 +58,7 @@ public class CommandHandlerPlugin {
registerCommand(new GenerateMazeCommand());
registerCommand(new TranslateCommand());
registerCommand(new KickCommand());
+ registerCommand(new ClearChatQueueCommand());
}
public void registerCommand (Command command) {
diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CorePlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CorePlugin.java
index 091c1ca..6db028f 100644
--- a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CorePlugin.java
+++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/CorePlugin.java
@@ -78,16 +78,20 @@ public class CorePlugin extends PositionPlugin.PositionListener {
public void run (String command) {
if (!ready) return;
- bot.session().send(new ServerboundSetCommandBlockPacket(
- absoluteCorePosition(),
- command,
- kaboom ? CommandBlockMode.AUTO : CommandBlockMode.REDSTONE,
- true,
- false,
- true
- ));
+ if (bot.useCore()) {
+ bot.session().send(new ServerboundSetCommandBlockPacket(
+ absoluteCorePosition(),
+ command,
+ kaboom ? CommandBlockMode.AUTO : CommandBlockMode.REDSTONE,
+ true,
+ false,
+ true
+ ));
- incrementBlock();
+ incrementBlock();
+ } else if (command.length() < 256) {
+ bot.chat().send("/" + command);
+ }
}
public CompletableFuture runTracked (String command) {
diff --git a/src/main/resources/default-config.yml b/src/main/resources/default-config.yml
index 9017990..ea0da9b 100644
--- a/src/main/resources/default-config.yml
+++ b/src/main/resources/default-config.yml
@@ -61,16 +61,20 @@ selfCare:
prefix: true
username: true # do NOT set this to false unless you know what you are doing
bots:
- # username and kaboom are optional.
+ # username, kaboom, useCore, useChat and hasEssentials are optional.
+
# for username if it doesn't exist it will default to random username
# for kaboom it will just default to `false`
# for serverName name it whatever you like, it will be used as server name in trusted broadcast
+ # for useCore it just sends the command using chat instead of using core. recommended to enable useChat too when this is enabled
# for useChat when the bot sends output (tellraw) it will chat instead of using the core to run tellraw
# for hasEssentials it is self-explanatory. if the server has essentials plugin just set it to true
+
- host: 'localhost'
port: 25565
username: 'ChomeNS_Bot'
kaboom: false
serverName: 'Localhost'
+ useCore: true
useChat: false
hasEssentials: false