diff --git a/foundation-core/build.gradle.kts b/foundation-core/build.gradle.kts index 2cbf1fd..5fad3e6 100644 --- a/foundation-core/build.gradle.kts +++ b/foundation-core/build.gradle.kts @@ -12,7 +12,4 @@ dependencies { implementation("io.insert-koin:koin-core:3.3.2") testImplementation("io.insert-koin:koin-test:3.3.2") - - implementation("org.jetbrains.xodus:xodus-openAPI:2.0.1") - implementation("org.jetbrains.xodus:xodus-entity-store:2.0.1") } diff --git a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/FoundationCorePlugin.kt b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/FoundationCorePlugin.kt index e457e20..2da2c1e 100644 --- a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/FoundationCorePlugin.kt +++ b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/FoundationCorePlugin.kt @@ -12,6 +12,8 @@ import gay.pizza.foundation.core.features.scheduler.SchedulerFeature import gay.pizza.foundation.core.features.stats.StatsFeature import gay.pizza.foundation.core.features.update.UpdateFeature import gay.pizza.foundation.core.features.world.WorldFeature +import gay.pizza.foundation.shared.PersistentStore +import gay.pizza.foundation.shared.PluginPersistence import org.koin.dsl.module import java.nio.file.Path @@ -34,6 +36,8 @@ class FoundationCorePlugin : IFoundationCore, FoundationPlugin() { _pluginDataPath = value } + override val persistence: PluginPersistence = PluginPersistence(this) + override fun onEnable() { // Create core plugin directory. pluginDataPath = dataFolder.toPath() diff --git a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistenceFeature.kt b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistenceFeature.kt index c5042dd..99eaccc 100644 --- a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistenceFeature.kt +++ b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistenceFeature.kt @@ -1,18 +1,21 @@ package gay.pizza.foundation.core.features.persist +import gay.pizza.foundation.core.FoundationCorePlugin import gay.pizza.foundation.core.abstraction.Feature +import gay.pizza.foundation.shared.PluginPersistence import org.koin.core.component.inject import org.koin.core.module.Module import org.koin.dsl.module class PersistenceFeature : Feature() { private val persistence = inject() + private val core = inject() override fun disable() { persistence.value.unload() } override fun module(): Module = module { - single { PluginPersistence() } + single { core.value.persistence } } } diff --git a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/stats/StatsFeature.kt b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/stats/StatsFeature.kt index 3731145..8a7e32f 100644 --- a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/stats/StatsFeature.kt +++ b/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/stats/StatsFeature.kt @@ -1,10 +1,10 @@ package gay.pizza.foundation.core.features.stats import gay.pizza.foundation.core.abstraction.Feature -import gay.pizza.foundation.core.features.persist.PersistentStore import gay.pizza.foundation.core.features.persist.PersistentStoreCommand -import gay.pizza.foundation.core.features.persist.PluginPersistence import gay.pizza.foundation.core.features.persist.setAllProperties +import gay.pizza.foundation.shared.PersistentStore +import gay.pizza.foundation.shared.PluginPersistence import io.papermc.paper.event.player.AsyncChatEvent import net.kyori.adventure.text.TextComponent import org.bukkit.event.EventHandler diff --git a/foundation-shared/build.gradle.kts b/foundation-shared/build.gradle.kts index fb77f8f..565322b 100644 --- a/foundation-shared/build.gradle.kts +++ b/foundation-shared/build.gradle.kts @@ -4,4 +4,7 @@ plugins { dependencies { api(project(":common-all")) + + api("org.jetbrains.xodus:xodus-openAPI:2.0.1") + api("org.jetbrains.xodus:xodus-entity-store:2.0.1") } diff --git a/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/IFoundationCore.kt b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/IFoundationCore.kt index bb0695c..c731954 100644 --- a/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/IFoundationCore.kt +++ b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/IFoundationCore.kt @@ -3,5 +3,6 @@ package gay.pizza.foundation.shared import java.nio.file.Path interface IFoundationCore { + val persistence: PluginPersistence val pluginDataPath: Path } diff --git a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistentStore.kt b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PersistentStore.kt similarity index 78% rename from foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistentStore.kt rename to foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PersistentStore.kt index 88f1689..144aeed 100644 --- a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PersistentStore.kt +++ b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PersistentStore.kt @@ -1,13 +1,12 @@ -package gay.pizza.foundation.core.features.persist +package gay.pizza.foundation.shared -import gay.pizza.foundation.core.FoundationCorePlugin import jetbrains.exodus.entitystore.Entity import jetbrains.exodus.entitystore.EntityIterable import jetbrains.exodus.entitystore.PersistentEntityStores import jetbrains.exodus.entitystore.StoreTransaction -class PersistentStore(corePlugin: FoundationCorePlugin, fileStoreName: String) : AutoCloseable { - private val fileStorePath = corePlugin.pluginDataPath.resolve("persistence/${fileStoreName}") +class PersistentStore(core: IFoundationCore, fileStoreName: String) : AutoCloseable { + private val fileStorePath = core.pluginDataPath.resolve("persistence/${fileStoreName}") private val entityStore = PersistentEntityStores.newInstance(fileStorePath.toFile()) fun transact(block: StoreTransaction.() -> R): R { diff --git a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PluginPersistence.kt b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PluginPersistence.kt similarity index 52% rename from foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PluginPersistence.kt rename to foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PluginPersistence.kt index 575849f..c97729a 100644 --- a/foundation-core/src/main/kotlin/gay/pizza/foundation/core/features/persist/PluginPersistence.kt +++ b/foundation-shared/src/main/kotlin/gay/pizza/foundation/shared/PluginPersistence.kt @@ -1,20 +1,15 @@ -package gay.pizza.foundation.core.features.persist +package gay.pizza.foundation.shared -import gay.pizza.foundation.core.FoundationCorePlugin -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject import java.util.concurrent.ConcurrentHashMap -class PluginPersistence : KoinComponent { - private val plugin = inject() - +class PluginPersistence(val core: IFoundationCore) { val stores = ConcurrentHashMap() /** * Fetch a persistent store by name. Make sure the name is path-safe, descriptive and consistent across server runs. */ fun store(name: String): PersistentStore = - stores.getOrPut(name) { PersistentStore(plugin.value, name) } + stores.getOrPut(name) { PersistentStore(core, name) } fun unload() { stores.values.forEach { store -> store.close() }