diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt | 304 |
1 files changed, 152 insertions, 152 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt index a6ebcd8..b2d52a9 100644 --- a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt +++ b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt @@ -1,153 +1,153 @@ -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.defaultimpl.GlobalPrivilegesManagerImpl -import io.dico.parcels2.defaultimpl.ParcelProviderImpl -import io.dico.parcels2.listener.ParcelEntityTracker -import io.dico.parcels2.listener.ParcelListeners -import io.dico.parcels2.listener.WorldEditListener -import io.dico.parcels2.options.Options -import io.dico.parcels2.options.optionsMapper -import io.dico.parcels2.storage.Storage -import io.dico.parcels2.util.MainThreadDispatcher -import io.dico.parcels2.util.PluginScheduler -import io.dico.parcels2.util.ext.tryCreate -import io.dico.parcels2.util.isServerThread -import kotlinx.coroutines.CoroutineScope -import org.bukkit.Bukkit -import org.bukkit.generator.ChunkGenerator -import org.bukkit.plugin.Plugin -import org.bukkit.plugin.java.JavaPlugin -import org.slf4j.Logger -import org.slf4j.LoggerFactory -import java.io.File -import kotlin.coroutines.CoroutineContext - -val logger: Logger = LoggerFactory.getLogger("ParcelsPlugin") -private inline val plogger get() = logger - -class ParcelsPlugin : JavaPlugin(), CoroutineScope, PluginScheduler { - lateinit var optionsFile: File; private set - lateinit var options: Options; private set - lateinit var parcelProvider: ParcelProvider; private set - lateinit var storage: Storage; private set - lateinit var globalPrivileges: GlobalPrivilegesManager; private set - - val registrator = Registrator(this) - lateinit var entityTracker: ParcelEntityTracker; private set - private var listeners: ParcelListeners? = null - private var cmdDispatcher: ICommandDispatcher? = null - - override val coroutineContext: CoroutineContext = MainThreadDispatcher(this) - override val plugin: Plugin get() = this - val jobDispatcher: JobDispatcher by lazy { BukkitJobDispatcher(this, options.tickJobtime) } - - override fun onEnable() { - plogger.info("Is server thread: ${isServerThread()}") - plogger.info("Debug enabled: ${plogger.isDebugEnabled}") - plogger.debug(System.getProperty("user.dir")) - if (!init()) { - Bukkit.getPluginManager().disablePlugin(this) - } - } - - override fun onDisable() { - val hasWorkers = jobDispatcher.jobs.isNotEmpty() - if (hasWorkers) { - plogger.warn("Parcels is attempting to complete all ${jobDispatcher.jobs.size} remaining jobs before shutdown...") - } - jobDispatcher.completeAllTasks() - if (hasWorkers) { - plogger.info("Parcels has completed the remaining jobs.") - } - - cmdDispatcher?.unregisterFromCommandMap() - } - - private fun init(): Boolean { - optionsFile = File(dataFolder, "options.yml") - options = Options() - parcelProvider = ParcelProviderImpl(this) - - try { - if (!loadOptions()) return false - - try { - storage = options.storage.newInstance() - storage.init() - } catch (ex: Exception) { - plogger.error("Failed to connect to database", ex) - return false - } - - globalPrivileges = GlobalPrivilegesManagerImpl(this) - entityTracker = ParcelEntityTracker(parcelProvider) - } catch (ex: Exception) { - plogger.error("Error loading options", ex) - return false - } - - registerListeners() - registerCommands() - - parcelProvider.loadWorlds() - return true - } - - fun loadOptions(): Boolean { - when { - optionsFile.exists() -> optionsMapper.readerForUpdating(options).readValue<Options>(optionsFile) - else -> run { - options.addWorld("parcels") - if (saveOptions()) { - plogger.warn("Created options file with a world template. Please review it before next start.") - } else { - plogger.error("Failed to save options file ${optionsFile.canonicalPath}") - } - return false - } - } - return true - } - - fun saveOptions(): Boolean { - if (optionsFile.tryCreate()) { - try { - optionsMapper.writeValue(optionsFile, options) - } catch (ex: Throwable) { - optionsFile.delete() - throw ex - } - return true - } - return false - } - - override fun getDefaultWorldGenerator(worldName: String, generatorId: String?): ChunkGenerator? { - return parcelProvider.getWorldGenerator(worldName) - } - - private fun registerCommands() { - cmdDispatcher = getParcelCommands(this).apply { - registerToCommandMap("parcels:", EOverridePolicy.FALLBACK_ONLY) - } - } - - private fun registerListeners() { - if (listeners == null) { - listeners = ParcelListeners(parcelProvider, entityTracker, storage) - registrator.registerListeners(listeners!!) - - val worldEditPlugin = server.pluginManager.getPlugin("WorldEdit") - if (worldEditPlugin != null) { - WorldEditListener.register(this, worldEditPlugin) - } - } - - scheduleRepeating(100, 5, entityTracker::tick) - } - +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.defaultimpl.GlobalPrivilegesManagerImpl
+import io.dico.parcels2.defaultimpl.ParcelProviderImpl
+import io.dico.parcels2.listener.ParcelEntityTracker
+import io.dico.parcels2.listener.ParcelListeners
+import io.dico.parcels2.listener.WorldEditListener
+import io.dico.parcels2.options.Options
+import io.dico.parcels2.options.optionsMapper
+import io.dico.parcels2.storage.Storage
+import io.dico.parcels2.util.MainThreadDispatcher
+import io.dico.parcels2.util.PluginScheduler
+import io.dico.parcels2.util.ext.tryCreate
+import io.dico.parcels2.util.isServerThread
+import kotlinx.coroutines.CoroutineScope
+import org.bukkit.Bukkit
+import org.bukkit.generator.ChunkGenerator
+import org.bukkit.plugin.Plugin
+import org.bukkit.plugin.java.JavaPlugin
+import org.slf4j.Logger
+import org.slf4j.LoggerFactory
+import java.io.File
+import kotlin.coroutines.CoroutineContext
+
+val logger: Logger = LoggerFactory.getLogger("ParcelsPlugin")
+private inline val plogger get() = logger
+
+class ParcelsPlugin : JavaPlugin(), CoroutineScope, PluginScheduler {
+ lateinit var optionsFile: File; private set
+ lateinit var options: Options; private set
+ lateinit var parcelProvider: ParcelProvider; private set
+ lateinit var storage: Storage; private set
+ lateinit var globalPrivileges: GlobalPrivilegesManager; private set
+
+ val registrator = Registrator(this)
+ lateinit var entityTracker: ParcelEntityTracker; private set
+ private var listeners: ParcelListeners? = null
+ private var cmdDispatcher: ICommandDispatcher? = null
+
+ override val coroutineContext: CoroutineContext = MainThreadDispatcher(this)
+ override val plugin: Plugin get() = this
+ val jobDispatcher: JobDispatcher by lazy { BukkitJobDispatcher(this, options.tickJobtime) }
+
+ override fun onEnable() {
+ plogger.info("Is server thread: ${isServerThread()}")
+ plogger.info("Debug enabled: ${plogger.isDebugEnabled}")
+ plogger.debug(System.getProperty("user.dir"))
+ if (!init()) {
+ Bukkit.getPluginManager().disablePlugin(this)
+ }
+ }
+
+ override fun onDisable() {
+ val hasWorkers = jobDispatcher.jobs.isNotEmpty()
+ if (hasWorkers) {
+ plogger.warn("Parcels is attempting to complete all ${jobDispatcher.jobs.size} remaining jobs before shutdown...")
+ }
+ jobDispatcher.completeAllTasks()
+ if (hasWorkers) {
+ plogger.info("Parcels has completed the remaining jobs.")
+ }
+
+ cmdDispatcher?.unregisterFromCommandMap()
+ }
+
+ private fun init(): Boolean {
+ optionsFile = File(dataFolder, "options.yml")
+ options = Options()
+ parcelProvider = ParcelProviderImpl(this)
+
+ try {
+ if (!loadOptions()) return false
+
+ try {
+ storage = options.storage.newInstance()
+ storage.init()
+ } catch (ex: Exception) {
+ plogger.error("Failed to connect to database", ex)
+ return false
+ }
+
+ globalPrivileges = GlobalPrivilegesManagerImpl(this)
+ entityTracker = ParcelEntityTracker(parcelProvider)
+ } catch (ex: Exception) {
+ plogger.error("Error loading options", ex)
+ return false
+ }
+
+ registerListeners()
+ registerCommands()
+
+ parcelProvider.loadWorlds()
+ return true
+ }
+
+ fun loadOptions(): Boolean {
+ when {
+ optionsFile.exists() -> optionsMapper.readerForUpdating(options).readValue<Options>(optionsFile)
+ else -> run {
+ options.addWorld("parcels")
+ if (saveOptions()) {
+ plogger.warn("Created options file with a world template. Please review it before next start.")
+ } else {
+ plogger.error("Failed to save options file ${optionsFile.canonicalPath}")
+ }
+ return false
+ }
+ }
+ return true
+ }
+
+ fun saveOptions(): Boolean {
+ if (optionsFile.tryCreate()) {
+ try {
+ optionsMapper.writeValue(optionsFile, options)
+ } catch (ex: Throwable) {
+ optionsFile.delete()
+ throw ex
+ }
+ return true
+ }
+ return false
+ }
+
+ override fun getDefaultWorldGenerator(worldName: String, generatorId: String?): ChunkGenerator? {
+ return parcelProvider.getWorldGenerator(worldName)
+ }
+
+ private fun registerCommands() {
+ cmdDispatcher = getParcelCommands(this).apply {
+ registerToCommandMap("parcels:", EOverridePolicy.FALLBACK_ONLY)
+ }
+ }
+
+ private fun registerListeners() {
+ if (listeners == null) {
+ listeners = ParcelListeners(parcelProvider, entityTracker, storage)
+ registrator.registerListeners(listeners!!)
+
+ val worldEditPlugin = server.pluginManager.getPlugin("WorldEdit")
+ if (worldEditPlugin != null) {
+ WorldEditListener.register(this, worldEditPlugin)
+ }
+ }
+
+ scheduleRepeating(100, 5, entityTracker::tick)
+ }
+
}
\ No newline at end of file |