lightyear icon indicating copy to clipboard operation
lightyear copied to clipboard

`bevy_ecs::world: error[B0003]` when running `OnDisconnect` schedule

Open SK83RJOSH opened this issue 6 months ago • 5 comments

Hello again!

We've run into an issue with our odd use case again, which is that a client owned entity:

commands.spawn((
    OwnedEntity {
        OwnerId(local_client_id),
        Replicate {
            group: ReplicationGroup::new_id(local_client_id.to_bits()),
            ..default()
        }
    },
));

Which is replicated by the server:

fn replicate_owned_entities(
    mut commands: Commands,
    mut owned_entities_reader: EventReader<ComponentInsertEvent<OwnerId>>,
) {
    for event in owned_entities_reader.read() {
        info!("received owned entity: {:?}", event);
        let client_id = event.context();
        let entity = event.entity();

        if let Some(mut e) = commands.get_entity(entity) {
            e.insert(Replicate {
                target: ReplicationTarget {
                    target: NetworkTarget::AllExceptSingle(*client_id),
                },
                sync: SyncTarget {
                    prediction: NetworkTarget::None,
                    interpolation: NetworkTarget::AllExceptSingle(*client_id),
                },
                controlled_by: ControlledBy {
                    target: NetworkTarget::Single(*client_id),
                    ..default()
                },
                group: ReplicationGroup::new_id(client_id.to_bits()),
                ..default()
            });
        }
    }
}

Doesn't get cleaned up correctly on the owning client when disconnecting:

2024-08-13T08:17:48.411008Z  INFO lightyear::client::networking: Running OnDisconnect schedule
2024-08-13T08:17:48.412883Z  WARN bevy_ecs::world: error[B0003]: Could not despawn entity Entity { index: 54, generation: 2 } because it doesn't exist in this World. See: https://bevyengine.org/learn/errors/#b0003

Which then leads to the owned entity getting replicated back to the server if that client connects again in the future.

SK83RJOSH avatar Aug 13 '24 08:08 SK83RJOSH