diff --git a/src/main/kotlin/net/trivernis/chunkmaster/Chunkmaster.kt b/src/main/kotlin/net/trivernis/chunkmaster/Chunkmaster.kt index f24c79e..55459bf 100644 --- a/src/main/kotlin/net/trivernis/chunkmaster/Chunkmaster.kt +++ b/src/main/kotlin/net/trivernis/chunkmaster/Chunkmaster.kt @@ -2,6 +2,7 @@ package net.trivernis.chunkmaster import io.papermc.lib.PaperLib import net.trivernis.chunkmaster.commands.* +import net.trivernis.chunkmaster.lib.LanguageManager import net.trivernis.chunkmaster.lib.generation.GenerationManager import net.trivernis.chunkmaster.lib.SqliteManager import org.bstats.bukkit.Metrics @@ -12,6 +13,7 @@ import java.lang.Exception class Chunkmaster: JavaPlugin() { lateinit var sqliteManager: SqliteManager lateinit var generationManager: GenerationManager + lateinit var langManager: LanguageManager private lateinit var tpsTask: BukkitTask var mspt = 20 // keep track of the milliseconds per tick private set @@ -25,6 +27,8 @@ class Chunkmaster: JavaPlugin() { val metrics = Metrics(this) + langManager = LanguageManager(this) + langManager.loadProperties() initDatabase() generationManager = GenerationManager(this, server) generationManager.init() @@ -70,6 +74,7 @@ class Chunkmaster: JavaPlugin() { config.addDefault("generation.max-loaded-chunks", 10) config.addDefault("generation.ignore-worldborder", false) config.addDefault("database.filename", "chunkmaster.db") + config.addDefault("language", "EN") config.options().copyDefaults(true) saveConfig() } diff --git a/src/main/kotlin/net/trivernis/chunkmaster/commands/CmdList.kt b/src/main/kotlin/net/trivernis/chunkmaster/commands/CmdList.kt index b98a6f4..4d1998b 100644 --- a/src/main/kotlin/net/trivernis/chunkmaster/commands/CmdList.kt +++ b/src/main/kotlin/net/trivernis/chunkmaster/commands/CmdList.kt @@ -50,7 +50,9 @@ class CmdList(private val chunkmaster: Chunkmaster): Subcommand { response.append("\n - ").color(ChatColor.WHITE).bold(false) .append("#${task.id}").color(ChatColor.BLUE).append(" - ").color(ChatColor.WHITE) .append(genTask.world.name).color(ChatColor.GREEN).append(" - Progress: ").color(ChatColor.WHITE) - .append("${genTask.count} chunks").color(ChatColor.BLUE) + .append("${"%.1f".format(genTask.count)} chunks").color(ChatColor.BLUE) + .append(", ETA: ").color(ChatColor.WHITE) + .append("") if (genTask.stopAfter > 0) { response.append(" (${(genTask.count.toDouble()/genTask.stopAfter.toDouble())*100}%).") diff --git a/src/main/kotlin/net/trivernis/chunkmaster/lib/LanguageManager.kt b/src/main/kotlin/net/trivernis/chunkmaster/lib/LanguageManager.kt new file mode 100644 index 0000000..2e4923e --- /dev/null +++ b/src/main/kotlin/net/trivernis/chunkmaster/lib/LanguageManager.kt @@ -0,0 +1,45 @@ +package net.trivernis.chunkmaster.lib +import net.trivernis.chunkmaster.Chunkmaster +import java.io.File +import java.lang.Exception +import java.util.Properties +import java.util.logging.Level + +class LanguageManager(private val plugin: Chunkmaster) { + private val langProps = Properties() + private val languageFolder = "${plugin.dataFolder.absolutePath}/i18n" + private var langFileLoaded = false + + fun loadProperties() { + val language = plugin.config.getString("language") + val langFile = "$languageFolder/$language.i18n.properties" + val file = File(langFile) + val loader = Thread.currentThread().contextClassLoader + val defaultStream = this.javaClass.getResourceAsStream("/DEFAULT.i18n.properties") + if (defaultStream != null) { + langProps.load(defaultStream) + defaultStream.close() + } else { + plugin.logger.severe("Couldn't load default language properties.") + } + if (file.exists()) { + try { + val inputStream = loader.getResourceAsStream(langFile) + if (inputStream != null) { + langProps.load(inputStream) + langFileLoaded = true + inputStream.close() + } + } catch (e: Exception) { + plugin.logger.warning("Language file $langFile could not be loaded!") + plugin.logger.fine(e.toString()) + } + } else { + plugin.logger.warning("Language File $langFile could not be found!") + } + } + + fun getLocalized(key: String) { + langProps.getProperty(key) + } +} \ No newline at end of file diff --git a/src/main/kotlin/net/trivernis/chunkmaster/lib/generation/GenerationManager.kt b/src/main/kotlin/net/trivernis/chunkmaster/lib/generation/GenerationManager.kt index 6a08d76..ee5fa6d 100644 --- a/src/main/kotlin/net/trivernis/chunkmaster/lib/generation/GenerationManager.kt +++ b/src/main/kotlin/net/trivernis/chunkmaster/lib/generation/GenerationManager.kt @@ -47,12 +47,9 @@ class GenerationManager(private val chunkmaster: Chunkmaster, private val server ) var id = 0 - chunkmaster.sqliteManager.executeStatement( - """ - SELECT id FROM generation_tasks ORDER BY id DESC LIMIT 1 - """.trimIndent(), - HashMap() - ) { + chunkmaster.sqliteManager.executeStatement(""" + SELECT id FROM generation_tasks ORDER BY id DESC LIMIT 1 + """.trimIndent(), HashMap()) { it.next() id = it.getInt("id") } @@ -114,11 +111,9 @@ class GenerationManager(private val chunkmaster: Chunkmaster, private val server } if (taskEntry != null) { taskEntry.cancel() - chunkmaster.sqliteManager.executeStatement( - """ + chunkmaster.sqliteManager.executeStatement(""" DELETE FROM generation_tasks WHERE id = ?; - """.trimIndent(), - HashMap(mapOf(1 to taskEntry.id)), + """.trimIndent(), HashMap(mapOf(1 to taskEntry.id)), null ) @@ -171,8 +166,7 @@ class GenerationManager(private val chunkmaster: Chunkmaster, private val server * Starts all generation tasks. */ fun startAll() { - chunkmaster.sqliteManager.executeStatement("SELECT * FROM generation_tasks", HashMap()) { - val res = it + chunkmaster.sqliteManager.executeStatement("SELECT * FROM generation_tasks", HashMap()) { res -> while (res.next()) { try { val id = res.getInt("id") diff --git a/src/main/resources/DEFAULT.i18n.properties b/src/main/resources/DEFAULT.i18n.properties new file mode 100644 index 0000000..e69de29