Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
        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);
        }