use yog_data::with::Opt;
use yog_data::{Schema, Text};
mod block;
mod item;
mod kind;
mod model;
mod refs;
pub use block::{BlockProps, BlockShape, DropCount, DropItem, Drops, RenderLayer, TriggeredBy};
pub use item::{ArmorProps, BlockItemProps, Food, HangsProps, ItemProps, PotionProps, ToolProps};
pub use kind::{BlockKind, KIND_FIELDS, KindModel, KindPart, KindRef};
pub use model::{
Axis, Connect, Display, Element, ElementRotation, Face, Faces, Facing, GuiLight, Model,
ModelNames, Placement, Rotation, SLOT_MARK, States, Texture, Transform,
};
pub use refs::{
BlockTag, LevelRef, MaterialKind, MaterialRef, OneOrMany, SoundRef, ToolKindRef, ToolTag,
};
#[derive(Schema, Debug, Clone, Copy, PartialEq, Eq, Default)]
pub enum Register {
#[default]
Auto,
Manual,
}
pub fn word<T: Schema>(v: &T) -> String {
v.write().as_str().unwrap_or_default().to_string()
}
#[derive(Schema, Debug, Clone)]
pub struct ItemFile {
pub format: Option<u32>,
pub id: Option<String>,
pub name: Option<Text>,
pub tooltip: Option<Text>,
pub register: Option<Register>,
#[data(default)]
pub requires: Vec<String>,
#[data(default)]
pub tags: Vec<String>,
pub model: Option<Model>,
pub item: Option<ItemProps>,
}
#[derive(Schema, Debug, Clone)]
pub struct BlockFile {
pub format: Option<u32>,
pub id: Option<String>,
pub name: Option<Text>,
pub tooltip: Option<Text>,
pub register: Option<Register>,
#[data(default)]
pub requires: Vec<String>,
#[data(default)]
pub tags: Vec<String>,
#[data(with = "Opt<KindRef>")]
pub kind: Option<String>,
pub model: Model,
pub item_model: Option<Model>,
pub item: Option<BlockItemProps>,
pub block: Option<BlockProps>,
pub states: Option<States>,
}