Мелкие доработки оплаты по табличке.

This commit is contained in:
justuser-31 2025-11-30 19:08:24 +03:00
parent 57dc685c5d
commit 1dbb100f97
2 changed files with 39 additions and 15 deletions

View File

@ -38,7 +38,7 @@ import java.util.Locale.getDefault
class SignPaymentInfo( class SignPaymentInfo(
public val amount: Int, public val amount: Int,
public val type: Material, public val type: Material,
public val container: Chest, public val container: Container,
public val player: Player, public val player: Player,
public val cost: Double, public val cost: Double,
public val dst_username: String public val dst_username: String
@ -51,7 +51,7 @@ class SignHandler: Listener {
if (!PAY_BY_SIGN) return if (!PAY_BY_SIGN) return
// Check if clicked block is a sign // Check if clicked block is a sign
val block = event.clickedBlock!! val block = event.clickedBlock
if (block.type != Material.SIGN_POST && block.type != Material.WALL_SIGN) return if (block.type != Material.SIGN_POST && block.type != Material.WALL_SIGN) return
// Verify it's actually a sign state // Verify it's actually a sign state
val state = block.state val state = block.state
@ -66,7 +66,11 @@ class SignHandler: Listener {
// Check if player already have open invoices // Check if player already have open invoices
if (TO_PAY_SIGN_INVOICES.contains(event.player.name)) { if (TO_PAY_SIGN_INVOICES.contains(event.player.name)) {
Utils.send(event.player, "&cУ вас уже есть открытый счёт, сначала оплатите его.") val message = TextComponent(ChatColor.translateAlternateColorCodes('&',"&cУ вас уже есть открытый счёт, сначала оплатите его или &6отмените."))
message.clickEvent = ClickEvent(ClickEvent.Action.RUN_COMMAND, "/vpi signPay cancel")
message.hoverEvent = HoverEvent(HoverEvent.Action.SHOW_TEXT,
ComponentBuilder("/vpi signPay cancel").create())
event.player.spigot().sendMessage(message)
return return
} }
@ -93,9 +97,9 @@ class SignHandler: Listener {
val containerBlock = getWorld(event.clickedBlock.world.uid).getBlockAt(cordX, cordY, cordZ) val containerBlock = getWorld(event.clickedBlock.world.uid).getBlockAt(cordX, cordY, cordZ)
LOGGER.info("Container block: $cordX $cordY $cordZ") LOGGER.info("Container block: $cordX $cordY $cordZ")
val container: Chest = containerBlock.state as Chest val container: Container = containerBlock.state as Container
LOGGER.info("Content: ${container.blockInventory.contents}") LOGGER.info("Content: ${container.inventory.contents}")
var firstItem = container.blockInventory.contents.filterNotNull().firstOrNull() var firstItem = container.inventory.contents.filterNotNull().firstOrNull()
if (firstItem == null) { if (firstItem == null) {
Utils.send(event.player,"&cВ контейнере нет предметов для покупки.") Utils.send(event.player,"&cВ контейнере нет предметов для покупки.")
} }
@ -155,7 +159,7 @@ class SignHandler: Listener {
var coloredLine: String var coloredLine: String
// Check if some data is missing // Check if some data is missing
if (vpcUsername.isEmpty() || cost == null || amount == null || amount < 0 || cost < 0) { if (vpcUsername.isEmpty() || cost == null || amount == null || amount < 0 || cost < 0 || cost < 0.0001) {
coloredLine = ChatColor.translateAlternateColorCodes('&', "$PREFIX&cError") coloredLine = ChatColor.translateAlternateColorCodes('&', "$PREFIX&cError")
event.setLine(0, coloredLine) event.setLine(0, coloredLine)
return return

View File

@ -277,6 +277,18 @@ pay_by_sign=${DEFAULT_PAY_BY_SIGN}
Utils.send(sender, "/vpi auth <ник>") Utils.send(sender, "/vpi auth <ник>")
} }
// Cancel sign pay
args[0] == "signPay" && args[1] == "cancel" -> {
val invoiceId = TO_PAY_INVOICES[sender.name].toString()
VpcApi.delete_invoice(invoiceId)
synchronized(TO_PAY_SIGN_INVOICES) {
TO_PAY_SIGN_INVOICES.remove(sender.name)
INVOICE_CREATION_TIMES.remove(invoiceId)
SIGN_PAYMENT_INFO.remove(invoiceId)
}
Utils.send(sender, "Счёт успешно отменён.")
}
// Default help menu // Default help menu
else -> { else -> {
showHelpMenu(sender) showHelpMenu(sender)
@ -721,12 +733,20 @@ pay_by_sign=${DEFAULT_PAY_BY_SIGN}
} }
} else { } else {
// If we have needed items // If we have needed items
paymentInfo.player.inventory.addItem(itemStack)
paymentInfo.container.inventory.removeItem(itemStack)
val transferResult = VpcApi.transfer_coins(paymentInfo.dst_username, paymentInfo.cost).toString() val transferResult = VpcApi.transfer_coins(paymentInfo.dst_username, paymentInfo.cost).toString()
if (transferResult != "OK") { if (transferResult != "OK") {
LOGGER.error("Can't transfer VPC, result: $transferResult") LOGGER.error("Can't transfer VPC, result: $transferResult")
Utils.send(paymentInfo.player, "&cПеревод адресату невозможен, отмена покупки.")
// Return VPC
val vpcUsername = DataManager.getPlayerVPCUsername(paymentInfo.player.name).toString()
val transferResult = VpcApi.transfer_coins(vpcUsername, paymentInfo.cost).toString()
if (transferResult != "OK") {
LOGGER.error("Can't return VPC, result: $transferResult")
Utils.send(paymentInfo.player, "&cНевозможно вернуть VPC, обратитесь к администратору: $transferResult")
}
} else {
paymentInfo.player.inventory.addItem(itemStack)
paymentInfo.container.inventory.removeItem(itemStack)
} }
} }