From d71156109e2fb7a7764349088064433695855b99 Mon Sep 17 00:00:00 2001 From: david Date: Sat, 7 Sep 2024 11:38:06 +0200 Subject: [PATCH] Refactor pay command for cleaner account handling. Introduced methods to encapsulate repeated logic and improve readability. Separated account retrieval and payment processing into distinct functions. Added specific handling for account not found cases. --- .../economist/command/PayCommand.java | 73 +++++++++++-------- 1 file changed, 41 insertions(+), 32 deletions(-) diff --git a/src/main/java/net/thenextlvl/economist/command/PayCommand.java b/src/main/java/net/thenextlvl/economist/command/PayCommand.java index 0a8bc39..5da5685 100644 --- a/src/main/java/net/thenextlvl/economist/command/PayCommand.java +++ b/src/main/java/net/thenextlvl/economist/command/PayCommand.java @@ -11,6 +11,7 @@ import lombok.RequiredArgsConstructor; import net.kyori.adventure.text.minimessage.tag.resolver.Placeholder; import net.thenextlvl.economist.EconomistPlugin; +import net.thenextlvl.economist.api.Account; import org.bukkit.OfflinePlayer; import org.bukkit.World; import org.bukkit.entity.Player; @@ -19,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.concurrent.CompletableFuture; @RequiredArgsConstructor @SuppressWarnings("UnstableApiUsage") @@ -70,41 +72,48 @@ private int pay(CommandContext context, List 1) players.remove(sender); - Optional.ofNullable(world).map(w -> plugin.economyController().tryGetAccount(sender, w)) - .orElseGet(() -> plugin.economyController().tryGetAccount(sender)) - .thenAccept(optional -> optional.ifPresentOrElse(account -> players.forEach(player -> + getAccount(sender, world).thenAccept(optional -> optional.ifPresentOrElse(account -> + players.forEach(player -> getAccount(player, world).thenAccept(optional1 -> + optional1.ifPresentOrElse(target -> + pay(sender, player, account, target, amount, minimum), + () -> missingAccount(world, sender, player) + ))), + () -> missingAccount(world, sender, sender))); - plugin.economyController().tryGetAccount(player).thenAccept(optional1 -> - - optional1.ifPresentOrElse(target -> { - if (account.getBalance().doubleValue() - amount >= minimum) { - - account.withdraw(amount); - target.deposit(amount); - - plugin.bundle().sendMessage(sender, "player.pay.outgoing", - Placeholder.parsed("amount", plugin.economyController().format(amount, sender.locale())), - Placeholder.parsed("player", player.getName() != null ? player.getName() : "null"), - Placeholder.parsed("symbol", plugin.economyController().getCurrencySymbol())); - - var online = player.getPlayer(); - if (online != null) plugin.bundle().sendMessage(online, "player.pay.incoming", - Placeholder.parsed("amount", plugin.economyController().format(amount, online.locale())), - Placeholder.parsed("symbol", plugin.economyController().getCurrencySymbol()), - Placeholder.parsed("player", sender.getName())); + return players.size(); + } - } else plugin.bundle().sendMessage(sender, "account.funds"); - }, () -> { - var message = world != null ? "account.not-found.world.other" : "account.not-found.other"; - var placeholder = Placeholder.parsed("world", world != null ? world.key().asString() : "null"); - plugin.bundle().sendMessage(sender, message, placeholder); - }))), () -> { + private CompletableFuture> getAccount(OfflinePlayer player, @Nullable World world) { + if (world == null) return plugin.economyController().tryGetAccount(player); + return plugin.economyController().tryGetAccount(player, world); + } - var message = world != null ? "account.not-found.world.self" : "account.not-found.self"; - var placeholder = Placeholder.parsed("world", world != null ? world.key().asString() : "null"); - plugin.bundle().sendMessage(sender, message, placeholder); - })); + private void pay(Player sender, OfflinePlayer player, Account source, Account target, double amount, double minimum) { + if (source.getBalance().doubleValue() - amount < minimum) { + plugin.bundle().sendMessage(sender, "account.funds"); + return; + } + + source.withdraw(amount); + target.deposit(amount); + + plugin.bundle().sendMessage(sender, "player.pay.outgoing", + Placeholder.parsed("amount", plugin.economyController().format(amount, sender.locale())), + Placeholder.parsed("player", player.getName() != null ? player.getName() : "null"), + Placeholder.parsed("symbol", plugin.economyController().getCurrencySymbol())); + + var online = player.getPlayer(); + if (online != null) plugin.bundle().sendMessage(online, "player.pay.incoming", + Placeholder.parsed("amount", plugin.economyController().format(amount, online.locale())), + Placeholder.parsed("symbol", plugin.economyController().getCurrencySymbol()), + Placeholder.parsed("player", sender.getName())); + } - return players.size(); + private void missingAccount(@Nullable World world, Player sender, OfflinePlayer player) { + plugin.bundle().sendMessage(sender, world != null + ? (player.equals(sender) ? "account.not-found.world.self" : "account.not-found.world.other") + : (player.equals(sender) ? "account.not-found.self" : "account.not-found.other"), + Placeholder.parsed("player", player.getName() != null ? player.getName() : "null"), + Placeholder.parsed("world", world != null ? world.key().asString() : "null")); } }