From ef15c45619b623205ee11b332564deb225c66bde Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Tue, 15 Apr 2025 13:22:15 +0700 Subject: [PATCH] fix: limit query queue size (in the case where there are 10,000 players in the server) i discovered this while botting my own google cloud shell clone --- build-number.txt | 2 +- .../chomens_bot/plugins/QueryPlugin.java | 18 ++++++++++++++---- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/build-number.txt b/build-number.txt index a169a911..75748595 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -2703 \ No newline at end of file +2726 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java index de4b282f..a664658e 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/QueryPlugin.java @@ -12,6 +12,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.atomic.AtomicLong; +import java.util.stream.Collectors; public class QueryPlugin extends Bot.Listener implements ChatPlugin.Listener, TickPlugin.Listener { private static final String ID = "chomens_bot_query"; @@ -36,9 +37,18 @@ public class QueryPlugin extends Bot.Listener implements ChatPlugin.Listener, Ti public void onSecondTick () { if (cargosQueue.isEmpty()) return; - sendQueueComponent(cargosQueue); + if (cargosQueue.size() > 1000) { + cargosQueue.clear(); + return; + } - cargosQueue.clear(); + final Set set = cargosQueue.stream() + .limit(150) // due to how bloated the components are, we can only go up to around 150 + .collect(Collectors.toUnmodifiableSet()); + + sendQueueComponent(set); + + for (int i = 0; i < set.size(); i++) cargosQueue.poll(); } @Override @@ -67,7 +77,7 @@ public class QueryPlugin extends Bot.Listener implements ChatPlugin.Listener, Ti } private void sendQueueComponent (final Component component) { - final Queue queue = new LinkedList<>(); + final Set queue = new HashSet<>(); queue.add(component); // this is required so the joined component will be @@ -81,7 +91,7 @@ public class QueryPlugin extends Bot.Listener implements ChatPlugin.Listener, Ti sendQueueComponent(queue); } - private void sendQueueComponent (final Queue queue) { + private void sendQueueComponent (final Set queue) { bot.chat.tellraw( Component .translatable(