mirror of
https://github.com/GayPizzaSpecifications/foundation.git
synced 2025-08-02 21:20:55 +00:00
Implement common configuration loading mechanism.
This commit is contained in:
parent
59fbea0a37
commit
a043e0852f
@ -1,5 +1,8 @@
|
|||||||
package gay.pizza.foundation.common
|
package gay.pizza.foundation.common
|
||||||
|
|
||||||
|
import gay.pizza.foundation.shared.IFoundationCore
|
||||||
|
import gay.pizza.foundation.shared.loadConfigurationWithDefault
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
import org.bukkit.command.CommandExecutor
|
import org.bukkit.command.CommandExecutor
|
||||||
import org.bukkit.command.TabCompleter
|
import org.bukkit.command.TabCompleter
|
||||||
import org.bukkit.plugin.java.JavaPlugin
|
import org.bukkit.plugin.java.JavaPlugin
|
||||||
@ -18,4 +21,14 @@ abstract class BaseFoundationPlugin : JavaPlugin() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <reified T> loadConfigurationWithDefault(
|
||||||
|
core: IFoundationCore,
|
||||||
|
deserializer: DeserializationStrategy<T>,
|
||||||
|
name: String
|
||||||
|
): T {
|
||||||
|
return loadConfigurationWithDefault(
|
||||||
|
slF4JLogger, deserializer,
|
||||||
|
core.pluginDataPath, name)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package gay.pizza.foundation.bifrost
|
package gay.pizza.foundation.bifrost
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import gay.pizza.foundation.bifrost.model.BifrostConfig
|
import gay.pizza.foundation.bifrost.model.BifrostConfig
|
||||||
import gay.pizza.foundation.common.BaseFoundationPlugin
|
import gay.pizza.foundation.common.BaseFoundationPlugin
|
||||||
import gay.pizza.foundation.common.FoundationCoreLoader
|
import gay.pizza.foundation.common.FoundationCoreLoader
|
||||||
@ -24,7 +23,6 @@ import org.bukkit.event.player.PlayerAdvancementDoneEvent
|
|||||||
import org.bukkit.event.player.PlayerJoinEvent
|
import org.bukkit.event.player.PlayerJoinEvent
|
||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
import java.awt.Color
|
import java.awt.Color
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
import net.dv8tion.jda.api.hooks.EventListener as DiscordEventListener
|
import net.dv8tion.jda.api.hooks.EventListener as DiscordEventListener
|
||||||
import org.bukkit.event.Listener as BukkitEventListener
|
import org.bukkit.event.Listener as BukkitEventListener
|
||||||
|
|
||||||
@ -37,13 +35,11 @@ class FoundationBifrostPlugin : BaseFoundationPlugin(), DiscordEventListener, Bu
|
|||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
isDev = description.version == "DEV"
|
isDev = description.version == "DEV"
|
||||||
val foundation = FoundationCoreLoader.get(server)
|
val foundation = FoundationCoreLoader.get(server)
|
||||||
val configPath = copyDefaultConfig<FoundationBifrostPlugin>(
|
config = loadConfigurationWithDefault(
|
||||||
slF4JLogger,
|
foundation,
|
||||||
foundation.pluginDataPath,
|
BifrostConfig.serializer(),
|
||||||
"bifrost.yaml"
|
"bifrost.yaml"
|
||||||
)
|
)
|
||||||
config = Yaml.default.decodeFromStream(BifrostConfig.serializer(), configPath.inputStream())
|
|
||||||
|
|
||||||
server.pluginManager.registerEvents(this, this)
|
server.pluginManager.registerEvents(this, this)
|
||||||
if (config.authentication.token.isEmpty()) {
|
if (config.authentication.token.isEmpty()) {
|
||||||
slF4JLogger.warn("Token empty, Bifrost will not connect to Discord.")
|
slF4JLogger.warn("Token empty, Bifrost will not connect to Discord.")
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package gay.pizza.foundation.chaos
|
package gay.pizza.foundation.chaos
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import gay.pizza.foundation.chaos.model.ChaosConfig
|
import gay.pizza.foundation.chaos.model.ChaosConfig
|
||||||
import gay.pizza.foundation.common.BaseFoundationPlugin
|
import gay.pizza.foundation.common.BaseFoundationPlugin
|
||||||
import gay.pizza.foundation.common.FoundationCoreLoader
|
import gay.pizza.foundation.common.FoundationCoreLoader
|
||||||
import gay.pizza.foundation.shared.PluginMainClass
|
import gay.pizza.foundation.shared.PluginMainClass
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
@PluginMainClass
|
@PluginMainClass
|
||||||
class FoundationChaosPlugin : BaseFoundationPlugin() {
|
class FoundationChaosPlugin : BaseFoundationPlugin() {
|
||||||
@ -18,12 +15,11 @@ class FoundationChaosPlugin : BaseFoundationPlugin() {
|
|||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
val foundation = FoundationCoreLoader.get(server)
|
val foundation = FoundationCoreLoader.get(server)
|
||||||
val configPath = copyDefaultConfig<FoundationChaosPlugin>(
|
config = loadConfigurationWithDefault(
|
||||||
slF4JLogger,
|
foundation,
|
||||||
foundation.pluginDataPath,
|
ChaosConfig.serializer(),
|
||||||
"chaos.yaml"
|
"heimdall.yaml"
|
||||||
)
|
)
|
||||||
config = Yaml.default.decodeFromStream(ChaosConfig.serializer(), configPath.inputStream())
|
|
||||||
registerCommandExecutor("chaos", ChaosToggleCommand())
|
registerCommandExecutor("chaos", ChaosToggleCommand())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,8 @@
|
|||||||
package gay.pizza.foundation.core.features.backup
|
package gay.pizza.foundation.core.features.backup
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import gay.pizza.foundation.core.FoundationCorePlugin
|
|
||||||
import gay.pizza.foundation.core.abstraction.Feature
|
import gay.pizza.foundation.core.abstraction.Feature
|
||||||
import gay.pizza.foundation.core.features.scheduler.cancel
|
import gay.pizza.foundation.core.features.scheduler.cancel
|
||||||
import gay.pizza.foundation.core.features.scheduler.cron
|
import gay.pizza.foundation.core.features.scheduler.cron
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
import software.amazon.awssdk.auth.credentials.AwsSessionCredentials
|
import software.amazon.awssdk.auth.credentials.AwsSessionCredentials
|
||||||
@ -13,7 +10,6 @@ import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider
|
|||||||
import software.amazon.awssdk.regions.Region
|
import software.amazon.awssdk.regions.Region
|
||||||
import software.amazon.awssdk.services.s3.S3Client
|
import software.amazon.awssdk.services.s3.S3Client
|
||||||
import java.net.URI
|
import java.net.URI
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
class BackupFeature : Feature() {
|
class BackupFeature : Feature() {
|
||||||
private val s3Client by inject<S3Client>()
|
private val s3Client by inject<S3Client>()
|
||||||
@ -46,14 +42,10 @@ class BackupFeature : Feature() {
|
|||||||
|
|
||||||
override fun module() = module {
|
override fun module() = module {
|
||||||
single {
|
single {
|
||||||
val configPath = copyDefaultConfig<FoundationCorePlugin>(
|
plugin.loadConfigurationWithDefault(
|
||||||
plugin.slF4JLogger,
|
plugin,
|
||||||
plugin.pluginDataPath,
|
|
||||||
"backup.yaml",
|
|
||||||
)
|
|
||||||
return@single Yaml.default.decodeFromStream(
|
|
||||||
BackupConfig.serializer(),
|
BackupConfig.serializer(),
|
||||||
configPath.inputStream()
|
"backup.yaml"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
single {
|
single {
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package gay.pizza.foundation.core.features.gameplay
|
package gay.pizza.foundation.core.features.gameplay
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import gay.pizza.foundation.core.FoundationCorePlugin
|
|
||||||
import gay.pizza.foundation.core.abstraction.Feature
|
import gay.pizza.foundation.core.abstraction.Feature
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
import org.bukkit.Material
|
import org.bukkit.Material
|
||||||
@ -17,21 +14,16 @@ import org.bukkit.event.player.PlayerInteractEntityEvent
|
|||||||
import org.bukkit.inventory.ItemStack
|
import org.bukkit.inventory.ItemStack
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
import org.koin.dsl.module
|
import org.koin.dsl.module
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
class GameplayFeature : Feature() {
|
class GameplayFeature : Feature() {
|
||||||
private val config by inject<GameplayConfig>()
|
private val config by inject<GameplayConfig>()
|
||||||
|
|
||||||
override fun module() = module {
|
override fun module() = module {
|
||||||
single {
|
single {
|
||||||
val configPath = copyDefaultConfig<FoundationCorePlugin>(
|
plugin.loadConfigurationWithDefault(
|
||||||
plugin.slF4JLogger,
|
plugin,
|
||||||
plugin.pluginDataPath,
|
|
||||||
"gameplay.yaml",
|
|
||||||
)
|
|
||||||
return@single Yaml.default.decodeFromStream(
|
|
||||||
GameplayConfig.serializer(),
|
GameplayConfig.serializer(),
|
||||||
configPath.inputStream()
|
"gameplay.yaml"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package gay.pizza.foundation.core.features.player
|
package gay.pizza.foundation.core.features.player
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import com.google.common.cache.Cache
|
import com.google.common.cache.Cache
|
||||||
import com.google.common.cache.CacheBuilder
|
import com.google.common.cache.CacheBuilder
|
||||||
import com.google.common.cache.RemovalCause
|
import com.google.common.cache.RemovalCause
|
||||||
import gay.pizza.foundation.core.FoundationCorePlugin
|
|
||||||
import gay.pizza.foundation.core.abstraction.Feature
|
import gay.pizza.foundation.core.abstraction.Feature
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import net.kyori.adventure.text.Component
|
import net.kyori.adventure.text.Component
|
||||||
import org.bukkit.GameMode
|
import org.bukkit.GameMode
|
||||||
import org.bukkit.event.EventHandler
|
import org.bukkit.event.EventHandler
|
||||||
@ -16,7 +13,6 @@ import org.bukkit.event.player.PlayerMoveEvent
|
|||||||
import org.bukkit.event.player.PlayerQuitEvent
|
import org.bukkit.event.player.PlayerQuitEvent
|
||||||
import org.koin.core.component.inject
|
import org.koin.core.component.inject
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
class PlayerFeature : Feature() {
|
class PlayerFeature : Feature() {
|
||||||
private val config by inject<PlayerConfig>()
|
private val config by inject<PlayerConfig>()
|
||||||
@ -53,14 +49,10 @@ class PlayerFeature : Feature() {
|
|||||||
|
|
||||||
override fun module() = org.koin.dsl.module {
|
override fun module() = org.koin.dsl.module {
|
||||||
single {
|
single {
|
||||||
val configPath = copyDefaultConfig<FoundationCorePlugin>(
|
plugin.loadConfigurationWithDefault(
|
||||||
plugin.slF4JLogger,
|
plugin,
|
||||||
plugin.pluginDataPath,
|
|
||||||
"player.yaml",
|
|
||||||
)
|
|
||||||
return@single Yaml.default.decodeFromStream(
|
|
||||||
PlayerConfig.serializer(),
|
PlayerConfig.serializer(),
|
||||||
configPath.inputStream()
|
"player.yaml"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package gay.pizza.foundation.heimdall.plugin
|
package gay.pizza.foundation.heimdall.plugin
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import com.zaxxer.hikari.HikariConfig
|
import com.zaxxer.hikari.HikariConfig
|
||||||
import com.zaxxer.hikari.HikariDataSource
|
import com.zaxxer.hikari.HikariDataSource
|
||||||
import gay.pizza.foundation.common.BaseFoundationPlugin
|
import gay.pizza.foundation.common.BaseFoundationPlugin
|
||||||
@ -13,12 +12,10 @@ import gay.pizza.foundation.heimdall.plugin.export.ExportAllChunksCommand
|
|||||||
import gay.pizza.foundation.heimdall.plugin.load.ImportWorldLoadCommand
|
import gay.pizza.foundation.heimdall.plugin.load.ImportWorldLoadCommand
|
||||||
import gay.pizza.foundation.heimdall.plugin.model.HeimdallConfig
|
import gay.pizza.foundation.heimdall.plugin.model.HeimdallConfig
|
||||||
import gay.pizza.foundation.shared.PluginMainClass
|
import gay.pizza.foundation.shared.PluginMainClass
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.jetbrains.exposed.sql.Database
|
import org.jetbrains.exposed.sql.Database
|
||||||
import org.postgresql.Driver
|
import org.postgresql.Driver
|
||||||
import java.time.Duration
|
import java.time.Duration
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
@PluginMainClass
|
@PluginMainClass
|
||||||
class FoundationHeimdallPlugin : BaseFoundationPlugin(), Listener {
|
class FoundationHeimdallPlugin : BaseFoundationPlugin(), Listener {
|
||||||
@ -45,12 +42,11 @@ class FoundationHeimdallPlugin : BaseFoundationPlugin(), Listener {
|
|||||||
importWorldLoadCommand.setExecutor(ImportWorldLoadCommand(this))
|
importWorldLoadCommand.setExecutor(ImportWorldLoadCommand(this))
|
||||||
|
|
||||||
val foundation = FoundationCoreLoader.get(server)
|
val foundation = FoundationCoreLoader.get(server)
|
||||||
val configPath = copyDefaultConfig<FoundationHeimdallPlugin>(
|
config = loadConfigurationWithDefault(
|
||||||
slF4JLogger,
|
foundation,
|
||||||
foundation.pluginDataPath,
|
HeimdallConfig.serializer(),
|
||||||
"heimdall.yaml"
|
"heimdall.yaml"
|
||||||
)
|
)
|
||||||
config = Yaml.default.decodeFromStream(HeimdallConfig.serializer(), configPath.inputStream())
|
|
||||||
if (!config.enabled) {
|
if (!config.enabled) {
|
||||||
slF4JLogger.info("Heimdall tracking is not enabled.")
|
slF4JLogger.info("Heimdall tracking is not enabled.")
|
||||||
return
|
return
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
package gay.pizza.foundation.shared
|
package gay.pizza.foundation.shared
|
||||||
|
|
||||||
|
import com.charleskorn.kaml.Yaml
|
||||||
|
import kotlinx.serialization.DeserializationStrategy
|
||||||
import org.slf4j.Logger
|
import org.slf4j.Logger
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
|
import kotlin.io.path.inputStream
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy the default configuration from the resource [resourceName] into the directory [targetPath].
|
* Copy the default configuration from the resource [resourceName] into the directory [targetPath].
|
||||||
@ -20,7 +23,6 @@ inline fun <reified T> copyDefaultConfig(log: Logger, targetPath: Path, resource
|
|||||||
val outPath = targetPath.resolve(resourceName)
|
val outPath = targetPath.resolve(resourceName)
|
||||||
val outFile = outPath.toFile()
|
val outFile = outPath.toFile()
|
||||||
if (outFile.exists()) {
|
if (outFile.exists()) {
|
||||||
log.debug("Configuration file already exists.")
|
|
||||||
return outPath
|
return outPath
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,3 +39,13 @@ inline fun <reified T> copyDefaultConfig(log: Logger, targetPath: Path, resource
|
|||||||
|
|
||||||
return outPath
|
return outPath
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline fun <reified T> loadConfigurationWithDefault(
|
||||||
|
log: Logger,
|
||||||
|
deserializer: DeserializationStrategy<T>,
|
||||||
|
pluginConfigDirectoryPath: Path,
|
||||||
|
name: String
|
||||||
|
): T {
|
||||||
|
val path = copyDefaultConfig<T>(log, pluginConfigDirectoryPath, name)
|
||||||
|
return Yaml.default.decodeFromStream(deserializer, path.inputStream())
|
||||||
|
}
|
@ -1,11 +1,8 @@
|
|||||||
package gay.pizza.foundation.tailscale
|
package gay.pizza.foundation.tailscale
|
||||||
|
|
||||||
import com.charleskorn.kaml.Yaml
|
|
||||||
import gay.pizza.foundation.common.BaseFoundationPlugin
|
import gay.pizza.foundation.common.BaseFoundationPlugin
|
||||||
import gay.pizza.foundation.common.FoundationCoreLoader
|
import gay.pizza.foundation.common.FoundationCoreLoader
|
||||||
import gay.pizza.foundation.shared.PluginMainClass
|
import gay.pizza.foundation.shared.PluginMainClass
|
||||||
import gay.pizza.foundation.shared.copyDefaultConfig
|
|
||||||
import kotlin.io.path.inputStream
|
|
||||||
|
|
||||||
@PluginMainClass
|
@PluginMainClass
|
||||||
class FoundationTailscalePlugin : BaseFoundationPlugin() {
|
class FoundationTailscalePlugin : BaseFoundationPlugin() {
|
||||||
@ -14,12 +11,11 @@ class FoundationTailscalePlugin : BaseFoundationPlugin() {
|
|||||||
|
|
||||||
override fun onEnable() {
|
override fun onEnable() {
|
||||||
val foundation = FoundationCoreLoader.get(server)
|
val foundation = FoundationCoreLoader.get(server)
|
||||||
val configPath = copyDefaultConfig<FoundationTailscalePlugin>(
|
config = loadConfigurationWithDefault(
|
||||||
slF4JLogger,
|
foundation,
|
||||||
foundation.pluginDataPath,
|
TailscaleConfig.serializer(),
|
||||||
"tailscale.yaml"
|
"tailscale.yaml"
|
||||||
)
|
)
|
||||||
config = Yaml.default.decodeFromStream(TailscaleConfig.serializer(), configPath.inputStream())
|
|
||||||
controller = TailscaleController(server, config)
|
controller = TailscaleController(server, config)
|
||||||
controller.enable()
|
controller.enable()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user