You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
4.2 KiB
Kotlin
119 lines
4.2 KiB
Kotlin
package net.trivernis.chunkmaster
|
|
|
|
import io.papermc.lib.PaperLib
|
|
import net.trivernis.chunkmaster.commands.CommandChunkmaster
|
|
import net.trivernis.chunkmaster.lib.LanguageManager
|
|
import net.trivernis.chunkmaster.lib.database.SqliteManager
|
|
import net.trivernis.chunkmaster.lib.generation.GenerationManager
|
|
import org.bstats.bukkit.Metrics
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
import org.bukkit.scheduler.BukkitTask
|
|
import org.dynmap.DynmapAPI
|
|
import java.lang.IllegalStateException
|
|
|
|
class Chunkmaster : JavaPlugin() {
|
|
lateinit var sqliteManager: SqliteManager
|
|
lateinit var generationManager: GenerationManager
|
|
lateinit var langManager: LanguageManager
|
|
private lateinit var tpsTask: BukkitTask
|
|
var dynmapApi: DynmapAPI? = null
|
|
private set
|
|
var mspt = 20 // keep track of the milliseconds per tick
|
|
private set
|
|
|
|
/**
|
|
* On enable of the plugin
|
|
*/
|
|
override fun onEnable() {
|
|
PaperLib.suggestPaper(this)
|
|
logger.fine("LogLevel: FINE")
|
|
logger.finer("LogLevel: FINER")
|
|
logger.finest("LogLevel: FINEST")
|
|
configure()
|
|
|
|
Metrics(this)
|
|
|
|
langManager = LanguageManager(this)
|
|
langManager.loadProperties()
|
|
|
|
this.dynmapApi = getDynmap()
|
|
|
|
initDatabase()
|
|
generationManager = GenerationManager(this, server)
|
|
generationManager.init()
|
|
|
|
getCommand("chunkmaster")?.aliases = mutableListOf("chm", "chunkm", "cmaster")
|
|
getCommand("chunkmaster")?.setExecutor(CommandChunkmaster(this, server))
|
|
|
|
server.pluginManager.registerEvents(ChunkmasterEvents(this, server), this)
|
|
|
|
if (PaperLib.isPaper() && PaperLib.getMinecraftPatchVersion() >= 225) {
|
|
tpsTask = server.scheduler.runTaskTimer(this, Runnable {
|
|
mspt = 1000 / server.currentTick // use papers exposed tick rather than calculating it
|
|
}, 1, 300)
|
|
} else {
|
|
tpsTask = server.scheduler.runTaskTimer(this, Runnable {
|
|
val start = System.currentTimeMillis()
|
|
server.scheduler.runTaskLater(this, Runnable {
|
|
mspt = (System.currentTimeMillis() - start).toInt()
|
|
}, 1)
|
|
}, 1, 300)
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Stop all tasks and close database connection on disable
|
|
*/
|
|
override fun onDisable() {
|
|
logger.info(langManager.getLocalized("STOPPING_ALL_TASKS"))
|
|
generationManager.stopAll()
|
|
server.scheduler.cancelTasks(this)
|
|
}
|
|
|
|
/**
|
|
* Cofigure the config file
|
|
*/
|
|
private fun configure() {
|
|
dataFolder.mkdir()
|
|
config.addDefault("generation.mspt-pause-threshold", 500L)
|
|
config.addDefault("generation.pause-on-player-count", 1)
|
|
config.addDefault("generation.max-pending-chunks", 500)
|
|
config.addDefault("generation.max-loaded-chunks", 1000)
|
|
config.addDefault("generation.unloading-period", 50L)
|
|
config.addDefault("generation.ignore-worldborder", false)
|
|
config.addDefault("generation.autostart", true)
|
|
config.addDefault("database.filename", "chunkmaster.db")
|
|
config.addDefault("language", "en")
|
|
config.addDefault("dynmap", true)
|
|
config.options().copyDefaults(true)
|
|
saveConfig()
|
|
}
|
|
|
|
/**
|
|
* Initializes the database
|
|
*/
|
|
private fun initDatabase() {
|
|
logger.info(langManager.getLocalized("DB_INIT"))
|
|
try {
|
|
this.sqliteManager = SqliteManager(this)
|
|
sqliteManager.init()
|
|
logger.info(langManager.getLocalized("DB_INIT_FINISHED"))
|
|
} catch (e: Exception) {
|
|
logger.warning(langManager.getLocalized("DB_INIT_EROR", e.message!!))
|
|
}
|
|
}
|
|
|
|
private fun getDynmap(): DynmapAPI? {
|
|
return try {
|
|
val dynmap = server.pluginManager.getPlugin("dynmap")
|
|
if (dynmap != null && dynmap is DynmapAPI) {
|
|
logger.info(langManager.getLocalized("PLUGIN_DETECTED", "dynmap", dynmap.dynmapVersion))
|
|
dynmap
|
|
} else {
|
|
null
|
|
}
|
|
} catch (e: IllegalStateException) {
|
|
null
|
|
}
|
|
}
|
|
} |