예제 #1
0
        /// <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);
        }
예제 #2
0
        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);
                    }
                }
            }
        }