From d89cd6f9ce21fbcd8fc124f7813f45daaa2c60b5 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 3 Feb 2025 12:06:14 +0800 Subject: [PATCH] :sparkles: Deposit money --- .../solsynth/snConnect/SolarNetworkConnect.kt | 2 +- .../solsynth/snConnect/commands/SnCommand.kt | 52 +++++++++++++++++-- .../snConnect/services/SnOrderService.kt | 14 +++++ 3 files changed, 62 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/dev/solsynth/snConnect/SolarNetworkConnect.kt b/src/main/kotlin/dev/solsynth/snConnect/SolarNetworkConnect.kt index e7528a8..2ca7c73 100644 --- a/src/main/kotlin/dev/solsynth/snConnect/SolarNetworkConnect.kt +++ b/src/main/kotlin/dev/solsynth/snConnect/SolarNetworkConnect.kt @@ -26,7 +26,7 @@ class SolarNetworkConnect : JavaPlugin() { ) } - Bukkit.getPluginCommand("solar")!!.setExecutor(SnCommand(this.sn!!)) + Bukkit.getPluginCommand("solar")!!.setExecutor(SnCommand(this.sn!!, this.economy)) Bukkit.getPluginCommand("solar")!!.tabCompleter = SnCommandCompleter() logger.info( diff --git a/src/main/kotlin/dev/solsynth/snConnect/commands/SnCommand.kt b/src/main/kotlin/dev/solsynth/snConnect/commands/SnCommand.kt index 7e8f7f2..506fd5f 100644 --- a/src/main/kotlin/dev/solsynth/snConnect/commands/SnCommand.kt +++ b/src/main/kotlin/dev/solsynth/snConnect/commands/SnCommand.kt @@ -4,14 +4,16 @@ import dev.solsynth.snConnect.services.SnOrderService import dev.solsynth.snConnect.services.SnService import net.md_5.bungee.api.chat.ClickEvent import net.md_5.bungee.api.chat.TextComponent +import net.milkbowl.vault.economy.Economy import org.bukkit.ChatColor +import org.bukkit.Sound import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender import org.bukkit.command.TabCompleter import org.bukkit.entity.Player -class SnCommand(private val sn: SnService) : CommandExecutor { +class SnCommand(private val sn: SnService, private val eco: Economy?) : CommandExecutor { override fun onCommand(p0: CommandSender, p1: Command, p2: String, p3: Array): Boolean { if (p0 !is Player) { return false; @@ -26,22 +28,62 @@ class SnCommand(private val sn: SnService) : CommandExecutor { return true; } + val orderSrv = SnOrderService(sn); + + if (p3[1].equals("confirm", ignoreCase = true) && p3.size >= 3) { + // Confirming order + val orderNumber = p3[2].toLongOrNull(); + if (orderNumber == null) { + p0.sendMessage(ChatColor.RED.toString() + "Invalid order number, it must be a number."); + return true; + } + + p0.sendMessage(ChatColor.GRAY.toString() + "Confirming order, please stand by..."); + val order = orderSrv.getOrder(orderNumber); + val bal = order.amount.toDouble() * 100; + eco?.depositPlayer(p0.player, bal) + + val doneComponent = TextComponent(ChatColor.GREEN.toString() + "Done!") + val moneyComponent = TextComponent(ChatColor.GOLD.toString()+ChatColor.BOLD + " $bal$") + val suffixComponent = TextComponent(ChatColor.GREEN.toString() +" has been added to your balance.") + + p0.playSound(p0.player!!, Sound.BLOCK_ANVIL_PLACE, 1.0F, 1.0F) + p0.spigot().sendMessage(doneComponent, moneyComponent, suffixComponent) + + return true; + } + + // Creating new order val amount = p3[1].toDoubleOrNull(); if (amount == null) { p0.sendMessage(ChatColor.RED.toString() + "You need to specific an amount of number to deposit.") return true; } - val orderSrv = SnOrderService(sn); + p0.sendMessage(ChatColor.GRAY.toString() + "Creating order, please stand by..."); + val order = orderSrv.createOrder("Deposit to Highland MC", amount / 100); - val linkComponent = TextComponent(ChatColor.GOLD.toString() + "Click here to payment page") + val linkComponent = + TextComponent(ChatColor.GOLD.toString() + ChatColor.UNDERLINE.toString() + ChatColor.BOLD.toString() + "click here") linkComponent.clickEvent = ClickEvent(ClickEvent.Action.OPEN_URL, "https://solsynth.dev/orders/${order.id}"); - p0.spigot().sendMessage(linkComponent); + val orderHintComponent = + TextComponent(ChatColor.GRAY.toString() + "Order created, number " + ChatColor.WHITE + ChatColor.BOLD + "#${order.id}") + val followingComponent = TextComponent(ChatColor.GRAY.toString() + " to the payment page.") + p0.spigot() + .sendMessage(orderHintComponent, linkComponent, followingComponent); + + val afterPaidComponent = + TextComponent(ChatColor.UNDERLINE.toString() + ChatColor.YELLOW + "After you paid, click here to confirm payment.") + afterPaidComponent.clickEvent = + ClickEvent(ClickEvent.Action.RUN_COMMAND, "/sn deposit confirm ${order.id}") + p0.spigot().sendMessage(afterPaidComponent); } - else -> return false; + else -> { + return false + } } return true; diff --git a/src/main/kotlin/dev/solsynth/snConnect/services/SnOrderService.kt b/src/main/kotlin/dev/solsynth/snConnect/services/SnOrderService.kt index 7dbfd1a..eef3b51 100644 --- a/src/main/kotlin/dev/solsynth/snConnect/services/SnOrderService.kt +++ b/src/main/kotlin/dev/solsynth/snConnect/services/SnOrderService.kt @@ -66,4 +66,18 @@ class SnOrderService(private val sn: SnService) { return out } } + + fun getOrder(id: Long): SnOrder { + val request = Request.Builder() + .url(sn.getUrl("wa", "/orders/$id")) + .get() + .build() + sn.client.newCall(request).execute().use { response -> + if (!response.isSuccessful) throw IOException("Unexpected code $response") + val responseBody = response.body!!.string() + val out = json.decodeFromString(responseBody) + + return out + } + } } \ No newline at end of file