Возможность отключения функциональности.

This commit is contained in:
justuser-31 2025-11-30 19:24:16 +03:00
parent 1dbb100f97
commit 64dae5fdc4
2 changed files with 50 additions and 40 deletions

View File

@ -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()

View File

@ -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 <vpc/lc> <сумма>")
if (CURRENCY_CONVERT_FEATURE) {
if (args.size in 3..4 && args[0] == "convert") {
handleCurrencyConversion(sender, args)
} else {
Utils.send(sender, "/vpi convert <vpc/lc> <сумма>")
}
} 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