Exemplo n.º 1
0
        public void RemoveBlockEntity(BlockCoordinates blockCoordinates)
        {
            ChunkColumn chunk = _worldProvider.GenerateChunkColumn(new ChunkCoordinates(blockCoordinates.X >> 4, blockCoordinates.Z >> 4));
            var         nbt   = chunk.GetBlockEntity(blockCoordinates);

            if (nbt == null)
            {
                return;
            }

            var blockEntity = BlockEntities.FirstOrDefault(entity => entity.Coordinates == blockCoordinates);

            if (blockEntity != null)
            {
                BlockEntities.Remove(blockEntity);
            }

            chunk.RemoveBlockEntity(blockCoordinates);
        }
Exemplo n.º 2
0
        public BlockEntity GetBlockEntity(BlockCoordinates blockCoordinates)
        {
            var blockEntity = BlockEntities.FirstOrDefault(entity => entity.Coordinates == blockCoordinates);

            if (blockEntity != null)
            {
                return(blockEntity);
            }

            ChunkColumn chunk = _worldProvider.GenerateChunkColumn(new ChunkCoordinates(blockCoordinates.X >> 4, blockCoordinates.Z >> 4));

            NbtCompound nbt = chunk?.GetBlockEntity(blockCoordinates);

            if (nbt == null)
            {
                return(null);
            }

            string id    = null;
            var    idTag = nbt.Get("id");

            if (idTag != null)
            {
                id = idTag.StringValue;
            }

            if (string.IsNullOrEmpty(id))
            {
                return(null);
            }

            blockEntity = BlockEntityFactory.GetBlockEntityById(id);
            if (blockEntity == null)
            {
                return(null);
            }

            blockEntity.Coordinates = blockCoordinates;
            blockEntity.SetCompound(nbt);

            return(blockEntity);
        }