예제 #1
0
        public static AnvilWorldProvider GetLevelProvider(LevelManager levelManager, string levelDir, bool readOnly = true, bool insulate = true, bool cache = true)
        {
            ProviderCache.TryGetValue(levelDir, out var provider);

            if (provider != null)
            {
                return(readOnly ? provider : (AnvilWorldProvider)provider.Clone());
            }

            provider = new AnvilWorldProvider(levelDir);

            var level = new CacheLevel(levelManager, "cache", provider, new EntityManager(), viewDistance: 20)
            {
                EnableBlockTicking = false,
                EnableChunkTicking = false
            };

            level.Initialize();

            RecalculateLight(level, provider);

            level.Close();

            provider.PruneAir();
            provider.MakeAirChunksAroundWorldToCompensateForBadRendering();

            if (insulate)
            {
                InsulateChunks(provider);
            }
            if (cache)
            {
                ProviderCache.Add(levelDir, provider);
            }

            return(readOnly ? provider : (AnvilWorldProvider)provider.Clone());
        }