lightyear
lightyear copied to clipboard
`bevy_ecs::world: error[B0003]` when running `OnDisconnect` schedule
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.