Skip to main content

ComponentData

Enum ComponentData 

Source
#[non_exhaustive]
pub enum ComponentData { Empty, Bool(bool), I32(i32), Float(f32), Tool(Tool), Equippable(Equippable), Enchantments(ItemEnchantments), TextComponent(Box<TextComponent>), Todo, Other(Vec<u8>), }
Expand description

ABI-stable component value storage.

Each vanilla component type gets its own variant for type-safe, zero-cost access. Plugin-defined components use the Other variant with serialized bytes that the plugin is responsible for interpreting.

§Example (vanilla code)

let data = ComponentData::I32(10);
if let ComponentData::I32(d) = data {
    println!("Value: {}", d);
}

§Example (plugin code)

// Plugin stores its own serialized data
let my_bytes = my_energy.serialize();
let data = ComponentData::Other(my_bytes);

// Plugin retrieves and deserializes
if let ComponentData::Other(bytes) = data {
    let energy = MyEnergy::deserialize(&bytes)?;
}

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Empty

Component with no data (e.g., Unbreakable, Glider, CreativeSlotLock)

§

Bool(bool)

Boolean component (e.g., EnchantmentGlintOverride)

§

I32(i32)

i32 component (e.g., MaxStackSize, MaxDamage, Damage, RepairCost) Stored as VarInt on network.

§

Float(f32)

Float component (e.g., PotionDurationScale)

§

Tool(Tool)

minecraft:tool

§

Equippable(Equippable)

minecraft:equippable

§

Enchantments(ItemEnchantments)

minecraft:enchantments / minecraft:stored_enchantments

§

TextComponent(Box<TextComponent>)

TextComponent component (e.g., CustomName, ItemName)

§

Todo

Placeholder for components that aren’t implemented yet.

§

Other(Vec<u8>)

Opaque bytes for plugin-defined components. The plugin is responsible for serialization/deserialization.

Implementations§

Source§

impl ComponentData

Source

pub const fn is_empty(&self) -> bool

Returns true if this is the empty/unit variant.

Source

pub fn as_other(&self) -> Option<&[u8]>

Returns the raw bytes if this is an Other variant.

Source

pub const fn discriminant(&self) -> ComponentDataDiscriminant

Returns the discriminant of this component data variant. Used for runtime type validation.

Source

pub fn compute_hash(&self) -> i32

Computes a hash of this component value for validation.

Uses CRC32C hashing matching Minecraft’s HashOps implementation.

Trait Implementations§

Source§

impl Clone for ComponentData

Source§

fn clone(&self) -> ComponentData

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for ComponentData

Source§

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

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

impl PartialEq for ComponentData

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 StructuralPartialEq for ComponentData

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<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> 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.
§

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