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.
90 lines
3.1 KiB
Kotlin
90 lines
3.1 KiB
Kotlin
package net.trivernis.chunkmaster
|
|
|
|
import io.papermc.lib.PaperLib
|
|
import net.trivernis.chunkmaster.commands.*
|
|
import net.trivernis.chunkmaster.lib.generation.GenerationManager
|
|
import net.trivernis.chunkmaster.lib.SqliteManager
|
|
import org.bstats.bukkit.Metrics
|
|
import org.bukkit.plugin.java.JavaPlugin
|
|
import org.bukkit.scheduler.BukkitTask
|
|
import java.lang.Exception
|
|
|
|
class Chunkmaster: JavaPlugin() {
|
|
lateinit var sqliteManager: SqliteManager
|
|
lateinit var generationManager: GenerationManager
|
|
private lateinit var tpsTask: BukkitTask
|
|
var mspt = 20 // keep track of the milliseconds per tick
|
|
private set
|
|
|
|
/**
|
|
* On enable of the plugin
|
|
*/
|
|
override fun onEnable() {
|
|
PaperLib.suggestPaper(this)
|
|
configure()
|
|
|
|
val metrics = Metrics(this)
|
|
|
|
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("Stopping all generation tasks...")
|
|
generationManager.stopAll()
|
|
}
|
|
|
|
/**
|
|
* Cofigure the config file
|
|
*/
|
|
private fun configure() {
|
|
dataFolder.mkdir()
|
|
config.addDefault("generation.period", 2L)
|
|
config.addDefault("generation.chunks-per-step", 2)
|
|
config.addDefault("generation.chunk-skips-per-step", 100)
|
|
config.addDefault("generation.mspt-pause-threshold", 500L)
|
|
config.addDefault("generation.pause-on-join", true)
|
|
config.addDefault("generation.max-pending-chunks", 10)
|
|
config.addDefault("generation.max-loaded-chunks", 10)
|
|
config.addDefault("generation.ignore-worldborder", false)
|
|
config.addDefault("database.filename", "chunkmaster.db")
|
|
config.options().copyDefaults(true)
|
|
saveConfig()
|
|
}
|
|
|
|
/**
|
|
* Initializes the database
|
|
*/
|
|
private fun initDatabase() {
|
|
logger.info("Initializing Database...")
|
|
try {
|
|
this.sqliteManager = SqliteManager( this)
|
|
sqliteManager.init()
|
|
logger.info("Database fully initialized.")
|
|
} catch(e: Exception) {
|
|
logger.warning("Failed to init database: ${e.message}")
|
|
}
|
|
}
|
|
} |