From 01df53ede550d40fcda2c4c139d58bd59451699e Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 12:08:54 +0200 Subject: [PATCH 1/7] Make the config only expose getters --- .../kotlin/net/trueog/diamondbankog/Config.kt | 10 +-- .../net/trueog/diamondbankog/DiamondBankOG.kt | 2 +- .../net/trueog/diamondbankog/YamlConfig.kt | 83 ++++++++++--------- 3 files changed, 50 insertions(+), 45 deletions(-) diff --git a/src/main/kotlin/net/trueog/diamondbankog/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/Config.kt index 90cca03..f9816e2 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Config.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Config.kt @@ -1,9 +1,9 @@ package net.trueog.diamondbankog interface Config { - var prefix: String - var postgresUrl: String - var postgresUser: String - var postgresPassword: String - var redisUrl: String + val prefix: String + val postgresUrl: String + val postgresUser: String + val postgresPassword: String + val redisUrl: String } diff --git a/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt index 2c727fd..b84a72c 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/DiamondBankOG.kt @@ -19,7 +19,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/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt index 356a1b6..2c684b3 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt @@ -4,56 +4,61 @@ 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 - +internal class YamlConfig +private constructor( + override val prefix: String, + override val postgresUrl: String, + override val postgresUser: String, + override val postgresPassword: String, + override val redisUrl: String, +) : Config { 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 - } + val prefix = + try { + 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 - } + val postgresUrl = + try { + 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 - } + val postgresUser = + try { + 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 - } + val postgresPassword = + try { + 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 - } + val redisUrl = + try { + yamlConfig.get("redisUrl") as String + } catch (_: Exception) { + plugin.logger.severe("Failed to parse config option \"redisUrl\" as a string") + return null + } - return config + return YamlConfig(prefix, postgresUrl, postgresUser, postgresPassword, redisUrl) } } } -- 2.47.3 From 408c94f71d79cfede5acbb408e815dba554ce42e Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 13:12:25 +0200 Subject: [PATCH 2/7] Split URL config value for PostgreSQL and Redis into specific config values --- build.gradle.kts | 2 +- .../kotlin/net/trueog/diamondbankog/Config.kt | 9 ++- .../net/trueog/diamondbankog/PostgreSQL.kt | 20 ++--- .../kotlin/net/trueog/diamondbankog/Redis.kt | 3 +- .../net/trueog/diamondbankog/YamlConfig.kt | 74 +++++++++---------- src/main/resources/config.yml | 14 ++-- 6 files changed, 65 insertions(+), 57 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e48b8f3..c07db5e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -56,7 +56,7 @@ 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") diff --git a/src/main/kotlin/net/trueog/diamondbankog/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/Config.kt index f9816e2..0e5cfb4 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Config.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Config.kt @@ -2,8 +2,13 @@ package net.trueog.diamondbankog interface Config { val prefix: String - val postgresUrl: String + val postgresHost: String + val postgresPort: Int + val postgresDatabase: String val postgresUser: String val postgresPassword: String - val redisUrl: String + val redisHost: String + val redisPort: Int + val redisDatabase: Int + val redisPassword: String } diff --git a/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt b/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt index 784c36a..b5aab1f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt @@ -4,7 +4,6 @@ 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.* @@ -32,19 +31,22 @@ class PostgreSQL private constructor() { 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 } diff --git a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt index f8c19a8..95fca00 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt @@ -2,10 +2,11 @@ package net.trueog.diamondbankog 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).withPassword(config.redisPassword).withDatabase(1).build()) /** @return True if failed */ fun testConnection(): Boolean { diff --git a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt index 2c684b3..28baf6b 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt @@ -7,10 +7,15 @@ import org.bukkit.configuration.file.YamlConfiguration internal class YamlConfig private constructor( override val prefix: String, - override val postgresUrl: String, + override val postgresHost: String, + override val postgresPort: Int, + override val postgresDatabase: String, override val postgresUser: String, override val postgresPassword: String, - override val redisUrl: 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? { @@ -18,47 +23,38 @@ private constructor( val file = File(plugin.dataFolder, "config.yml") val yamlConfig = YamlConfiguration.loadConfiguration(file) - val prefix = - try { - yamlConfig.get("prefix") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"prefix\" as a string") - return null - } + val prefix = yamlConfig.parseKeyAs("prefix") ?: return null - val postgresUrl = - try { - yamlConfig.get("postgresUrl") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresUrl\" as a string") - return null - } + val postgresHost = yamlConfig.parseKeyAs("postgresHost") ?: return null + val postgresPort = yamlConfig.parseKeyAs("postgresPort") ?: return null + val postgresDatabase = yamlConfig.parseKeyAs("postgresDatabase") ?: return null + val postgresUser = yamlConfig.parseKeyAs("postgresUser") ?: return null + val postgresPassword = yamlConfig.parseKeyAs("postgresPassword") ?: return null - val postgresUser = - try { - yamlConfig.get("postgresUser") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresUser\" as a string") - return null - } + val redisHost = yamlConfig.parseKeyAs("redisHost") ?: return null + val redisPort = yamlConfig.parseKeyAs("redisPort") ?: return null + val redisDatabase = yamlConfig.parseKeyAs("redisDatabase") ?: return null + val redisPassword = yamlConfig.parseKeyAs("redisPassword") ?: return null - val postgresPassword = - try { - yamlConfig.get("postgresPassword") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"postgresPassword\" as a string") - return null - } + return YamlConfig( + prefix, + postgresHost, + postgresPort, + postgresDatabase, + postgresUser, + postgresPassword, + redisHost, + redisPort, + redisDatabase, + redisPassword + ) + } - val redisUrl = - try { - yamlConfig.get("redisUrl") as String - } catch (_: Exception) { - plugin.logger.severe("Failed to parse config option \"redisUrl\" as a string") - return null - } - - return YamlConfig(prefix, postgresUrl, postgresUser, postgresPassword, redisUrl) + inline fun YamlConfiguration.parseKeyAs(key: String): T? { + 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/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 -- 2.47.3 From c881ca1990215782e540775f52173f4320bf21e2 Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 14:11:57 +0200 Subject: [PATCH 3/7] Make passwords optional --- .../kotlin/net/trueog/diamondbankog/Config.kt | 4 +- .../kotlin/net/trueog/diamondbankog/Redis.kt | 8 ++- .../net/trueog/diamondbankog/YamlConfig.kt | 51 ++++++++++++------- 3 files changed, 42 insertions(+), 21 deletions(-) diff --git a/src/main/kotlin/net/trueog/diamondbankog/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/Config.kt index 0e5cfb4..b310344 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Config.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Config.kt @@ -6,9 +6,9 @@ interface Config { val postgresPort: Int val postgresDatabase: String val postgresUser: String - val postgresPassword: String + val postgresPassword: String? val redisHost: String val redisPort: Int val redisDatabase: Int - val redisPassword: String + val redisPassword: String? } diff --git a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt index 95fca00..c3e2891 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt @@ -6,7 +6,13 @@ import io.lettuce.core.RedisURI import net.trueog.diamondbankog.DiamondBankOG.Companion.config internal class Redis { - private val redisClient: RedisClient = RedisClient.create(RedisURI.Builder.redis(config.redisHost, config.redisPort).withPassword(config.redisPassword).withDatabase(1).build()) + private val redisClient: RedisClient = + RedisClient.create( + RedisURI.Builder.redis(config.redisHost, config.redisPort) + .apply { config.redisPassword?.let { withPassword(it) } } + .withDatabase(1) + .build() + ) /** @return True if failed */ fun testConnection(): Boolean { diff --git a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt index 28baf6b..d63035e 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt @@ -11,11 +11,11 @@ private constructor( override val postgresPort: Int, override val postgresDatabase: String, override val postgresUser: String, - override val postgresPassword: String, + override val postgresPassword: String?, override val redisHost: String, override val redisPort: Int, override val redisDatabase: Int, - override val redisPassword: String + override val redisPassword: String?, ) : Config { companion object : ConfigFactory { override fun create(): YamlConfig? { @@ -23,18 +23,31 @@ private constructor( val file = File(plugin.dataFolder, "config.yml") val yamlConfig = YamlConfiguration.loadConfiguration(file) - val prefix = yamlConfig.parseKeyAs("prefix") ?: return null + val prefix = yamlConfig.parseKeyAs("prefix") - val postgresHost = yamlConfig.parseKeyAs("postgresHost") ?: return null - val postgresPort = yamlConfig.parseKeyAs("postgresPort") ?: return null - val postgresDatabase = yamlConfig.parseKeyAs("postgresDatabase") ?: return null - val postgresUser = yamlConfig.parseKeyAs("postgresUser") ?: return null - val postgresPassword = yamlConfig.parseKeyAs("postgresPassword") ?: return null + 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") ?: return null - val redisPort = yamlConfig.parseKeyAs("redisPort") ?: return null - val redisDatabase = yamlConfig.parseKeyAs("redisDatabase") ?: return null - val redisPassword = yamlConfig.parseKeyAs("redisPassword") ?: return null + 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, @@ -46,15 +59,17 @@ private constructor( redisHost, redisPort, redisDatabase, - redisPassword + redisPassword, ) } - inline fun YamlConfiguration.parseKeyAs(key: String): T? { - return this.get(key) as? T ?: run { - plugin.logger.severe("Failed to parse config option \"$key\" as ${T::class.simpleName}") - return null - } + 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 + } } } } -- 2.47.3 From 7d10264fb239d2984a273ea6e427d90ddbff41f7 Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 14:14:57 +0200 Subject: [PATCH 4/7] Update dependencies --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index c07db5e..7a68702 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -63,7 +63,7 @@ dependencies { 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") -- 2.47.3 From 7048176471721d1fa5678d27c68af082962daf0c Mon Sep 17 00:00:00 2001 From: Sven <68018116+SKBotNL@users.noreply.github.com> Date: Mon, 6 Apr 2026 18:36:11 +0200 Subject: [PATCH 5/7] Use database from config --- src/main/kotlin/net/trueog/diamondbankog/Redis.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt index c3e2891..5aae0e0 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/Redis.kt @@ -10,7 +10,7 @@ internal class Redis { RedisClient.create( RedisURI.Builder.redis(config.redisHost, config.redisPort) .apply { config.redisPassword?.let { withPassword(it) } } - .withDatabase(1) + .withDatabase(config.redisDatabase) .build() ) -- 2.47.3 From 8620b5c39d5e541e16596a88b17e783bfcb3b25e Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 21:52:08 +0200 Subject: [PATCH 6/7] Restructure --- .../{commands => }/DiamondBankHelp.kt | 2 +- .../net/trueog/diamondbankog/DiamondBankOG.kt | 23 ++++++- .../kotlin/net/trueog/diamondbankog/Events.kt | 15 ++-- .../PlayerBalanceChangedEvent.kt | 5 -- .../{commands => }/ToggleDebug.kt | 3 +- .../diamondbankog/api/DiamondBankAPIJava.kt | 17 +++-- .../diamondbankog/api/DiamondBankAPIKotlin.kt | 17 +++-- .../diamondbankog/{ => api}/EventManager.kt | 5 +- .../api/PlayerBalanceChangedEvent.kt | 6 ++ .../{ => api}/PlayerBalanceChangedListener.kt | 2 +- .../{ => autocompress}/AutoCompress.kt | 68 ++++++++++--------- .../autocompress/command/AutoCompress.kt | 59 ++++++++++++++++ .../{ => autodeposit}/AutoDeposit.kt | 29 ++++---- .../autodeposit/command/AutoDeposit.kt | 59 ++++++++++++++++ .../{ => balance}/BalanceManager.kt | 6 +- .../{ => balance}/BalanceManagerFactory.kt | 2 +- .../diamondbankog/{ => balance}/Cache.kt | 4 +- .../{ => balance}/CachingBalanceManager.kt | 10 +-- .../{commands => balance/command}/Balance.kt | 6 +- .../command}/Balancetop.kt | 6 +- .../command}/SetBankBalance.kt | 10 +-- .../balance/shard/PlayerShards.kt | 5 ++ .../{ => balance/shard}/Shard.kt | 2 +- .../diamondbankog/balance/shard/ShardType.kt | 8 +++ .../diamondbankog/commands/AutoCompress.kt | 52 -------------- .../diamondbankog/commands/AutoDeposit.kt | 52 -------------- .../commands/DiamondBankReload.kt | 43 ------------ .../diamondbankog/{ => config}/Config.kt | 2 +- .../{ => config}/ConfigFactory.kt | 2 +- .../diamondbankog/{ => config}/YamlConfig.kt | 2 +- .../config/command/DiamondBankReload.kt | 44 ++++++++++++ .../command}/DisableEconomy.kt | 2 +- .../command}/EnableEconomy.kt | 2 +- .../{ => persistence}/PostgreSQL.kt | 18 ++--- .../diamondbankog/{ => persistence}/Redis.kt | 2 +- .../{ => transaction}/CommonOperations.kt | 5 +- .../transaction/InventoryLockExtensions.kt | 23 +++++++ .../{ => transaction}/InventorySnapshot.kt | 11 +-- .../InventorySnapshotUtils.kt | 5 +- .../{ => transaction}/TransactionLock.kt | 2 +- .../command}/Compress.kt | 20 ++++-- .../command}/Deposit.kt | 17 +++-- .../{commands => transaction/command}/Pay.kt | 18 +++-- .../command}/Withdraw.kt | 17 +++-- .../CommonCommandInterlude.kt | 14 ++-- .../diamondbankog/{ => util}/ErrorHandler.kt | 6 +- .../{ => util}/InventoryExtensions.kt | 23 +------ .../{ => util}/MainThreadBlock.kt | 3 +- .../diamondbankog/{ => util}/PlayerPrefix.kt | 4 +- .../net/trueog/diamondbankog/CompressTest.kt | 18 +++-- .../net/trueog/diamondbankog/DepositTest.kt | 18 +++-- .../net/trueog/diamondbankog/PayTest.kt | 20 +++--- .../net/trueog/diamondbankog/WithdrawTest.kt | 17 +++-- 53 files changed, 463 insertions(+), 368 deletions(-) rename src/main/kotlin/net/trueog/diamondbankog/{commands => }/DiamondBankHelp.kt (96%) delete mode 100644 src/main/kotlin/net/trueog/diamondbankog/PlayerBalanceChangedEvent.kt rename src/main/kotlin/net/trueog/diamondbankog/{commands => }/ToggleDebug.kt (91%) rename src/main/kotlin/net/trueog/diamondbankog/{ => api}/EventManager.kt (70%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/api/PlayerBalanceChangedEvent.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => api}/PlayerBalanceChangedListener.kt (71%) rename src/main/kotlin/net/trueog/diamondbankog/{ => autocompress}/AutoCompress.kt (65%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => autodeposit}/AutoDeposit.kt (56%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => balance}/BalanceManager.kt (88%) rename src/main/kotlin/net/trueog/diamondbankog/{ => balance}/BalanceManagerFactory.kt (63%) rename src/main/kotlin/net/trueog/diamondbankog/{ => balance}/Cache.kt (97%) rename src/main/kotlin/net/trueog/diamondbankog/{ => balance}/CachingBalanceManager.kt (96%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => balance/command}/Balance.kt (96%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => balance/command}/Balancetop.kt (97%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => balance/command}/SetBankBalance.kt (93%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/balance/shard/PlayerShards.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => balance/shard}/Shard.kt (97%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/balance/shard/ShardType.kt delete mode 100644 src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt delete mode 100644 src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt delete mode 100644 src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => config}/Config.kt (88%) rename src/main/kotlin/net/trueog/diamondbankog/{ => config}/ConfigFactory.kt (57%) rename src/main/kotlin/net/trueog/diamondbankog/{ => config}/YamlConfig.kt (98%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt rename src/main/kotlin/net/trueog/diamondbankog/{commands => economy/command}/DisableEconomy.kt (95%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => economy/command}/EnableEconomy.kt (94%) rename src/main/kotlin/net/trueog/diamondbankog/{ => persistence}/PostgreSQL.kt (97%) rename src/main/kotlin/net/trueog/diamondbankog/{ => persistence}/Redis.kt (96%) rename src/main/kotlin/net/trueog/diamondbankog/{ => transaction}/CommonOperations.kt (93%) create mode 100644 src/main/kotlin/net/trueog/diamondbankog/transaction/InventoryLockExtensions.kt rename src/main/kotlin/net/trueog/diamondbankog/{ => transaction}/InventorySnapshot.kt (87%) rename src/main/kotlin/net/trueog/diamondbankog/{ => transaction}/InventorySnapshotUtils.kt (96%) rename src/main/kotlin/net/trueog/diamondbankog/{ => transaction}/TransactionLock.kt (97%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => transaction/command}/Compress.kt (93%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => transaction/command}/Deposit.kt (89%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => transaction/command}/Pay.kt (91%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => transaction/command}/Withdraw.kt (90%) rename src/main/kotlin/net/trueog/diamondbankog/{commands => util}/CommonCommandInterlude.kt (88%) rename src/main/kotlin/net/trueog/diamondbankog/{ => util}/ErrorHandler.kt (60%) rename src/main/kotlin/net/trueog/diamondbankog/{ => util}/InventoryExtensions.kt (62%) rename src/main/kotlin/net/trueog/diamondbankog/{ => util}/MainThreadBlock.kt (91%) rename src/main/kotlin/net/trueog/diamondbankog/{ => util}/PlayerPrefix.kt (96%) 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 b84a72c..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 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/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 65% rename from src/main/kotlin/net/trueog/diamondbankog/AutoCompress.kt rename to src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt index d6d46db..28c0585 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/AutoCompress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt @@ -1,24 +1,23 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.autocompress import kotlin.math.abs import kotlinx.coroutines.launch -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.DiamondBankOG +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 internal object AutoCompress { fun compress(player: Player) { - scope.launch { + DiamondBankOG.scope.launch { val worldName = player.world.name if (worldName != "world" && worldName != "world_nether" && worldName != "world_the_end") { return@launch @@ -26,16 +25,19 @@ internal object AutoCompress { if (!player.hasPermission("diamondbank-og.compress")) { player.sendMessage( - mm.deserialize("${config.prefix}: You do not have permission to compress.") + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have permission to compress." + ) ) return@launch } - transactionLock.withLockSuspend(player.uniqueId) { - val inventorySnapshot = runOnMainThread { - player.inventory.lock() - InventorySnapshot.from(player.inventory, DiamondBankOG.balanceManager) - } + DiamondBankOG.transactionLock.withLockSuspend(player.uniqueId) { + val inventorySnapshot = + MainThreadBlock.runOnMainThread { + player.inventory.lock() + InventorySnapshot.from(player.inventory, DiamondBankOG.balanceManager) + } val shardsInInventory = inventorySnapshot.countShards().toInt() val diamondsInInventory = inventorySnapshot.countDiamonds().toInt() @@ -71,8 +73,8 @@ internal object AutoCompress { if (changeInDiamonds > emptySlots + leftOverSpaceDiamonds) { player.sendMessage( - mm.deserialize( - "${config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamonds Diamonds)." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamonds Diamonds)." ) ) player.inventory.unlock() @@ -90,8 +92,8 @@ internal object AutoCompress { if (changeInDiamondBlocks > emptySlots + leftOverSpaceDiamondBlocks) { player.sendMessage( - mm.deserialize( - "${config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamondBlocks Diamond Blocks)." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamondBlocks Diamond Blocks)." ) ) player.inventory.unlock() @@ -103,8 +105,8 @@ internal object AutoCompress { val removeMap = inventorySnapshot.removeItem(Shard.createItemStack(abs(changeInShards))) if (removeMap.isNotEmpty()) { player.sendMessage( - mm.deserialize( - "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -116,8 +118,8 @@ internal object AutoCompress { val addMap = inventorySnapshot.addItem(ItemStack(Material.DIAMOND, changeInDiamonds)) if (addMap.isNotEmpty()) { player.sendMessage( - mm.deserialize( - "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -127,8 +129,8 @@ internal object AutoCompress { val removeMap = inventorySnapshot.removeItem(ItemStack(Material.DIAMOND, abs(changeInDiamonds))) if (removeMap.isNotEmpty()) { player.sendMessage( - mm.deserialize( - "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -140,8 +142,8 @@ internal object AutoCompress { val addMap = inventorySnapshot.addItem(ItemStack(Material.DIAMOND_BLOCK, changeInDiamondBlocks)) if (addMap.isNotEmpty()) { player.sendMessage( - mm.deserialize( - "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -152,8 +154,8 @@ internal object AutoCompress { inventorySnapshot.removeItem(ItemStack(Material.DIAMOND_BLOCK, abs(changeInDiamondBlocks))) if (removeMap.isNotEmpty()) { player.sendMessage( - mm.deserialize( - "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -161,7 +163,7 @@ internal object AutoCompress { } } - runOnMainThread { + MainThreadBlock.runOnMainThread { inventorySnapshot.restoreTo(player.inventory) player.inventory.unlock() } diff --git a/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt new file mode 100644 index 0000000..990ea07 --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt @@ -0,0 +1,59 @@ +package net.trueog.diamondbankog.autocompress.command + +import net.trueog.diamondbankog.DiamondBankOG +import org.bukkit.command.Command +import org.bukkit.command.CommandExecutor +import org.bukkit.command.CommandSender +import org.bukkit.entity.Player + +internal class AutoCompress : CommandExecutor { + override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { + if (DiamondBankOG.economyDisabled) { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: The economy is disabled. Please notify a staff member." + ) + ) + return true + } + + if (sender !is Player) { + sender.sendMessage("You can only execute this command as a player.") + return true + } + + if (!sender.hasPermission("diamondbank-og.compress")) { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have permission to use this command." + ) + ) + return true + } + + if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Successfully turned auto-compress off." + ) + ) + } else { + if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: <#FFA500>You cannot have both auto-compress and auto-deposit on at the same time, so auto-deposit has been turned off<#FFA500>." + ) + ) + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") + } + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "true") + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Successfully turned auto-compress on." + ) + ) + } + return true + } +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt similarity index 56% rename from src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt rename to src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt index 73508c5..022c7df 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/AutoDeposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt @@ -1,12 +1,9 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.autodeposit 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.ErrorHandler.handleError +import net.trueog.diamondbankog.DiamondBankOG +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 @@ -19,7 +16,11 @@ internal object AutoDeposit { } if (!player.hasPermission("diamondbank-og.deposit")) { - player.sendMessage(mm.deserialize("${config.prefix}: You do not have permission to deposit.")) + player.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have permission to deposit." + ) + ) return } @@ -38,13 +39,13 @@ internal object AutoDeposit { itemStack.amount = 0 item.itemStack = itemStack - scope.launch { - transactionLock.withLockSuspend(player.uniqueId) { - balanceManager.addToBankShards(player.uniqueId, shards).getOrElse { - handleError(it) + DiamondBankOG.scope.launch { + DiamondBankOG.transactionLock.withLockSuspend(player.uniqueId) { + DiamondBankOG.balanceManager.addToBankShards(player.uniqueId, shards).getOrElse { + ErrorHandler.handleError(it) player.sendMessage( - mm.deserialize( - "${config.prefix}: A severe error has occurred. Please notify a staff member." + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: A severe error has occurred. Please notify a staff member." ) ) return@withLockSuspend diff --git a/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt new file mode 100644 index 0000000..a8435ba --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt @@ -0,0 +1,59 @@ +package net.trueog.diamondbankog.autodeposit.command + +import net.trueog.diamondbankog.DiamondBankOG +import org.bukkit.command.Command +import org.bukkit.command.CommandExecutor +import org.bukkit.command.CommandSender +import org.bukkit.entity.Player + +internal class AutoDeposit : CommandExecutor { + override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { + if (DiamondBankOG.economyDisabled) { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: The economy is disabled. Please notify a staff member." + ) + ) + return true + } + + if (sender !is Player) { + sender.sendMessage("You can only execute this command as a player.") + return true + } + + if (!sender.hasPermission("diamondbank-og.deposit")) { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: You do not have permission to use this command." + ) + ) + return true + } + + if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Successfully turned auto-deposit off." + ) + ) + } else { + if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: <#FFA500>You cannot have both auto-deposit and auto-compress on at the same time, so auto-compress has been turned off<#FFA500>." + ) + ) + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") + } + DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "true") + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Successfully turned auto-deposit on." + ) + ) + } + return true + } +} 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 96% rename from src/main/kotlin/net/trueog/diamondbankog/CachingBalanceManager.kt rename to src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt index 5e1be69..104b415 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/CachingBalanceManager.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt @@ -1,14 +1,16 @@ -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 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.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() 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/commands/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt deleted file mode 100644 index e94fd54..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoCompress.kt +++ /dev/null @@ -1,52 +0,0 @@ -package net.trueog.diamondbankog.commands - -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.redis -import org.bukkit.command.Command -import org.bukkit.command.CommandExecutor -import org.bukkit.command.CommandSender -import org.bukkit.entity.Player - -internal class AutoCompress : CommandExecutor { - override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - if (economyDisabled) { - sender.sendMessage( - mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") - ) - return true - } - - if (sender !is Player) { - sender.sendMessage("You can only execute this command as a player.") - return true - } - - if (!sender.hasPermission("diamondbank-og.compress")) { - sender.sendMessage( - mm.deserialize("${config.prefix}: You do not have permission to use this command.") - ) - return true - } - - if (redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { - redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") - sender.sendMessage( - mm.deserialize("${config.prefix}: Successfully turned auto-compress off.") - ) - } else { - if (redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { - sender.sendMessage( - mm.deserialize( - "${config.prefix}: <#FFA500>You cannot have both auto-compress and auto-deposit on at the same time, so auto-deposit has been turned off<#FFA500>." - ) - ) - redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") - } - redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "true") - sender.sendMessage(mm.deserialize("${config.prefix}: Successfully turned auto-compress on.")) - } - return true - } -} diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt deleted file mode 100644 index ebe8200..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/AutoDeposit.kt +++ /dev/null @@ -1,52 +0,0 @@ -package net.trueog.diamondbankog.commands - -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.redis -import org.bukkit.command.Command -import org.bukkit.command.CommandExecutor -import org.bukkit.command.CommandSender -import org.bukkit.entity.Player - -internal class AutoDeposit : CommandExecutor { - override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - if (economyDisabled) { - sender.sendMessage( - mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") - ) - return true - } - - if (sender !is Player) { - sender.sendMessage("You can only execute this command as a player.") - return true - } - - if (!sender.hasPermission("diamondbank-og.deposit")) { - sender.sendMessage( - mm.deserialize("${config.prefix}: You do not have permission to use this command.") - ) - return true - } - - if (redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { - redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") - sender.sendMessage( - mm.deserialize("${config.prefix}: Successfully turned auto-deposit off.") - ) - } else { - if (redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { - sender.sendMessage( - mm.deserialize( - "${config.prefix}: <#FFA500>You cannot have both auto-deposit and auto-compress on at the same time, so auto-compress has been turned off<#FFA500>." - ) - ) - redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") - } - redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "true") - sender.sendMessage(mm.deserialize("${config.prefix}: Successfully turned auto-deposit on.")) - } - return true - } -} diff --git a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt b/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt deleted file mode 100644 index 317d8ba..0000000 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/DiamondBankReload.kt +++ /dev/null @@ -1,43 +0,0 @@ -package net.trueog.diamondbankog.commands - -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 org.bukkit.Bukkit -import org.bukkit.command.Command -import org.bukkit.command.CommandExecutor -import org.bukkit.command.CommandSender - -internal class DiamondBankReload : CommandExecutor { - override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - config = - YamlConfig.create() - ?: run { - sender.sendMessage( - mm.deserialize( - "${config.prefix}: Failed to reload the config. Check the console for more information." - ) - ) - Bukkit.getPluginManager().disablePlugin(plugin) - return true - } - - balanceManager = - CachingBalanceManager.create() - ?: run { - sender.sendMessage( - mm.deserialize( - "${config.prefix}: Failed to reload the config. Check the console for more information." - ) - ) - Bukkit.getPluginManager().disablePlugin(plugin) - return true - } - - sender.sendMessage(mm.deserialize("${config.prefix}: Successfully reloaded the config.")) - return true - } -} diff --git a/src/main/kotlin/net/trueog/diamondbankog/Config.kt b/src/main/kotlin/net/trueog/diamondbankog/config/Config.kt similarity index 88% rename from src/main/kotlin/net/trueog/diamondbankog/Config.kt rename to src/main/kotlin/net/trueog/diamondbankog/config/Config.kt index b310344..d111d90 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Config.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/config/Config.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.config interface Config { val prefix: 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/YamlConfig.kt b/src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt similarity index 98% rename from src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt rename to src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt index d63035e..fa09b85 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/YamlConfig.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/config/YamlConfig.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.config import java.io.File import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin diff --git a/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt new file mode 100644 index 0000000..3307d0b --- /dev/null +++ b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt @@ -0,0 +1,44 @@ +package net.trueog.diamondbankog.config.command + +import net.trueog.diamondbankog.DiamondBankOG +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 +import org.bukkit.command.CommandSender + +internal class DiamondBankReload : CommandExecutor { + override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { + DiamondBankOG.config = + YamlConfig.create() + ?: run { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Failed to reload the config. Check the console for more information." + ) + ) + Bukkit.getPluginManager().disablePlugin(DiamondBankOG.plugin) + return true + } + + DiamondBankOG.balanceManager = + CachingBalanceManager.create() + ?: run { + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Failed to reload the config. Check the console for more information." + ) + ) + Bukkit.getPluginManager().disablePlugin(DiamondBankOG.plugin) + return true + } + + sender.sendMessage( + DiamondBankOG.mm.deserialize( + "${DiamondBankOG.config.prefix}: Successfully reloaded the config." + ) + ) + return true + } +} 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 97% rename from src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt rename to src/main/kotlin/net/trueog/diamondbankog/persistence/PostgreSQL.kt index b5aab1f..68c158f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/PostgreSQL.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/persistence/PostgreSQL.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.persistence import com.github.jasync.sql.db.asSuspending import com.github.jasync.sql.db.pool.ConnectionPool @@ -7,25 +7,21 @@ import com.github.jasync.sql.db.postgresql.PostgreSQLConnectionBuilder 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() @@ -62,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 96% rename from src/main/kotlin/net/trueog/diamondbankog/Redis.kt rename to src/main/kotlin/net/trueog/diamondbankog/persistence/Redis.kt index 5aae0e0..726a7d1 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/Redis.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/persistence/Redis.kt @@ -1,4 +1,4 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.persistence import io.lettuce.core.RedisClient import io.lettuce.core.RedisConnectionException 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 88% rename from src/main/kotlin/net/trueog/diamondbankog/commands/CommonCommandInterlude.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt index 68e7a2d..e5a1eda 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/commands/CommonCommandInterlude.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt @@ -1,19 +1,19 @@ -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.DiamondBankOG +import net.trueog.diamondbankog.config.Config import org.bukkit.command.CommandSender import org.bukkit.entity.Player +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract object CommonCommandInterlude { /** @return should return */ @OptIn(ExperimentalContracts::class) fun run(sender: CommandSender, command: String, config: Config, mm: MiniMessage): Boolean { contract { returns(false) implies (sender is Player) } - if (economyDisabled) { + if (DiamondBankOG.economyDisabled) { sender.sendMessage( mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") ) @@ -41,4 +41,4 @@ object CommonCommandInterlude { } return false } -} +} \ No newline at end of file diff --git a/src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt similarity index 60% rename from src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt index bf6f340..78ded3e 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/ErrorHandler.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt @@ -1,11 +1,11 @@ -package net.trueog.diamondbankog +package net.trueog.diamondbankog.util -import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled +import net.trueog.diamondbankog.DiamondBankOG internal object ErrorHandler { /** Handles the error by throwing, disables the economy unless specified that it shouldn't */ fun handleError(exception: Throwable, dontDisableEconomy: Boolean = false) { - if (!dontDisableEconomy) economyDisabled = true + if (!dontDisableEconomy) DiamondBankOG.economyDisabled = true throw exception } } 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 91% rename from src/main/kotlin/net/trueog/diamondbankog/MainThreadBlock.kt rename to src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt index 8f758e8..d48ff33 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 import org.bukkit.Bukkit internal object MainThreadBlock { 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/test/kotlin/net/trueog/diamondbankog/CompressTest.kt b/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt index dbce905..d7428fe 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.transaction.command.Compress +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +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..ad07ad5 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.transaction.command.Deposit +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +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..4a69607 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.transaction.command.Pay +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +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..1ee461c 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.transaction.command.Withdraw +import net.trueog.diamondbankog.config.Config +import net.trueog.diamondbankog.transaction.InventoryLockExtensions.isLocked +import net.trueog.diamondbankog.transaction.TransactionLock +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 -- 2.47.3 From e9f5bda55f9a6ed42a214c6cecace48d8ac740a9 Mon Sep 17 00:00:00 2001 From: Sven Date: Mon, 6 Apr 2026 21:58:52 +0200 Subject: [PATCH 7/7] Small cleanup --- .../autocompress/AutoCompress.kt | 44 ++++++++++--------- .../autocompress/command/AutoCompress.kt | 39 +++++++--------- .../diamondbankog/autodeposit/AutoDeposit.kt | 22 +++++----- .../autodeposit/command/AutoDeposit.kt | 39 +++++++--------- .../balance/CachingBalanceManager.kt | 39 ++++++++-------- .../config/command/DiamondBankReload.kt | 27 ++++++------ .../util/CommonCommandInterlude.kt | 10 ++--- .../trueog/diamondbankog/util/ErrorHandler.kt | 4 +- .../diamondbankog/util/MainThreadBlock.kt | 4 +- .../net/trueog/diamondbankog/CompressTest.kt | 2 +- .../net/trueog/diamondbankog/DepositTest.kt | 2 +- .../net/trueog/diamondbankog/PayTest.kt | 2 +- .../net/trueog/diamondbankog/WithdrawTest.kt | 2 +- 13 files changed, 112 insertions(+), 124 deletions(-) diff --git a/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt index 28c0585..8dd5b10 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/AutoCompress.kt @@ -2,7 +2,11 @@ package net.trueog.diamondbankog.autocompress import kotlin.math.abs import kotlinx.coroutines.launch -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.mm +import net.trueog.diamondbankog.DiamondBankOG.Companion.scope +import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock import net.trueog.diamondbankog.balance.shard.Shard import net.trueog.diamondbankog.transaction.InventoryLockExtensions.lock import net.trueog.diamondbankog.transaction.InventoryLockExtensions.unlock @@ -17,7 +21,7 @@ import org.bukkit.inventory.ItemStack internal object AutoCompress { fun compress(player: Player) { - DiamondBankOG.scope.launch { + scope.launch { val worldName = player.world.name if (worldName != "world" && worldName != "world_nether" && worldName != "world_the_end") { return@launch @@ -25,18 +29,16 @@ internal object AutoCompress { if (!player.hasPermission("diamondbank-og.compress")) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have permission to compress." - ) + mm.deserialize("${config.prefix}: You do not have permission to compress.") ) return@launch } - DiamondBankOG.transactionLock.withLockSuspend(player.uniqueId) { + transactionLock.withLockSuspend(player.uniqueId) { val inventorySnapshot = MainThreadBlock.runOnMainThread { player.inventory.lock() - InventorySnapshot.from(player.inventory, DiamondBankOG.balanceManager) + InventorySnapshot.from(player.inventory, balanceManager) } val shardsInInventory = inventorySnapshot.countShards().toInt() @@ -73,8 +75,8 @@ internal object AutoCompress { if (changeInDiamonds > emptySlots + leftOverSpaceDiamonds) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamonds Diamonds)." + mm.deserialize( + "${config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamonds Diamonds)." ) ) player.inventory.unlock() @@ -92,8 +94,8 @@ internal object AutoCompress { if (changeInDiamondBlocks > emptySlots + leftOverSpaceDiamondBlocks) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamondBlocks Diamond Blocks)." + mm.deserialize( + "${config.prefix}: You do not have enough space in your inventory to compress all the Diamond currency items (+$changeInDiamondBlocks Diamond Blocks)." ) ) player.inventory.unlock() @@ -105,8 +107,8 @@ internal object AutoCompress { val removeMap = inventorySnapshot.removeItem(Shard.createItemStack(abs(changeInShards))) if (removeMap.isNotEmpty()) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + mm.deserialize( + "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -118,8 +120,8 @@ internal object AutoCompress { val addMap = inventorySnapshot.addItem(ItemStack(Material.DIAMOND, changeInDiamonds)) if (addMap.isNotEmpty()) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + mm.deserialize( + "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -129,8 +131,8 @@ internal object AutoCompress { val removeMap = inventorySnapshot.removeItem(ItemStack(Material.DIAMOND, abs(changeInDiamonds))) if (removeMap.isNotEmpty()) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + mm.deserialize( + "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -142,8 +144,8 @@ internal object AutoCompress { val addMap = inventorySnapshot.addItem(ItemStack(Material.DIAMOND_BLOCK, changeInDiamondBlocks)) if (addMap.isNotEmpty()) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + mm.deserialize( + "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() @@ -154,8 +156,8 @@ internal object AutoCompress { inventorySnapshot.removeItem(ItemStack(Material.DIAMOND_BLOCK, abs(changeInDiamondBlocks))) if (removeMap.isNotEmpty()) { player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." + mm.deserialize( + "${config.prefix}: Something went wrong while trying to compress the Diamond currency items in your inventory." ) ) player.inventory.unlock() diff --git a/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt index 990ea07..8a6858b 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autocompress/command/AutoCompress.kt @@ -1,6 +1,9 @@ package net.trueog.diamondbankog.autocompress.command -import net.trueog.diamondbankog.DiamondBankOG +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.redis import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender @@ -8,11 +11,9 @@ import org.bukkit.entity.Player internal class AutoCompress : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - if (DiamondBankOG.economyDisabled) { + if (economyDisabled) { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: The economy is disabled. Please notify a staff member." - ) + mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") ) return true } @@ -24,35 +25,27 @@ internal class AutoCompress : CommandExecutor { if (!sender.hasPermission("diamondbank-og.compress")) { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have permission to use this command." - ) + mm.deserialize("${config.prefix}: You do not have permission to use this command.") ) return true } - if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") + if (redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { + redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Successfully turned auto-compress off." - ) + mm.deserialize("${config.prefix}: Successfully turned auto-compress off.") ) } else { - if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { + if (redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: <#FFA500>You cannot have both auto-compress and auto-deposit on at the same time, so auto-deposit has been turned off<#FFA500>." + mm.deserialize( + "${config.prefix}: <#FFA500>You cannot have both auto-compress and auto-deposit on at the same time, so auto-deposit has been turned off<#FFA500>." ) ) - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") + redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") } - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "true") - sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Successfully turned auto-compress on." - ) - ) + redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "true") + sender.sendMessage(mm.deserialize("${config.prefix}: Successfully turned auto-compress on.")) } return true } diff --git a/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt index 022c7df..7e14e7f 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/AutoDeposit.kt @@ -1,7 +1,11 @@ package net.trueog.diamondbankog.autodeposit import kotlinx.coroutines.launch -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.mm +import net.trueog.diamondbankog.DiamondBankOG.Companion.scope +import net.trueog.diamondbankog.DiamondBankOG.Companion.transactionLock import net.trueog.diamondbankog.balance.shard.Shard import net.trueog.diamondbankog.util.ErrorHandler import org.bukkit.Material @@ -16,11 +20,7 @@ internal object AutoDeposit { } if (!player.hasPermission("diamondbank-og.deposit")) { - player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have permission to deposit." - ) - ) + player.sendMessage(mm.deserialize("${config.prefix}: You do not have permission to deposit.")) return } @@ -39,13 +39,13 @@ internal object AutoDeposit { itemStack.amount = 0 item.itemStack = itemStack - DiamondBankOG.scope.launch { - DiamondBankOG.transactionLock.withLockSuspend(player.uniqueId) { - DiamondBankOG.balanceManager.addToBankShards(player.uniqueId, shards).getOrElse { + scope.launch { + transactionLock.withLockSuspend(player.uniqueId) { + balanceManager.addToBankShards(player.uniqueId, shards).getOrElse { ErrorHandler.handleError(it) player.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: A severe error has occurred. Please notify a staff member." + mm.deserialize( + "${config.prefix}: A severe error has occurred. Please notify a staff member." ) ) return@withLockSuspend diff --git a/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt index a8435ba..c921ac8 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/autodeposit/command/AutoDeposit.kt @@ -1,6 +1,9 @@ package net.trueog.diamondbankog.autodeposit.command -import net.trueog.diamondbankog.DiamondBankOG +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.redis import org.bukkit.command.Command import org.bukkit.command.CommandExecutor import org.bukkit.command.CommandSender @@ -8,11 +11,9 @@ import org.bukkit.entity.Player internal class AutoDeposit : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - if (DiamondBankOG.economyDisabled) { + if (economyDisabled) { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: The economy is disabled. Please notify a staff member." - ) + mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") ) return true } @@ -24,35 +25,27 @@ internal class AutoDeposit : CommandExecutor { if (!sender.hasPermission("diamondbank-og.deposit")) { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: You do not have permission to use this command." - ) + mm.deserialize("${config.prefix}: You do not have permission to use this command.") ) return true } - if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") + if (redis.getValue("diamondbankog:${sender.uniqueId}:autodeposit") == "true") { + redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "false") sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Successfully turned auto-deposit off." - ) + mm.deserialize("${config.prefix}: Successfully turned auto-deposit off.") ) } else { - if (DiamondBankOG.redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { + if (redis.getValue("diamondbankog:${sender.uniqueId}:autocompress") == "true") { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: <#FFA500>You cannot have both auto-deposit and auto-compress on at the same time, so auto-compress has been turned off<#FFA500>." + mm.deserialize( + "${config.prefix}: <#FFA500>You cannot have both auto-deposit and auto-compress on at the same time, so auto-compress has been turned off<#FFA500>." ) ) - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") + redis.setValue("diamondbankog:${sender.uniqueId}:autocompress", "false") } - DiamondBankOG.redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "true") - sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Successfully turned auto-deposit on." - ) - ) + redis.setValue("diamondbankog:${sender.uniqueId}:autodeposit", "true") + sender.sendMessage(mm.deserialize("${config.prefix}: Successfully turned auto-deposit on.")) } return true } diff --git a/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt b/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt index 104b415..d598021 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/balance/CachingBalanceManager.kt @@ -5,8 +5,9 @@ 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 +import net.trueog.diamondbankog.DiamondBankOG.Companion.debug 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 net.trueog.diamondbankog.persistence.PostgreSQL @@ -83,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 = @@ -101,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) } @@ -110,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 = @@ -128,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) } @@ -137,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) } @@ -146,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 = @@ -159,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/config/command/DiamondBankReload.kt b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt index 3307d0b..1b200f1 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/config/command/DiamondBankReload.kt @@ -1,6 +1,9 @@ package net.trueog.diamondbankog.config.command -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.mm +import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin import net.trueog.diamondbankog.balance.CachingBalanceManager import net.trueog.diamondbankog.config.YamlConfig import org.bukkit.Bukkit @@ -10,35 +13,31 @@ import org.bukkit.command.CommandSender internal class DiamondBankReload : CommandExecutor { override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array?): Boolean { - DiamondBankOG.config = + config = YamlConfig.create() ?: run { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Failed to reload the config. Check the console for more information." + mm.deserialize( + "${config.prefix}: Failed to reload the config. Check the console for more information." ) ) - Bukkit.getPluginManager().disablePlugin(DiamondBankOG.plugin) + Bukkit.getPluginManager().disablePlugin(plugin) return true } - DiamondBankOG.balanceManager = + balanceManager = CachingBalanceManager.create() ?: run { sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Failed to reload the config. Check the console for more information." + mm.deserialize( + "${config.prefix}: Failed to reload the config. Check the console for more information." ) ) - Bukkit.getPluginManager().disablePlugin(DiamondBankOG.plugin) + Bukkit.getPluginManager().disablePlugin(plugin) return true } - sender.sendMessage( - DiamondBankOG.mm.deserialize( - "${DiamondBankOG.config.prefix}: Successfully reloaded the config." - ) - ) + sender.sendMessage(mm.deserialize("${config.prefix}: Successfully reloaded the config.")) return true } } diff --git a/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt b/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt index e5a1eda..1cb0070 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/CommonCommandInterlude.kt @@ -1,19 +1,19 @@ package net.trueog.diamondbankog.util +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.contract import net.kyori.adventure.text.minimessage.MiniMessage -import net.trueog.diamondbankog.DiamondBankOG +import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled import net.trueog.diamondbankog.config.Config import org.bukkit.command.CommandSender import org.bukkit.entity.Player -import kotlin.contracts.ExperimentalContracts -import kotlin.contracts.contract object CommonCommandInterlude { /** @return should return */ @OptIn(ExperimentalContracts::class) fun run(sender: CommandSender, command: String, config: Config, mm: MiniMessage): Boolean { contract { returns(false) implies (sender is Player) } - if (DiamondBankOG.economyDisabled) { + if (economyDisabled) { sender.sendMessage( mm.deserialize("${config.prefix}: The economy is disabled. Please notify a staff member.") ) @@ -41,4 +41,4 @@ object CommonCommandInterlude { } return false } -} \ No newline at end of file +} diff --git a/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt index 78ded3e..20a754d 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/ErrorHandler.kt @@ -1,11 +1,11 @@ package net.trueog.diamondbankog.util -import net.trueog.diamondbankog.DiamondBankOG +import net.trueog.diamondbankog.DiamondBankOG.Companion.economyDisabled internal object ErrorHandler { /** Handles the error by throwing, disables the economy unless specified that it shouldn't */ fun handleError(exception: Throwable, dontDisableEconomy: Boolean = false) { - if (!dontDisableEconomy) DiamondBankOG.economyDisabled = true + if (!dontDisableEconomy) economyDisabled = true throw exception } } diff --git a/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt b/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt index d48ff33..3392646 100644 --- a/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt +++ b/src/main/kotlin/net/trueog/diamondbankog/util/MainThreadBlock.kt @@ -4,7 +4,7 @@ import kotlin.coroutines.resume import kotlin.coroutines.resumeWithException import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.suspendCancellableCoroutine -import net.trueog.diamondbankog.DiamondBankOG +import net.trueog.diamondbankog.DiamondBankOG.Companion.plugin import org.bukkit.Bukkit internal object MainThreadBlock { @@ -16,7 +16,7 @@ internal object MainThreadBlock { suspendCancellableCoroutine { cont -> Bukkit.getScheduler() .runTask( - DiamondBankOG.plugin, + plugin, Runnable { try { cont.resume(block()) diff --git a/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt b/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt index d7428fe..696d89b 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/CompressTest.kt @@ -23,10 +23,10 @@ import net.trueog.diamondbankog.Utils.waitForCoroutines import net.trueog.diamondbankog.balance.BalanceManager import net.trueog.diamondbankog.balance.shard.Shard import net.trueog.diamondbankog.balance.shard.ShardType -import net.trueog.diamondbankog.transaction.command.Compress 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 diff --git a/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt b/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt index ad07ad5..dd4ae8e 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/DepositTest.kt @@ -17,10 +17,10 @@ import net.trueog.diamondbankog.Utils.waitForCoroutines import net.trueog.diamondbankog.balance.BalanceManager import net.trueog.diamondbankog.balance.shard.Shard import net.trueog.diamondbankog.balance.shard.ShardType -import net.trueog.diamondbankog.transaction.command.Deposit 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 diff --git a/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt b/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt index 4a69607..dd5f829 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/PayTest.kt @@ -22,10 +22,10 @@ import net.trueog.diamondbankog.Utils.waitForCoroutines import net.trueog.diamondbankog.balance.BalanceManager import net.trueog.diamondbankog.balance.shard.Shard import net.trueog.diamondbankog.balance.shard.ShardType -import net.trueog.diamondbankog.transaction.command.Pay 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 diff --git a/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt b/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt index 1ee461c..6130625 100644 --- a/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt +++ b/src/test/kotlin/net/trueog/diamondbankog/WithdrawTest.kt @@ -16,10 +16,10 @@ import net.trueog.diamondbankog.Utils.mockPlayerInventory import net.trueog.diamondbankog.Utils.waitForCoroutines import net.trueog.diamondbankog.balance.BalanceManager import net.trueog.diamondbankog.balance.shard.ShardType -import net.trueog.diamondbankog.transaction.command.Withdraw 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 -- 2.47.3