コード例 #1
0
        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]);
                        }
                    }
                }
            }
        }
コード例 #2
0
        public override bool Equals(object obj)
        {
            if (!(obj is RegionCoord))
            {
                return(false);
            }
            RegionCoord self = (RegionCoord)obj;

            return(X == self.X && Z == self.Z);
        }
コード例 #3
0
 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);
 }
コード例 #4
0
        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);
        }
コード例 #5
0
 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]);
 }
コード例 #6
0
ファイル: Region.cs プロジェクト: D3TONAT0R/MCUtils
 public Region(int x, int z)
 {
     regionPos = new RegionCoord(x, z);
     chunks    = new ChunkData[32, 32];
 }
コード例 #7
0
 private string GetRegionFile(RegionCoord r)
 {
     return(_regionDirectory + Path.DirectorySeparatorChar + string.Format("r.{0}.{1}.mca", r.X, r.Z));
 }
コード例 #8
0
 private string GetRegionFileName(RegionCoord coord)
 {
     return(_filePath + Path.DirectorySeparatorChar + string.Format("r.{0}.{1}.mca", coord.X, coord.Z));
 }