From 8a9b123f49adef22cddcccd59c6c5689795287b2 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:31:23 +0700 Subject: [PATCH] refactor: store player ip in PlayerEntry, so we don't have to query them in stuff like IP filter which spams console --- build-number.txt | 2 +- .../chomens_bot/commands/FindAltsCommand.java | 7 +++++-- .../chomens_bot/data/player/PlayerEntry.java | 1 + .../chomens_bot/plugins/IPFilterPlugin.java | 11 +++-------- .../chomens_bot/plugins/PlayersPlugin.java | 15 +++++++++++++++ 5 files changed, 25 insertions(+), 11 deletions(-) diff --git a/build-number.txt b/build-number.txt index f2223ccb..f3e53ee1 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -2046 \ No newline at end of file +2048 \ No newline at end of file diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java index 37ba8341..6ba6b630 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -46,8 +46,11 @@ public class FindAltsCommand extends Command { final PlayerEntry playerEntry = bot.players.getEntry(player); - if (playerEntry == null) return handle(bot, player, true, player, allServer); - else { + if (playerEntry == null) { + return handle(bot, player, true, player, allServer); + } else if (playerEntry.ip != null) { + return handle(bot, playerEntry.ip, false, player, allServer); + } else { final CompletableFuture future = bot.players.getPlayerIP(playerEntry); if (future == null) return null; diff --git a/src/main/java/me/chayapak1/chomens_bot/data/player/PlayerEntry.java b/src/main/java/me/chayapak1/chomens_bot/data/player/PlayerEntry.java index 6302268a..8be3e174 100644 --- a/src/main/java/me/chayapak1/chomens_bot/data/player/PlayerEntry.java +++ b/src/main/java/me/chayapak1/chomens_bot/data/player/PlayerEntry.java @@ -19,6 +19,7 @@ public class PlayerEntry { public PublicKey publicKey; public final byte[] keySignature; public boolean listed; + public String ip; public PlayerEntry( GameProfile profile, diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java index 38535051..c2c89ecb 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java @@ -10,7 +10,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.LinkedHashMap; import java.util.Map; -import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class IPFilterPlugin extends PlayersPlugin.Listener { @@ -67,15 +66,11 @@ public class IPFilterPlugin extends PlayersPlugin.Listener { private void check (PlayerEntry target) { if (bot.options.useCorePlaceBlock) return; // it will spam the place block core so i ignored this - final CompletableFuture future = bot.players.getPlayerIP(target); + final String ip = target.ip; - if (future == null) return; + if (ip == null) return; - future.thenApply(output -> { - handleFilterManager(output, target); - - return output; - }); + handleFilterManager(ip, target); } public static Map list () { diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java index 022bc19c..2fccf7a3 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java @@ -36,6 +36,7 @@ public class PlayersPlugin extends Bot.Listener { bot.addListener(this); + bot.executor.scheduleAtFixedRate(this::queryPlayersIP, 0, 1, TimeUnit.SECONDS); bot.executor.scheduleAtFixedRate(this::onLastKnownNameTick, 0, 5, TimeUnit.SECONDS); } @@ -67,6 +68,15 @@ public class PlayersPlugin extends Bot.Listener { } } + private void queryPlayersIP () { for (PlayerEntry target : list) queryPlayersIP(target); } + private void queryPlayersIP (PlayerEntry target) { + if (target.ip != null) return; + + final CompletableFuture future = getPlayerIP(target, true); + + future.thenApply(ip -> target.ip = ip); + } + public CompletableFuture getPlayerIP (PlayerEntry target) { return getPlayerIP(target, false); } public CompletableFuture getPlayerIP (PlayerEntry target, boolean forceSeen) { final CompletableFuture outputFuture = new CompletableFuture<>(); @@ -185,6 +195,7 @@ public class PlayersPlugin extends Bot.Listener { target.listed = true; target.usernames.addAll(duplicate.usernames); + target.ip = duplicate.ip; list.add(target); @@ -192,6 +203,8 @@ public class PlayersPlugin extends Bot.Listener { } else { list.add(target); + queryPlayersIP(target); + for (Listener listener : listeners) listener.playerJoined(target); } } @@ -261,6 +274,8 @@ public class PlayersPlugin extends Bot.Listener { newTarget.usernames.addAll(target.usernames); newTarget.usernames.addLast(target.profile.getName()); + newTarget.ip = target.ip; + list.add(newTarget); list.remove(target);