/// <summary> /// 合并xml文件 /// </summary> /// <param name="node"></param> /// <param name="files"></param> /// <param name="attr1"></param> /// <param name="attr2"></param> /// <param name="type"></param> /// <returns></returns> public static XElement CombineXml(XElement node, IEnumerable <FileEntry> files, string attr1 = null, string attr2 = null, string type = null) { var enumerator = files.GetEnumerator(); while (enumerator.MoveNext()) { try { var xml = #if Bugs XElement.Load(enumerator.Current.Stream); #else XmlUtils.LoadXmlFromStream(enumerator.Current.Stream, null, true); #endif Modify(node, xml, attr1, attr2, type); } catch (Exception e) { ModsManager.ErrorHandler(enumerator.Current, e); } } return(node); }
public static void Initialize() { CalculateSlotTexCoordTables(); int i = 0; var dictionary = new Dictionary <int, Block>(); foreach (var definedType in GetBlockTypes()) { if (definedType.IsSubclassOf(typeof(Block)) && !definedType.IsAbstract) { var fieldInfo = definedType.AsType().GetRuntimeFields().FirstOrDefault(fi => { if (fi.Name == "Index" && fi.IsPublic) { return(fi.IsStatic); } return(false); }); if (fieldInfo != null && fieldInfo.FieldType == typeof(int)) { var num = (int)fieldInfo.GetValue(null); // Removed 'Index of block type \"{0}\" conflicts with another block' error var instance = (Block)Activator.CreateInstance(definedType.AsType()); dictionary[instance.BlockIndex = num] = instance; if (num > i) { i = num; } } else { throw new InvalidOperationException(string.Format( "Block type \"{0}\" does not have static field Index of type int.", new object[1] { definedType.FullName })); } } } m_blocks = new Block[i + 1]; m_fluidBlocks = new FluidBlock[i + 1]; for (var e = dictionary.GetEnumerator(); e.MoveNext();) { var keyValuePair = e.Current; m_blocks[keyValuePair.Key] = keyValuePair.Value; m_fluidBlocks[keyValuePair.Key] = keyValuePair.Value as FluidBlock; } for (i = 0; i < m_blocks.Length; ++i) { if (m_blocks[i] == null) { m_blocks[i] = Blocks[0]; } } var data = ContentManager.Get <string>("BlocksData"); ContentManager.Dispose("BlocksData"); LoadBlocksData(data); var enumerator = ModsManager.GetEntries(".csv").GetEnumerator(); while (enumerator.MoveNext()) { var reader = new StreamReader(enumerator.Current.Stream); try { LoadBlocksData(reader.ReadToEnd()); } catch (Exception e) { ModsManager.ErrorHandler(enumerator.Current, e); } finally { reader.Dispose(); } } i = 0; for (int length = Blocks.Length; i < length; i++) { Blocks[i].Initialize(); } m_categories.Add("Terrain"); m_categories.Add("Plants"); m_categories.Add("Construction"); m_categories.Add("Items"); m_categories.Add("Tools"); m_categories.Add("Clothes"); m_categories.Add("Electrics"); m_categories.Add("Food"); m_categories.Add("Spawner Eggs"); m_categories.Add("Painted"); m_categories.Add("Dyed"); m_categories.Add("Fireworks"); for (i = 0; i < Blocks.Length; i++) { var block = Blocks[i]; for (var j = block.GetCreativeValues().GetEnumerator(); j.MoveNext();) { var category = block.GetCategory(j.Current); if (!m_categories.Contains(category)) { m_categories.Add(category); } } } }