Skip to main content

PointOfInterestStorage

Struct PointOfInterestStorage 

Source
pub struct PointOfInterestStorage {
    columns: FxHashMap<ChunkPos, FxHashMap<i32, PointOfInterestSet>>,
}
Expand description

World-level storage for all points of interest.

Organized as a two-level map: ChunkPos -> section_y -> PointOfInterestSet. This structure mirrors chunk lifecycle (load/unload per column) and provides efficient spatial queries by narrowing to relevant columns first.

Fields§

§columns: FxHashMap<ChunkPos, FxHashMap<i32, PointOfInterestSet>>

Implementations§

Source§

impl PointOfInterestStorage

Source

pub fn new() -> Self

Creates an empty POI storage.

Source

fn get_or_create_set( &mut self, chunk_pos: ChunkPos, section_y: i32, ) -> &mut PointOfInterestSet

Source

pub fn add(&mut self, pos: BlockPos, poi_type_id: usize, max_tickets: u32)

Adds a POI at the given block position.

Source

pub fn remove(&mut self, pos: BlockPos)

Removes the POI at the given block position.

Source

pub fn get_type(&self, pos: BlockPos) -> Option<usize>

Returns the POI type ID at the given position, if any.

Source

pub fn is_occupied(&self, pos: BlockPos) -> bool

Returns true if the POI at the given position has all tickets reserved.

Source

pub fn reserve_ticket(&mut self, pos: BlockPos) -> bool

Reserves a ticket at the given position. Returns true if successful.

Source

pub fn release_ticket(&mut self, pos: BlockPos) -> bool

Releases a ticket at the given position. Returns true if successful.

Source

pub fn get_in_chunk( &self, type_predicate: &impl Fn(usize) -> bool, chunk_x: i32, chunk_z: i32, status: OccupationStatus, ) -> Vec<(BlockPos, usize)>

Returns all matching POIs in a specific chunk column.

Source

pub fn get_in_square( &self, type_predicate: &impl Fn(usize) -> bool, center: BlockPos, radius: i32, status: OccupationStatus, ) -> Vec<(BlockPos, usize)>

Returns all matching POIs within a cubic region centered on center.

Source

pub fn get_in_horizontal_square( &self, type_predicate: &impl Fn(usize) -> bool, center: BlockPos, radius: i32, status: OccupationStatus, ) -> Vec<(BlockPos, usize)>

Returns all matching POIs within a vanilla horizontal square centered on center.

Mirrors PoiManager.getInSquare: X/Z are constrained by radius, while Y is not.

Source

pub fn count( &self, type_predicate: &impl Fn(usize) -> bool, pos: BlockPos, radius: i32, status: OccupationStatus, ) -> usize

Counts matching POIs within a spherical region.

Source

fn count_in_square( &self, type_predicate: &impl Fn(usize) -> bool, center: BlockPos, radius: i32, status: OccupationStatus, filter: &impl Fn(BlockPos) -> bool, ) -> usize

Counts matching POIs within a cubic region, filtered by an additional predicate.

Source

pub fn scan_and_populate( &mut self, section: &ChunkSection, section_pos: SectionPos, )

Scans a chunk section for POI block states and populates the storage.

§Panics

Panics if the POI type registry contains an inconsistent state-to-type mapping.

Source

pub fn on_block_state_change( &mut self, pos: BlockPos, old_state: BlockStateId, new_state: BlockStateId, )

Updates POI storage when a block state changes.

§Panics

Panics if the POI type registry contains an inconsistent state-to-type mapping.

Source

pub fn collect_for_chunk(&self, chunk_pos: ChunkPos) -> Vec<(BlockPos, u32)>

Collects all POI data in a chunk column for persistence.

Returns (BlockPos, free_tickets) for each POI.

Source

pub fn restore_tickets( &mut self, chunk_pos: ChunkPos, tickets: &[(BlockPos, u32)], )

Restores ticket state for POIs after loading from disk.

Called after scan_and_populate has created fresh POIs from block states. Applies saved free_tickets values to matching positions.

Source

pub fn remove_chunk(&mut self, chunk_pos: ChunkPos)

Removes all POI data for a chunk column. Called during chunk unload.

Trait Implementations§

Source§

impl Default for PointOfInterestStorage

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