Esempio n. 1
0
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            // TODO doesn't work anymore I guess
            if (Client.IsEmulator)
            {
                return;
            }

            if (Client._chunks.TryAdd(new Tuple <int, int>(message.chunkX, message.chunkZ), null))
            {
                Log.Debug($"Chunk X={message.chunkX}, Z={message.chunkZ}, size={message.chunkData.Length}, Count={Client._chunks.Count}");

                try
                {
                    ChunkColumn chunk = ClientUtils.DecodeChunkColumn((int)message.subChunkCount, message.chunkData);
                    if (chunk != null)
                    {
                        chunk.x = message.chunkX;
                        chunk.z = message.chunkZ;
                        Log.DebugFormat("Chunk X={0}, Z={1}", chunk.x, chunk.z);
                        foreach (KeyValuePair <BlockCoordinates, NbtCompound> blockEntity in chunk.BlockEntities)
                        {
                            Log.Debug($"Blockentity: {blockEntity.Value}");
                        }

                        //ClientUtils.SaveChunkToAnvil(chunk);
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Reading chunk", e);
                }
            }
        }
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            var coord      = new ChunkCoordinates(message.chunkX, message.chunkZ);
            int chunkCount = (int)message.subChunkCount;

            byte[] data = message.chunkData;

            Client.Chunks.GetOrAdd(coord, _ =>
            {
                ChunkColumn chunk = null;
                try
                {
                    chunk = ClientUtils.DecodeChunkColumn(chunkCount, data, BlockPalette, _internalStates);
                    if (chunk != null)
                    {
                        chunk.X = coord.X;
                        chunk.Z = coord.Z;
                        chunk.RecalcHeight();
                    }
                }
                catch (Exception e)
                {
                    Log.Error($"Reading chunk {coord}", e);
                }

                return(chunk);
            });
        }
Esempio n. 3
0
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            // TODO doesn't work anymore I guess
            if (Client.IsEmulator)
            {
                return;
            }

            if (message.cacheEnabled)
            {
                var hits = new ulong[message.blobHashes.Length];

                for (int i = 0; i < message.blobHashes.Length; i++)
                {
                    ulong hash = message.blobHashes[i];
                    hits[i] = hash;
                    Log.Debug($"Got hashes for {message.chunkX}, {message.chunkZ}, {hash}");
                }

                var status = McpeClientCacheBlobStatus.CreateObject();
                status.hashHits = hits;
                Client.SendPacket(status);
            }
            else
            {
                Client.Chunks.GetOrAdd(new ChunkCoordinates(message.chunkX, message.chunkZ), coordinates =>
                {
                    Log.Debug($"Chunk X={message.chunkX}, Z={message.chunkZ}, size={message.chunkData.Length}, Count={Client.Chunks.Count}");

                    ChunkColumn chunk = null;
                    try
                    {
                        chunk = ClientUtils.DecodeChunkColumn((int)message.subChunkCount, message.chunkData);
                        if (chunk != null)
                        {
                            chunk.X = coordinates.X;
                            chunk.Z = coordinates.Z;
                            chunk.RecalcHeight();
                            Log.DebugFormat("Chunk X={0}, Z={1}", chunk.X, chunk.Z);
                            foreach (KeyValuePair <BlockCoordinates, NbtCompound> blockEntity in chunk.BlockEntities)
                            {
                                Log.Debug($"Blockentity: {blockEntity.Value}");
                            }
                        }
                    }
                    catch (Exception e)
                    {
                        Log.Error("Reading chunk", e);
                    }

                    return(chunk);
                });
            }
        }
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            if (message.cacheEnabled)
            {
                var chunk = new CachedChunk
                {
                    X = message.chunkX,
                    Z = message.chunkZ,
                };
                chunk.Chunk.X = chunk.X;
                chunk.Chunk.Z = chunk.Z;

                var hits   = new List <ulong>();
                var misses = new List <ulong>();

                ulong biomeHash = message.blobHashes.Last();
                if (Client.BlobCache.TryGetValue(biomeHash, out byte[] biomes))
        public override void HandleMcpeLevelChunk(McpeLevelChunk msg)
        {
            var cacheEnabled  = msg.cacheEnabled;
            var subChunkCount = msg.subChunkCount;
            var chunkData     = msg.chunkData;
            var cx            = msg.chunkX;
            var cz            = msg.chunkZ;

            msg.PutPool();

            //if (chunkData[0] < 1)
            if (subChunkCount < 1)
            {
                //Nothing to read.
                return;
            }

            ChunkProcessor.HandleChunkData(cacheEnabled, subChunkCount, chunkData, cx, cz, BaseClient.ChunkReceived);
        }
Esempio n. 6
0
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            if (!Client._chunks.ContainsKey(new Tuple <int, int>(message.chunkX, message.chunkZ)))
            {
                //Log.Debug($"Chunk X={message.chunkX}, Z={message.chunkZ}, size={message.chunkData.Length}, Count={Client._chunks.Count}");

                try
                {
                    ChunkColumn chunk = ClientUtils.DecodeChunkColumn((int)message.subChunkCount, message.chunkData, _blockPallet, _internalStates);
                    if (chunk != null)
                    {
                        chunk.x = message.chunkX;
                        chunk.z = message.chunkZ;
                        chunk.RecalcHeight();
                        Client._chunks.TryAdd(new Tuple <int, int>(message.chunkX, message.chunkZ), chunk);
                        //Log.Debug($"Added parsed bedrock chunk X={chunk.x}, Z={chunk.z}");
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Reading chunk", e);
                }
            }
        }
Esempio n. 7
0
        public override void HandleMcpeLevelChunk(McpeLevelChunk message)
        {
            // TODO doesn't work anymore I guess
            if (Client.IsEmulator)
            {
                return;
            }

            Client.Chunks.GetOrAdd(new ChunkCoordinates(message.chunkX, message.chunkZ), coordinates =>
            {
                Log.Debug($"Chunk X={message.chunkX}, Z={message.chunkZ}, size={message.chunkData.Length}, Count={Client.Chunks.Count}");

                ChunkColumn chunk = null;
                try
                {
                    chunk = ClientUtils.DecodeChunkColumn((int)message.subChunkCount, message.chunkData);
                    if (chunk != null)
                    {
                        chunk.X = coordinates.X;
                        chunk.Z = coordinates.Z;
                        chunk.RecalcHeight();
                        Log.DebugFormat("Chunk X={0}, Z={1}", chunk.X, chunk.Z);
                        foreach (KeyValuePair <BlockCoordinates, NbtCompound> blockEntity in chunk.BlockEntities)
                        {
                            Log.Debug($"Blockentity: {blockEntity.Value}");
                        }
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Reading chunk", e);
                }

                return(chunk);
            });
        }
Esempio n. 8
0
 public virtual void HandleMcpeLevelChunk(McpeLevelChunk message)
 {
 }
 public abstract void HandleMcpeLevelChunk(McpeLevelChunk message);
 public abstract void HandleMcpeFullChunkData(McpeLevelChunk message);