237 lines
6.5 KiB
Kotlin
237 lines
6.5 KiB
Kotlin
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.ability.AbilityContext
|
|
import club.mcscrims.speedhg.ability.AbilityHitListener
|
|
import club.mcscrims.speedhg.ability.CooldownManager
|
|
import club.mcscrims.speedhg.ability.HitCounterManager
|
|
import club.mcscrims.speedhg.config.KitConfig
|
|
import club.mcscrims.speedhg.config.MessageConfig
|
|
import club.mcscrims.speedhg.config.PluginConfig
|
|
import club.mcscrims.speedhg.database.StatsRepository
|
|
import club.mcscrims.speedhg.game.GameManager
|
|
import club.mcscrims.speedhg.kit.KitListener
|
|
import club.mcscrims.speedhg.kit.KitManager
|
|
import club.mcscrims.speedhg.listener.GameStateListener
|
|
import club.mcscrims.speedhg.listener.LunarClientListener
|
|
import club.mcscrims.speedhg.recraft.RecraftInspector
|
|
import club.mcscrims.speedhg.recraft.RecraftUtils
|
|
import club.mcscrims.speedhg.world.WorldManager
|
|
import club.mcscrims.spigot.chat.ChatFormatter
|
|
import club.mcscrims.spigot.chat.ChatManager
|
|
import club.mcscrims.spigot.network.SpigotNetworkManager
|
|
import club.mcscrims.spigot.scheduler.SchedulerManager
|
|
import club.mcscrims.spigot.util.WorldEditUtils
|
|
import com.mongodb.client.model.Indexes
|
|
import kotlinx.coroutines.runBlocking
|
|
import net.kyori.adventure.text.Component
|
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
|
|
import net.luckperms.api.LuckPerms
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
|
|
class SpeedHG : JavaPlugin() {
|
|
|
|
companion object {
|
|
|
|
internal lateinit var instance: SpeedHG
|
|
|
|
fun Component.content(): String
|
|
{
|
|
return LegacyComponentSerializer.legacySection().serialize( this )
|
|
}
|
|
|
|
}
|
|
|
|
private lateinit var configLoader: ConfigLoader
|
|
internal lateinit var pluginConfig: ConfigData<PluginConfig>
|
|
internal lateinit var messageConfig: ConfigData<MessageConfig>
|
|
internal lateinit var kitConfig: ConfigData<KitConfig>
|
|
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 schedulerManager: SchedulerManager
|
|
|
|
internal lateinit var gameManager: GameManager
|
|
internal lateinit var worldManager: WorldManager
|
|
|
|
internal lateinit var abilityContext: AbilityContext
|
|
internal lateinit var kitManager: KitManager
|
|
|
|
internal lateinit var worldEditUtils: WorldEditUtils
|
|
|
|
internal lateinit var luckPerms: LuckPerms
|
|
internal var isReady: Boolean = false
|
|
|
|
override fun onLoad()
|
|
{
|
|
instance = this
|
|
|
|
loadConfigurations()
|
|
setupDatabase()
|
|
networkManager = SpigotNetworkManager.getInstance()!!
|
|
|
|
worldManager = WorldManager( this )
|
|
worldManager.deleteWorld()
|
|
}
|
|
|
|
override fun onEnable()
|
|
{
|
|
worldManager.setupWorld()
|
|
|
|
chatFormatter = ChatFormatter.create(
|
|
plugin = this,
|
|
configClass = MessageConfig::class,
|
|
messageExtractor = { config -> config.getAllMessages() }
|
|
)
|
|
|
|
chatManager = ChatManager.withCustomConfig( this, chatFormatter )
|
|
chatManager.initialize()
|
|
|
|
schedulerManager = SchedulerManager( this )
|
|
|
|
worldEditUtils = WorldEditUtils( this )
|
|
|
|
gameManager = GameManager( this )
|
|
gameManager.initialize()
|
|
|
|
val cooldownManager = CooldownManager()
|
|
val hitCounterManager = HitCounterManager()
|
|
abilityContext = AbilityContext( cooldownManager, hitCounterManager )
|
|
|
|
kitManager = KitManager( this )
|
|
kitManager.initialize()
|
|
|
|
setupLuckPerms()
|
|
registerListener()
|
|
|
|
RecraftUtils.registerRecipes()
|
|
RecraftInspector( this ).startRunnable()
|
|
}
|
|
|
|
override fun onDisable()
|
|
{
|
|
kitManager.clearAll()
|
|
mongoManager.shutdown()
|
|
networkManager.shutdown()
|
|
}
|
|
|
|
private fun registerListener()
|
|
{
|
|
server.pluginManager.registerEvents(GameStateListener( this, gameManager ), this )
|
|
server.pluginManager.registerEvents(KitListener( this, kitManager ), this )
|
|
server.pluginManager.registerEvents(AbilityHitListener( this, abilityContext ), this )
|
|
LunarClientListener( this )
|
|
}
|
|
|
|
/*
|
|
* 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
|
|
)
|
|
|
|
kitConfig = configLoader.loadConfig<KitConfig>(
|
|
fileName = "kits.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()
|
|
kitConfig.reload()
|
|
databaseConfig.reload()
|
|
}
|
|
catch ( ex: Exception ) {
|
|
logger.severe( "Failed to reload configurations: ${ex.message}" )
|
|
}
|
|
}
|
|
|
|
}
|