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); }
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); } }
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); } } }