You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: block.rs
    path of file: ./repos/feather/feather/old/server/player/src/broadcasters
    
    the code of the file until where you have to start completion: //! Broadcasting of block updates, i.e. when a block is changed to another.

use crate::packet_handlers::Digging;
use crate::{FinishDiggingEvent, StartDiggingEvent};
use feather_core::network::packets::{BlockBreakAnimation, BlockChange, Effect};
use feather_server_types::{BlockUpdateCause, BlockUpdateEvent, BumpVec, Game, NetworkId};
use fecs::{IntoQuery, Read, World, Write};

/// System for broadcasting block update
/// events to all clients.
#[fecs::event_handler]
pub fn on_block_update_broadcast(event: &BlockUpdateEvent, game: &mut Game, world: &mut World) {
    // Broadcast Block Change packet.
    let packe
    
pub fn broadcast_block_break_animation(game: &mut Game, world: &mut World) {
    let mut broadcasts = BumpVec::new_in(game.bump());
    for (entity, (digging, entity_id, mut last_destroy_stage)) in
        <(Read<Digging>, Read<NetworkId>, Write<LastDestroyStage>)>::query()
            .iter_entities_mut(world.inner_mut())
    {
        let destroy_stage = ((digging.progress / digging.time) * 9.0).floor().min(9.0) as i8;
        if destroy_stage == last_destroy_stage.0 {
            return; // no new data to send
        }
        last_destroy_stage.0 = destroy_stage;

        let packet = BlockBreakAnimation {
            entity_id: entity_id.0,
            location: digging.pos,
            destroy_stage,
        };
        broadcasts.push((packet, entity));
    }

    for (packet, entity) in broadcasts {
        game.broadcast_entity_update(world, packet, entity, Some(entity));
    }
}