diff --git a/build-number.txt b/build-number.txt index a41bc3f3..2796f968 100644 --- a/build-number.txt +++ b/build-number.txt @@ -1 +1 @@ -1350 \ No newline at end of file +1352 \ 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 22d2ba5c..f1706bc8 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -53,12 +53,24 @@ public class FindAltsCommand extends Command { private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player) { final List alts = bot.playersDatabase.findPlayerAlts(targetIP); + final Component playerComponent = Component + .text(player) + .color(ColorUtilities.getColorByString(bot.config.colorPalette.username)); + Component component = Component .translatable("Possible alts for the %s %s:") .color(ColorUtilities.getColorByString(bot.config.colorPalette.defaultColor)) .arguments( Component.text(argumentIsIP ? "IP" : "player"), - Component.text(player).color(ColorUtilities.getColorByString(bot.config.colorPalette.username)) + argumentIsIP ? + playerComponent : + Component.translatable("%s (%s)") + .arguments( + playerComponent, + Component + .text(targetIP) + .color(ColorUtilities.getColorByString(bot.config.colorPalette.number)) + ) ) .appendNewline(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java index 4b38a67b..172d9f66 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersDatabasePlugin.java @@ -106,7 +106,7 @@ public class PlayersDatabasePlugin extends PlayersPlugin.Listener { insertPlayerStatement.executeUpdate(); - final CompletableFuture future = bot.players.getPlayerIP(target); + final CompletableFuture future = bot.players.getPlayerIP(target, true); if (future == null) return; 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 0114ce58..45e68c03 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java @@ -1,6 +1,10 @@ package me.chayapak1.chomens_bot.plugins; +import com.fasterxml.jackson.databind.JsonNode; +import me.chayapak1.chomens_bot.Bot; +import me.chayapak1.chomens_bot.data.PlayerEntry; import me.chayapak1.chomens_bot.util.ComponentUtilities; +import net.kyori.adventure.text.Component; import net.kyori.adventure.text.JoinConfiguration; import org.geysermc.mcprotocollib.network.Session; import org.geysermc.mcprotocollib.network.event.session.DisconnectedEvent; @@ -10,9 +14,6 @@ import org.geysermc.mcprotocollib.protocol.data.game.PlayerListEntryAction; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoRemovePacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket; -import me.chayapak1.chomens_bot.Bot; -import me.chayapak1.chomens_bot.data.PlayerEntry; -import net.kyori.adventure.text.Component; import java.util.ArrayList; import java.util.EnumSet; @@ -62,28 +63,57 @@ public class PlayersPlugin extends Bot.Listener { } } - public CompletableFuture getPlayerIP (PlayerEntry target) { + public String getPlayerIPFromDatabase (PlayerEntry target) { + final JsonNode data = bot.playersDatabase.getPlayerData(target.profile.getName()); + + if (data == null) return null; + + final JsonNode ipsObject = data.get("ips"); + + if (ipsObject == null || ipsObject.isNull() || !ipsObject.isObject()) return null; + + final JsonNode targetIP = ipsObject.get(bot.host + ":" + bot.port); + + if (targetIP == null || targetIP.isNull() || !targetIP.isTextual()) return null; + + return targetIP.textValue(); + } + + public CompletableFuture getPlayerIP (PlayerEntry target) { return getPlayerIP(target, false); } + public CompletableFuture getPlayerIP (PlayerEntry target, boolean forceSeen) { final CompletableFuture outputFuture = new CompletableFuture<>(); - final CompletableFuture trackedCoreFuture = bot.core.runTracked("essentials:seen " + target.profile.getIdAsString()); + DatabasePlugin.executorService.submit(() -> { + final String databaseIP = getPlayerIPFromDatabase(target); - if (trackedCoreFuture == null) return null; + if (databaseIP != null && !forceSeen) { + outputFuture.complete(databaseIP); + return; + } - trackedCoreFuture.completeOnTimeout(null, 5, TimeUnit.SECONDS); + final CompletableFuture trackedCoreFuture = bot.core.runTracked("essentials:seen " + target.profile.getIdAsString()); - trackedCoreFuture.thenApplyAsync(output -> { - final List children = output.children(); + if (trackedCoreFuture == null) { + outputFuture.complete(null); + return; + } - String stringified = ComponentUtilities.stringify(Component.join(JoinConfiguration.separator(Component.empty()), children)); + trackedCoreFuture.completeOnTimeout(null, 5, TimeUnit.SECONDS); - if (!stringified.startsWith(" - IP Address: ")) return output; + trackedCoreFuture.thenApplyAsync(output -> { + final List children = output.children(); - stringified = stringified.trim().substring(" - IP Address: ".length()); - if (stringified.startsWith("/")) stringified = stringified.substring(1); + String stringified = ComponentUtilities.stringify(Component.join(JoinConfiguration.separator(Component.empty()), children)); - outputFuture.complete(stringified); + if (!stringified.startsWith(" - IP Address: ")) return output; - return output; + stringified = stringified.trim().substring(" - IP Address: ".length()); + if (stringified.startsWith("/")) stringified = stringified.substring(1); + + outputFuture.complete(stringified); + + return output; + }); }); return outputFuture;