public VanillaSettingsProvider() { ServerProperties = new Dictionary <string, string>(); keyLookup = new Dictionary <string, string>(); keyLookup.Add("server.port", "server-port"); keyLookup.Add("level.type", "level-type"); keyLookup.Add("server.rcon", "enable-rcon"); keyLookup.Add("level.seed", "level-seed"); keyLookup.Add("server.buildmax", "max-build-height"); keyLookup.Add("server.mobs.villagers.enabled", "spawn-npcs"); keyLookup.Add("server.whitelist.enabled", "white-list"); keyLookup.Add("server.mobs.friendly.enabled", "spawn-animals"); keyLookup.Add("server.snoop.enabled", "snooper-enabled"); keyLookup.Add("server.hardcore.enabled", "hardcore"); keyLookup.Add("server.texturepack", "texture-pack"); keyLookup.Add("server.onlinemode", "online-mode"); keyLookup.Add("server.pvp.enabled", "pvp"); keyLookup.Add("level.gamemode", "gamemode"); keyLookup.Add("server.maxplayers", "max-players"); keyLookup.Add("server.mobs.hostile.enabled", "spawn-monsters"); keyLookup.Add("level.generator.generatestructures", "generate-structures"); keyLookup.Add("server.viewdistance", "view-distance"); keyLookup.Add("server.motd", "motd"); foreach (var key in keyLookup) // Set default keys { if (DefaultSettings.ContainsKey(key.Key)) { Set(key.Key, Get <string>(key.Key)); // This works because it goes to the default setting provider when it can't find a key } } }
public bool ContainsKey(string key) { bool local = ContainsKeyNoRecurse(key); if (local) { return(true); } return(DefaultSettings.ContainsKey(key)); }
public T Get <T>(string key) { // TODO: Can this be made better? if (!ContainsKeyNoRecurse(key)) { return(DefaultSettings.Get <T>(key)); } if (typeof(T).IsEnum) { return((T)Enum.Parse(typeof(T), ServerProperties[key], true)); } if (typeof(T).GetInterface("IConvertible") == null) { if (typeof(T).GetInterface("IEnumerable") != null) { var items = ServerProperties.Where(p => p.Key.StartsWith(key + "[")); Type genericType = typeof(T).GetGenericArguments()[0]; var results = Array.CreateInstance(genericType, items.Count()); int i = 0; foreach (var item in items) { int start = key.Length + 1; int length = item.Key.IndexOf(']', start + 1) - start; int index = int.Parse(item.Key.Substring(start, length)); results.SetValue(typeof(VanillaSettingsProvider).GetMethod("Get").MakeGenericMethod(genericType) .Invoke(this, new object[] { key + "[" + index + "]" }), index); } var listType = typeof(List <>).MakeGenericType(genericType); if (typeof(T) == listType) { return((T)Activator.CreateInstance(listType, results)); } return((T)results.Cast <T>()); } } return((T)Convert.ChangeType(ServerProperties[key], typeof(T))); }