Change server config language from JSON to TOML
This commit is contained in:
@@ -1,63 +1,146 @@
|
||||
package rs09.game.system.config
|
||||
|
||||
import org.json.simple.JSONObject
|
||||
import org.json.simple.parser.JSONParser
|
||||
import com.moandjiezana.toml.Toml
|
||||
import core.game.world.map.Location
|
||||
import core.tools.StringUtils
|
||||
import core.tools.mysql.Database
|
||||
import rs09.JSONUtils.Companion.parsePath
|
||||
import rs09.ServerConstants
|
||||
import rs09.game.system.SystemLogger
|
||||
import rs09.game.world.GameSettings
|
||||
import rs09.game.world.GameWorld
|
||||
import rs09.plugin.PluginManager
|
||||
import java.io.File
|
||||
import java.io.FileReader
|
||||
import kotlin.system.exitProcess
|
||||
|
||||
/**
|
||||
* Class for parsing the server config, I.E default.json
|
||||
* @param path the path to the JSON file to parse.
|
||||
* Class for parsing the server config, I.E default.toml
|
||||
* @param path the path to the TOML file to parse.
|
||||
* @author Ceikry
|
||||
*/
|
||||
class ServerConfigParser(path: String) {
|
||||
val pathTo = rs09.JSONUtils.parsePath(path)
|
||||
val confFile = File(pathTo)
|
||||
val parser = JSONParser()
|
||||
var reader: FileReader? = null
|
||||
var data: JSONObject? = null
|
||||
object ServerConfigParser {
|
||||
var confFile: File? = null
|
||||
var tomlData: Toml? = null
|
||||
|
||||
init {
|
||||
if(!confFile.canonicalFile.exists()){
|
||||
println("Could not find ${confFile.canonicalFile} - Double check your working directory!")
|
||||
fun parse(path: String){
|
||||
confFile = File(parsePath(path))
|
||||
if(!confFile!!.canonicalFile.exists()){
|
||||
SystemLogger.logErr("${confFile!!.canonicalFile} does not exist in the current working directory.")
|
||||
exitProcess(0)
|
||||
} else if(!pathTo.contains(".json")) {
|
||||
println("Config file MUST be a JSON file!!")
|
||||
println("(Got $pathTo)")
|
||||
} else {
|
||||
reader = FileReader(pathTo)
|
||||
data = parser.parse(reader) as JSONObject
|
||||
ServerConstants.SERVER_NAME = data!!["name"] as String
|
||||
parseGameSettings()
|
||||
parseServerSettings()
|
||||
parsePluginToggles()
|
||||
try {
|
||||
tomlData = Toml().read(confFile)
|
||||
parseGameSettings()
|
||||
parseServerSettings()
|
||||
} catch (e: java.lang.IllegalStateException) {
|
||||
SystemLogger.logErr("Passed config file is not a TOML file. Path: ${confFile!!.canonicalPath}")
|
||||
SystemLogger.logErr("Exception received: $e")
|
||||
SystemLogger.logAlert("Shutting down...")
|
||||
exitProcess(0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun parseGameSettings(){
|
||||
data ?: return
|
||||
val gsData = data!!["GameSettings"] as JSONObject
|
||||
GameWorld.settings = GameSettings.parse(gsData)
|
||||
tomlData ?: return
|
||||
val data = tomlData!!
|
||||
|
||||
GameWorld.settings = GameSettings(
|
||||
name = ServerConstants.SERVER_NAME,
|
||||
isBeta = data.getBoolean("world.debug"),
|
||||
isDevMode = data.getBoolean("world.dev"),
|
||||
isGui = data.getBoolean("world.start_gui"),
|
||||
worldId = data.getString("world.world_id").toInt(),
|
||||
countryIndex = data.getString("world.country_id").toInt(),
|
||||
activity = data.getString("world.activity"),
|
||||
isMembers = data.getBoolean("world.members"),
|
||||
isPvp = data.getBoolean("world.pvp"),
|
||||
isQuickChat = false,
|
||||
isLootshare = false,
|
||||
msAddress = data.getString("server.msip"),
|
||||
default_xp_rate = data.getDouble("world.default_xp_rate"),
|
||||
allow_slayer_reroll = data.getBoolean("world.allow_slayer_reroll"),
|
||||
enable_default_clan = data.getBoolean("world.enable_default_clan"),
|
||||
enable_bots = data.getBoolean("world.enable_bots"),
|
||||
autostock_ge = data.getBoolean("world.autostock_ge"),
|
||||
allow_token_purchase = data.getBoolean("world.allow_token_purchase"),
|
||||
skillcape_perks = data.getBoolean("world.skillcape_perks"),
|
||||
increased_door_time = data.getBoolean("world.increased_door_time"),
|
||||
enabled_botting = data.getBoolean("world.enable_botting"),
|
||||
max_adv_bots = data.getLong("world.max_adv_bots").toInt(),
|
||||
wild_pvp_enabled = data.getBoolean("world.wild_pvp_enabled"),
|
||||
message_model = data.getString("world.motw_identifier").toInt(),
|
||||
message_string = data.getString("world.motw_text").replace("@name",ServerConstants.SERVER_NAME)
|
||||
)
|
||||
}
|
||||
|
||||
private fun parseServerSettings(){
|
||||
data ?: return
|
||||
val ssData = data!!["ServerSettings"] as JSONObject
|
||||
ServerConstants.parse(ssData)
|
||||
tomlData ?: return
|
||||
val data = tomlData!!
|
||||
|
||||
ServerConstants.DATA_PATH = data.getString("paths.data_path")
|
||||
ServerConstants.WRITE_LOGS = data.getBoolean("server.write_logs")
|
||||
ServerConstants.DATABASE_NAME = data.getString("database.database_name")
|
||||
ServerConstants.DATABASE_USER = data.getString("database.database_username")
|
||||
ServerConstants.DATABASE_PASS = data.getString("database.database_password")
|
||||
ServerConstants.DATABASE_ADDRESS = data.getString("database.database_address")
|
||||
ServerConstants.DATABASE_PORT = data.getString("database.database_port")
|
||||
ServerConstants.DATABASE = Database(ServerConstants.DATABASE_ADDRESS + ":" + ServerConstants.DATABASE_PORT, ServerConstants.DATABASE_NAME, ServerConstants.DATABASE_USER, ServerConstants.DATABASE_PASS)
|
||||
ServerConstants.CACHE_PATH = data.getPath("paths.cache_path")
|
||||
ServerConstants.CONFIG_PATH = data.getPath("paths.configs_path")
|
||||
ServerConstants.PLAYER_SAVE_PATH = data.getPath("paths.save_path")
|
||||
ServerConstants.STORE_PATH = data.getPath("paths.store_path")
|
||||
ServerConstants.RDT_DATA_PATH = data.getPath("paths.rare_drop_table_path")
|
||||
ServerConstants.OBJECT_PARSER_PATH = data.getPath("paths.object_parser_path")
|
||||
ServerConstants.LOGS_PATH = data.getPath("paths.logs_path")
|
||||
ServerConstants.SERVER_NAME = data.getPath("world.name")
|
||||
ServerConstants.BOT_DATA_PATH = data.getPath("paths.bot_data")
|
||||
ServerConstants.MS_SECRET_KEY = data.getString("server.secret_key")
|
||||
ServerConstants.HOME_LOCATION = parseLocation(data.getString("world.home_location"))
|
||||
ServerConstants.START_LOCATION = parseLocation(data.getString("world.new_player_location"))
|
||||
ServerConstants.DAILY_RESTART = data.getBoolean("world.daily_restart")
|
||||
}
|
||||
|
||||
private fun parsePluginToggles(){
|
||||
data ?: return
|
||||
val dpData = data!!["PluginToggles"] as JSONObject
|
||||
dpData.map {
|
||||
if(!(it.value as Boolean)){
|
||||
PluginManager.disabledPlugins.put(it.key.toString(),it.value as Boolean)
|
||||
}
|
||||
|
||||
private fun Toml.getPath(key: String): String{
|
||||
try {
|
||||
return parsePath(getString(key).replace("@data", ServerConstants.DATA_PATH!!))
|
||||
} catch (e: Exception){
|
||||
SystemLogger.logErr("Error parsing key: $key")
|
||||
exitProcess(0)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a location from the format "x,y,z"
|
||||
* @author Ceikry
|
||||
* @param locString The string to parse
|
||||
* @return Location
|
||||
*/
|
||||
fun parseLocation(locString: String): Location {
|
||||
val locTokens = locString.split(",").map { it.toInt() }
|
||||
return Location(locTokens[0], locTokens[1], locTokens[2])
|
||||
}
|
||||
|
||||
/**
|
||||
* Parses a path string
|
||||
* @author Ceikry
|
||||
* @param pathString The string to parse
|
||||
* @return a String with the proper file separators for the current OS.
|
||||
*/
|
||||
fun parsePath(pathString: String): String {
|
||||
var pathTokens: List<String>? = null
|
||||
if(pathString.contains("/"))
|
||||
pathTokens = pathString.split("/")
|
||||
else if(pathString.contains("\\"))
|
||||
pathTokens = pathString.split("\\")
|
||||
|
||||
pathTokens ?: return pathString //return the initial pathString if path does not contain file separators.
|
||||
var pathProduct = ""
|
||||
for(token in pathTokens){
|
||||
if(token != "")
|
||||
pathProduct += "$token${File.separator}"
|
||||
}
|
||||
|
||||
return pathProduct
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user