private IEnumerable <RegionFile> ListRegions() { if (!Directory.Exists(_regionDirectory)) { Directory.CreateDirectory(_regionDirectory); } string[] regions = Directory.GetFiles(_regionDirectory, "*.mca"); string parentDirectory = _regionDirectory + Path.DirectorySeparatorChar; for (int i = 0; i < regions.Length; i++) { string[] codes = regions[i].Replace(parentDirectory, string.Empty).Split('.'); if (codes.Length == 4 && codes[0] == "r") { int cx, cz; if (int.TryParse(codes[1], out cx) && int.TryParse(codes[2], out cz)) { RegionCoord coord = new RegionCoord(cx, cz); if (!_regionCache.ContainsKey(coord)) { RegionFile rf = new RegionFile(regions[i], coord); yield return(rf); } else { yield return(_regionCache[coord]); } } } } }
public override bool Equals(object obj) { if (!(obj is RegionCoord)) { return(false); } RegionCoord self = (RegionCoord)obj; return(X == self.X && Z == self.Z); }
public RegionFile TryLoadRegionFile(string fileName) { string[] names = fileName.Replace(_filePath + Path.DirectorySeparatorChar, "").Split('.'); if (names.Length == 4 && names[0] == "r") { RegionCoord rc = new RegionCoord(int.Parse(names[1]), int.Parse(names[2])); return(new RegionFile(fileName, rc)); } return(null); }
public RegionFile GetRegionFile(RegionCoord coord) { if (_regionFiles.ContainsKey(coord)) { return(_regionFiles[coord]); } RegionFile region = new RegionFile(GetRegionFileName(coord), coord); _regionFiles.Add(coord, region); return(region); }
private RegionFile FetchRegion(RegionCoord r, bool create = false) { if (!_regionCache.ContainsKey(r)) { string filePath = GetRegionFile(r); if ((File.Exists(filePath) && !_canCreate) || _canCreate) { _regionCache.Add(r, new RegionFile(filePath, r)); } } return(_regionCache[r]); }
public Region(int x, int z) { regionPos = new RegionCoord(x, z); chunks = new ChunkData[32, 32]; }
private string GetRegionFile(RegionCoord r) { return(_regionDirectory + Path.DirectorySeparatorChar + string.Format("r.{0}.{1}.mca", r.X, r.Z)); }
private string GetRegionFileName(RegionCoord coord) { return(_filePath + Path.DirectorySeparatorChar + string.Format("r.{0}.{1}.mca", coord.X, coord.Z)); }