public void Initialize() { BasePath = BasePath ?? Config.GetProperty("LevelDBWorldFolder", "World").Trim(); var directory = new DirectoryInfo(Path.Combine(BasePath, "db")); var levelFileName = Path.Combine(BasePath, "level.dat"); Log.Debug($"Loading level.dat from {levelFileName}"); if (File.Exists(levelFileName)) { var file = new NbtFile { BigEndian = false, UseVarInt = false }; var levelStream = File.OpenRead(levelFileName); levelStream.Seek(8, SeekOrigin.Begin); file.LoadFromStream(levelStream, NbtCompression.None); Log.Debug($"Level DAT\n{file.RootTag}"); NbtTag dataTag = file.RootTag["Data"]; //LevelInfo = new LevelInfoBedrock(dataTag); } else { Log.Warn($"No level.dat found at {levelFileName}. Creating empty."); LevelInfo = new LevelInfoBedrock(); } var db = new Database(directory); db.Open(); _db = db; MissingChunkProvider?.Initialize(); }
public void Initialize() { BasePath ??= Config.GetProperty("LevelDBWorldFolder", "World").Trim(); var directory = new DirectoryInfo(Path.Combine(BasePath, "db")); var levelFileName = Path.Combine(BasePath, "level.dat"); Log.Debug($"Loading level.dat from {levelFileName}"); if (File.Exists(levelFileName)) { var file = new NbtFile { BigEndian = false, UseVarInt = false }; using FileStream stream = File.OpenRead(levelFileName); stream.Seek(8, SeekOrigin.Begin); file.LoadFromStream(stream, NbtCompression.None); Log.Debug($"Level DAT\n{file.RootTag}"); LevelInfo = file.RootTag.Deserialize <LevelInfoBedrock>(); } else { Log.Warn($"No level.dat found at {levelFileName}. Creating empty."); LevelInfo = new LevelInfoBedrock(); } // We must reuse the same DB for all providers (dimensions) in LevelDB. if (Db == null) { var db = new Database(directory) { CreateIfMissing = true }; db.Open(); Db = db; directory.Refresh(); // refresh create state if this dir didn't exist // Shutdown hook. Must use to flush in memory log of LevelDB. AppDomain.CurrentDomain.ProcessExit += (sender, args) => { SaveChunks(); Log.Warn("Closing LevelDB"); Db.Close(); }; } MissingChunkProvider?.Initialize(this); }