Skip to main content

Position

Struct Position 

Source
pub struct Position {
    pub x: i32,
    pub y: i32,
    pub z: i32,
}
Expand description

A packed block position encoded as a single 64-bit integer.

The Minecraft protocol packs three spatial coordinates into one i64 to minimize bandwidth for the most common spatial reference in the game. Used in packets like block changes, player digging, block placement, sign updates, and many more.

Bit layout (MSB to LSB):

  • x: 26 bits (signed, range -33554432 to 33554431)
  • z: 26 bits (signed, range -33554432 to 33554431)
  • y: 12 bits (signed, range -2048 to 2047)

Encoding: (x & 0x3FFFFFF) << 38 | (z & 0x3FFFFFF) << 12 | (y & 0xFFF)

Fields§

§x: i32§y: i32§z: i32

Implementations§

Source§

impl Position

Source

pub fn new(x: i32, y: i32, z: i32) -> Self

Creates a new position from block coordinates.

Trait Implementations§

Source§

impl Clone for Position

Source§

fn clone(&self) -> Position

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Position

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Decode for Position

Decodes a Position from a packed 64-bit big-endian integer.

Reads 8 bytes as a big-endian i64, then unpacks x (26 bits), z (26 bits), and y (12 bits) with proper sign extension for negative coordinates.

Source§

fn decode(buf: &mut &[u8]) -> Result<Self>

Reads 8 big-endian bytes, unpacks into x, y, z with sign extension.

Fails with Error::BufferUnderflow if fewer than 8 bytes remain.

Source§

impl Default for Position

Source§

fn default() -> Position

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

impl Encode for Position

Encodes a Position as a packed 64-bit big-endian integer.

The three coordinates are packed into a single i64 using the bit layout described on the type. The packed value is then written as 8 big-endian bytes, matching the Minecraft protocol wire format.

Source§

fn encode(&self, buf: &mut Vec<u8>) -> Result<()>

Packs x, y, z into a 64-bit integer and writes it as 8 big-endian bytes.

Source§

impl EncodedSize for Position

A Position always occupies exactly 8 bytes on the wire (one packed i64).

Source§

impl From<BlockPosition> for Position

Converts a BlockPosition into a Position for wire serialization.

Coordinates outside the Position range (x/z: 26-bit signed, y: 12-bit signed) will be silently truncated during packing.

Source§

fn from(pos: BlockPosition) -> Self

Converts to this type from the input type.
Source§

impl From<Position> for BlockPosition

Converts a Position (packed wire format) into a BlockPosition (full i32 coordinates).

Source§

fn from(pos: Position) -> Self

Converts to this type from the input type.
Source§

impl Hash for Position

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl PartialEq for Position

Source§

fn eq(&self, other: &Position) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Copy for Position

Source§

impl Eq for Position

Source§

impl StructuralPartialEq for Position

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.