using System; using System.IO; using System.Text; namespace CLre_server.API.Config { [Serializable] public struct CLreConfig { public bool clre_clients_only; public bool web_server; public bool terrain_exclusion_zone; public bool chat_commands; public string email_address; public string password; public string[] bans; public string[] moderators; public static CLreConfig Default() { return new CLreConfig { clre_clients_only = false, web_server = false, terrain_exclusion_zone = false, chat_commands = false, email_address = "email@address.com", password = "s3cur3-password", bans = new string[0], moderators = new []{ "NGuiness", "NGnius", "Zhang"}, }; } public static CLreConfig FromString(string s) { return UnityEngine.JsonUtility.FromJson(s); } public static CLreConfig FromFile(string path) { string s = File.ReadAllText(path); return FromString(s); } public static CLreConfig FromFileSafely(string path) { // try to load config file CLreConfig conf = Default(); try { string s = File.ReadAllText(path); conf = FromString(s); } catch (Exception e) { Utility.Logging.LogWarning($"Failed to load {path}: {e}\n{e.StackTrace}"); try { File.WriteAllText(path, conf.ToString()); } catch (Exception e2) { Utility.Logging.LogWarning($"Failed to write {path}: {e2}\n{e2.StackTrace}"); } } return conf; } public override string ToString() { return UnityEngine.JsonUtility.ToJson(this, true); } public void ToFile(string path) { File.WriteAllText(path, this.ToString()); } } }