102 lines
3.1 KiB
Kotlin
102 lines
3.1 KiB
Kotlin
package io.dico.parcels2
|
|
|
|
import io.dico.dicore.Registrator
|
|
import io.dico.dicore.command.EOverridePolicy
|
|
import io.dico.dicore.command.ICommandDispatcher
|
|
import io.dico.parcels2.command.getParcelCommands
|
|
import io.dico.parcels2.listener.ParcelEntityTracker
|
|
import io.dico.parcels2.listener.ParcelListeners
|
|
import io.dico.parcels2.storage.Storage
|
|
import io.dico.parcels2.storage.yamlObjectMapper
|
|
import io.dico.parcels2.util.tryCreate
|
|
import org.bukkit.Bukkit
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
import org.slf4j.LoggerFactory
|
|
import java.io.File
|
|
|
|
val logger = LoggerFactory.getLogger("ParcelsPlugin")
|
|
private inline val plogger get() = logger
|
|
|
|
class ParcelsPlugin : JavaPlugin() {
|
|
lateinit var optionsFile: File; private set
|
|
lateinit var options: Options; private set
|
|
lateinit var worlds: Worlds; private set
|
|
lateinit var storage: Storage; private set
|
|
|
|
val registrator = Registrator(this)
|
|
lateinit var entityTracker: ParcelEntityTracker; private set
|
|
private var listeners: ParcelListeners? = null
|
|
private var cmdDispatcher: ICommandDispatcher? = null
|
|
|
|
override fun onEnable() {
|
|
plogger.info("Debug enabled: ${plogger.isDebugEnabled}")
|
|
if (!init()) {
|
|
Bukkit.getPluginManager().disablePlugin(this)
|
|
}
|
|
}
|
|
|
|
override fun onDisable() {
|
|
cmdDispatcher?.unregisterFromCommandMap()
|
|
}
|
|
|
|
private fun init(): Boolean {
|
|
optionsFile = File(dataFolder, "options.yml")
|
|
options = Options()
|
|
worlds = Worlds(this)
|
|
|
|
try {
|
|
if (!loadOptions()) return false
|
|
|
|
try {
|
|
storage = options.storage.newStorageInstance()
|
|
storage.init()
|
|
} catch (ex: Exception) {
|
|
plogger.error("Failed to connect to database", ex)
|
|
return false
|
|
}
|
|
|
|
worlds.loadWorlds(options)
|
|
} catch (ex: Exception) {
|
|
plogger.error("Error loading options", ex)
|
|
return false
|
|
}
|
|
|
|
entityTracker = ParcelEntityTracker(worlds)
|
|
registerListeners()
|
|
registerCommands()
|
|
|
|
return true
|
|
}
|
|
|
|
fun loadOptions(): Boolean {
|
|
if (optionsFile.exists()) {
|
|
yamlObjectMapper.readerForUpdating(options).readValue<Options>(optionsFile)
|
|
} else if (optionsFile.tryCreate()) {
|
|
options.addWorld("plotworld", WorldOptions())
|
|
try {
|
|
yamlObjectMapper.writeValue(optionsFile, options)
|
|
} catch (ex: Throwable) {
|
|
optionsFile.delete()
|
|
throw ex
|
|
}
|
|
} else {
|
|
plogger.error("Failed to save options file ${optionsFile.canonicalPath}")
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
private fun registerCommands() {
|
|
cmdDispatcher = getParcelCommands(this).apply {
|
|
registerToCommandMap("parcels:", EOverridePolicy.FALLBACK_ONLY)
|
|
}
|
|
}
|
|
|
|
private fun registerListeners() {
|
|
if (listeners != null) {
|
|
listeners = ParcelListeners(worlds, entityTracker)
|
|
registrator.registerListeners(listeners!!)
|
|
}
|
|
}
|
|
|
|
} |