Esempio n. 1
0
        static Map LoadMeta([NotNull] Stream stream)
        {
            if (stream == null)
            {
                throw new ArgumentNullException("stream");
            }
            INIFile metaFile = new INIFile(stream);

            if (metaFile.IsEmpty)
            {
                throw new Exception("Metadata file is empty or incorrectly formatted.");
            }
            if (!metaFile.Contains("size", "x", "y", "z"))
            {
                throw new Exception("Metadata file is missing map dimensions.");
            }

            int width  = Int32.Parse(metaFile["size", "x"]);
            int length = Int32.Parse(metaFile["size", "z"]);
            int height = Int32.Parse(metaFile["size", "y"]);

            Map map = new Map(null, width, length, height, false);

            if (!map.ValidateHeader())
            {
                throw new MapFormatException("One or more of the map dimensions are invalid.");
            }

            if (metaFile.Contains("spawn", "x", "y", "z", "h"))
            {
                map.Spawn = new Position {
                    X = (short)(Int16.Parse(metaFile["spawn", "x"]) * 32 + 16),
                    Y = (short)(Int16.Parse(metaFile["spawn", "z"]) * 32 + 16),
                    Z = (short)(Int16.Parse(metaFile["spawn", "y"]) * 32 + 16),
                    R = Byte.Parse(metaFile["spawn", "h"]),
                    L = 0
                };
            }
            return(map);
        }
Esempio n. 2
0
        public Map Load([NotNull] string fileName)
        {
            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }
            using (FileStream mapStream = File.OpenRead(fileName)) {
                GZipStream gs  = new GZipStream(mapStream, CompressionMode.Decompress, true);
                NBTag      tag = NBTag.ReadStream(gs);


                NBTag mapTag = tag["Map"];
                // ReSharper disable UseObjectOrCollectionInitializer
                Map map = new Map(null,
                                  mapTag["Width"].GetShort(),
                                  mapTag["Length"].GetShort(),
                                  mapTag["Height"].GetShort(),
                                  false);
                map.Spawn = new Position {
                    X = mapTag["Spawn"][0].GetShort(),
                    Z = mapTag["Spawn"][1].GetShort(),
                    Y = mapTag["Spawn"][2].GetShort(),
                    R = 0,
                    L = 0
                };
                // ReSharper restore UseObjectOrCollectionInitializer

                if (!map.ValidateHeader())
                {
                    throw new MapFormatException("One or more of the map dimensions are invalid.");
                }

                map.Blocks = mapTag["Blocks"].GetBytes();
                //map.RemoveUnknownBlocktypes();

                return(map);
            }
        }
Esempio n. 3
0
        public Map Load([NotNull] string fileName)
        {
            if (fileName == null)
            {
                throw new ArgumentNullException("fileName");
            }
            using (FileStream mapStream = File.OpenRead(fileName)) {
                // Setup a GZipStream to decompress and read the map file
                using (GZipStream gs = new GZipStream(mapStream, CompressionMode.Decompress, true)) {
                    Map map = LoadHeaderInternal(gs);

                    if (!map.ValidateHeader())
                    {
                        throw new MapFormatException("One or more of the map dimensions are invalid.");
                    }

                    // Read in the map data
                    map.Blocks = new byte[map.Volume];
                    mapStream.Read(map.Blocks, 0, map.Blocks.Length);

                    return(map);
                }
            }
        }