internal void SetDefaultByConfig() { var missingGenerator = new SuperflatGenerator(Dimension.Overworld); IWorldProvider worldProvider; switch (Config.GetProperty("WorldProvider", "anvil").ToLower().Trim()) { case "leveldb": worldProvider = new LevelDbProvider() { MissingChunkProvider = missingGenerator }; break; case "anvil": default: worldProvider = new AnvilWorldProvider() { MissingChunkProvider = missingGenerator, ReadSkyLight = !Config.GetProperty("CalculateLights", false), ReadBlockLight = !Config.GetProperty("CalculateLights", false) }; break; } var lvl = new OpenLevel(Api, this, Dimension.Overworld.ToString(), worldProvider, EntityManager, _gameMode, _difficulty, _viewDistance) { EnableBlockTicking = Config.GetProperty("EnableBlockTicking", false), EnableChunkTicking = Config.GetProperty("EnableChunkTicking", false), SaveInterval = Config.GetProperty("Save.Interval", 300), UnloadInterval = Config.GetProperty("Unload.Interval", -1), DrowningDamage = Config.GetProperty("GameRule.DrowningDamage", true), CommandblockOutput = Config.GetProperty("GameRule.CommandblockOutput", true), DoTiledrops = Config.GetProperty("GameRule.DoTiledrops", true), DoMobloot = Config.GetProperty("GameRule.DoMobloot", true), KeepInventory = Config.GetProperty("GameRule.KeepInventory", true), DoDaylightcycle = Config.GetProperty("GameRule.DoDaylightcycle", true), DoMobspawning = Config.GetProperty("GameRule.DoMobspawning", true), DoEntitydrops = Config.GetProperty("GameRule.DoEntitydrops", true), DoFiretick = Config.GetProperty("GameRule.DoFiretick", true), DoWeathercycle = Config.GetProperty("GameRule.DoWeathercycle", true), Pvp = Config.GetProperty("GameRule.Pvp", true), Falldamage = Config.GetProperty("GameRule.Falldamage", true), Firedamage = Config.GetProperty("GameRule.Firedamage", true), Mobgriefing = Config.GetProperty("GameRule.Mobgriefing", true), ShowCoordinates = Config.GetProperty("GameRule.ShowCoordinates", true), NaturalRegeneration = Config.GetProperty("GameRule.NaturalRegeneration", true), TntExplodes = Config.GetProperty("GameRule.TntExplodes", true), SendCommandfeedback = Config.GetProperty("GameRule.SendCommandfeedback", true), RandomTickSpeed = Config.GetProperty("GameRule.RandomTickSpeed", 3) }; SetDefaultLevel((OpenLevel)lvl); }
public override Level GetLevel(Player player, string name) { Level level = Levels.FirstOrDefault(l => l.LevelId.Equals(name, StringComparison.InvariantCultureIgnoreCase)); if (level == null) { int viewDistance = Config.GetProperty("ViewDistance", 11); var worldProvider = new LevelDbProvider() { MissingChunkProvider = new PlotWorldGenerator(), }; level = new Level(this, name, worldProvider, EntityManager, GameMode.Creative, Difficulty.Normal, viewDistance) { EnableBlockTicking = Config.GetProperty("EnableBlockTicking", false), EnableChunkTicking = Config.GetProperty("EnableChunkTicking", false), SaveInterval = Config.GetProperty("Save.Interval", 300), UnloadInterval = Config.GetProperty("Unload.Interval", 0), DrowningDamage = Config.GetProperty("GameRule.DrowningDamage", true), CommandblockOutput = Config.GetProperty("GameRule.CommandblockOutput", true), DoTiledrops = Config.GetProperty("GameRule.DoTiledrops", true), DoMobloot = Config.GetProperty("GameRule.DoMobloot", true), KeepInventory = Config.GetProperty("GameRule.KeepInventory", true), DoDaylightcycle = Config.GetProperty("GameRule.DoDaylightcycle", false), DoMobspawning = Config.GetProperty("GameRule.DoMobspawning", true), DoEntitydrops = Config.GetProperty("GameRule.DoEntitydrops", true), DoFiretick = Config.GetProperty("GameRule.DoFiretick", true), DoWeathercycle = Config.GetProperty("GameRule.DoWeathercycle", true), Pvp = Config.GetProperty("GameRule.Pvp", true), Falldamage = Config.GetProperty("GameRule.Falldamage", true), Firedamage = Config.GetProperty("GameRule.Firedamage", true), Mobgriefing = Config.GetProperty("GameRule.Mobgriefing", true), ShowCoordinates = Config.GetProperty("GameRule.ShowCoordinates", true), NaturalRegeneration = Config.GetProperty("GameRule.NaturalRegeneration", true), TntExplodes = Config.GetProperty("GameRule.TntExplodes", true), SendCommandfeedback = Config.GetProperty("GameRule.SendCommandfeedback", true), RandomTickSpeed = Config.GetProperty("GameRule.RandomTickSpeed", 3), }; level.Initialize(); Levels.Add(level); OnLevelCreated(new LevelEventArgs(null, level)); } return(level); }
private Level GetDimensionForLevelDbProvider(Level level, Dimension dimension, LevelDbProvider overworld) { var worldProvider = new LevelDbProvider(overworld.Db) { Dimension = dimension, MissingChunkProvider = new SuperflatGenerator(dimension), }; Level newLevel = new Level(level.LevelManager, level.LevelId + "_" + dimension, worldProvider, EntityManager, level.GameMode, level.Difficulty, level.ViewDistance) { OverworldLevel = level, Dimension = dimension, EnableBlockTicking = level.EnableBlockTicking, EnableChunkTicking = level.EnableChunkTicking, SaveInterval = level.SaveInterval, UnloadInterval = level.UnloadInterval, DrowningDamage = level.DrowningDamage, CommandblockOutput = level.CommandblockOutput, DoTiledrops = level.DoTiledrops, DoMobloot = level.DoMobloot, KeepInventory = level.KeepInventory, DoDaylightcycle = level.DoDaylightcycle, DoMobspawning = level.DoMobspawning, DoEntitydrops = level.DoEntitydrops, DoFiretick = level.DoFiretick, DoWeathercycle = level.DoWeathercycle, Pvp = level.Pvp, Falldamage = level.Falldamage, Firedamage = level.Firedamage, Mobgriefing = level.Mobgriefing, ShowCoordinates = level.ShowCoordinates, NaturalRegeneration = level.NaturalRegeneration, TntExplodes = level.TntExplodes, SendCommandfeedback = level.SendCommandfeedback, RandomTickSpeed = level.RandomTickSpeed, }; newLevel.Initialize(); return(newLevel); }
public void RoundtripTest() { var provider = new LevelDbProvider(null); var flatGenerator = new SuperflatGenerator(Dimension.Overworld); flatGenerator.Initialize(null); SubChunk chunk = flatGenerator.GenerateChunkColumn(new ChunkCoordinates())[0]; using var stream = new MemoryStream(); provider.Write(chunk, stream); byte[] output = stream.ToArray(); var parsedChunk = new SubChunk(); provider.ParseSection(parsedChunk, output); // Assert CollectionAssert.AreEqual(chunk.Blocks, parsedChunk.Blocks); CollectionAssert.AreEqual(chunk.LoggedBlocks, parsedChunk.LoggedBlocks); CollectionAssert.AreEqual(chunk.RuntimeIds, parsedChunk.RuntimeIds); }
public virtual Level GetLevel(Player player, string name) { Level level = Levels.FirstOrDefault(l => l.LevelId.Equals(name, StringComparison.InvariantCultureIgnoreCase)); if (level == null) { GameMode gameMode = Config.GetProperty("GameMode", GameMode.Survival); Difficulty difficulty = Config.GetProperty("Difficulty", Difficulty.Normal); int viewDistance = Config.GetProperty("ViewDistance", 11); IWorldProvider worldProvider = null; switch (Config.GetProperty("WorldProvider", "anvil").ToLower().Trim()) { case "leveldb": worldProvider = new LevelDbProvider(); break; case "cool": worldProvider = new CoolWorldProvider(); break; case "experimental": worldProvider = new ExperimentalWorldProvider(); break; case "anvil": case "flat": case "flatland": default: worldProvider = new AnvilWorldProvider { MissingChunkProvider = Generator, ReadSkyLight = !Config.GetProperty("CalculateLights", false), ReadBlockLight = !Config.GetProperty("CalculateLights", false), }; break; } level = new Level(this, name, worldProvider, EntityManager, gameMode, difficulty, viewDistance) { EnableBlockTicking = Config.GetProperty("EnableBlockTicking", false), EnableChunkTicking = Config.GetProperty("EnableChunkTicking", false), SaveInterval = Config.GetProperty("Save.Interval", 300), UnloadInterval = Config.GetProperty("Unload.Interval", -1), DrowningDamage = Config.GetProperty("GameRule.DrowningDamage", true), CommandblockOutput = Config.GetProperty("GameRule.CommandblockOutput", true), DoTiledrops = Config.GetProperty("GameRule.DoTiledrops", true), DoMobloot = Config.GetProperty("GameRule.DoMobloot", true), KeepInventory = Config.GetProperty("GameRule.KeepInventory", true), DoDaylightcycle = Config.GetProperty("GameRule.DoDaylightcycle", true), DoMobspawning = Config.GetProperty("GameRule.DoMobspawning", true), DoEntitydrops = Config.GetProperty("GameRule.DoEntitydrops", true), DoFiretick = Config.GetProperty("GameRule.DoFiretick", true), DoWeathercycle = Config.GetProperty("GameRule.DoWeathercycle", true), Pvp = Config.GetProperty("GameRule.Pvp", true), Falldamage = Config.GetProperty("GameRule.Falldamage", true), Firedamage = Config.GetProperty("GameRule.Firedamage", true), Mobgriefing = Config.GetProperty("GameRule.Mobgriefing", true), ShowCoordinates = Config.GetProperty("GameRule.ShowCoordinates", true), NaturalRegeneration = Config.GetProperty("GameRule.NaturalRegeneration", true), TntExplodes = Config.GetProperty("GameRule.TntExplodes", true), SendCommandfeedback = Config.GetProperty("GameRule.SendCommandfeedback", true), RandomTickSpeed = Config.GetProperty("GameRule.RandomTickSpeed", 3), }; level.Initialize(); //if (Config.GetProperty("CalculateLights", false)) //{ // { // AnvilWorldProvider wp = level.WorldProvider as AnvilWorldProvider; // if (wp != null) // { // wp.Locked = true; //// wp.PruneAir(); //// wp.MakeAirChunksAroundWorldToCompensateForBadRendering(); // Stopwatch sw = new Stopwatch(); // var chunkCount = 0; // sw.Restart(); // SkyLightCalculations.Calculate(level); // sw.Stop(); // chunkCount = wp._chunkCache.Where(chunk => chunk.Value != null).ToArray().Length; // Log.Debug($"Recalculated sky light for {chunkCount} chunks, {chunkCount * 16 * 16 * 256} blocks. Time {sw.ElapsedMilliseconds}ms"); // int count = wp.LightSources.Count; // sw.Restart(); // RecalculateBlockLight(level, wp); // chunkCount = wp._chunkCache.Where(chunk => chunk.Value != null).ToArray().Length; // Log.Debug($"Recalculated sky and block light for {chunkCount} chunks, {chunkCount * 16 * 16 * 256} blocks and {count} light sources. Time {sw.ElapsedMilliseconds}ms. Touched {BlockLightCalculations.touches}"); // wp.Locked = false; // } // } //} Levels.Add(level); OnLevelCreated(new LevelCancelEventArgs(null, level)); } return(level); }