From 64dae5fdc4afa2a6ecc0a5f96ba1d9d31ab672e5 Mon Sep 17 00:00:00 2001 From: justuser-31 Date: Sun, 30 Nov 2025 19:24:16 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C=20=D0=BE=D1=82=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81=D1=82=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/VpcSpigotIntegration/SignHandler.kt | 14 +--- .../VpcServerIntegration.kt | 76 ++++++++++++------- 2 files changed, 50 insertions(+), 40 deletions(-) diff --git a/src/main/kotlin/main/VpcSpigotIntegration/SignHandler.kt b/src/main/kotlin/main/VpcSpigotIntegration/SignHandler.kt index 89bebee..4f64554 100644 --- a/src/main/kotlin/main/VpcSpigotIntegration/SignHandler.kt +++ b/src/main/kotlin/main/VpcSpigotIntegration/SignHandler.kt @@ -2,7 +2,7 @@ package main.VpcSpigotIntegration import main.VpcSpigotIntegration.VpcServerIntegration.Companion.INVOICE_CREATION_TIMES import main.VpcSpigotIntegration.VpcServerIntegration.Companion.LOGGER -import main.VpcSpigotIntegration.VpcServerIntegration.Companion.PAY_BY_SIGN +import main.VpcSpigotIntegration.VpcServerIntegration.Companion.PAY_BY_SIGN_FEATURE import main.VpcSpigotIntegration.VpcServerIntegration.Companion.PLUGIN import main.VpcSpigotIntegration.VpcServerIntegration.Companion.PREFIX import main.VpcSpigotIntegration.VpcServerIntegration.Companion.SIGN_PAYMENT_INFO @@ -15,25 +15,17 @@ import net.md_5.bungee.api.chat.TextComponent import org.bukkit.Bukkit import org.bukkit.Bukkit.getWorld import org.bukkit.ChatColor -import org.bukkit.Location import org.bukkit.event.EventHandler -import org.bukkit.event.block.BlockEvent import org.bukkit.event.player.PlayerInteractEvent import org.bukkit.Material -import org.bukkit.block.Chest import org.bukkit.block.Container import org.bukkit.block.Sign import org.bukkit.entity.Player import org.bukkit.event.Listener import org.bukkit.event.block.Action -import org.bukkit.event.block.BlockPlaceEvent import org.bukkit.event.block.SignChangeEvent -import org.bukkit.inventory.Inventory import org.bukkit.inventory.ItemStack -import org.bukkit.plugin.java.JavaPlugin -import java.util.Locale -import java.util.Locale.getDefault class SignPaymentInfo( public val amount: Int, @@ -48,7 +40,7 @@ class SignHandler: Listener { @EventHandler fun onClick(event: PlayerInteractEvent) { // Check if feature enabled - if (!PAY_BY_SIGN) return + if (!PAY_BY_SIGN_FEATURE) return // Check if clicked block is a sign val block = event.clickedBlock @@ -151,7 +143,7 @@ class SignHandler: Listener { @EventHandler fun onSignChange(event: SignChangeEvent) { // Check if feature enabled - if (!PAY_BY_SIGN) return + if (!PAY_BY_SIGN_FEATURE) return if (event.getLine(0).contains("[VPC]")) { val vpcUsername = event.getLine(1) val cost: Double? = event.getLine(2).toDoubleOrNull() diff --git a/src/main/kotlin/main/VpcSpigotIntegration/VpcServerIntegration.kt b/src/main/kotlin/main/VpcSpigotIntegration/VpcServerIntegration.kt index 2620e73..f38ae70 100644 --- a/src/main/kotlin/main/VpcSpigotIntegration/VpcServerIntegration.kt +++ b/src/main/kotlin/main/VpcSpigotIntegration/VpcServerIntegration.kt @@ -4,7 +4,6 @@ package main.VpcSpigotIntegration // Here you will see the main logic // ---------------------------------------------- -import com.sun.org.apache.xpath.internal.operations.Bool import org.bukkit.plugin.java.JavaPlugin import org.bukkit.Bukkit import org.bukkit.command.Command @@ -16,7 +15,6 @@ import net.md_5.bungee.api.chat.HoverEvent import net.md_5.bungee.api.chat.ClickEvent import net.md_5.bungee.api.chat.TextComponent import org.bukkit.ChatColor -import org.bukkit.Material import org.bukkit.inventory.ItemStack import org.bukkit.scheduler.BukkitRunnable import java.io.File @@ -24,7 +22,6 @@ import java.io.FileInputStream import java.util.Properties import kotlin.collections.mutableMapOf import kotlin.math.abs -import kotlin.text.isEmpty class VpcServerIntegration() : JavaPlugin(), CommandExecutor { companion object { @@ -43,7 +40,9 @@ class VpcServerIntegration() : JavaPlugin(), CommandExecutor { lateinit var COURSE_DYNAMIC_COMMAND: String var COURSE_COMMISSION: Float = DEFAULT_COURSE_COMMISSION var INVOICE_TIMEOUT_SECONDS: Long = DEFAULT_INVOICE_TIMEOUT_SECONDS - var PAY_BY_SIGN: Boolean = true + // Features + var CURRENCY_CONVERT_FEATURE: Boolean = true + var PAY_BY_SIGN_FEATURE: Boolean = true // Default configuration values const val DEFAULT_USERNAME: String = "test" @@ -59,7 +58,9 @@ class VpcServerIntegration() : JavaPlugin(), CommandExecutor { const val DEFAULT_COURSE_DYNAMIC_COMMAND: String = "baltop force" const val DEFAULT_COURSE_COMMISSION: Float = 5.0f const val DEFAULT_INVOICE_TIMEOUT_SECONDS: Long = 300 // 5 minutes - const val DEFAULT_PAY_BY_SIGN: Boolean = true + // Features + const val DEFAULT_PAY_BY_SIGN_FEATURE: Boolean = true + const val DEFAULT_CURRENCY_CONVERT_FEATURE: Boolean = true // Static configurations const val PREFIX = "&9[&bVPC&7-&6I&9] &3" @@ -126,7 +127,9 @@ class VpcServerIntegration() : JavaPlugin(), CommandExecutor { COURSE_DYNAMIC_COMMAND = properties.getProperty("course_dynamic_command", DEFAULT_COURSE_DYNAMIC_COMMAND).replace("'", "") COURSE_COMMISSION = properties.getProperty("course_commission", DEFAULT_COURSE_COMMISSION.toString()).replace("'", "").toFloat() INVOICE_TIMEOUT_SECONDS = properties.getProperty("invoice_timeout_seconds", DEFAULT_INVOICE_TIMEOUT_SECONDS.toString()).replace("'", "").toLong() - PAY_BY_SIGN = properties.getProperty("pay_by_sign", DEFAULT_PAY_BY_SIGN.toString()).replace("'", "").toBoolean() + // Features + CURRENCY_CONVERT_FEATURE = properties.getProperty("currency_convert", DEFAULT_CURRENCY_CONVERT_FEATURE.toString()).replace("'", "").toBoolean() + PAY_BY_SIGN_FEATURE = properties.getProperty("pay_by_sign", DEFAULT_PAY_BY_SIGN_FEATURE.toString()).replace("'", "").toBoolean() logger.info("Configuration loaded successfully - Username: $USERNAME, API URL: $USER_API_URL") } catch (e: Exception) { @@ -198,8 +201,11 @@ invoice_timeout_seconds=$DEFAULT_INVOICE_TIMEOUT_SECONDS # -------------------- END ------------------------ # ------------------ Features --------------------- +# Should we enable currency convert (VPC -> LC and vice versa) +currency_convert=${DEFAULT_CURRENCY_CONVERT_FEATURE} + # Should we enable pay by signs from containers (chest/etc.)? -pay_by_sign=${DEFAULT_PAY_BY_SIGN} +pay_by_sign=${DEFAULT_PAY_BY_SIGN_FEATURE} # -------------------- END ------------------------ """.trimIndent() ) @@ -246,35 +252,47 @@ pay_by_sign=${DEFAULT_PAY_BY_SIGN} // Run all logic asynchronously Bukkit.getScheduler().runTaskAsynchronously(PLUGIN, Runnable { when { + // Authentication + args.size == 2 && args[0] == "auth" -> { + handleAuthentication(sender, args) + } + args.isNotEmpty() && args[0] == "auth" -> { + Utils.send(sender, "/vpi auth <ник>") + } + // Currency conversion - args.size in 3..4 && args[0] == "convert" -> { - handleCurrencyConversion(sender, args) - } args.isNotEmpty() && args[0] == "convert" -> { - Utils.send(sender, "/vpi convert <сумма>") + if (CURRENCY_CONVERT_FEATURE) { + if (args.size in 3..4 && args[0] == "convert") { + handleCurrencyConversion(sender, args) + } else { + Utils.send(sender, "/vpi convert <сумма>") + } + } else { + Utils.send(sender, "&cДанная функциональность отключена.") + } } // Course info args.isNotEmpty() && args[0] == "course" -> { - val course = calculateExchangeRate() - LOGGER.info("Exchange rate calculated: $course") + if (CURRENCY_CONVERT_FEATURE) { + val course = calculateExchangeRate() + LOGGER.info("Exchange rate calculated: $course") - if (course.isInfinite() || course == 0.0) { - LOGGER.error(if (course.isInfinite()) "Zero global balance?" else "Infinite global balance?") - Utils.send(sender, "&cПроизошла ошибка при расчёте курса. Обратитесь к администратору или повторите позже.") - } else { - val course2VPC = Utils.round(course * (1 - COURSE_COMMISSION / 100), NUM_AFTER_DOT) - val course2LC = Utils.round(course * (1 + COURSE_COMMISSION / 100), NUM_AFTER_DOT) - Utils.send(sender, "VPC->LC = &6$course2VPC&3 | LC->VPC = &6$course2LC") - } - } - - // Authentication - args.size == 2 && args[0] == "auth" -> { - handleAuthentication(sender, args) - } - args.isNotEmpty() && args[0] == "auth" -> { - Utils.send(sender, "/vpi auth <ник>") + if (course.isInfinite() || course == 0.0) { + LOGGER.error(if (course.isInfinite()) "Zero global balance?" else "Infinite global balance?") + Utils.send( + sender, + "&cПроизошла ошибка при расчёте курса. Обратитесь к администратору или повторите позже." + ) + } else { + val course2VPC = Utils.round(course * (1 - COURSE_COMMISSION / 100), NUM_AFTER_DOT) + val course2LC = Utils.round(course * (1 + COURSE_COMMISSION / 100), NUM_AFTER_DOT) + Utils.send(sender, "VPC->LC = &6$course2VPC&3 | LC->VPC = &6$course2LC") + } + } else { + Utils.send(sender, "&cДанная функциональность отключена.") + } } // Cancel sign pay