First commit

This commit is contained in:
Laurin
2025-12-01 03:45:44 +01:00
commit 0daabe3de2
18 changed files with 1304 additions and 0 deletions

View File

@@ -0,0 +1,159 @@
package club.mcscrims.speedhg
import club.mcscrims.core.config.ConfigData
import club.mcscrims.core.config.ConfigFormat
import club.mcscrims.core.config.ConfigLoader
import club.mcscrims.core.database.DatabaseConfig
import club.mcscrims.core.database.mongodb.MongoManager
import club.mcscrims.speedhg.config.MessageConfig
import club.mcscrims.speedhg.config.PluginConfig
import club.mcscrims.speedhg.database.StatsRepository
import club.mcscrims.spigot.chat.ChatFormatter
import club.mcscrims.spigot.chat.ChatManager
import club.mcscrims.spigot.network.SpigotNetworkManager
import com.mongodb.client.model.Indexes
import kotlinx.coroutines.runBlocking
import net.luckperms.api.LuckPerms
import org.bukkit.plugin.java.JavaPlugin
class SpeedHG : JavaPlugin() {
companion object {
internal lateinit var instance: SpeedHG
}
private lateinit var configLoader: ConfigLoader
internal lateinit var pluginConfig: ConfigData<PluginConfig>
internal lateinit var messageConfig: ConfigData<MessageConfig>
internal lateinit var databaseConfig: ConfigData<DatabaseConfig>
internal lateinit var chatManager: ChatManager<MessageConfig>
internal lateinit var chatFormatter: ChatFormatter<MessageConfig>
private lateinit var mongoManager: MongoManager
internal lateinit var statsRepository: StatsRepository
internal lateinit var networkManager: SpigotNetworkManager
internal lateinit var luckPerms: LuckPerms
override fun onEnable()
{
instance = this
loadConfigurations()
setupDatabase()
networkManager = SpigotNetworkManager.getInstance()!!
chatFormatter = ChatFormatter.create(
plugin = this,
configClass = MessageConfig::class,
messageExtractor = { config -> config.getAllMessages() }
)
chatManager = ChatManager.withCustomConfig( this, chatFormatter )
chatManager.initialize()
setupLuckPerms()
}
override fun onDisable()
{
mongoManager.shutdown()
networkManager.shutdown()
}
/*
* LUCKPERMS >>
*/
private fun setupLuckPerms()
{
val provider = server.servicesManager.getRegistration( LuckPerms::class.java )
if ( provider != null )
luckPerms = provider.provider
if ( !::luckPerms.isInitialized )
logger.warning( "LuckPerms could not be loaded." )
else
logger.info( "LuckPerms has successfully been loaded." )
}
/*
* DATABASE >>
*/
private fun setupDatabase()
{
// MongoManager initialisieren
mongoManager = MongoManager.getInstance( name, logger )
val connection = mongoManager.createConnection( "speedhg", databaseConfig.data )
// Repositories initialisieren
statsRepository = StatsRepository( connection )
// Indizes erstellen
runBlocking {
try
{
connection.createIndex( "player_stats", Indexes.ascending( "kills" ))
connection.createIndex( "player_stats", Indexes.descending( "deaths" ))
connection.createIndex( "player_stats", Indexes.ascending( "wins" ))
connection.createIndex( "player_stats", Indexes.ascending( "unathleticIndex" ))
connection.createIndex( "player_stats", Indexes.ascending( "ironFarmed" ))
}
catch ( ex: Exception ) {
logger.warning( "Failed to create MongoDB indexes: ${ex.message}" )
return@runBlocking
}
}
logger.info( "Successfully enabled MongoDB" )
}
/*
* CONFIG >>
*/
private fun loadConfigurations()
{
configLoader = ConfigLoader.getInstance( name, logger, dataFolder )
createConfigurations()
}
private fun createConfigurations()
{
pluginConfig = configLoader.loadConfig<PluginConfig>(
fileName = "config.yml",
format = ConfigFormat.YAML,
autoReload = true
)
messageConfig = configLoader.loadConfig<MessageConfig>(
fileName = "messages.yml",
format = ConfigFormat.YAML,
autoReload = false
)
databaseConfig = configLoader.loadConfig<DatabaseConfig>(
fileName = "database.json",
format = ConfigFormat.JSON,
autoReload = false
)
}
fun reloadConfigurations()
{
try
{
pluginConfig.reload()
messageConfig.reload()
databaseConfig.reload()
}
catch ( ex: Exception ) {
logger.severe( "Failed to reload configurations: ${ex.message}" )
}
}
}