Skip to main content

EntityTracker

Struct EntityTracker 

Source
pub struct EntityTracker {
    entities: HashMap<i32, TrackedEntity>,
}
Expand description

World-level entity tracker.

Fields§

§entities: HashMap<i32, TrackedEntity>

Maps entity ID to its tracking data.

Implementations§

Source§

impl EntityTracker

Source

pub fn new() -> Self

Creates a new empty entity tracker.

Source

pub fn add( &self, entity: &SharedEntity, get_players_in_chunk: impl Fn(ChunkPos) -> Vec<i32>, get_player: impl Fn(i32) -> Option<Arc<Player>>, )

Starts tracking an entity.

Sends spawn packets to players already watching the entity chunk and inside the vanilla tracking range.

The get_players_in_chunk callback should return player IDs in a given chunk (typically from PlayerAreaMap::get_tracking_players). The get_player callback should resolve a player ID to a Player reference.

§Panics

Panics if the entity is removed or is already tracked.

Source

pub fn remove( &self, entity_id: i32, get_player: impl Fn(i32) -> Option<Arc<Player>>, )

Stops tracking an entity and sends despawn to all tracking players.

Source

pub fn update_player( &self, player: &Player, view: &PlayerChunkView, is_chunk_sent: impl Fn(ChunkPos) -> bool, )

Refreshes the tracked-entity set for one player.

Mirrors vanilla TrackedEntity.updatePlayer: each tracked entity checks whether the player tracks the entity chunk, passes the entity-specific broadcast predicate, and is inside the effective horizontal range.

Source

pub fn send_changes<Movement, SelfMovement, EntityData, Attributes, MobEffects, Equipment, Passengers, EntityLink>( &self, get_players_in_chunk: impl Fn(ChunkPos) -> Vec<i32>, get_player: impl Fn(i32) -> Option<Arc<Player>>, senders: EntityChangeSenders<Movement, SelfMovement, EntityData, Attributes, MobEffects, Equipment, Passengers, EntityLink>, )
where Movement: FnMut(i32, EntityMovementSyncPacket), SelfMovement: FnMut(i32, EntityMovementSyncPacket), EntityData: FnMut(i32, Vec<DataValue>), Attributes: FnMut(i32, Vec<AttributeSnapshot>), MobEffects: FnMut(i32, MobEffectSyncPacket), Equipment: FnMut(i32, CSetEquipment), Passengers: FnMut(i32, CSetPassengers), EntityLink: FnMut(i32, CSetEntityLink),

Sends tracker-owned movement changes for all tracked entities.

Mirrors vanilla ChunkMap.tick driving ServerEntity.sendChanges.

Source

pub fn on_player_leave(&self, player: &Player)

Removes a player from every entity pairing and despawns those entities from their client.

Mirrors vanilla ChunkMap.removeEntity calling TrackedEntity.removePlayer for each tracked entity before the player leaves the world.

Source

pub fn on_entity_section_change( &self, entity_id: i32, old_chunk: ChunkPos, new_chunk: ChunkPos, get_players_in_chunk: impl Fn(ChunkPos) -> Vec<i32>, get_player: impl Fn(i32) -> Option<Arc<Player>>, )

Updates an entity’s current chunk and visible players after a section move.

Vanilla refreshes tracked players when an entity’s section position changes. The old and new chunks may be the same for purely vertical section moves.

Source

fn refresh_entity_players( &self, entity_id: i32, get_players_in_chunk: &impl Fn(ChunkPos) -> Vec<i32>, get_player: &impl Fn(i32) -> Option<Arc<Player>>, )

Source

pub fn count(&self) -> usize

Gets the number of tracked entities.

Source

pub fn tracking_player_ids(&self, entity_id: i32) -> Vec<i32>

Returns players currently tracking an entity.

Source

fn remove_dead_entity(&self, entity_id: i32)

Source

fn visible_players_for_entity( entity_id: i32, entity: &dyn Entity, entity_chunk: ChunkPos, tracking_range: EntityTrackingRange, get_players_in_chunk: &impl Fn(ChunkPos) -> Vec<i32>, get_player: &impl Fn(i32) -> Option<Arc<Player>>, ) -> FxHashSet<i32>

Source

fn send_spawn_packets(&self, entity: &SharedEntity, player: &Player)

Source

fn spawn_pairing( &self, entity: &SharedEntity, player_id: i32, ) -> EntitySpawnPairing

Source

fn passenger_pairing_packets_for_player( &self, entity: &dyn Entity, player_id: i32, ) -> Vec<CSetPassengers>

Source

fn vehicle_passenger_packet_for_player( &self, entity: &dyn Entity, player_id: i32, ) -> Option<CSetPassengers>

Source

fn direct_tracked_passenger_ids(&self, entity: &dyn Entity) -> Vec<i32>

Source

fn direct_passenger_ids_seen_by_player( &self, entity: &dyn Entity, player_id: i32, ) -> Vec<i32>

Source

fn is_entity_tracked(&self, entity_id: i32) -> bool

Source

fn entity_seen_by_player(&self, entity_id: i32, player_id: i32) -> bool

Trait Implementations§

Source§

impl Default for EntityTracker

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> IntoShared for T

Source§

fn into_shared(self) -> Arc<Mutex<RawMutex, Self>> ⓘ

Wraps this value in an Arc<SyncMutex<>>
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more