diff options
| -rw-r--r-- | azalea-client/src/client.rs | 42 |
1 files changed, 22 insertions, 20 deletions
diff --git a/azalea-client/src/client.rs b/azalea-client/src/client.rs index c7094eb2..dde6ffd3 100644 --- a/azalea-client/src/client.rs +++ b/azalea-client/src/client.rs @@ -53,7 +53,7 @@ use azalea_protocol::{ }, resolver, ServerAddress, }; -use azalea_world::{Instance, InstanceContainer, InstanceName}; +use azalea_world::{Instance, InstanceContainer, InstanceName, PartialInstance}; use bevy_app::{App, FixedUpdate, Plugin, PluginGroup, PluginGroupBuilder, Update}; use bevy_ecs::{ bundle::Bundle, @@ -425,16 +425,6 @@ impl Client { }); } - pub fn local_player<'a>(&'a self, ecs: &'a mut World) -> &'a InstanceHolder { - self.query::<&InstanceHolder>(ecs) - } - pub fn local_player_mut<'a>( - &'a self, - ecs: &'a mut World, - ) -> bevy_ecs::world::Mut<'a, InstanceHolder> { - self.query::<&mut InstanceHolder>(ecs) - } - pub fn raw_connection<'a>(&'a self, ecs: &'a mut World) -> &'a RawConnection { self.query::<&RawConnection>(ecs) } @@ -468,17 +458,29 @@ impl Client { self.query::<Option<&T>>(&mut self.ecs.lock()).cloned() } - /// Get a reference to our (potentially shared) world. + /// Get an `RwLock` with a reference to our (potentially shared) world. /// - /// This gets the [`Instance`] from our world container. If it's a normal - /// client, then it'll be the same as the world the client has loaded. - /// If the client using a shared world, then the shared world will be a - /// superset of the client's world. + /// This gets the [`Instance`] from the client's [`InstanceHolder`] + /// component. If it's a normal client, then it'll be the same as the + /// world the client has loaded. If the client is using a shared world, + /// then the shared world will be a superset of the client's world. pub fn world(&self) -> Arc<RwLock<Instance>> { - let world_name = self.component::<InstanceName>(); - let ecs = self.ecs.lock(); - let instance_container = ecs.resource::<InstanceContainer>(); - instance_container.get(&world_name).unwrap() + let instance_holder = self.component::<InstanceHolder>(); + instance_holder.instance.clone() + } + + /// Get an `RwLock` with a reference to the world that this client has + /// loaded. + /// + /// ``` + /// # use azalea_core::position::ChunkPos; + /// # fn example(client: &azalea_client::Client) { + /// let world = client.partial_world(); + /// let is_0_0_loaded = world.read().chunks.in_range(&ChunkPos::new(0, 0)); + /// # } + pub fn partial_world(&self) -> Arc<RwLock<PartialInstance>> { + let instance_holder = self.component::<InstanceHolder>(); + instance_holder.partial_instance.clone() } /// Returns whether we have a received the login packet yet. |
