use std::{borrow::Cow, collections::HashMap};
#[cfg(feature = "block-states")]
#[macro_use]
mod macros;
#[cfg(feature = "block-states")]
pub(crate) mod list;
pub trait BlockState: Clone + PartialEq + Sized {
fn air() -> Self;
}
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "serde", serde(rename_all = "PascalCase"))]
pub struct GenericBlockState {
pub name: Cow<'static, str>,
#[cfg_attr(feature = "serde", serde(default))]
pub properties: HashMap<Cow<'static, str>, Cow<'static, str>>,
}
impl BlockState for GenericBlockState {
fn air() -> Self {
Self {
name: "minecraft:air".into(),
properties: HashMap::new(),
}
}
}
impl BlockState for fastnbt::Value {
fn air() -> Self {
fastnbt::nbt!({ "Name": "minecraft:air" })
}
}