From 65aa2302608de259b3231abf9c33345db488ee8a Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Sat, 16 Nov 2024 18:41:34 +0700 Subject: [PATCH] fix,refactor: fix findalts and use thenApplyAsync instead of thenApply for non-blocking --- .../commands/CommandBlockCommand.java | 2 +- .../chomens_bot/commands/EvalCommand.java | 2 +- .../chomens_bot/commands/FindAltsCommand.java | 20 +++++++++---------- .../chomens_bot/commands/MailCommand.java | 2 +- .../chomens_bot/commands/MusicCommand.java | 4 ++-- .../chomens_bot/plugins/CorePlugin.java | 2 +- .../chomens_bot/plugins/IPFilterPlugin.java | 2 +- .../plugins/PlayersPersistentDataPlugin.java | 2 +- .../chomens_bot/plugins/PlayersPlugin.java | 6 +++--- .../plugins/ServerPluginsManagerPlugin.java | 2 +- 10 files changed, 21 insertions(+), 23 deletions(-) diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/CommandBlockCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/CommandBlockCommand.java index 278bc0e6..9819f9d9 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/CommandBlockCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/CommandBlockCommand.java @@ -103,7 +103,7 @@ public class CommandBlockCommand extends Command { if (future == null) return; - future.thenApply(output -> { + future.thenApplyAsync(output -> { context.sendOutput(output); return output; diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/EvalCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/EvalCommand.java index 8a6aa711..81cd2f51 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/EvalCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/EvalCommand.java @@ -38,7 +38,7 @@ public class EvalCommand extends Command { final CompletableFuture future = bot.eval.run(command); - future.thenApply((output) -> { + future.thenApplyAsync(output -> { if (output.isError()) context.sendOutput(Component.text(output.output()).color(NamedTextColor.RED)); else context.sendOutput(Component.text(output.output())); 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 e4c96026..e6d6bd52 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/FindAltsCommand.java @@ -5,7 +5,6 @@ import com.google.gson.JsonObject; import me.chayapak1.chomens_bot.Bot; import me.chayapak1.chomens_bot.command.Command; import me.chayapak1.chomens_bot.command.CommandContext; -import me.chayapak1.chomens_bot.command.CommandException; import me.chayapak1.chomens_bot.command.TrustLevel; import me.chayapak1.chomens_bot.data.PlayerEntry; import me.chayapak1.chomens_bot.plugins.PlayersPersistentDataPlugin; @@ -14,7 +13,6 @@ import net.kyori.adventure.text.Component; import java.util.Map; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; import java.util.stream.Stream; public class FindAltsCommand extends Command { @@ -33,25 +31,25 @@ public class FindAltsCommand extends Command { public Component execute(CommandContext context) throws Exception { final Bot bot = context.bot; - boolean argumentIsIP = true; - - String targetIP; - final String player = context.getString(true, true); final PlayerEntry playerEntry = bot.players.getEntry(player); - if (playerEntry == null) targetIP = player; + if (playerEntry == null) return handle(bot, player, true, player); else { - argumentIsIP = false; - final CompletableFuture future = bot.players.getPlayerIP(playerEntry); - targetIP = future.get(5, TimeUnit.SECONDS); + future.thenApplyAsync(targetIP -> { + context.sendOutput(handle(bot, targetIP, false, player)); + + return targetIP; + }); } - if (targetIP == null) throw new CommandException(Component.text("Could not find player's IP address")); + return null; + } + private Component handle (Bot bot, String targetIP, boolean argumentIsIP, String player) { final Stream matches = PlayersPersistentDataPlugin.playersObject.deepCopy().entrySet() // is calling deepCopy necessary? .stream() .filter( diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/MailCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/MailCommand.java index 6be69392..e0757664 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/MailCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/MailCommand.java @@ -106,7 +106,7 @@ public class MailCommand extends Command { throw new CommandException(Component.text("There was an error while sending your mail")); } - future.thenApply(output -> { + future.thenApplyAsync(output -> { try { final List children = output.children(); diff --git a/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java b/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java index 91dac061..4ecb8619 100644 --- a/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java +++ b/src/main/java/me/chayapak1/chomens_bot/commands/MusicCommand.java @@ -206,7 +206,7 @@ public class MusicCommand extends Command { throw new CommandException(Component.text("There was an error while getting your data")); } - future.thenApply(output -> { + future.thenApplyAsync(output -> { final List children = output.children(); if ( @@ -264,7 +264,7 @@ public class MusicCommand extends Command { throw new CommandException(Component.text("There was an error while getting your data")); } - future.thenApply(output -> { + future.thenApplyAsync(output -> { final List children = output.children(); if ( 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 b13524d7..d43507a2 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/CorePlugin.java @@ -239,7 +239,7 @@ public class CorePlugin extends PositionPlugin.Listener { final String stringLastOutput = ((TextComponent) children.get(1)).content(); - future.complete(Component.join(JoinConfiguration.separator(Component.space()), GsonComponentSerializer.gson().deserialize(stringLastOutput).children())); + future.complete(Component.join(JoinConfiguration.separator(Component.empty()), GsonComponentSerializer.gson().deserialize(stringLastOutput).children())); return false; } catch (ClassCastException | NumberFormatException ignored) {} 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 cbf8bb1c..e15413e0 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/IPFilterPlugin.java @@ -40,7 +40,7 @@ public class IPFilterPlugin extends PlayersPlugin.Listener { if (future == null) return; - future.thenApply(output -> { + future.thenApplyAsync(output -> { handleIP(output, target); return output; diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java index 5b3ac485..54a6c7de 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPersistentDataPlugin.java @@ -50,7 +50,7 @@ public class PlayersPersistentDataPlugin extends PlayersPlugin.Listener { future.completeOnTimeout(null, 5, TimeUnit.SECONDS); - future.thenApply(output -> { + future.thenApplyAsync(output -> { if (output != null) { object.getAsJsonObject("ips").addProperty(bot.host + ":" + bot.port, output); } 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 987cf68f..2cfb839c 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/PlayersPlugin.java @@ -68,10 +68,10 @@ public class PlayersPlugin extends Bot.Listener { if (trackedCoreFuture == null) return null; - trackedCoreFuture.thenApply(output -> { + trackedCoreFuture.thenApplyAsync(output -> { final List children = output.children(); - String stringified = ComponentUtilities.stringify(Component.join(JoinConfiguration.separator(Component.space()), children)); + String stringified = ComponentUtilities.stringify(Component.join(JoinConfiguration.separator(Component.empty()), children)); if (!stringified.startsWith(" - IP Address: ")) return output; @@ -192,7 +192,7 @@ public class PlayersPlugin extends Bot.Listener { final PlayerEntry target = getEntry(uuid); if (target == null) return; - bot.tabComplete.tabComplete("/minecraft:scoreboard players add ").thenApply(packet -> { + bot.tabComplete.tabComplete("/minecraft:scoreboard players add ").thenApplyAsync(packet -> { final String[] matches = packet.getMatches(); final Component[] tooltips = packet.getTooltips(); final String username = target.profile.getName(); diff --git a/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java b/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java index 5153feae..2a750915 100644 --- a/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java +++ b/src/main/java/me/chayapak1/chomens_bot/plugins/ServerPluginsManagerPlugin.java @@ -27,7 +27,7 @@ public class ServerPluginsManagerPlugin extends Bot.Listener { public void connected(ConnectedEvent event) { final CompletableFuture future = bot.tabComplete.tabComplete("/ver "); - future.thenApply((packet) -> { + future.thenApplyAsync((packet) -> { final String[] matches = packet.getMatches(); // should i just use the plugins as the String array instead of a list?