From e1c04f89a931bfdfbb8049ac3382d939f331f0d9 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:06:35 +0700 Subject: [PATCH] refactor: optimize the bot by at least a little bit --- build-number.txt | 2 +- .../chomens_bot/plugins/ChatPlugin.java | 9 +- .../chomens_bot/plugins/CorePlugin.java | 16 +-- .../plugins/FilterManagerPlugin.java | 11 +- .../chomens_bot/plugins/TeamJoinerPlugin.java | 26 +++-- .../chomens_bot/plugins/TeamPlugin.java | 110 ++++++++---------- 6 files changed, 81 insertions(+), 93 deletions(-) diff --git a/build-number.txt b/build-number.txt index 217ed930..d32d224a 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1676 \ No newline at end of file +1684 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java index 90d35a42..c50f396d 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ChatPlugin.java @@ -26,6 +26,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.Serverbound import java.time.Instant; import java.util.*; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,7 +40,7 @@ public class ChatPlugin extends Bot.Listener { private final List chatParsers; - private final List queue = Collections.synchronizedList(new ArrayList<>()); + private final ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue<>(); public final int queueDelay; @@ -239,9 +240,9 @@ public class ChatPlugin extends Bot.Listener { private void sendChatTick () { if (queue.size() > 100) queue.clear(); // detects spam, like spamming *echo for example - if (queue.isEmpty()) return; + final String message = queue.poll(); - final String message = queue.getFirst(); + if (message == null) return; if (message.startsWith("/")) { String removedMessage = message.substring(1); @@ -263,8 +264,6 @@ public class ChatPlugin extends Bot.Listener { } else { sendChatInstantly(message); } - - queue.remove(0); } public void sendCommandInstantly (String command) { diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java index d0200a21..ced5a7ef 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java @@ -27,6 +27,7 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.Serv import java.util.*; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; @@ -50,7 +51,7 @@ public class CorePlugin extends PositionPlugin.Listener { public Vector3i block = null; - public final List placeBlockQueue = Collections.synchronizedList(new ArrayList<>()); + public final ConcurrentLinkedQueue placeBlockQueue = new ConcurrentLinkedQueue<>(); private int commandsPerSecond = 0; @@ -105,17 +106,16 @@ public class CorePlugin extends PositionPlugin.Listener { @Override public void onTick() { try { - final List clonedQueue = new ArrayList<>(placeBlockQueue); - - if (clonedQueue.isEmpty()) return; - - if (clonedQueue.size() > 500) { + if (placeBlockQueue.size() > 300) { placeBlockQueue.clear(); return; } - forceRunPlaceBlock(clonedQueue.getFirst()); - placeBlockQueue.removeFirst(); + final String command = placeBlockQueue.poll(); + + if (command == null) return; + + forceRunPlaceBlock(command); } catch (Exception e) { bot.logger.error(e); } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java index c5e09a3c..d5f1ff95 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/FilterManagerPlugin.java @@ -25,12 +25,7 @@ public class FilterManagerPlugin extends PlayersPlugin.Listener { bot.players.addListener(this); - bot.tick.addListener(new TickPlugin.Listener() { - @Override - public void onAlwaysTick() { - FilterManagerPlugin.this.onAlwaysTick(); - } - }); + bot.executor.scheduleAtFixedRate(this::removeLeftPlayers, 0, 1, TimeUnit.SECONDS); bot.addListener(new Bot.Listener() { @Override @@ -58,8 +53,8 @@ public class FilterManagerPlugin extends PlayersPlugin.Listener { bot.executor.scheduleAtFixedRate(this::kick, 0, 10, TimeUnit.SECONDS); } - private void onAlwaysTick () { - // remove from list if player is not on the server + private void removeLeftPlayers () { + // remove from list if player is not on the server anymore list.entrySet().removeIf(entry -> bot.players.getEntry(entry.getKey().profile.getId()) == null); } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamJoinerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamJoinerPlugin.java index bd3ed850..7334d79c 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamJoinerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamJoinerPlugin.java @@ -5,10 +5,10 @@ import me.chayapak1.chomens_bot.data.team.Team; import me.chayapak1.chomens_bot.util.UUIDUtilities; import org.geysermc.mcprotocollib.network.event.session.ConnectedEvent; -import java.util.ArrayList; +import java.util.concurrent.TimeUnit; // the name might sound confusing but it just adds the bot into its own team -public class TeamJoinerPlugin extends TickPlugin.Listener { +public class TeamJoinerPlugin { public final String teamName; private final Bot bot; @@ -24,16 +24,17 @@ public class TeamJoinerPlugin extends TickPlugin.Listener { } }); - bot.tick.addListener(this); + bot.executor.scheduleAtFixedRate(this::check, 0, 500, TimeUnit.MILLISECONDS); } private void connected () { addTeam(); } - @Override - public void onTick () { + public void check () { try { + if (!bot.loggedIn) return; + final Team team = bot.team.findTeamByName(teamName); if (team == null) { @@ -41,14 +42,15 @@ public class TeamJoinerPlugin extends TickPlugin.Listener { return; } - if (!team.players.contains(bot.username)) joinTeam(); - - for (String player : new ArrayList<>(team.players)) { - if (!player.equals(bot.username)) { - excludeOthers(); - break; - } + if (!team.players.contains(bot.username)) { + joinTeam(); + return; } + + // checks if ONLY the bot is in the team, and not anyone else + if (team.players.size() == 1 && team.players.getFirst().equals(bot.username)) return; + + excludeOthers(); } catch (Exception e) { bot.logger.error(e); } diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java index a6dd8814..6c61d03b 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/TeamPlugin.java @@ -10,13 +10,9 @@ import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard. import java.util.*; public class TeamPlugin extends Bot.Listener { - private final Bot bot; - public final List teams = Collections.synchronizedList(new ArrayList<>()); public TeamPlugin (Bot bot) { - this.bot = bot; - bot.addListener(this); } @@ -47,63 +43,59 @@ public class TeamPlugin extends Bot.Listener { } public void packetReceived(ClientboundSetPlayerTeamPacket packet) { - try { - switch (packet.getAction()) { - case CREATE -> { - final Team team = new Team( - packet.getTeamName(), - new ArrayList<>(), - packet.getDisplayName(), - packet.isFriendlyFire(), - packet.isSeeFriendlyInvisibles(), - packet.getNameTagVisibility(), - packet.getCollisionRule(), - packet.getColor(), - packet.getPrefix(), - packet.getSuffix() - ); + switch (packet.getAction()) { + case CREATE -> { + final Team team = new Team( + packet.getTeamName(), + new ArrayList<>(), + packet.getDisplayName(), + packet.isFriendlyFire(), + packet.isSeeFriendlyInvisibles(), + packet.getNameTagVisibility(), + packet.getCollisionRule(), + packet.getColor(), + packet.getPrefix(), + packet.getSuffix() + ); - teams.add(team); - } - case REMOVE -> { - final Team team = findTeamByName(packet.getTeamName()); - - if (team == null) return; - - teams.remove(team); - } - case UPDATE -> { - final Team team = findTeamByName(packet.getTeamName()); - - if (team == null) return; - - team.teamName = packet.getTeamName(); - team.displayName = packet.getDisplayName(); - team.friendlyFire = packet.isFriendlyFire(); - team.seeFriendlyInvisibles = packet.isSeeFriendlyInvisibles(); - team.nametagVisibility = packet.getNameTagVisibility(); - team.collisionRule = packet.getCollisionRule(); - team.color = packet.getColor(); - team.prefix = packet.getPrefix(); - team.suffix = packet.getSuffix(); - } - case ADD_PLAYER -> { - final Team team = findTeamByName(packet.getTeamName()); - - if (team == null) return; - - team.players.addAll(Arrays.asList(packet.getPlayers())); - } - case REMOVE_PLAYER -> { - final Team team = findTeamByName(packet.getTeamName()); - - if (team == null) return; - - team.players.removeAll(Arrays.asList(packet.getPlayers())); - } + teams.add(team); + } + case REMOVE -> { + final Team team = findTeamByName(packet.getTeamName()); + + if (team == null) return; + + teams.remove(team); + } + case UPDATE -> { + final Team team = findTeamByName(packet.getTeamName()); + + if (team == null) return; + + team.teamName = packet.getTeamName(); + team.displayName = packet.getDisplayName(); + team.friendlyFire = packet.isFriendlyFire(); + team.seeFriendlyInvisibles = packet.isSeeFriendlyInvisibles(); + team.nametagVisibility = packet.getNameTagVisibility(); + team.collisionRule = packet.getCollisionRule(); + team.color = packet.getColor(); + team.prefix = packet.getPrefix(); + team.suffix = packet.getSuffix(); + } + case ADD_PLAYER -> { + final Team team = findTeamByName(packet.getTeamName()); + + if (team == null) return; + + team.players.addAll(Arrays.asList(packet.getPlayers())); + } + case REMOVE_PLAYER -> { + final Team team = findTeamByName(packet.getTeamName()); + + if (team == null) return; + + team.players.removeAll(Arrays.asList(packet.getPlayers())); } - } catch (Exception e) { - bot.logger.error(e); } } }