diff --git a/build.gradle.kts b/build.gradle.kts index e48b8f3..7a68702 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,14 +56,14 @@ dependencies { compileOnly("org.purpurmc.purpur:purpur-api:1.19.4-R0.1-SNAPSHOT") // Declare Purpur API version to be packaged. compileOnly("net.luckperms:api:5.5") // Import the LuckPerms API. - implementation("io.lettuce:lettuce-core:7.2.0.RELEASE") // Import the Lettuce API for keydb. + implementation("io.lettuce:lettuce-core:7.5.1.RELEASE") // Import the Lettuce API for keydb. implementation("org.flywaydb:flyway-core:12.3.0") implementation("org.flywaydb:flyway-database-postgresql:12.3.0") implementation("org.postgresql:postgresql:42.7.9") implementation("com.github.jasync-sql:jasync-postgresql:2.2.4") // Import the jasync Postgres API. - implementation("it.unimi.dsi:fastutil-core:8.5.16") + implementation("it.unimi.dsi:fastutil-core:8.5.18") implementation("org.jetbrains.kotlin:kotlin-stdlib") // Import the Kotlin standard library. implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") diff --git a/src/main/kotlin/net/trueog/diamondbankog/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/Config.kt deleted file mode 100644 index 90cca03..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/Config.kt +++ /dev/null @@ -1,9 +0,0 @@ -package net.trueog.diamondbankog - -interface Config { - var prefix: String - var postgresUrl: String - var postgresUser: String - var postgresPassword: String - var redisUrl: String -} diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankHelp.kt b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankHelp.kt similarity index 96% rename from src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankHelp.kt rename to src/main/kotlin/net/trueog/diamondbankog/DiamondBankHelp.kt index d479dfa..9cb07a5 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankHelp.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankHelp.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.mm diff --git a/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt index 2c727fd..02964bf 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt @@ -7,9 +7,26 @@ import net.kyori.adventure.text.minimessage.tag.standard.StandardTags import net.luckperms.api.LuckPerms import net.trueog.diamondbankog.api.DiamondBankAPIJava import net.trueog.diamondbankog.api.DiamondBankAPIKotlin -import net.trueog.diamondbankog.commands.* -import net.trueog.diamondbankog.commands.AutoCompress -import net.trueog.diamondbankog.commands.AutoDeposit +import net.trueog.diamondbankog.api.EventManager +import net.trueog.diamondbankog.autocompress.command.AutoCompress +import net.trueog.diamondbankog.autodeposit.command.AutoDeposit +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.CachingBalanceManager +import net.trueog.diamondbankog.balance.command.Balance +import net.trueog.diamondbankog.balance.command.Balancetop +import net.trueog.diamondbankog.balance.command.SetBankBalance +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.config.YamlConfig +import net.trueog.diamondbankog.config.command.DiamondBankReload +import net.trueog.diamondbankog.economy.command.DisableEconomy +import net.trueog.diamondbankog.economy.command.EnableEconomy +import net.trueog.diamondbankog.persistence.Redis +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.transaction.command.Compress +import net.trueog.diamondbankog.transaction.command.Deposit +import net.trueog.diamondbankog.transaction.command.Pay +import net.trueog.diamondbankog.transaction.command.Withdraw import org.bukkit.Bukkit import org.bukkit.plugin.ServicePriority import org.bukkit.plugin.java.JavaPlugin @@ -19,7 +36,7 @@ internal open class DiamondBankOG : JavaPlugin() { val scope = CoroutineScope(Dispatchers.Default + SupervisorJob()) lateinit var plugin: DiamondBankOG - lateinit var config: YamlConfig + lateinit var config: Config lateinit var eventManager: EventManager lateinit var balanceManager: BalanceManager lateinit var redis: Redis diff --git a/src/main/kotlin/net/trueog/diamondbankog/Events.kt b/src/main/kotlin/net/trueog/diamondbankog/Events.kt index 65204db..766df27 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Events.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Events.kt @@ -2,8 +2,6 @@ package net.trueog.diamondbankog import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch -import net.trueog.diamondbankog.AutoCompress.compress -import net.trueog.diamondbankog.AutoDeposit.deposit import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled @@ -11,11 +9,14 @@ import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.redis import net.trueog.diamondbankog.DiamondBankOG.Companion.scope import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.countTotal -import net.trueog.diamondbankog.InventoryExtensions.isLocked -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.autocompress.AutoCompress.compress +import net.trueog.diamondbankog.autodeposit.AutoDeposit.deposit +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.InventoryExtensions.countTotal +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.Material import org.bukkit.NamespacedKey import org.bukkit.entity.Player diff --git a/src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedEvent.kt b/src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedEvent.kt deleted file mode 100644 index 8e7ff64..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedEvent.kt +++ /dev/null @@ -1,5 +0,0 @@ -package net.trueog.diamondbankog - -import java.util.* - -data class PlayerBalanceChangedEvent(val uuid: UUID, val playerShards: PostgreSQL.PlayerShards) diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/ToggleDebug.kt b/src/main/kotlin/net/trueog/diamondbankog/ToggleDebug.kt similarity index 91% rename from src/main/kotlin/net/trueog/diamondbankog/commands/ToggleDebug.kt rename to src/main/kotlin/net/trueog/diamondbankog/ToggleDebug.kt index 15a2f80..c08c887 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/ToggleDebug.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/ToggleDebug.kt @@ -1,6 +1,5 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog -import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import org.bukkit.command.Command diff --git a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt deleted file mode 100644 index 356a1b6..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt +++ /dev/null @@ -1,59 +0,0 @@ -package net.trueog.diamondbankog - -import java.io.File -import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin -import org.bukkit.configuration.file.YamlConfiguration - -internal class YamlConfig private constructor() : Config { - override lateinit var prefix: String - override lateinit var postgresUrl: String - override lateinit var postgresUser: String - override lateinit var postgresPassword: String - override lateinit var redisUrl: String - - companion object : ConfigFactory { - override fun create(): YamlConfig? { - val config = YamlConfig() - plugin.saveDefaultConfig() - val file = File(plugin.dataFolder, "config.yml") - val yamlConfig = YamlConfiguration.loadConfiguration(file) - - try { - config.prefix = yamlConfig.get("prefix") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"prefix\" as a string") - return null - } - - try { - config.postgresUrl = yamlConfig.get("postgresUrl") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresUrl\" as a string") - return null - } - - try { - config.postgresUser = yamlConfig.get("postgresUser") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresUser\" as a string") - return null - } - - try { - config.postgresPassword = yamlConfig.get("postgresPassword") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresPassword\" as a string") - return null - } - - try { - config.redisUrl = yamlConfig.get("redisUrl") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"redisUrl\" as a string") - return null - } - - return config - } - } -} diff --git a/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIJava.kt b/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIJava.kt index 4a043bd..f2c3283 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIJava.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIJava.kt @@ -3,21 +3,20 @@ package net.trueog.diamondbankog.api import java.util.* import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.runBlocking -import net.trueog.diamondbankog.CommonOperations import net.trueog.diamondbankog.DiamondBankException import net.trueog.diamondbankog.DiamondBankException.* import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.eventManager import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.InventorySnapshot -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread -import net.trueog.diamondbankog.PlayerBalanceChangedListener -import net.trueog.diamondbankog.PostgreSQL.PlayerShards -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.shard.PlayerShards +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.Bukkit @OptIn(DelicateCoroutinesApi::class) diff --git a/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIKotlin.kt b/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIKotlin.kt index ce7c73b..742f3f5 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIKotlin.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/api/DiamondBankAPIKotlin.kt @@ -2,20 +2,19 @@ package net.trueog.diamondbankog.api import java.util.* import kotlinx.coroutines.DelicateCoroutinesApi -import net.trueog.diamondbankog.CommonOperations import net.trueog.diamondbankog.DiamondBankException.* import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.eventManager import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.InventorySnapshot -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread -import net.trueog.diamondbankog.PlayerBalanceChangedListener -import net.trueog.diamondbankog.PostgreSQL.PlayerShards -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.shard.PlayerShards +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.Bukkit @OptIn(DelicateCoroutinesApi::class) diff --git a/src/main/kotlin/net/trueog/diamondbankog/EventManager.kt b/src/main/kotlin/net/trueog/diamondbankog/api/EventManager.kt similarity index 70% rename from src/main/kotlin/net/trueog/diamondbankog/EventManager.kt rename to src/main/kotlin/net/trueog/diamondbankog/api/EventManager.kt index b67de09..b8b2a3f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/EventManager.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/api/EventManager.kt @@ -1,12 +1,13 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.api import java.util.* import java.util.concurrent.CopyOnWriteArrayList +import net.trueog.diamondbankog.balance.shard.PlayerShards internal class EventManager { private var listeners = CopyOnWriteArrayList() - fun sendUpdate(uuid: UUID, playerShards: PostgreSQL.PlayerShards) { + fun sendUpdate(uuid: UUID, playerShards: PlayerShards) { listeners.forEach { it.onUpdate(PlayerBalanceChangedEvent(uuid, playerShards)) } } diff --git a/src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedEvent.kt b/src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedEvent.kt new file mode 100644 index 0000000..a8a8d16 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedEvent.kt @@ -0,0 +1,6 @@ +package net.trueog.diamondbankog.api + +import java.util.* +import net.trueog.diamondbankog.balance.shard.PlayerShards + +data class PlayerBalanceChangedEvent(val uuid: UUID, val playerShards: PlayerShards) diff --git a/src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedListener.kt b/src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedListener.kt similarity index 71% rename from src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedListener.kt rename to src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedListener.kt index 2de767e..f7c864e 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedListener.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedListener.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.api interface PlayerBalanceChangedListener { fun onUpdate(event: PlayerBalanceChangedEvent) diff --git a/src/main/kotlin/net/trueog/diamondbankog/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt similarity index 88% rename from src/main/kotlin/net/trueog/diamondbankog/AutoCompress.kt rename to src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt index d6d46db..8dd5b10 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/AutoCompress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt @@ -1,17 +1,20 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.autocompress import kotlin.math.abs import kotlinx.coroutines.launch +import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.scope import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock -import net.trueog.diamondbankog.InventoryExtensions.countDiamondBlocks -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamondBlocks +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards +import net.trueog.diamondbankog.util.MainThreadBlock import org.bukkit.Material import org.bukkit.entity.Player import org.bukkit.inventory.ItemStack @@ -32,10 +35,11 @@ internal object AutoCompress { } transactionLock.withLockSuspend(player.uniqueId) { - val inventorySnapshot = runOnMainThread { - player.inventory.lock() - InventorySnapshot.from(player.inventory, DiamondBankOG.balanceManager) - } + val inventorySnapshot = + MainThreadBlock.runOnMainThread { + player.inventory.lock() + InventorySnapshot.from(player.inventory, balanceManager) + } val shardsInInventory = inventorySnapshot.countShards().toInt() val diamondsInInventory = inventorySnapshot.countDiamonds().toInt() @@ -161,7 +165,7 @@ internal object AutoCompress { } } - runOnMainThread { + MainThreadBlock.runOnMainThread { inventorySnapshot.restoreTo(player.inventory) player.inventory.unlock() } diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt rename to src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt index e94fd54..8a6858b 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.autocompress.command import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled diff --git a/src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt similarity index 90% rename from src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt rename to src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt index 73508c5..7e14e7f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.autodeposit import kotlinx.coroutines.launch import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager @@ -6,7 +6,8 @@ import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.scope import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock -import net.trueog.diamondbankog.ErrorHandler.handleError +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.util.ErrorHandler import org.bukkit.Material import org.bukkit.entity.Item import org.bukkit.entity.Player @@ -41,7 +42,7 @@ internal object AutoDeposit { scope.launch { transactionLock.withLockSuspend(player.uniqueId) { balanceManager.addToBankShards(player.uniqueId, shards).getOrElse { - handleError(it) + ErrorHandler.handleError(it) player.sendMessage( mm.deserialize( "${config.prefix}: A severe error has occurred. Please notify a staff member." diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt rename to src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt index ebe8200..c921ac8 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.autodeposit.command import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled diff --git a/src/main/kotlin/net/trueog/diamondbankog/BalanceManager.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManager.kt similarity index 88% rename from src/main/kotlin/net/trueog/diamondbankog/BalanceManager.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManager.kt index de271ab..a590aea 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/BalanceManager.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManager.kt @@ -1,8 +1,8 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.balance import java.util.* -import net.trueog.diamondbankog.PostgreSQL.PlayerShards -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.shard.PlayerShards +import net.trueog.diamondbankog.balance.shard.ShardType interface BalanceManager { suspend fun setPlayerShards(uuid: UUID, shards: Long, type: ShardType): Result diff --git a/src/main/kotlin/net/trueog/diamondbankog/BalanceManagerFactory.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManagerFactory.kt similarity index 63% rename from src/main/kotlin/net/trueog/diamondbankog/BalanceManagerFactory.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManagerFactory.kt index 38b39ba..b6b0db8 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/BalanceManagerFactory.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/BalanceManagerFactory.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.balance interface BalanceManagerFactory { fun create(): BalanceManager? diff --git a/src/main/kotlin/net/trueog/diamondbankog/Cache.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/Cache.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/Cache.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/Cache.kt index d43c6b9..55cb130 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Cache.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/Cache.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.balance import it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap import java.util.* @@ -6,7 +6,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock import kotlin.concurrent.read import kotlin.concurrent.write import net.trueog.diamondbankog.DiamondBankException.InvalidArgumentException -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.shard.ShardType internal class Cache { val bankBalanceCache = Object2LongOpenHashMap().apply { defaultReturnValue(-1L) } diff --git a/src/main/kotlin/net/trueog/diamondbankog/CachingBalanceManager.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt similarity index 85% rename from src/main/kotlin/net/trueog/diamondbankog/CachingBalanceManager.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt index 5e1be69..d598021 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/CachingBalanceManager.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt @@ -1,14 +1,17 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.balance import java.util.* import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.atomic.AtomicInteger import net.trueog.diamondbankog.DiamondBankException.EconomyDisabledException import net.trueog.diamondbankog.DiamondBankException.InvalidArgumentException +import net.trueog.diamondbankog.DiamondBankOG.Companion.debug import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.PostgreSQL.PlayerShards -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin +import net.trueog.diamondbankog.balance.shard.PlayerShards +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.persistence.PostgreSQL +import net.trueog.diamondbankog.util.ErrorHandler.handleError internal class CachingBalanceManager private constructor() : BalanceManager { val cache = Cache() @@ -81,15 +84,15 @@ internal class CachingBalanceManager private constructor() : BalanceManager { override suspend fun getShardTypeShards(uuid: UUID, type: ShardType): Result { if ((beingModified[uuid to type]?.get() ?: 0) > 0) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss (being modified) for $uuid!") + if (debug) { + plugin.logger.info("Cache miss (being modified) for $uuid!") } return postgreSQL.getShardTypeShards(uuid, type) } val cacheBalance = cache.getBalance(uuid, type) if (cacheBalance == -1L) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss for $uuid!") + if (debug) { + plugin.logger.info("Cache miss for $uuid!") } increment(uuid, type) val dbBalance = @@ -99,8 +102,8 @@ internal class CachingBalanceManager private constructor() : BalanceManager { cache.setBalance(uuid, dbBalance, type) decrement(uuid, type) return Result.success(dbBalance) - } else if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache hit for $uuid!") + } else if (debug) { + plugin.logger.info("Cache hit for $uuid!") } return Result.success(cacheBalance) } @@ -108,15 +111,15 @@ internal class CachingBalanceManager private constructor() : BalanceManager { override suspend fun getTotalShards(uuid: UUID): Result { val anyBeingModified = beingModified.any { it.key.first == uuid && it.value.get() > 0 } if (anyBeingModified) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss (being modified) for $uuid!") + if (debug) { + plugin.logger.info("Cache miss (being modified) for $uuid!") } return postgreSQL.getTotalShards(uuid) } val cacheBalance = cache.getBalance(uuid, ShardType.TOTAL) if (cacheBalance == -1L) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss for $uuid!") + if (debug) { + plugin.logger.info("Cache miss for $uuid!") } increment(uuid, ShardType.TOTAL) val dbBalance = @@ -126,8 +129,8 @@ internal class CachingBalanceManager private constructor() : BalanceManager { cache.setBalance(uuid, dbBalance, ShardType.TOTAL) decrement(uuid, ShardType.TOTAL) return Result.success(dbBalance) - } else if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache hit for $uuid!") + } else if (debug) { + plugin.logger.info("Cache hit for $uuid!") } return Result.success(cacheBalance) } @@ -135,8 +138,8 @@ internal class CachingBalanceManager private constructor() : BalanceManager { override suspend fun getAllShards(uuid: UUID): Result { val anyBeingModified = beingModified.any { it.key.first == uuid && it.value.get() > 0 } if (anyBeingModified) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss (being modified) for $uuid!") + if (debug) { + plugin.logger.info("Cache miss (being modified) for $uuid!") } return postgreSQL.getAllShards(uuid) } @@ -144,8 +147,8 @@ internal class CachingBalanceManager private constructor() : BalanceManager { val cacheInventoryBalance = cache.getBalance(uuid, ShardType.INVENTORY) val cacheEnderChestBalance = cache.getBalance(uuid, ShardType.ENDER_CHEST) if (cacheBankBalance == -1L || cacheInventoryBalance == -1L || cacheEnderChestBalance == -1L) { - if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache miss for $uuid!") + if (debug) { + plugin.logger.info("Cache miss for $uuid!") } increment(uuid, ShardType.TOTAL) val dbPlayerShards = @@ -157,8 +160,8 @@ internal class CachingBalanceManager private constructor() : BalanceManager { cache.setBalance(uuid, dbPlayerShards.enderChest, ShardType.ENDER_CHEST) decrement(uuid, ShardType.TOTAL) return Result.success(dbPlayerShards) - } else if (DiamondBankOG.debug) { - DiamondBankOG.plugin.logger.info("Cache hit for $uuid!") + } else if (debug) { + plugin.logger.info("Cache hit for $uuid!") } return Result.success(PlayerShards(cacheBankBalance, cacheInventoryBalance, cacheEnderChestBalance)) } diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Balance.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/command/Balance.kt similarity index 96% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Balance.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/command/Balance.kt index 4354059..1562ff2 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Balance.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/command/Balance.kt @@ -1,15 +1,15 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.balance.command import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch -import net.trueog.diamondbankog.CommonOperations import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.scope -import net.trueog.diamondbankog.PlayerPrefix.getPrefix +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.util.PlayerPrefix.getPrefix import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Balancetop.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/command/Balancetop.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Balancetop.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/command/Balancetop.kt index 9221024..09dd7e8 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Balancetop.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/command/Balancetop.kt @@ -1,16 +1,16 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.balance.command import kotlin.math.ceil import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch -import net.trueog.diamondbankog.CommonOperations import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.scope -import net.trueog.diamondbankog.PlayerPrefix.getPrefix +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.util.PlayerPrefix.getPrefix import org.bukkit.Bukkit import org.bukkit.OfflinePlayer import org.bukkit.command.Command diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/SetBankBalance.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/command/SetBankBalance.kt similarity index 93% rename from src/main/kotlin/net/trueog/diamondbankog/commands/SetBankBalance.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/command/SetBankBalance.kt index 3b7ce3c..3bd2f75 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/SetBankBalance.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/command/SetBankBalance.kt @@ -1,17 +1,17 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.balance.command import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch -import net.trueog.diamondbankog.CommonOperations import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.scope -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.PlayerPrefix.getPrefix -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.PlayerPrefix.getPrefix import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender diff --git a/src/main/kotlin/net/trueog/diamondbankog/balance/shard/PlayerShards.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/PlayerShards.kt new file mode 100644 index 0000000..26b992a --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/PlayerShards.kt @@ -0,0 +1,5 @@ +package net.trueog.diamondbankog.balance.shard + +data class PlayerShards(val bank: Long, val inventory: Long, val enderChest: Long) { + val total = bank + inventory + enderChest +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/Shard.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/Shard.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/Shard.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/shard/Shard.kt index 5eb3b13..5fff35f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Shard.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/Shard.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.balance.shard import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import org.bukkit.Bukkit diff --git a/src/main/kotlin/net/trueog/diamondbankog/balance/shard/ShardType.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/ShardType.kt new file mode 100644 index 0000000..8935cc3 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/shard/ShardType.kt @@ -0,0 +1,8 @@ +package net.trueog.diamondbankog.balance.shard + +enum class ShardType(val string: String) { + BANK("bank_shards"), + INVENTORY("inventory_shards"), + ENDER_CHEST("ender_chest_shards"), + TOTAL("bank_shards, inventory_shards, ender_chest_shards"), +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/config/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/config/Config.kt new file mode 100644 index 0000000..d111d90 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/config/Config.kt @@ -0,0 +1,14 @@ +package net.trueog.diamondbankog.config + +interface Config { + val prefix: String + val postgresHost: String + val postgresPort: Int + val postgresDatabase: String + val postgresUser: String + val postgresPassword: String? + val redisHost: String + val redisPort: Int + val redisDatabase: Int + val redisPassword: String? +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/ConfigFactory.kt b/src/main/kotlin/net/trueog/diamondbankog/config/ConfigFactory.kt similarity index 57% rename from src/main/kotlin/net/trueog/diamondbankog/ConfigFactory.kt rename to src/main/kotlin/net/trueog/diamondbankog/config/ConfigFactory.kt index 4f2c79c..b07f9bc 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/ConfigFactory.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/config/ConfigFactory.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.config interface ConfigFactory { fun create(): Config? diff --git a/src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt new file mode 100644 index 0000000..fa09b85 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt @@ -0,0 +1,75 @@ +package net.trueog.diamondbankog.config + +import java.io.File +import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin +import org.bukkit.configuration.file.YamlConfiguration + +internal class YamlConfig +private constructor( + override val prefix: String, + override val postgresHost: String, + override val postgresPort: Int, + override val postgresDatabase: String, + override val postgresUser: String, + override val postgresPassword: String?, + override val redisHost: String, + override val redisPort: Int, + override val redisDatabase: Int, + override val redisPassword: String?, +) : Config { + companion object : ConfigFactory { + override fun create(): YamlConfig? { + plugin.saveDefaultConfig() + val file = File(plugin.dataFolder, "config.yml") + val yamlConfig = YamlConfiguration.loadConfiguration(file) + + val prefix = yamlConfig.parseKeyAs("prefix") + + val postgresHost = yamlConfig.parseKeyAs("postgresHost") + val postgresPort = yamlConfig.parseKeyAs("postgresPort") + val postgresDatabase = yamlConfig.parseKeyAs("postgresDatabase") + val postgresUser = yamlConfig.parseKeyAs("postgresUser") + val postgresPassword = yamlConfig.parseKeyAs("postgresPassword") + + val redisHost = yamlConfig.parseKeyAs("redisHost") + val redisPort = yamlConfig.parseKeyAs("redisPort") + val redisDatabase = yamlConfig.parseKeyAs("redisDatabase") + val redisPassword = yamlConfig.parseKeyAs("redisPassword") + + if ( + prefix == null || + postgresHost == null || + postgresPort == null || + postgresDatabase == null || + postgresUser == null || + redisHost == null || + redisPort == null || + redisDatabase == null + ) { + return null + } + + return YamlConfig( + prefix, + postgresHost, + postgresPort, + postgresDatabase, + postgresUser, + postgresPassword, + redisHost, + redisPort, + redisDatabase, + redisPassword, + ) + } + + inline fun YamlConfiguration.parseKeyAs(key: String): T? { + if (!this.contains(key) && null is T) return null + return this.get(key) as? T + ?: run { + plugin.logger.severe("Failed to parse config option \"$key\" as ${T::class.simpleName}") + return null + } + } + } +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt similarity index 91% rename from src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt rename to src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt index 317d8ba..1b200f1 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt @@ -1,11 +1,11 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.config.command -import net.trueog.diamondbankog.CachingBalanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.mm import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin -import net.trueog.diamondbankog.YamlConfig +import net.trueog.diamondbankog.balance.CachingBalanceManager +import net.trueog.diamondbankog.config.YamlConfig import org.bukkit.Bukkit import org.bukkit.command.Command import org.bukkit.command.CommandExecutor diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/DisableEconomy.kt b/src/main/kotlin/net/trueog/diamondbankog/economy/command/DisableEconomy.kt similarity index 95% rename from src/main/kotlin/net/trueog/diamondbankog/commands/DisableEconomy.kt rename to src/main/kotlin/net/trueog/diamondbankog/economy/command/DisableEconomy.kt index 0102ceb..f777f24 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/DisableEconomy.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/economy/command/DisableEconomy.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.economy.command import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/EnableEconomy.kt b/src/main/kotlin/net/trueog/diamondbankog/economy/command/EnableEconomy.kt similarity index 94% rename from src/main/kotlin/net/trueog/diamondbankog/commands/EnableEconomy.kt rename to src/main/kotlin/net/trueog/diamondbankog/economy/command/EnableEconomy.kt index 631d260..5c1d0c5 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/EnableEconomy.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/economy/command/EnableEconomy.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.economy.command import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled diff --git a/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt b/src/main/kotlin/net/trueog/diamondbankog/persistence/PostgreSQL.kt similarity index 94% rename from src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt rename to src/main/kotlin/net/trueog/diamondbankog/persistence/PostgreSQL.kt index 784c36a..68c158f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/persistence/PostgreSQL.kt @@ -1,50 +1,48 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.persistence import com.github.jasync.sql.db.asSuspending import com.github.jasync.sql.db.pool.ConnectionPool import com.github.jasync.sql.db.postgresql.PostgreSQLConnection import com.github.jasync.sql.db.postgresql.PostgreSQLConnectionBuilder -import java.net.URI import java.util.* import kotlinx.coroutines.future.await import net.trueog.diamondbankog.DiamondBankException.* +import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankOG.Companion.balanceManager import net.trueog.diamondbankog.DiamondBankOG.Companion.config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin +import net.trueog.diamondbankog.balance.shard.PlayerShards +import net.trueog.diamondbankog.balance.shard.ShardType import org.flywaydb.core.Flyway import org.postgresql.ds.PGSimpleDataSource -class PostgreSQL private constructor() { +internal class PostgreSQL private constructor() { lateinit var pool: ConnectionPool class NoRowsException : Exception() - enum class ShardType(val string: String) { - BANK("bank_shards"), - INVENTORY("inventory_shards"), - ENDER_CHEST("ender_chest_shards"), - TOTAL("bank_shards, inventory_shards, ender_chest_shards"), - } - companion object { fun create(): PostgreSQL? { val postgreSQL = PostgreSQL() try { - val pg = PGSimpleDataSource() - pg.setUrl(config.postgresUrl) - pg.user = config.postgresUser - pg.password = config.postgresPassword + val pg = + PGSimpleDataSource().apply { + serverNames = arrayOf(config.postgresHost) + portNumbers = intArrayOf(config.postgresPort) + databaseName = config.postgresDatabase + user = config.postgresUser + password = config.postgresPassword + } val flyway = Flyway.configure(DiamondBankOG::class.java.classLoader).dataSource(pg).load() flyway.migrate() - val uri = URI(config.postgresUrl.removePrefix("jdbc:")) postgreSQL.pool = PostgreSQLConnectionBuilder.createConnectionPool { - host = uri.host - port = uri.port - database = uri.path.removePrefix("/") + host = config.postgresHost + port = config.postgresPort + database = config.postgresDatabase username = config.postgresUser password = config.postgresPassword } @@ -60,10 +58,6 @@ class PostgreSQL private constructor() { } } - data class PlayerShards(val bank: Long, val inventory: Long, val enderChest: Long) { - val total = bank + inventory + enderChest - } - suspend fun setPlayerShards(uuid: UUID, shards: Long, type: ShardType): Result { if (type == ShardType.TOTAL) return Result.failure(InvalidArgumentException()) val playerShards: PlayerShards diff --git a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt b/src/main/kotlin/net/trueog/diamondbankog/persistence/Redis.kt similarity index 71% rename from src/main/kotlin/net/trueog/diamondbankog/Redis.kt rename to src/main/kotlin/net/trueog/diamondbankog/persistence/Redis.kt index f8c19a8..726a7d1 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/persistence/Redis.kt @@ -1,11 +1,18 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.persistence import io.lettuce.core.RedisClient import io.lettuce.core.RedisConnectionException +import io.lettuce.core.RedisURI import net.trueog.diamondbankog.DiamondBankOG.Companion.config internal class Redis { - private val redisClient: RedisClient = RedisClient.create(config.redisUrl) + private val redisClient: RedisClient = + RedisClient.create( + RedisURI.Builder.redis(config.redisHost, config.redisPort) + .apply { config.redisPassword?.let { withPassword(it) } } + .withDatabase(config.redisDatabase) + .build() + ) /** @return True if failed */ fun testConnection(): Boolean { diff --git a/src/main/kotlin/net/trueog/diamondbankog/CommonOperations.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/CommonOperations.kt similarity index 93% rename from src/main/kotlin/net/trueog/diamondbankog/CommonOperations.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/CommonOperations.kt index 4b780f2..fcdf38b 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/CommonOperations.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/CommonOperations.kt @@ -1,10 +1,13 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.transaction import java.util.* import kotlin.math.floor import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.DiamondBankException.InsufficientFundsException +import net.trueog.diamondbankog.DiamondBankOG import net.trueog.diamondbankog.DiamondBankRuntimeException.MoreThanOneDecimalDigitRuntimeException +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.config.Config import org.bukkit.Bukkit import org.bukkit.OfflinePlayer diff --git a/src/main/kotlin/net/trueog/diamondbankog/transaction/InventoryLockExtensions.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventoryLockExtensions.kt new file mode 100644 index 0000000..ab610b2 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventoryLockExtensions.kt @@ -0,0 +1,23 @@ +package net.trueog.diamondbankog.transaction + +import java.util.Collections +import java.util.WeakHashMap +import org.bukkit.inventory.PlayerInventory + +object InventoryLockExtensions { + val lockMap: MutableSet = Collections.newSetFromMap(Collections.synchronizedMap(WeakHashMap())) + + fun PlayerInventory.lock() { + val added = lockMap.add(this) + if (!added) throw IllegalStateException("Inventory was already locked") + } + + fun PlayerInventory.unlock() { + val removed = lockMap.remove(this) + if (!removed) throw IllegalStateException("Inventory was not locked") + } + + fun PlayerInventory.isLocked(): Boolean { + return this in lockMap + } +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/InventorySnapshot.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshot.kt similarity index 87% rename from src/main/kotlin/net/trueog/diamondbankog/InventorySnapshot.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshot.kt index 83f3c82..6f47e32 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/InventorySnapshot.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshot.kt @@ -1,13 +1,14 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.transaction import java.util.* import java.util.function.Consumer import kotlinx.coroutines.launch import net.trueog.diamondbankog.DiamondBankOG.Companion.scope -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.countTotal -import net.trueog.diamondbankog.InventoryExtensions.isLocked -import net.trueog.diamondbankog.PostgreSQL.ShardType +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.InventoryExtensions.countTotal import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.inventory.Inventory diff --git a/src/main/kotlin/net/trueog/diamondbankog/InventorySnapshotUtils.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshotUtils.kt similarity index 96% rename from src/main/kotlin/net/trueog/diamondbankog/InventorySnapshotUtils.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshotUtils.kt index ecac0ce..d713709 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/InventorySnapshotUtils.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/InventorySnapshotUtils.kt @@ -1,7 +1,10 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.transaction import kotlin.math.ceil import net.kyori.adventure.text.minimessage.MiniMessage +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.config.Config import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.inventory.ItemStack diff --git a/src/main/kotlin/net/trueog/diamondbankog/TransactionLock.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/TransactionLock.kt similarity index 97% rename from src/main/kotlin/net/trueog/diamondbankog/TransactionLock.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/TransactionLock.kt index fd56902..b5bf21d 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/TransactionLock.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/TransactionLock.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.transaction import java.util.* import java.util.concurrent.ConcurrentHashMap diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Compress.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Compress.kt similarity index 93% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Compress.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/command/Compress.kt index bdf683b..09b6e7f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Compress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Compress.kt @@ -1,16 +1,22 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.transaction.command import kotlin.math.abs import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.* -import net.trueog.diamondbankog.InventoryExtensions.countDiamondBlocks -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.util.CommonCommandInterlude +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamondBlocks +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.Material import org.bukkit.block.ShulkerBox import org.bukkit.command.Command diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Deposit.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Deposit.kt similarity index 89% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Deposit.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/command/Deposit.kt index f4dc2cc..85b88f9 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Deposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Deposit.kt @@ -1,14 +1,21 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.transaction.command import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.* -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.transaction.InventorySnapshotUtils +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.util.CommonCommandInterlude +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Pay.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Pay.kt similarity index 91% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Pay.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/command/Pay.kt index 288a2b1..6bc95f9 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Pay.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Pay.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.transaction.command import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi @@ -6,11 +6,17 @@ import kotlinx.coroutines.launch import net.kyori.adventure.text.minimessage.MiniMessage import net.luckperms.api.LuckPerms import net.trueog.diamondbankog.* -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread -import net.trueog.diamondbankog.PlayerPrefix.getPrefix +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.util.CommonCommandInterlude +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread +import net.trueog.diamondbankog.util.PlayerPrefix.getPrefix import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/Withdraw.kt b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Withdraw.kt similarity index 90% rename from src/main/kotlin/net/trueog/diamondbankog/commands/Withdraw.kt rename to src/main/kotlin/net/trueog/diamondbankog/transaction/command/Withdraw.kt index 891a04f..374cca5 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/Withdraw.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/transaction/command/Withdraw.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.transaction.command import kotlin.math.floor import kotlinx.coroutines.CoroutineScope @@ -6,10 +6,17 @@ import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.coroutines.launch import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.* -import net.trueog.diamondbankog.ErrorHandler.handleError -import net.trueog.diamondbankog.InventoryExtensions.lock -import net.trueog.diamondbankog.InventoryExtensions.unlock -import net.trueog.diamondbankog.MainThreadBlock.runOnMainThread +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.CommonOperations +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock +import net.trueog.diamondbankog.transaction.InventorySnapshot +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.util.CommonCommandInterlude +import net.trueog.diamondbankog.util.ErrorHandler.handleError +import net.trueog.diamondbankog.util.MainThreadBlock.runOnMainThread import org.bukkit.Material import org.bukkit.command.Command import org.bukkit.command.CommandExecutor diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/CommonCommandInterlude.kt b/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt similarity index 94% rename from src/main/kotlin/net/trueog/diamondbankog/commands/CommonCommandInterlude.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt index 68e7a2d..1cb0070 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/CommonCommandInterlude.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt @@ -1,10 +1,10 @@ -package net.trueog.diamondbankog.commands +package net.trueog.diamondbankog.util import kotlin.contracts.ExperimentalContracts import kotlin.contracts.contract import net.kyori.adventure.text.minimessage.MiniMessage -import net.trueog.diamondbankog.Config import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled +import net.trueog.diamondbankog.config.Config import org.bukkit.command.CommandSender import org.bukkit.entity.Player diff --git a/src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt similarity index 90% rename from src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt index bf6f340..20a754d 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.util import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled diff --git a/src/main/kotlin/net/trueog/diamondbankog/InventoryExtensions.kt b/src/main/kotlin/net/trueog/diamondbankog/util/InventoryExtensions.kt similarity index 62% rename from src/main/kotlin/net/trueog/diamondbankog/InventoryExtensions.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/InventoryExtensions.kt index d3b75d0..5f1f94b 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/InventoryExtensions.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/InventoryExtensions.kt @@ -1,10 +1,9 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.util -import java.util.* +import net.trueog.diamondbankog.balance.shard.Shard import org.bukkit.Material import org.bukkit.block.ShulkerBox import org.bukkit.inventory.Inventory -import org.bukkit.inventory.PlayerInventory import org.bukkit.inventory.meta.BlockStateMeta internal object InventoryExtensions { @@ -32,22 +31,4 @@ internal object InventoryExtensions { val inventoryDiamondBlocks = this.all(Material.DIAMOND_BLOCK).values.sumOf { it.amount } return inventoryDiamondBlocks.toLong() } - - val lockMap: MutableSet = Collections.newSetFromMap(Collections.synchronizedMap(WeakHashMap())) - - fun PlayerInventory.lock(): Boolean { - val added = lockMap.add(this) - if (!added) throw IllegalStateException("Inventory was already locked") - return true - } - - fun PlayerInventory.unlock(): Boolean { - val removed = lockMap.remove(this) - if (!removed) throw IllegalStateException("Inventory was not locked") - return true - } - - fun PlayerInventory.isLocked(): Boolean { - return this in lockMap - } } diff --git a/src/main/kotlin/net/trueog/diamondbankog/MainThreadBlock.kt b/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt similarity index 87% rename from src/main/kotlin/net/trueog/diamondbankog/MainThreadBlock.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt index 8f758e8..3392646 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/MainThreadBlock.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt @@ -1,9 +1,10 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.util import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine +import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin import org.bukkit.Bukkit internal object MainThreadBlock { @@ -15,7 +16,7 @@ internal object MainThreadBlock { suspendCancellableCoroutine { cont -> Bukkit.getScheduler() .runTask( - DiamondBankOG.plugin, + plugin, Runnable { try { cont.resume(block()) diff --git a/src/main/kotlin/net/trueog/diamondbankog/PlayerPrefix.kt b/src/main/kotlin/net/trueog/diamondbankog/util/PlayerPrefix.kt similarity index 96% rename from src/main/kotlin/net/trueog/diamondbankog/PlayerPrefix.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/PlayerPrefix.kt index 7036e05..19f168c 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/PlayerPrefix.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/PlayerPrefix.kt @@ -1,6 +1,6 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.util -import java.util.* +import java.util.UUID import kotlinx.coroutines.future.await import net.luckperms.api.LuckPerms diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index c0aab26..7acec3e 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -2,11 +2,15 @@ # MiniMessage-formatted prefix (https://docs.advntr.dev/minimessage/format.html) prefix: [DiamondBank-OG] -# ---Postgres--- -postgresUrl: jdbc:postgresql://localhost:5432/diamond +# ---PostgreSQL--- +postgresHost: localhost +postgresPort: 5432 +postgresDatabase: diamond postgresUser: ^{DIAMONDBANKOG_POSTGRES_USER} postgresPassword: ^{DIAMONDBANKOG_POSTGRES_PASSWORD} -# ---Redis-compatible URI--- -# According to https://redis.github.io/lettuce/user-guide/connecting-redis/#uri-syntax -redisUrl: redis://^{KEYDB_PASSWORD}@127.0.0.1:6379/0 +# ---Redis(-compatible) key value store--- +redisHost: 127.0.0.1 +redisPort: 6379 +redisDatabase: 0 +redisPassword: ^{KEYDB_PASSWORD} \ No newline at end of file diff --git a/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt b/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt index dbce905..696d89b 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt @@ -18,13 +18,18 @@ import kotlinx.coroutines.test.runTest import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.Constants.playerUuid -import net.trueog.diamondbankog.InventoryExtensions.countDiamondBlocks -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.isLocked import net.trueog.diamondbankog.Utils.mockPlayerInventory import net.trueog.diamondbankog.Utils.waitForCoroutines -import net.trueog.diamondbankog.commands.Compress +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.transaction.command.Compress +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamondBlocks +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.Server @@ -77,8 +82,7 @@ class CompressTest { every { player.sendMessage(any()) } just Runs - coEvery { balanceManager.setPlayerShards(any(), any(), PostgreSQL.ShardType.INVENTORY) } returns - Result.success(Unit) + coEvery { balanceManager.setPlayerShards(any(), any(), ShardType.INVENTORY) } returns Result.success(Unit) } companion object { diff --git a/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt b/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt index 4b87365..dd4ae8e 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt @@ -12,13 +12,18 @@ import kotlinx.coroutines.test.runTest import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.Constants.playerUuid -import net.trueog.diamondbankog.InventoryExtensions.countDiamondBlocks -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.isLocked import net.trueog.diamondbankog.Utils.mockPlayerInventory import net.trueog.diamondbankog.Utils.waitForCoroutines -import net.trueog.diamondbankog.commands.Deposit +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.transaction.command.Deposit +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamondBlocks +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.Server @@ -65,8 +70,7 @@ class DepositTest { every { server.getPlayer(playerUuid) } returns player coEvery { balanceManager.addToBankShards(any(), any()) } returns Result.success(Unit) - coEvery { balanceManager.setPlayerShards(any(), any(), PostgreSQL.ShardType.INVENTORY) } returns - Result.success(Unit) + coEvery { balanceManager.setPlayerShards(any(), any(), ShardType.INVENTORY) } returns Result.success(Unit) coEvery { balanceManager.insertTransactionLog(any(), any(), any(), any(), any()) } returns Result.success(Unit) every { player.sendMessage(any()) } just Runs } diff --git a/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt b/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt index d3210d9..dd5f829 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt @@ -17,14 +17,19 @@ import net.luckperms.api.model.user.User import net.luckperms.api.node.Node import net.trueog.diamondbankog.Constants.otherPlayerUuid import net.trueog.diamondbankog.Constants.playerUuid -import net.trueog.diamondbankog.InventoryExtensions.countDiamondBlocks -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.countTotal -import net.trueog.diamondbankog.InventoryExtensions.isLocked import net.trueog.diamondbankog.Utils.mockPlayerInventory import net.trueog.diamondbankog.Utils.waitForCoroutines -import net.trueog.diamondbankog.commands.Pay +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.Shard +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.transaction.command.Pay +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamondBlocks +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards +import net.trueog.diamondbankog.util.InventoryExtensions.countTotal import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.Server @@ -86,8 +91,7 @@ class PayTest { every { otherPlayer.hasPlayedBefore() } returns true coEvery { balanceManager.addToBankShards(any(), any()) } returns Result.success(Unit) - coEvery { balanceManager.setPlayerShards(any(), any(), PostgreSQL.ShardType.INVENTORY) } returns - Result.success(Unit) + coEvery { balanceManager.setPlayerShards(any(), any(), ShardType.INVENTORY) } returns Result.success(Unit) coEvery { balanceManager.subtractFromBankShards(any(), any()) } returns Result.success(Unit) coEvery { balanceManager.insertTransactionLog(any(), any(), any(), any(), any()) } returns Result.success(Unit) diff --git a/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt b/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt index b246801..6130625 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt @@ -12,13 +12,17 @@ import kotlinx.coroutines.test.runTest import net.kyori.adventure.text.Component import net.kyori.adventure.text.minimessage.MiniMessage import net.trueog.diamondbankog.Constants.playerUuid -import net.trueog.diamondbankog.InventoryExtensions.countDiamonds -import net.trueog.diamondbankog.InventoryExtensions.countShards -import net.trueog.diamondbankog.InventoryExtensions.countTotal -import net.trueog.diamondbankog.InventoryExtensions.isLocked import net.trueog.diamondbankog.Utils.mockPlayerInventory import net.trueog.diamondbankog.Utils.waitForCoroutines -import net.trueog.diamondbankog.commands.Withdraw +import net.trueog.diamondbankog.balance.BalanceManager +import net.trueog.diamondbankog.balance.shard.ShardType +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +import net.trueog.diamondbankog.transaction.command.Withdraw +import net.trueog.diamondbankog.util.InventoryExtensions.countDiamonds +import net.trueog.diamondbankog.util.InventoryExtensions.countShards +import net.trueog.diamondbankog.util.InventoryExtensions.countTotal import org.bukkit.Bukkit import org.bukkit.Material import org.bukkit.Server @@ -61,8 +65,7 @@ class WithdrawTest { every { server.getPlayer("player") } returns player coEvery { balanceManager.addToBankShards(any(), any()) } returns Result.success(Unit) - coEvery { balanceManager.setPlayerShards(any(), any(), PostgreSQL.ShardType.INVENTORY) } returns - Result.success(Unit) + coEvery { balanceManager.setPlayerShards(any(), any(), ShardType.INVENTORY) } returns Result.success(Unit) coEvery { balanceManager.subtractFromBankShards(any(), any()) } returns Result.success(Unit) coEvery { balanceManager.insertTransactionLog(any(), any(), any(), any(), any()) } returns Result.success(Unit) every { player.sendMessage(any()) } just Runs