diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2022-06-17 23:10:54 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-06-17 23:10:54 +0000 |
| commit | f414aa4d37e0c6a7adf55b772fa93714be6e9c9c (patch) | |
| tree | 8cfb7d33114b9537b50477d5d6980995eec6cc5c /azalea-block | |
| parent | 56f98c1b243d1ba8906ac73a2f2d8eec5646183e (diff) | |
| parent | 0a945e73ec43b3b0389e004e138c83f41cddc532 (diff) | |
| download | azalea-drasl-f414aa4d37e0c6a7adf55b772fa93714be6e9c9c.tar.xz | |
Merge pull request #9 from mat-1/azalea-block
azalea-block
Diffstat (limited to 'azalea-block')
| -rw-r--r-- | azalea-block/Cargo.toml | 11 | ||||
| -rw-r--r-- | azalea-block/README.md | 8 | ||||
| -rw-r--r-- | azalea-block/block-macros/Cargo.toml | 14 | ||||
| -rw-r--r-- | azalea-block/block-macros/src/lib.rs | 496 | ||||
| -rw-r--r-- | azalea-block/block-macros/src/utils.rs | 42 | ||||
| -rw-r--r-- | azalea-block/src/behavior.rs | 12 | ||||
| -rw-r--r-- | azalea-block/src/blocks.rs | 4954 | ||||
| -rw-r--r-- | azalea-block/src/lib.rs | 47 |
8 files changed, 5584 insertions, 0 deletions
diff --git a/azalea-block/Cargo.toml b/azalea-block/Cargo.toml new file mode 100644 index 00000000..edeba385 --- /dev/null +++ b/azalea-block/Cargo.toml @@ -0,0 +1,11 @@ +[package] +edition = "2021" +name = "azalea-block" +version = "0.1.0" + +[lib] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +block-macros = {path = "./block-macros"} diff --git a/azalea-block/README.md b/azalea-block/README.md new file mode 100644 index 00000000..39843ef4 --- /dev/null +++ b/azalea-block/README.md @@ -0,0 +1,8 @@ +# Azalea Block + +Representation of Minecraft block states. + +There's two main things here, the `BlockState` enum and the `Block` trait. +`BlockState` is a simple enum with every possible block state as variant, and `Block` is a heavier trait which lets you access information about a block more easily. + +Every block is a struct that implements `Block`. You can freely convert between `BlockState` and `Block` with .into(). diff --git a/azalea-block/block-macros/Cargo.toml b/azalea-block/block-macros/Cargo.toml new file mode 100644 index 00000000..03b19e1d --- /dev/null +++ b/azalea-block/block-macros/Cargo.toml @@ -0,0 +1,14 @@ +[package] +edition = "2021" +name = "block-macros" +version = "0.1.0" + +[lib] +proc-macro = true + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +proc-macro2 = "1.0.39" +quote = "1.0.18" +syn = "1.0.95" diff --git a/azalea-block/block-macros/src/lib.rs b/azalea-block/block-macros/src/lib.rs new file mode 100644 index 00000000..6206bb65 --- /dev/null +++ b/azalea-block/block-macros/src/lib.rs @@ -0,0 +1,496 @@ +mod utils; + +use proc_macro::TokenStream; +use quote::quote; +use std::collections::HashMap; +use syn::{ + self, braced, + parse::{Parse, ParseStream, Result}, + parse_macro_input, + punctuated::Punctuated, + Expr, Ident, LitStr, Token, +}; +use utils::{combinations_of, to_pascal_case}; + +struct PropertyDefinition { + name: LitStr, + struct_name: Ident, + variants: Punctuated<Ident, Token![,]>, +} +struct PropertyDefinitions { + properties: Vec<PropertyDefinition>, +} + +struct PropertyAndDefault { + struct_name: Ident, + default: Ident, +} +struct PropertyWithNameAndDefault { + name: String, + struct_name: Ident, + default: Ident, +} +struct BlockDefinition { + name: Ident, + behavior: Expr, + properties_and_defaults: Vec<PropertyAndDefault>, +} +impl PropertyAndDefault { + fn into_property_with_name_and_default(&self, name: String) -> PropertyWithNameAndDefault { + PropertyWithNameAndDefault { + name, + struct_name: self.struct_name.clone(), + default: self.default.clone(), + } + } +} +struct BlockDefinitions { + blocks: Vec<BlockDefinition>, +} +struct MakeBlockStates { + property_definitions: PropertyDefinitions, + block_definitions: BlockDefinitions, +} + +impl Parse for PropertyDefinition { + fn parse(input: ParseStream) -> Result<Self> { + // "face" => Face { + // Floor, + // Wall, + // Ceiling + // }, + + // if you're wondering, the reason it's in quotes is because `type` is + // a keyword in rust so if we don't put it in quotes it results in a + // syntax error + let name = input.parse()?; + input.parse::<Token![=>]>()?; + let struct_name = input.parse()?; + + let content; + braced!(content in input); + let variants = content.parse_terminated(Ident::parse)?; + + input.parse::<Token![,]>()?; + Ok(PropertyDefinition { + name, + struct_name, + variants, + }) + } +} + +impl Parse for PropertyDefinitions { + fn parse(input: ParseStream) -> Result<Self> { + let mut property_definitions = Vec::new(); + while !input.is_empty() { + property_definitions.push(input.parse()?); + } + + Ok(PropertyDefinitions { + properties: property_definitions, + }) + } +} + +impl Parse for BlockDefinition { + fn parse(input: ParseStream) -> Result<Self> { + // acacia_button => BlockBehavior::default(), { + // Facing=North, + // Powered=False, + // Face=Wall, + // }, + let name = input.parse()?; + input.parse::<Token![=>]>()?; + let behavior = input.parse()?; + + input.parse::<Token![,]>()?; + let content; + braced!(content in input); + + let mut properties_and_defaults = Vec::new(); + + loop { + let property = match content.parse() { + Ok(property) => property, + Err(_) => break, + }; + content.parse::<Token![=]>()?; + let property_default = content.parse()?; + properties_and_defaults.push(PropertyAndDefault { + struct_name: property, + default: property_default, + }); + if content.parse::<Token![,]>().is_err() { + break; + } + } + input.parse::<Token![,]>()?; + Ok(BlockDefinition { + name, + behavior, + properties_and_defaults, + }) + } +} + +impl Parse for BlockDefinitions { + fn parse(input: ParseStream) -> Result<Self> { + let mut blocks = Vec::new(); + while !input.is_empty() { + blocks.push(input.parse()?); + } + + Ok(BlockDefinitions { blocks }) + } +} + +impl Parse for MakeBlockStates { + fn parse(input: ParseStream) -> Result<Self> { + // Properties => { ... } Blocks => { ... } + let properties_ident = input.parse::<Ident>()?; + assert_eq!(properties_ident.to_string(), "Properties"); + input.parse::<Token![=>]>()?; + let content; + braced!(content in input); + let properties = content.parse()?; + + input.parse::<Token![,]>()?; + + let blocks_ident = input.parse::<Ident>()?; + assert_eq!(blocks_ident.to_string(), "Blocks"); + input.parse::<Token![=>]>()?; + let content; + braced!(content in input); + let blocks = content.parse()?; + + Ok(MakeBlockStates { + property_definitions: properties, + block_definitions: blocks, + }) + } +} + +#[proc_macro] +pub fn make_block_states(input: TokenStream) -> TokenStream { + let input = parse_macro_input!(input as MakeBlockStates); + + let mut property_enums = quote! {}; + let mut properties_map = HashMap::new(); + let mut property_struct_names_to_names = HashMap::new(); + + let mut state_id: usize = 0; + + for property in &input.property_definitions.properties { + let mut property_enum_variants = quote! {}; + let mut property_from_number_variants = quote! {}; + let mut property_enum_variant_names = Vec::new(); + + let property_struct_name = &property.struct_name; + + property_struct_names_to_names.insert( + property_struct_name.to_string(), + property.name.clone().value(), + ); + + for i in 0..property.variants.len() { + let variant = &property.variants[i]; + + let i_lit = syn::Lit::Int(syn::LitInt::new( + &i.to_string(), + proc_macro2::Span::call_site(), + )); + + property_enum_variants.extend(quote! { + #variant = #i_lit, + }); + + // i_lit is used here instead of i because otherwise it says 0size + // in the expansion and that looks uglier + property_from_number_variants.extend(quote! { + #i_lit => #property_struct_name::#variant, + }); + + property_enum_variant_names.push(variant.to_string()); + } + + property_enums.extend(quote! { + #[derive(Debug, Clone, Copy)] + pub enum #property_struct_name { + #property_enum_variants + } + + impl From<usize> for #property_struct_name { + fn from(value: usize) -> Self { + match value { + #property_from_number_variants + _ => panic!("Invalid property value: {}", value), + } + } + } + }); + properties_map.insert( + property_struct_name.to_string(), + property_enum_variant_names, + ); + } + + let mut block_state_enum_variants = quote! {}; + let mut block_structs = quote! {}; + let mut from_state_to_block_match = quote! {}; + for block in &input.block_definitions.blocks { + let block_property_names = &block + .properties_and_defaults + .iter() + .map(|p| p.struct_name.to_string()) + .collect::<Vec<_>>(); + let mut block_properties_vec = Vec::new(); + for property_name in block_property_names { + let property_variants = properties_map + .get(property_name) + .expect(format!("Property '{}' not found", property_name).as_str()) + .clone(); + block_properties_vec.push(property_variants); + } + + let mut properties_with_name: Vec<PropertyWithNameAndDefault> = + Vec::with_capacity(block.properties_and_defaults.len()); + for property in &block.properties_and_defaults { + let index: Option<usize> = if block + .properties_and_defaults + .iter() + .filter(|p| p.struct_name == property.struct_name) + .count() + > 1 + { + Some( + properties_with_name + .iter() + .filter(|p| p.struct_name == property.struct_name) + .count(), + ) + } else { + None + }; + let mut property_name = property_struct_names_to_names + .get(&property.struct_name.to_string()) + .expect(format!("Property '{}' is bad", property.struct_name).as_str()) + .clone(); + if let Some(index) = index { + property_name.push_str(&format!("_{}", &index.to_string())); + } + properties_with_name + .push(property.into_property_with_name_and_default(property_name.clone())); + } + + // pub face: properties::Face, + // pub facing: properties::Facing, + // pub powered: properties::Powered, + // or + // pub has_bottle_0: HasBottle, + // pub has_bottle_1: HasBottle, + // pub has_bottle_2: HasBottle, + let mut block_struct_fields = quote! {}; + for PropertyWithNameAndDefault { + struct_name, name, .. + } in &properties_with_name + { + // let property_name_snake = + // Ident::new(&property.to_string(), proc_macro2::Span::call_site()); + let name_ident = Ident::new(&name, proc_macro2::Span::call_site()); + block_struct_fields.extend(quote! { + pub #name_ident: #struct_name, + }) + } + + let block_name_pascal_case = Ident::new( + &to_pascal_case(&block.name.to_string()), + proc_macro2::Span::call_site(), + ); + let block_struct_name = Ident::new( + &format!("{}Block", block_name_pascal_case), + proc_macro2::Span::call_site(), + ); + + let mut from_block_to_state_match_inner = quote! {}; + + let first_state_id = state_id; + + // if there's no properties, then the block is just a single state + if block_properties_vec.len() == 0 { + block_state_enum_variants.extend(quote! { + #block_name_pascal_case, + }); + state_id += 1; + } + for combination in combinations_of(&block_properties_vec) { + state_id += 1; + let variant_name = Ident::new( + &format!( + "{}_{}", + block_name_pascal_case, + combination + .iter() + .map(|v| v.to_string()) + .collect::<Vec<String>>() + .join("") + ), + proc_macro2::Span::call_site(), + ); + block_state_enum_variants.extend(quote! { + #variant_name, + }); + + // face: properties::Face::Floor, + // facing: properties::Facing::North, + // powered: properties::Powered::True, + let mut from_block_to_state_combination_match_inner = quote! {}; + for i in 0..properties_with_name.len() { + let property = &properties_with_name[i]; + let property_name = &property.name; + let property_name_ident = Ident::new(property_name, proc_macro2::Span::call_site()); + let property_struct_name_ident = &property.struct_name; + let variant = + Ident::new(&combination[i].to_string(), proc_macro2::Span::call_site()); + + from_block_to_state_combination_match_inner.extend(quote! { + #property_name_ident: #property_struct_name_ident::#variant, + }); + } + + from_block_to_state_match_inner.extend(quote! { + #block_struct_name { + #from_block_to_state_combination_match_inner + } => BlockState::#variant_name, + }); + } + + // 7035..=7058 => { + // let b = b - 7035; + // &AcaciaButtonBlock { + // powered: Powered::from((b / 1) % 2), + // facing: Facing::from((b / 2) % 4), + // face: Face::from((b / 8) % 3), + // } + // } + let mut from_state_to_block_inner = quote! {}; + let mut division = 1usize; + for i in (0..properties_with_name.len()).rev() { + let PropertyWithNameAndDefault { + struct_name: property_struct_name_ident, + name: property_name, + .. + } = &properties_with_name[i]; + + let property_variants = &block_properties_vec[i]; + let property_variants_count = property_variants.len(); + let property_name_ident = Ident::new(property_name, proc_macro2::Span::call_site()); + from_state_to_block_inner.extend(quote! { + #property_name_ident: #property_struct_name_ident::from((b / #division) % #property_variants_count), + }); + + division *= property_variants_count; + } + + let last_state_id = state_id - 1; + from_state_to_block_match.extend(quote! { + #first_state_id..=#last_state_id => { + let b = b - #first_state_id; + Box::new(#block_struct_name { + #from_state_to_block_inner + }) + }, + }); + + let mut block_default_fields = quote! {}; + for PropertyWithNameAndDefault { + struct_name: struct_name_ident, + name, + default: property_default, + } in properties_with_name + { + let name_ident = Ident::new(&name, proc_macro2::Span::call_site()); + block_default_fields.extend(quote! { + #name_ident: #struct_name_ident::#property_default, + }) + } + + let block_behavior = &block.behavior; + let block_id = block.name.to_string(); + + let from_block_to_state_match = if block.properties_and_defaults.len() > 0 { + quote! { + match b { + #from_block_to_state_match_inner + } + } + } else { + quote! { BlockState::#block_name_pascal_case } + }; + + let block_struct = quote! { + #[derive(Debug)] + pub struct #block_struct_name { + #block_struct_fields + } + + impl Block for #block_struct_name { + fn behavior(&self) -> BlockBehavior { + #block_behavior + } + fn id(&self) -> &'static str { + #block_id + } + } + + impl From<#block_struct_name> for BlockState { + fn from(b: #block_struct_name) -> Self { + #from_block_to_state_match + } + } + + impl Default for #block_struct_name { + fn default() -> Self { + Self { + #block_default_fields + } + } + } + }; + + block_structs.extend(block_struct); + } + + let last_state_id = (state_id - 1) as u32; + quote! { + #property_enums + + #[repr(u32)] + #[derive(Copy, Clone, PartialEq, Eq, Debug)] + pub enum BlockState { + #block_state_enum_variants + } + + #block_structs + + impl From<BlockState> for Box<dyn Block> { + fn from(b: BlockState) -> Self { + let b = b as usize; + match b { + #from_state_to_block_match + _ => panic!("Invalid block state: {}", b), + } + } + } + + impl BlockState { + /// Returns the highest possible state + #[inline] + pub fn max_state() -> u32 { + #last_state_id + } + } + + } + .into() +} diff --git a/azalea-block/block-macros/src/utils.rs b/azalea-block/block-macros/src/utils.rs new file mode 100644 index 00000000..019fd60f --- /dev/null +++ b/azalea-block/block-macros/src/utils.rs @@ -0,0 +1,42 @@ +pub fn combinations_of<T: Clone>(items: &[Vec<T>]) -> Vec<Vec<T>> { + let mut combinations = Vec::new(); + if items.len() == 0 { + return combinations; + }; + if items.len() == 1 { + for item in &items[0] { + combinations.push(vec![item.clone()]); + } + return combinations; + }; + + for i in 0..items[0].len() { + let item = &items[0][i]; + for other_combinations in combinations_of(&items[1..]) { + let mut combination = Vec::new(); + combination.push(item.clone()); + combination.extend(other_combinations); + combinations.push(combination); + } + } + + combinations +} + +pub fn to_pascal_case(s: &str) -> String { + let mut result = String::new(); + let mut prev_was_underscore = true; // set to true by default so the first character is capitalized + for c in s.chars() { + if c == '_' { + prev_was_underscore = true; + } else { + if prev_was_underscore { + result.push(c.to_ascii_uppercase()); + prev_was_underscore = false; + } else { + result.push(c); + } + } + } + result +} diff --git a/azalea-block/src/behavior.rs b/azalea-block/src/behavior.rs new file mode 100644 index 00000000..949f3bd8 --- /dev/null +++ b/azalea-block/src/behavior.rs @@ -0,0 +1,12 @@ +#[derive(Default)] +pub struct BlockBehavior { + pub has_collision: bool, +} + +impl BlockBehavior { + #[inline] + pub fn no_collision(mut self) -> Self { + self.has_collision = false; + self + } +} diff --git a/azalea-block/src/blocks.rs b/azalea-block/src/blocks.rs new file mode 100644 index 00000000..05973797 --- /dev/null +++ b/azalea-block/src/blocks.rs @@ -0,0 +1,4954 @@ +use crate::BlockBehavior; +use block_macros::make_block_states; + +pub trait Block { + fn behavior(&self) -> BlockBehavior; + fn id(&self) -> &'static str; +} + +make_block_states! { + Properties => { + "snowy" => Snowy { + True, + False, + }, + "stage" => OakSaplingStage { + _0, + _1, + }, + "stage" => SpruceSaplingStage { + _0, + _1, + }, + "stage" => BirchSaplingStage { + _0, + _1, + }, + "stage" => JungleSaplingStage { + _0, + _1, + }, + "stage" => AcaciaSaplingStage { + _0, + _1, + }, + "stage" => DarkOakSaplingStage { + _0, + _1, + }, + "age" => MangrovePropaguleAge { + _0, + _1, + _2, + _3, + _4, + }, + "hanging" => Hanging { + True, + False, + }, + "stage" => MangrovePropaguleStage { + _0, + _1, + }, + "waterlogged" => Waterlogged { + True, + False, + }, + "level" => WaterLevel { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "level" => LavaLevel { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "axis" => Axis { + X, + Y, + Z, + }, + "distance" => OakLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "persistent" => Persistent { + True, + False, + }, + "distance" => SpruceLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => BirchLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => JungleLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => AcaciaLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => DarkOakLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => MangroveLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => AzaleaLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "distance" => FloweringAzaleaLeavesDistance { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "facing" => FacingCubic { + North, + East, + South, + West, + Up, + Down, + }, + "triggered" => Triggered { + True, + False, + }, + "instrument" => Instrument { + Harp, + Basedrum, + Snare, + Hat, + Bass, + Flute, + Bell, + Guitar, + Chime, + Xylophone, + IronXylophone, + CowBell, + Didgeridoo, + Bit, + Banjo, + Pling, + }, + "note" => NoteBlockNote { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + _16, + _17, + _18, + _19, + _20, + _21, + _22, + _23, + _24, + }, + "powered" => Powered { + True, + False, + }, + "facing" => FacingCardinal { + North, + South, + West, + East, + }, + "occupied" => Occupied { + True, + False, + }, + "part" => Part { + Head, + Foot, + }, + "shape" => RailShape { + NorthSouth, + EastWest, + AscendingEast, + AscendingWest, + AscendingNorth, + AscendingSouth, + }, + "extended" => Extended { + True, + False, + }, + "half" => Half { + Upper, + Lower, + }, + "kind" => PistonType { + Normal, + Sticky, + }, + "short" => Short { + True, + False, + }, + "unstable" => Unstable { + True, + False, + }, + "age" => FireAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "east" => East { + True, + False, + }, + "north" => North { + True, + False, + }, + "south" => South { + True, + False, + }, + "up" => Up { + True, + False, + }, + "west" => West { + True, + False, + }, + "half" => TopBottom { + Top, + Bottom, + }, + "shape" => StairShape { + Straight, + InnerLeft, + InnerRight, + OuterLeft, + OuterRight, + }, + "kind" => ChestType { + Single, + Left, + Right, + }, + "east" => WireEast { + Up, + Side, + None, + }, + "north" => WireNorth { + Up, + Side, + None, + }, + "power" => RedstoneWirePower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "south" => WireSouth { + Up, + Side, + None, + }, + "west" => WireWest { + Up, + Side, + None, + }, + "age" => WheatAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "moisture" => FarmlandMoisture { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "lit" => Lit { + True, + False, + }, + "rotation" => OakSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => SpruceSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BirchSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => AcaciaSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => JungleSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => DarkOakSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => MangroveSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "hinge" => Hinge { + Left, + Right, + }, + "open" => Open { + True, + False, + }, + "shape" => Shape { + NorthSouth, + EastWest, + AscendingEast, + AscendingWest, + AscendingNorth, + AscendingSouth, + SouthEast, + SouthWest, + NorthWest, + NorthEast, + }, + "face" => Face { + Floor, + Wall, + Ceiling, + }, + "layers" => SnowLayers { + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + }, + "age" => CactusAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "age" => SugarCaneAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "has_record" => HasRecord { + True, + False, + }, + "axis" => AxisXZ { + X, + Z, + }, + "bites" => CakeBites { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + }, + "delay" => RepeaterDelay { + _1, + _2, + _3, + _4, + }, + "locked" => Locked { + True, + False, + }, + "down" => Down { + True, + False, + }, + "age" => PumpkinStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "age" => MelonStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "berries" => TrueFalse { + True, + False, + }, + "in_wall" => InWall { + True, + False, + }, + "age" => NetherWartAge { + _0, + _1, + _2, + _3, + }, + "has_bottle" => HasBottle { + True, + False, + }, + "level" => WaterCauldronLevel { + _1, + _2, + _3, + }, + "level" => PowderSnowCauldronLevel { + _1, + _2, + _3, + }, + "eye" => HasEye { + True, + False, + }, + "age" => CocoaAge { + _0, + _1, + _2, + }, + "attached" => Attached { + True, + False, + }, + "disarmed" => Disarmed { + True, + False, + }, + "conditional" => Conditional { + True, + False, + }, + "east" => EastWall { + None, + Low, + Tall, + }, + "north" => NorthWall { + None, + Low, + Tall, + }, + "south" => SouthWall { + None, + Low, + Tall, + }, + "west" => WestWall { + None, + Low, + Tall, + }, + "age" => CarrotsAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "age" => PotatoesAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "rotation" => SkeletonSkullRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => WitherSkeletonSkullRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => ZombieHeadRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => PlayerHeadRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => CreeperHeadRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => DragonHeadRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "power" => LightWeightedPressurePlatePower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "power" => HeavyWeightedPressurePlatePower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "mode" => ComparatorType { + Compare, + Subtract, + }, + "inverted" => Inverted { + True, + False, + }, + "power" => DaylightDetectorPower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "enabled" => Enabled { + True, + False, + }, + "facing" => Facing { + Down, + North, + South, + West, + East, + }, + "level" => LightLevel { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "kind" => Type { + Top, + Bottom, + Double, + }, + "rotation" => WhiteBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => OrangeBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => MagentaBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => LightBlueBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => YellowBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => LimeBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => PinkBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => GrayBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => LightGrayBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => CyanBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => PurpleBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BlueBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BrownBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => GreenBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => RedBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BlackBannerRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "age" => ChorusFlowerAge { + _0, + _1, + _2, + _3, + _4, + _5, + }, + "age" => BeetrootsAge { + _0, + _1, + _2, + _3, + }, + "age" => FrostedIceAge { + _0, + _1, + _2, + _3, + }, + "age" => KelpAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + _16, + _17, + _18, + _19, + _20, + _21, + _22, + _23, + _24, + _25, + }, + "eggs" => TurtleEggEggs { + _1, + _2, + _3, + _4, + }, + "hatch" => TurtleEggHatch { + _0, + _1, + _2, + }, + "pickles" => SeaPicklePickles { + _1, + _2, + _3, + _4, + }, + "age" => BambooAge { + _0, + _1, + }, + "leaves" => Leaves { + None, + Small, + Large, + }, + "stage" => BambooStage { + _0, + _1, + }, + "drag" => DragDown { + True, + False, + }, + "bottom" => Bottom { + True, + False, + }, + "distance" => ScaffoldingDistance { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "has_book" => HasBook { + True, + False, + }, + "attachment" => Attachment { + Floor, + Ceiling, + SingleWall, + DoubleWall, + }, + "signal_fire" => SignalFire { + True, + False, + }, + "age" => SweetBerryBushAge { + _0, + _1, + _2, + _3, + }, + "age" => WeepingVinesAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + _16, + _17, + _18, + _19, + _20, + _21, + _22, + _23, + _24, + _25, + }, + "age" => TwistingVinesAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + _16, + _17, + _18, + _19, + _20, + _21, + _22, + _23, + _24, + _25, + }, + "rotation" => CrimsonSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => WarpedSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "mode" => Mode { + Save, + Load, + Corner, + Data, + }, + "orientation" => Orientation { + DownEast, + DownNorth, + DownSouth, + DownWest, + UpEast, + UpNorth, + UpSouth, + UpWest, + WestUp, + EastUp, + NorthUp, + SouthUp, + }, + "level" => ComposterLevel { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + }, + "power" => TargetOutputPower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "honey_level" => BeeNestHoneyLevel { + _0, + _1, + _2, + _3, + _4, + _5, + }, + "honey_level" => BeehiveHoneyLevel { + _0, + _1, + _2, + _3, + _4, + _5, + }, + "charges" => RespawnAnchorCharge { + _0, + _1, + _2, + _3, + _4, + }, + "candles" => CandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => WhiteCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => OrangeCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => MagentaCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => LightBlueCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => YellowCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => LimeCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => PinkCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => GrayCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => LightGrayCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => CyanCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => PurpleCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => BlueCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => BrownCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => GreenCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => RedCandleCandles { + _1, + _2, + _3, + _4, + }, + "candles" => BlackCandleCandles { + _1, + _2, + _3, + _4, + }, + "power" => SculkSensorPower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "sculk_sensor_phase" => Phase { + Inactive, + Active, + Cooldown, + }, + "bloom" => Pulse { + True, + False, + }, + "can_summon" => CanSummon { + True, + False, + }, + "shrieking" => Shrieking { + True, + False, + }, + "thickness" => Thickness { + TipMerge, + Tip, + Frustum, + Middle, + Base, + }, + "vertical_direction" => TipDirection { + Up, + Down, + }, + "age" => _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25 { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + _16, + _17, + _18, + _19, + _20, + _21, + _22, + _23, + _24, + _25, + }, + "tilt" => Tilt { + None, + Unstable, + Partial, + Full, + }, + "axis" => XYZ { + X, + Y, + Z, + }, + }, + Blocks => { + air => BlockBehavior::default(), { + }, + stone => BlockBehavior::default(), { + }, + granite => BlockBehavior::default(), { + }, + polished_granite => BlockBehavior::default(), { + }, + diorite => BlockBehavior::default(), { + }, + polished_diorite => BlockBehavior::default(), { + }, + andesite => BlockBehavior::default(), { + }, + polished_andesite => BlockBehavior::default(), { + }, + grass_block => BlockBehavior::default(), { + Snowy=False, + }, + dirt => BlockBehavior::default(), { + }, + coarse_dirt => BlockBehavior::default(), { + }, + podzol => BlockBehavior::default(), { + Snowy=False, + }, + cobblestone => BlockBehavior::default(), { + }, + oak_planks => BlockBehavior::default(), { + }, + spruce_planks => BlockBehavior::default(), { + }, + birch_planks => BlockBehavior::default(), { + }, + jungle_planks => BlockBehavior::default(), { + }, + acacia_planks => BlockBehavior::default(), { + }, + dark_oak_planks => BlockBehavior::default(), { + }, + mangrove_planks => BlockBehavior::default(), { + }, + oak_sapling => BlockBehavior::default(), { + OakSaplingStage=_0, + }, + spruce_sapling => BlockBehavior::default(), { + SpruceSaplingStage=_0, + }, + birch_sapling => BlockBehavior::default(), { + BirchSaplingStage=_0, + }, + jungle_sapling => BlockBehavior::default(), { + JungleSaplingStage=_0, + }, + acacia_sapling => BlockBehavior::default(), { + AcaciaSaplingStage=_0, + }, + dark_oak_sapling => BlockBehavior::default(), { + DarkOakSaplingStage=_0, + }, + mangrove_propagule => BlockBehavior::default(), { + MangrovePropaguleAge=_0, + Hanging=False, + MangrovePropaguleStage=_0, + Waterlogged=False, + }, + bedrock => BlockBehavior::default(), { + }, + water => BlockBehavior::default(), { + WaterLevel=_0, + }, + lava => BlockBehavior::default(), { + LavaLevel=_0, + }, + sand => BlockBehavior::default(), { + }, + red_sand => BlockBehavior::default(), { + }, + gravel => BlockBehavior::default(), { + }, + gold_ore => BlockBehavior::default(), { + }, + deepslate_gold_ore => BlockBehavior::default(), { + }, + iron_ore => BlockBehavior::default(), { + }, + deepslate_iron_ore => BlockBehavior::default(), { + }, + coal_ore => BlockBehavior::default(), { + }, + deepslate_coal_ore => BlockBehavior::default(), { + }, + nether_gold_ore => BlockBehavior::default(), { + }, + oak_log => BlockBehavior::default(), { + Axis=Y, + }, + spruce_log => BlockBehavior::default(), { + Axis=Y, + }, + birch_log => BlockBehavior::default(), { + Axis=Y, + }, + jungle_log => BlockBehavior::default(), { + Axis=Y, + }, + acacia_log => BlockBehavior::default(), { + Axis=Y, + }, + dark_oak_log => BlockBehavior::default(), { + Axis=Y, + }, + mangrove_log => BlockBehavior::default(), { + Axis=Y, + }, + mangrove_roots => BlockBehavior::default(), { + Waterlogged=False, + }, + muddy_mangrove_roots => BlockBehavior::default(), { + Axis=Y, + }, + stripped_spruce_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_birch_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_jungle_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_acacia_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_dark_oak_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_oak_log => BlockBehavior::default(), { + Axis=Y, + }, + stripped_mangrove_log => BlockBehavior::default(), { + Axis=Y, + }, + oak_wood => BlockBehavior::default(), { + Axis=Y, + }, + spruce_wood => BlockBehavior::default(), { + Axis=Y, + }, + birch_wood => BlockBehavior::default(), { + Axis=Y, + }, + jungle_wood => BlockBehavior::default(), { + Axis=Y, + }, + acacia_wood => BlockBehavior::default(), { + Axis=Y, + }, + dark_oak_wood => BlockBehavior::default(), { + Axis=Y, + }, + mangrove_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_oak_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_spruce_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_birch_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_jungle_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_acacia_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_dark_oak_wood => BlockBehavior::default(), { + Axis=Y, + }, + stripped_mangrove_wood => BlockBehavior::default(), { + Axis=Y, + }, + oak_leaves => BlockBehavior::default(), { + OakLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + spruce_leaves => BlockBehavior::default(), { + SpruceLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + birch_leaves => BlockBehavior::default(), { + BirchLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + jungle_leaves => BlockBehavior::default(), { + JungleLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + acacia_leaves => BlockBehavior::default(), { + AcaciaLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + dark_oak_leaves => BlockBehavior::default(), { + DarkOakLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + mangrove_leaves => BlockBehavior::default(), { + MangroveLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + azalea_leaves => BlockBehavior::default(), { + AzaleaLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + flowering_azalea_leaves => BlockBehavior::default(), { + FloweringAzaleaLeavesDistance=_7, + Persistent=False, + Waterlogged=False, + }, + sponge => BlockBehavior::default(), { + }, + wet_sponge => BlockBehavior::default(), { + }, + glass => BlockBehavior::default(), { + }, + lapis_ore => BlockBehavior::default(), { + }, + deepslate_lapis_ore => BlockBehavior::default(), { + }, + lapis_block => BlockBehavior::default(), { + }, + dispenser => BlockBehavior::default(), { + FacingCubic=North, + Triggered=False, + }, + sandstone => BlockBehavior::default(), { + }, + chiseled_sandstone => BlockBehavior::default(), { + }, + cut_sandstone => BlockBehavior::default(), { + }, + note_block => BlockBehavior::default(), { + Instrument=Harp, + NoteBlockNote=_0, + Powered=False, + }, + white_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + orange_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + magenta_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + light_blue_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + yellow_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + lime_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + pink_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + gray_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + light_gray_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + cyan_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + purple_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + blue_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + brown_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + green_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + red_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + black_bed => BlockBehavior::default(), { + FacingCardinal=North, + Occupied=False, + Part=Foot, + }, + powered_rail => BlockBehavior::default(), { + Powered=False, + RailShape=NorthSouth, + Waterlogged=False, + }, + detector_rail => BlockBehavior::default(), { + Powered=False, + RailShape=NorthSouth, + Waterlogged=False, + }, + sticky_piston => BlockBehavior::default(), { + Extended=False, + FacingCubic=North, + }, + cobweb => BlockBehavior::default(), { + }, + grass => BlockBehavior::default(), { + }, + fern => BlockBehavior::default(), { + }, + dead_bush => BlockBehavior::default(), { + }, + seagrass => BlockBehavior::default(), { + }, + tall_seagrass => BlockBehavior::default(), { + Half=Lower, + }, + piston => BlockBehavior::default(), { + Extended=False, + FacingCubic=North, + }, + piston_head => BlockBehavior::default(), { + PistonType=Normal, + FacingCubic=North, + Short=False, + }, + white_wool => BlockBehavior::default(), { + }, + orange_wool => BlockBehavior::default(), { + }, + magenta_wool => BlockBehavior::default(), { + }, + light_blue_wool => BlockBehavior::default(), { + }, + yellow_wool => BlockBehavior::default(), { + }, + lime_wool => BlockBehavior::default(), { + }, + pink_wool => BlockBehavior::default(), { + }, + gray_wool => BlockBehavior::default(), { + }, + light_gray_wool => BlockBehavior::default(), { + }, + cyan_wool => BlockBehavior::default(), { + }, + purple_wool => BlockBehavior::default(), { + }, + blue_wool => BlockBehavior::default(), { + }, + brown_wool => BlockBehavior::default(), { + }, + green_wool => BlockBehavior::default(), { + }, + red_wool => BlockBehavior::default(), { + }, + black_wool => BlockBehavior::default(), { + }, + moving_piston => BlockBehavior::default(), { + PistonType=Normal, + FacingCubic=North, + }, + dandelion => BlockBehavior::default(), { + }, + poppy => BlockBehavior::default(), { + }, + blue_orchid => BlockBehavior::default(), { + }, + allium => BlockBehavior::default(), { + }, + azure_bluet => BlockBehavior::default(), { + }, + red_tulip => BlockBehavior::default(), { + }, + orange_tulip => BlockBehavior::default(), { + }, + white_tulip => BlockBehavior::default(), { + }, + pink_tulip => BlockBehavior::default(), { + }, + oxeye_daisy => BlockBehavior::default(), { + }, + cornflower => BlockBehavior::default(), { + }, + wither_rose => BlockBehavior::default(), { + }, + lily_of_the_valley => BlockBehavior::default(), { + }, + brown_mushroom => BlockBehavior::default(), { + }, + red_mushroom => BlockBehavior::default(), { + }, + gold_block => BlockBehavior::default(), { + }, + iron_block => BlockBehavior::default(), { + }, + bricks => BlockBehavior::default(), { + }, + tnt => BlockBehavior::default(), { + Unstable=False, + }, + bookshelf => BlockBehavior::default(), { + }, + mossy_cobblestone => BlockBehavior::default(), { + }, + obsidian => BlockBehavior::default(), { + }, + torch => BlockBehavior::default(), { + }, + wall_torch => BlockBehavior::default(), { + FacingCardinal=North, + }, + fire => BlockBehavior::default(), { + FireAge=_0, + East=False, + North=False, + South=False, + Up=False, + West=False, + }, + soul_fire => BlockBehavior::default(), { + }, + spawner => BlockBehavior::default(), { + }, + oak_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + chest => BlockBehavior::default(), { + ChestType=Single, + FacingCardinal=North, + Waterlogged=False, + }, + redstone_wire => BlockBehavior::default(), { + WireEast=None, + WireNorth=None, + RedstoneWirePower=_0, + WireSouth=None, + WireWest=None, + }, + diamond_ore => BlockBehavior::default(), { + }, + deepslate_diamond_ore => BlockBehavior::default(), { + }, + diamond_block => BlockBehavior::default(), { + }, + crafting_table => BlockBehavior::default(), { + }, + wheat => BlockBehavior::default(), { + WheatAge=_0, + }, + farmland => BlockBehavior::default(), { + FarmlandMoisture=_0, + }, + furnace => BlockBehavior::default(), { + FacingCardinal=North, + Lit=False, + }, + oak_sign => BlockBehavior::default(), { + OakSignRotation=_0, + Waterlogged=False, + }, + spruce_sign => BlockBehavior::default(), { + SpruceSignRotation=_0, + Waterlogged=False, + }, + birch_sign => BlockBehavior::default(), { + BirchSignRotation=_0, + Waterlogged=False, + }, + acacia_sign => BlockBehavior::default(), { + AcaciaSignRotation=_0, + Waterlogged=False, + }, + jungle_sign => BlockBehavior::default(), { + JungleSignRotation=_0, + Waterlogged=False, + }, + dark_oak_sign => BlockBehavior::default(), { + DarkOakSignRotation=_0, + Waterlogged=False, + }, + mangrove_sign => BlockBehavior::default(), { + MangroveSignRotation=_0, + Waterlogged=False, + }, + oak_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + ladder => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + rail => BlockBehavior::default(), { + Shape=NorthSouth, + Waterlogged=False, + }, + cobblestone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + oak_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + spruce_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + birch_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + acacia_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + jungle_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + dark_oak_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + mangrove_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + lever => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + stone_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + iron_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + oak_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + spruce_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + birch_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + jungle_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + acacia_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + dark_oak_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + mangrove_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + redstone_ore => BlockBehavior::default(), { + Lit=False, + }, + deepslate_redstone_ore => BlockBehavior::default(), { + Lit=False, + }, + redstone_torch => BlockBehavior::default(), { + Lit=True, + }, + redstone_wall_torch => BlockBehavior::default(), { + FacingCardinal=North, + Lit=True, + }, + stone_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + snow => BlockBehavior::default(), { + SnowLayers=_1, + }, + ice => BlockBehavior::default(), { + }, + snow_block => BlockBehavior::default(), { + }, + cactus => BlockBehavior::default(), { + CactusAge=_0, + }, + clay => BlockBehavior::default(), { + }, + sugar_cane => BlockBehavior::default(), { + SugarCaneAge=_0, + }, + jukebox => BlockBehavior::default(), { + HasRecord=False, + }, + oak_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + pumpkin => BlockBehavior::default(), { + }, + netherrack => BlockBehavior::default(), { + }, + soul_sand => BlockBehavior::default(), { + }, + soul_soil => BlockBehavior::default(), { + }, + basalt => BlockBehavior::default(), { + Axis=Y, + }, + polished_basalt => BlockBehavior::default(), { + Axis=Y, + }, + soul_torch => BlockBehavior::default(), { + }, + soul_wall_torch => BlockBehavior::default(), { + FacingCardinal=North, + }, + glowstone => BlockBehavior::default(), { + }, + nether_portal => BlockBehavior::default(), { + AxisXZ=X, + }, + carved_pumpkin => BlockBehavior::default(), { + FacingCardinal=North, + }, + jack_o_lantern => BlockBehavior::default(), { + FacingCardinal=North, + }, + cake => BlockBehavior::default(), { + CakeBites=_0, + }, + repeater => BlockBehavior::default(), { + RepeaterDelay=_1, + FacingCardinal=North, + Locked=False, + Powered=False, + }, + white_stained_glass => BlockBehavior::default(), { + }, + orange_stained_glass => BlockBehavior::default(), { + }, + magenta_stained_glass => BlockBehavior::default(), { + }, + light_blue_stained_glass => BlockBehavior::default(), { + }, + yellow_stained_glass => BlockBehavior::default(), { + }, + lime_stained_glass => BlockBehavior::default(), { + }, + pink_stained_glass => BlockBehavior::default(), { + }, + gray_stained_glass => BlockBehavior::default(), { + }, + light_gray_stained_glass => BlockBehavior::default(), { + }, + cyan_stained_glass => BlockBehavior::default(), { + }, + purple_stained_glass => BlockBehavior::default(), { + }, + blue_stained_glass => BlockBehavior::default(), { + }, + brown_stained_glass => BlockBehavior::default(), { + }, + green_stained_glass => BlockBehavior::default(), { + }, + red_stained_glass => BlockBehavior::default(), { + }, + black_stained_glass => BlockBehavior::default(), { + }, + oak_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + spruce_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + birch_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + jungle_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + acacia_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + dark_oak_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + mangrove_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + stone_bricks => BlockBehavior::default(), { + }, + mossy_stone_bricks => BlockBehavior::default(), { + }, + cracked_stone_bricks => BlockBehavior::default(), { + }, + chiseled_stone_bricks => BlockBehavior::default(), { + }, + packed_mud => BlockBehavior::default(), { + }, + mud_bricks => BlockBehavior::default(), { + }, + infested_stone => BlockBehavior::default(), { + }, + infested_cobblestone => BlockBehavior::default(), { + }, + infested_stone_bricks => BlockBehavior::default(), { + }, + infested_mossy_stone_bricks => BlockBehavior::default(), { + }, + infested_cracked_stone_bricks => BlockBehavior::default(), { + }, + infested_chiseled_stone_bricks => BlockBehavior::default(), { + }, + brown_mushroom_block => BlockBehavior::default(), { + Down=True, + East=True, + North=True, + South=True, + Up=True, + West=True, + }, + red_mushroom_block => BlockBehavior::default(), { + Down=True, + East=True, + North=True, + South=True, + Up=True, + West=True, + }, + mushroom_stem => BlockBehavior::default(), { + Down=True, + East=True, + North=True, + South=True, + Up=True, + West=True, + }, + iron_bars => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + chain => BlockBehavior::default(), { + Axis=Y, + Waterlogged=False, + }, + glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + melon => BlockBehavior::default(), { + }, + attached_pumpkin_stem => BlockBehavior::default(), { + FacingCardinal=North, + }, + attached_melon_stem => BlockBehavior::default(), { + FacingCardinal=North, + }, + pumpkin_stem => BlockBehavior::default(), { + PumpkinStemAge=_0, + }, + melon_stem => BlockBehavior::default(), { + MelonStemAge=_0, + }, + vine => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Up=False, + West=False, + }, + glow_lichen => BlockBehavior::default(), { + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + }, + oak_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + stone_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + mud_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + mycelium => BlockBehavior::default(), { + Snowy=False, + }, + lily_pad => BlockBehavior::default(), { + }, + nether_bricks => BlockBehavior::default(), { + }, + nether_brick_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + nether_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + nether_wart => BlockBehavior::default(), { + NetherWartAge=_0, + }, + enchanting_table => BlockBehavior::default(), { + }, + brewing_stand => BlockBehavior::default(), { + HasBottle=False, + HasBottle=False, + HasBottle=False, + }, + cauldron => BlockBehavior::default(), { + }, + water_cauldron => BlockBehavior::default(), { + WaterCauldronLevel=_1, + }, + lava_cauldron => BlockBehavior::default(), { + }, + powder_snow_cauldron => BlockBehavior::default(), { + PowderSnowCauldronLevel=_1, + }, + end_portal => BlockBehavior::default(), { + }, + end_portal_frame => BlockBehavior::default(), { + HasEye=False, + FacingCardinal=North, + }, + end_stone => BlockBehavior::default(), { + }, + dragon_egg => BlockBehavior::default(), { + }, + redstone_lamp => BlockBehavior::default(), { + Lit=False, + }, + cocoa => BlockBehavior::default(), { + CocoaAge=_0, + FacingCardinal=North, + }, + sandstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + emerald_ore => BlockBehavior::default(), { + }, + deepslate_emerald_ore => BlockBehavior::default(), { + }, + ender_chest => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + tripwire_hook => BlockBehavior::default(), { + Attached=False, + FacingCardinal=North, + Powered=False, + }, + tripwire => BlockBehavior::default(), { + Attached=False, + Disarmed=False, + East=False, + North=False, + Powered=False, + South=False, + West=False, + }, + emerald_block => BlockBehavior::default(), { + }, + spruce_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + birch_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + jungle_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + command_block => BlockBehavior::default(), { + Conditional=False, + FacingCubic=North, + }, + beacon => BlockBehavior::default(), { + }, + cobblestone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + mossy_cobblestone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + flower_pot => BlockBehavior::default(), { + }, + potted_oak_sapling => BlockBehavior::default(), { + }, + potted_spruce_sapling => BlockBehavior::default(), { + }, + potted_birch_sapling => BlockBehavior::default(), { + }, + potted_jungle_sapling => BlockBehavior::default(), { + }, + potted_acacia_sapling => BlockBehavior::default(), { + }, + potted_dark_oak_sapling => BlockBehavior::default(), { + }, + potted_mangrove_propagule => BlockBehavior::default(), { + }, + potted_fern => BlockBehavior::default(), { + }, + potted_dandelion => BlockBehavior::default(), { + }, + potted_poppy => BlockBehavior::default(), { + }, + potted_blue_orchid => BlockBehavior::default(), { + }, + potted_allium => BlockBehavior::default(), { + }, + potted_azure_bluet => BlockBehavior::default(), { + }, + potted_red_tulip => BlockBehavior::default(), { + }, + potted_orange_tulip => BlockBehavior::default(), { + }, + potted_white_tulip => BlockBehavior::default(), { + }, + potted_pink_tulip => BlockBehavior::default(), { + }, + potted_oxeye_daisy => BlockBehavior::default(), { + }, + potted_cornflower => BlockBehavior::default(), { + }, + potted_lily_of_the_valley => BlockBehavior::default(), { + }, + potted_wither_rose => BlockBehavior::default(), { + }, + potted_red_mushroom => BlockBehavior::default(), { + }, + potted_brown_mushroom => BlockBehavior::default(), { + }, + potted_dead_bush => BlockBehavior::default(), { + }, + potted_cactus => BlockBehavior::default(), { + }, + carrots => BlockBehavior::default(), { + CarrotsAge=_0, + }, + potatoes => BlockBehavior::default(), { + PotatoesAge=_0, + }, + oak_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + spruce_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + birch_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + jungle_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + acacia_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + dark_oak_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + mangrove_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + skeleton_skull => BlockBehavior::default(), { + SkeletonSkullRotation=_0, + }, + skeleton_wall_skull => BlockBehavior::default(), { + FacingCardinal=North, + }, + wither_skeleton_skull => BlockBehavior::default(), { + WitherSkeletonSkullRotation=_0, + }, + wither_skeleton_wall_skull => BlockBehavior::default(), { + FacingCardinal=North, + }, + zombie_head => BlockBehavior::default(), { + ZombieHeadRotation=_0, + }, + zombie_wall_head => BlockBehavior::default(), { + FacingCardinal=North, + }, + player_head => BlockBehavior::default(), { + PlayerHeadRotation=_0, + }, + player_wall_head => BlockBehavior::default(), { + FacingCardinal=North, + }, + creeper_head => BlockBehavior::default(), { + CreeperHeadRotation=_0, + }, + creeper_wall_head => BlockBehavior::default(), { + FacingCardinal=North, + }, + dragon_head => BlockBehavior::default(), { + DragonHeadRotation=_0, + }, + dragon_wall_head => BlockBehavior::default(), { + FacingCardinal=North, + }, + anvil => BlockBehavior::default(), { + FacingCardinal=North, + }, + chipped_anvil => BlockBehavior::default(), { + FacingCardinal=North, + }, + damaged_anvil => BlockBehavior::default(), { + FacingCardinal=North, + }, + trapped_chest => BlockBehavior::default(), { + ChestType=Single, + FacingCardinal=North, + Waterlogged=False, + }, + light_weighted_pressure_plate => BlockBehavior::default(), { + LightWeightedPressurePlatePower=_0, + }, + heavy_weighted_pressure_plate => BlockBehavior::default(), { + HeavyWeightedPressurePlatePower=_0, + }, + comparator => BlockBehavior::default(), { + FacingCardinal=North, + ComparatorType=Compare, + Powered=False, + }, + daylight_detector => BlockBehavior::default(), { + Inverted=False, + DaylightDetectorPower=_0, + }, + redstone_block => BlockBehavior::default(), { + }, + nether_quartz_ore => BlockBehavior::default(), { + }, + hopper => BlockBehavior::default(), { + Enabled=True, + Facing=Down, + }, + quartz_block => BlockBehavior::default(), { + }, + chiseled_quartz_block => BlockBehavior::default(), { + }, + quartz_pillar => BlockBehavior::default(), { + Axis=Y, + }, + quartz_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + activator_rail => BlockBehavior::default(), { + Powered=False, + RailShape=NorthSouth, + Waterlogged=False, + }, + dropper => BlockBehavior::default(), { + FacingCubic=North, + Triggered=False, + }, + white_terracotta => BlockBehavior::default(), { + }, + orange_terracotta => BlockBehavior::default(), { + }, + magenta_terracotta => BlockBehavior::default(), { + }, + light_blue_terracotta => BlockBehavior::default(), { + }, + yellow_terracotta => BlockBehavior::default(), { + }, + lime_terracotta => BlockBehavior::default(), { + }, + pink_terracotta => BlockBehavior::default(), { + }, + gray_terracotta => BlockBehavior::default(), { + }, + light_gray_terracotta => BlockBehavior::default(), { + }, + cyan_terracotta => BlockBehavior::default(), { + }, + purple_terracotta => BlockBehavior::default(), { + }, + blue_terracotta => BlockBehavior::default(), { + }, + brown_terracotta => BlockBehavior::default(), { + }, + green_terracotta => BlockBehavior::default(), { + }, + red_terracotta => BlockBehavior::default(), { + }, + black_terracotta => BlockBehavior::default(), { + }, + white_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + orange_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + magenta_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + light_blue_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + yellow_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + lime_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + pink_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + gray_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + light_gray_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + cyan_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + purple_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + blue_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + brown_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + green_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + red_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + black_stained_glass_pane => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + acacia_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + dark_oak_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + mangrove_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + slime_block => BlockBehavior::default(), { + }, + barrier => BlockBehavior::default(), { + }, + light => BlockBehavior::default(), { + LightLevel=_15, + Waterlogged=False, + }, + iron_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + prismarine => BlockBehavior::default(), { + }, + prismarine_bricks => BlockBehavior::default(), { + }, + dark_prismarine => BlockBehavior::default(), { + }, + prismarine_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + prismarine_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + dark_prismarine_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + prismarine_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + prismarine_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + dark_prismarine_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + sea_lantern => BlockBehavior::default(), { + }, + hay_block => BlockBehavior::default(), { + Axis=Y, + }, + white_carpet => BlockBehavior::default(), { + }, + orange_carpet => BlockBehavior::default(), { + }, + magenta_carpet => BlockBehavior::default(), { + }, + light_blue_carpet => BlockBehavior::default(), { + }, + yellow_carpet => BlockBehavior::default(), { + }, + lime_carpet => BlockBehavior::default(), { + }, + pink_carpet => BlockBehavior::default(), { + }, + gray_carpet => BlockBehavior::default(), { + }, + light_gray_carpet => BlockBehavior::default(), { + }, + cyan_carpet => BlockBehavior::default(), { + }, + purple_carpet => BlockBehavior::default(), { + }, + blue_carpet => BlockBehavior::default(), { + }, + brown_carpet => BlockBehavior::default(), { + }, + green_carpet => BlockBehavior::default(), { + }, + red_carpet => BlockBehavior::default(), { + }, + black_carpet => BlockBehavior::default(), { + }, + terracotta => BlockBehavior::default(), { + }, + coal_block => BlockBehavior::default(), { + }, + packed_ice => BlockBehavior::default(), { + }, + sunflower => BlockBehavior::default(), { + Half=Lower, + }, + lilac => BlockBehavior::default(), { + Half=Lower, + }, + rose_bush => BlockBehavior::default(), { + Half=Lower, + }, + peony => BlockBehavior::default(), { + Half=Lower, + }, + tall_grass => BlockBehavior::default(), { + Half=Lower, + }, + large_fern => BlockBehavior::default(), { + Half=Lower, + }, + white_banner => BlockBehavior::default(), { + WhiteBannerRotation=_0, + }, + orange_banner => BlockBehavior::default(), { + OrangeBannerRotation=_0, + }, + magenta_banner => BlockBehavior::default(), { + MagentaBannerRotation=_0, + }, + light_blue_banner => BlockBehavior::default(), { + LightBlueBannerRotation=_0, + }, + yellow_banner => BlockBehavior::default(), { + YellowBannerRotation=_0, + }, + lime_banner => BlockBehavior::default(), { + LimeBannerRotation=_0, + }, + pink_banner => BlockBehavior::default(), { + PinkBannerRotation=_0, + }, + gray_banner => BlockBehavior::default(), { + GrayBannerRotation=_0, + }, + light_gray_banner => BlockBehavior::default(), { + LightGrayBannerRotation=_0, + }, + cyan_banner => BlockBehavior::default(), { + CyanBannerRotation=_0, + }, + purple_banner => BlockBehavior::default(), { + PurpleBannerRotation=_0, + }, + blue_banner => BlockBehavior::default(), { + BlueBannerRotation=_0, + }, + brown_banner => BlockBehavior::default(), { + BrownBannerRotation=_0, + }, + green_banner => BlockBehavior::default(), { + GreenBannerRotation=_0, + }, + red_banner => BlockBehavior::default(), { + RedBannerRotation=_0, + }, + black_banner => BlockBehavior::default(), { + BlackBannerRotation=_0, + }, + white_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + orange_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + magenta_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + light_blue_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + yellow_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + lime_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + pink_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + gray_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + light_gray_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + cyan_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + purple_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + blue_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + brown_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + green_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + red_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + black_wall_banner => BlockBehavior::default(), { + FacingCardinal=North, + }, + red_sandstone => BlockBehavior::default(), { + }, + chiseled_red_sandstone => BlockBehavior::default(), { + }, + cut_red_sandstone => BlockBehavior::default(), { + }, + red_sandstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + oak_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + spruce_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + birch_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + jungle_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + acacia_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + dark_oak_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + mangrove_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + stone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + smooth_stone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + cut_sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + petrified_oak_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + cobblestone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + stone_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + mud_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + nether_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + quartz_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + red_sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + cut_red_sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + purpur_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + smooth_stone => BlockBehavior::default(), { + }, + smooth_sandstone => BlockBehavior::default(), { + }, + smooth_quartz => BlockBehavior::default(), { + }, + smooth_red_sandstone => BlockBehavior::default(), { + }, + spruce_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + birch_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + jungle_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + acacia_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + dark_oak_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + mangrove_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + spruce_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + birch_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + jungle_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + acacia_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + dark_oak_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + mangrove_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + spruce_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + birch_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + jungle_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + acacia_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + dark_oak_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + mangrove_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + end_rod => BlockBehavior::default(), { + FacingCubic=Up, + }, + chorus_plant => BlockBehavior::default(), { + Down=False, + East=False, + North=False, + South=False, + Up=False, + West=False, + }, + chorus_flower => BlockBehavior::default(), { + ChorusFlowerAge=_0, + }, + purpur_block => BlockBehavior::default(), { + }, + purpur_pillar => BlockBehavior::default(), { + Axis=Y, + }, + purpur_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + end_stone_bricks => BlockBehavior::default(), { + }, + beetroots => BlockBehavior::default(), { + BeetrootsAge=_0, + }, + dirt_path => BlockBehavior::default(), { + }, + end_gateway => BlockBehavior::default(), { + }, + repeating_command_block => BlockBehavior::default(), { + Conditional=False, + FacingCubic=North, + }, + chain_command_block => BlockBehavior::default(), { + Conditional=False, + FacingCubic=North, + }, + frosted_ice => BlockBehavior::default(), { + FrostedIceAge=_0, + }, + magma_block => BlockBehavior::default(), { + }, + nether_wart_block => BlockBehavior::default(), { + }, + red_nether_bricks => BlockBehavior::default(), { + }, + bone_block => BlockBehavior::default(), { + Axis=Y, + }, + structure_void => BlockBehavior::default(), { + }, + observer => BlockBehavior::default(), { + FacingCubic=South, + Powered=False, + }, + shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + white_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + orange_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + magenta_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + light_blue_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + yellow_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + lime_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + pink_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + gray_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + light_gray_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + cyan_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + purple_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + blue_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + brown_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + green_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + red_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + black_shulker_box => BlockBehavior::default(), { + FacingCubic=Up, + }, + white_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + orange_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + magenta_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + light_blue_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + yellow_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + lime_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + pink_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + gray_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + light_gray_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + cyan_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + purple_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + blue_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + brown_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + green_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + red_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + black_glazed_terracotta => BlockBehavior::default(), { + FacingCardinal=North, + }, + white_concrete => BlockBehavior::default(), { + }, + orange_concrete => BlockBehavior::default(), { + }, + magenta_concrete => BlockBehavior::default(), { + }, + light_blue_concrete => BlockBehavior::default(), { + }, + yellow_concrete => BlockBehavior::default(), { + }, + lime_concrete => BlockBehavior::default(), { + }, + pink_concrete => BlockBehavior::default(), { + }, + gray_concrete => BlockBehavior::default(), { + }, + light_gray_concrete => BlockBehavior::default(), { + }, + cyan_concrete => BlockBehavior::default(), { + }, + purple_concrete => BlockBehavior::default(), { + }, + blue_concrete => BlockBehavior::default(), { + }, + brown_concrete => BlockBehavior::default(), { + }, + green_concrete => BlockBehavior::default(), { + }, + red_concrete => BlockBehavior::default(), { + }, + black_concrete => BlockBehavior::default(), { + }, + white_concrete_powder => BlockBehavior::default(), { + }, + orange_concrete_powder => BlockBehavior::default(), { + }, + magenta_concrete_powder => BlockBehavior::default(), { + }, + light_blue_concrete_powder => BlockBehavior::default(), { + }, + yellow_concrete_powder => BlockBehavior::default(), { + }, + lime_concrete_powder => BlockBehavior::default(), { + }, + pink_concrete_powder => BlockBehavior::default(), { + }, + gray_concrete_powder => BlockBehavior::default(), { + }, + light_gray_concrete_powder => BlockBehavior::default(), { + }, + cyan_concrete_powder => BlockBehavior::default(), { + }, + purple_concrete_powder => BlockBehavior::default(), { + }, + blue_concrete_powder => BlockBehavior::default(), { + }, + brown_concrete_powder => BlockBehavior::default(), { + }, + green_concrete_powder => BlockBehavior::default(), { + }, + red_concrete_powder => BlockBehavior::default(), { + }, + black_concrete_powder => BlockBehavior::default(), { + }, + kelp => BlockBehavior::default(), { + KelpAge=_0, + }, + kelp_plant => BlockBehavior::default(), { + }, + dried_kelp_block => BlockBehavior::default(), { + }, + turtle_egg => BlockBehavior::default(), { + TurtleEggEggs=_1, + TurtleEggHatch=_0, + }, + dead_tube_coral_block => BlockBehavior::default(), { + }, + dead_brain_coral_block => BlockBehavior::default(), { + }, + dead_bubble_coral_block => BlockBehavior::default(), { + }, + dead_fire_coral_block => BlockBehavior::default(), { + }, + dead_horn_coral_block => BlockBehavior::default(), { + }, + tube_coral_block => BlockBehavior::default(), { + }, + brain_coral_block => BlockBehavior::default(), { + }, + bubble_coral_block => BlockBehavior::default(), { + }, + fire_coral_block => BlockBehavior::default(), { + }, + horn_coral_block => BlockBehavior::default(), { + }, + dead_tube_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_brain_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_bubble_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_fire_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_horn_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + tube_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + brain_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + bubble_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + fire_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + horn_coral => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_tube_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_brain_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_bubble_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_fire_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_horn_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + tube_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + brain_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + bubble_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + fire_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + horn_coral_fan => BlockBehavior::default(), { + Waterlogged=True, + }, + dead_tube_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + dead_brain_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + dead_bubble_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + dead_fire_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + dead_horn_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + tube_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + brain_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + bubble_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + fire_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + horn_coral_wall_fan => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=True, + }, + sea_pickle => BlockBehavior::default(), { + SeaPicklePickles=_1, + Waterlogged=True, + }, + blue_ice => BlockBehavior::default(), { + }, + conduit => BlockBehavior::default(), { + Waterlogged=True, + }, + bamboo_sapling => BlockBehavior::default(), { + }, + bamboo => BlockBehavior::default(), { + BambooAge=_0, + Leaves=None, + BambooStage=_0, + }, + potted_bamboo => BlockBehavior::default(), { + }, + void_air => BlockBehavior::default(), { + }, + cave_air => BlockBehavior::default(), { + }, + bubble_column => BlockBehavior::default(), { + DragDown=True, + }, + polished_granite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + smooth_red_sandstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + mossy_stone_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_diorite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + mossy_cobblestone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + end_stone_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + stone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + smooth_sandstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + smooth_quartz_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + granite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + andesite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + red_nether_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_andesite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + diorite_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_granite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + smooth_red_sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + mossy_stone_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_diorite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + mossy_cobblestone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + end_stone_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + smooth_sandstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + smooth_quartz_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + granite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + andesite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + red_nether_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_andesite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + diorite_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + prismarine_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + red_sandstone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + mossy_stone_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + granite_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + stone_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + mud_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + nether_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + andesite_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + red_nether_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + sandstone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + end_stone_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + diorite_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + scaffolding => BlockBehavior::default(), { + Bottom=False, + ScaffoldingDistance=_7, + Waterlogged=False, + }, + loom => BlockBehavior::default(), { + FacingCardinal=North, + }, + barrel => BlockBehavior::default(), { + FacingCubic=North, + Open=False, + }, + smoker => BlockBehavior::default(), { + FacingCardinal=North, + Lit=False, + }, + blast_furnace => BlockBehavior::default(), { + FacingCardinal=North, + Lit=False, + }, + cartography_table => BlockBehavior::default(), { + }, + fletching_table => BlockBehavior::default(), { + }, + grindstone => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + }, + lectern => BlockBehavior::default(), { + FacingCardinal=North, + HasBook=False, + Powered=False, + }, + smithing_table => BlockBehavior::default(), { + }, + stonecutter => BlockBehavior::default(), { + FacingCardinal=North, + }, + bell => BlockBehavior::default(), { + Attachment=Floor, + FacingCardinal=North, + Powered=False, + }, + lantern => BlockBehavior::default(), { + Hanging=False, + Waterlogged=False, + }, + soul_lantern => BlockBehavior::default(), { + Hanging=False, + Waterlogged=False, + }, + campfire => BlockBehavior::default(), { + FacingCardinal=North, + Lit=True, + SignalFire=False, + Waterlogged=False, + }, + soul_campfire => BlockBehavior::default(), { + FacingCardinal=North, + Lit=True, + SignalFire=False, + Waterlogged=False, + }, + sweet_berry_bush => BlockBehavior::default(), { + SweetBerryBushAge=_0, + }, + warped_stem => BlockBehavior::default(), { + Axis=Y, + }, + stripped_warped_stem => BlockBehavior::default(), { + Axis=Y, + }, + warped_hyphae => BlockBehavior::default(), { + Axis=Y, + }, + stripped_warped_hyphae => BlockBehavior::default(), { + Axis=Y, + }, + warped_nylium => BlockBehavior::default(), { + }, + warped_fungus => BlockBehavior::default(), { + }, + warped_wart_block => BlockBehavior::default(), { + }, + warped_roots => BlockBehavior::default(), { + }, + nether_sprouts => BlockBehavior::default(), { + }, + crimson_stem => BlockBehavior::default(), { + Axis=Y, + }, + stripped_crimson_stem => BlockBehavior::default(), { + Axis=Y, + }, + crimson_hyphae => BlockBehavior::default(), { + Axis=Y, + }, + stripped_crimson_hyphae => BlockBehavior::default(), { + Axis=Y, + }, + crimson_nylium => BlockBehavior::default(), { + }, + crimson_fungus => BlockBehavior::default(), { + }, + shroomlight => BlockBehavior::default(), { + }, + weeping_vines => BlockBehavior::default(), { + WeepingVinesAge=_0, + }, + weeping_vines_plant => BlockBehavior::default(), { + }, + twisting_vines => BlockBehavior::default(), { + TwistingVinesAge=_0, + }, + twisting_vines_plant => BlockBehavior::default(), { + }, + crimson_roots => BlockBehavior::default(), { + }, + crimson_planks => BlockBehavior::default(), { + }, + warped_planks => BlockBehavior::default(), { + }, + crimson_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + warped_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + crimson_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + warped_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + crimson_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + warped_fence => BlockBehavior::default(), { + East=False, + North=False, + South=False, + Waterlogged=False, + West=False, + }, + crimson_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + warped_trapdoor => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + Open=False, + Powered=False, + Waterlogged=False, + }, + crimson_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + warped_fence_gate => BlockBehavior::default(), { + FacingCardinal=North, + InWall=False, + Open=False, + Powered=False, + }, + crimson_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + warped_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + crimson_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + warped_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + crimson_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + warped_door => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Hinge=Left, + Open=False, + Powered=False, + }, + crimson_sign => BlockBehavior::default(), { + CrimsonSignRotation=_0, + Waterlogged=False, + }, + warped_sign => BlockBehavior::default(), { + WarpedSignRotation=_0, + Waterlogged=False, + }, + crimson_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + warped_wall_sign => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + structure_block => BlockBehavior::default(), { + Mode=Load, + }, + jigsaw => BlockBehavior::default(), { + Orientation=NorthUp, + }, + composter => BlockBehavior::default(), { + ComposterLevel=_0, + }, + target => BlockBehavior::default(), { + TargetOutputPower=_0, + }, + bee_nest => BlockBehavior::default(), { + FacingCardinal=North, + BeeNestHoneyLevel=_0, + }, + beehive => BlockBehavior::default(), { + FacingCardinal=North, + BeehiveHoneyLevel=_0, + }, + honey_block => BlockBehavior::default(), { + }, + honeycomb_block => BlockBehavior::default(), { + }, + netherite_block => BlockBehavior::default(), { + }, + ancient_debris => BlockBehavior::default(), { + }, + crying_obsidian => BlockBehavior::default(), { + }, + respawn_anchor => BlockBehavior::default(), { + RespawnAnchorCharge=_0, + }, + potted_crimson_fungus => BlockBehavior::default(), { + }, + potted_warped_fungus => BlockBehavior::default(), { + }, + potted_crimson_roots => BlockBehavior::default(), { + }, + potted_warped_roots => BlockBehavior::default(), { + }, + lodestone => BlockBehavior::default(), { + }, + blackstone => BlockBehavior::default(), { + }, + blackstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + blackstone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + blackstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_blackstone => BlockBehavior::default(), { + }, + polished_blackstone_bricks => BlockBehavior::default(), { + }, + cracked_polished_blackstone_bricks => BlockBehavior::default(), { + }, + chiseled_polished_blackstone => BlockBehavior::default(), { + }, + polished_blackstone_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_blackstone_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_blackstone_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + gilded_blackstone => BlockBehavior::default(), { + }, + polished_blackstone_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_blackstone_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_blackstone_pressure_plate => BlockBehavior::default(), { + Powered=False, + }, + polished_blackstone_button => BlockBehavior::default(), { + Face=Wall, + FacingCardinal=North, + Powered=False, + }, + polished_blackstone_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + chiseled_nether_bricks => BlockBehavior::default(), { + }, + cracked_nether_bricks => BlockBehavior::default(), { + }, + quartz_bricks => BlockBehavior::default(), { + }, + candle => BlockBehavior::default(), { + CandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + white_candle => BlockBehavior::default(), { + WhiteCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + orange_candle => BlockBehavior::default(), { + OrangeCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + magenta_candle => BlockBehavior::default(), { + MagentaCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + light_blue_candle => BlockBehavior::default(), { + LightBlueCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + yellow_candle => BlockBehavior::default(), { + YellowCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + lime_candle => BlockBehavior::default(), { + LimeCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + pink_candle => BlockBehavior::default(), { + PinkCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + gray_candle => BlockBehavior::default(), { + GrayCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + light_gray_candle => BlockBehavior::default(), { + LightGrayCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + cyan_candle => BlockBehavior::default(), { + CyanCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + purple_candle => BlockBehavior::default(), { + PurpleCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + blue_candle => BlockBehavior::default(), { + BlueCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + brown_candle => BlockBehavior::default(), { + BrownCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + green_candle => BlockBehavior::default(), { + GreenCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + red_candle => BlockBehavior::default(), { + RedCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + black_candle => BlockBehavior::default(), { + BlackCandleCandles=_1, + Lit=False, + Waterlogged=False, + }, + candle_cake => BlockBehavior::default(), { + Lit=False, + }, + white_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + orange_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + magenta_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + light_blue_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + yellow_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + lime_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + pink_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + gray_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + light_gray_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + cyan_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + purple_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + blue_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + brown_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + green_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + red_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + black_candle_cake => BlockBehavior::default(), { + Lit=False, + }, + amethyst_block => BlockBehavior::default(), { + }, + budding_amethyst => BlockBehavior::default(), { + }, + amethyst_cluster => BlockBehavior::default(), { + FacingCubic=Up, + Waterlogged=False, + }, + large_amethyst_bud => BlockBehavior::default(), { + FacingCubic=Up, + Waterlogged=False, + }, + medium_amethyst_bud => BlockBehavior::default(), { + FacingCubic=Up, + Waterlogged=False, + }, + small_amethyst_bud => BlockBehavior::default(), { + FacingCubic=Up, + Waterlogged=False, + }, + tuff => BlockBehavior::default(), { + }, + calcite => BlockBehavior::default(), { + }, + tinted_glass => BlockBehavior::default(), { + }, + powder_snow => BlockBehavior::default(), { + }, + sculk_sensor => BlockBehavior::default(), { + SculkSensorPower=_0, + Phase=Inactive, + Waterlogged=False, + }, + sculk => BlockBehavior::default(), { + }, + sculk_vein => BlockBehavior::default(), { + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + TrueFalse=False, + }, + sculk_catalyst => BlockBehavior::default(), { + Pulse=False, + }, + sculk_shrieker => BlockBehavior::default(), { + CanSummon=False, + Shrieking=False, + Waterlogged=False, + }, + oxidized_copper => BlockBehavior::default(), { + }, + weathered_copper => BlockBehavior::default(), { + }, + exposed_copper => BlockBehavior::default(), { + }, + copper_block => BlockBehavior::default(), { + }, + copper_ore => BlockBehavior::default(), { + }, + deepslate_copper_ore => BlockBehavior::default(), { + }, + oxidized_cut_copper => BlockBehavior::default(), { + }, + weathered_cut_copper => BlockBehavior::default(), { + }, + exposed_cut_copper => BlockBehavior::default(), { + }, + cut_copper => BlockBehavior::default(), { + }, + oxidized_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + weathered_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + exposed_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + oxidized_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + weathered_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + exposed_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + waxed_copper_block => BlockBehavior::default(), { + }, + waxed_weathered_copper => BlockBehavior::default(), { + }, + waxed_exposed_copper => BlockBehavior::default(), { + }, + waxed_oxidized_copper => BlockBehavior::default(), { + }, + waxed_oxidized_cut_copper => BlockBehavior::default(), { + }, + waxed_weathered_cut_copper => BlockBehavior::default(), { + }, + waxed_exposed_cut_copper => BlockBehavior::default(), { + }, + waxed_cut_copper => BlockBehavior::default(), { + }, + waxed_oxidized_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + waxed_weathered_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + waxed_exposed_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + waxed_cut_copper_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + waxed_oxidized_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + waxed_weathered_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + waxed_exposed_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + waxed_cut_copper_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + lightning_rod => BlockBehavior::default(), { + FacingCubic=Up, + Powered=False, + Waterlogged=False, + }, + pointed_dripstone => BlockBehavior::default(), { + Thickness=Tip, + TipDirection=Up, + Waterlogged=False, + }, + dripstone_block => BlockBehavior::default(), { + }, + cave_vines => BlockBehavior::default(), { + _0_1_2_3_4_5_6_7_8_9_10_11_12_13_14_15_16_17_18_19_20_21_22_23_24_25=_0, + TrueFalse=False, + }, + cave_vines_plant => BlockBehavior::default(), { + TrueFalse=False, + }, + spore_blossom => BlockBehavior::default(), { + }, + azalea => BlockBehavior::default(), { + }, + flowering_azalea => BlockBehavior::default(), { + }, + moss_carpet => BlockBehavior::default(), { + }, + moss_block => BlockBehavior::default(), { + }, + big_dripleaf => BlockBehavior::default(), { + FacingCardinal=North, + Tilt=None, + Waterlogged=False, + }, + big_dripleaf_stem => BlockBehavior::default(), { + FacingCardinal=North, + Waterlogged=False, + }, + small_dripleaf => BlockBehavior::default(), { + FacingCardinal=North, + Half=Lower, + Waterlogged=False, + }, + hanging_roots => BlockBehavior::default(), { + Waterlogged=False, + }, + rooted_dirt => BlockBehavior::default(), { + }, + mud => BlockBehavior::default(), { + }, + deepslate => BlockBehavior::default(), { + Axis=Y, + }, + cobbled_deepslate => BlockBehavior::default(), { + }, + cobbled_deepslate_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + cobbled_deepslate_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + cobbled_deepslate_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + polished_deepslate => BlockBehavior::default(), { + }, + polished_deepslate_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + polished_deepslate_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + polished_deepslate_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + deepslate_tiles => BlockBehavior::default(), { + }, + deepslate_tile_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + deepslate_tile_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + deepslate_tile_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + deepslate_bricks => BlockBehavior::default(), { + }, + deepslate_brick_stairs => BlockBehavior::default(), { + FacingCardinal=North, + TopBottom=Bottom, + StairShape=Straight, + Waterlogged=False, + }, + deepslate_brick_slab => BlockBehavior::default(), { + Type=Bottom, + Waterlogged=False, + }, + deepslate_brick_wall => BlockBehavior::default(), { + EastWall=None, + NorthWall=None, + SouthWall=None, + Up=True, + Waterlogged=False, + WestWall=None, + }, + chiseled_deepslate => BlockBehavior::default(), { + }, + cracked_deepslate_bricks => BlockBehavior::default(), { + }, + cracked_deepslate_tiles => BlockBehavior::default(), { + }, + infested_deepslate => BlockBehavior::default(), { + XYZ=Y, + }, + smooth_basalt => BlockBehavior::default(), { + }, + raw_iron_block => BlockBehavior::default(), { + }, + raw_copper_block => BlockBehavior::default(), { + }, + raw_gold_block => BlockBehavior::default(), { + }, + potted_azalea_bush => BlockBehavior::default(), { + }, + potted_flowering_azalea_bush => BlockBehavior::default(), { + }, + ochre_froglight => BlockBehavior::default(), { + Axis=Y, + }, + verdant_froglight => BlockBehavior::default(), { + Axis=Y, + }, + pearlescent_froglight => BlockBehavior::default(), { + Axis=Y, + }, + frogspawn => BlockBehavior::default(), { + }, + reinforced_deepslate => BlockBehavior::default(), { + }, + } +} diff --git a/azalea-block/src/lib.rs b/azalea-block/src/lib.rs new file mode 100644 index 00000000..a6de1e92 --- /dev/null +++ b/azalea-block/src/lib.rs @@ -0,0 +1,47 @@ +mod behavior; +mod blocks; + +pub use behavior::BlockBehavior; +pub use blocks::*; + +use std::mem; + +impl BlockState { + /// Transmutes a u32 to a block state. UB if the value is not a valid block + /// state. + #[inline] + pub unsafe fn from_u32_unsafe(state_id: u32) -> Self { + mem::transmute::<u32, BlockState>(state_id) + } + + #[inline] + pub fn is_valid_state(state_id: u32) -> bool { + state_id <= Self::max_state() + } +} + +impl TryFrom<u32> for BlockState { + type Error = (); + + /// Safely converts a state id to a block state. + fn try_from(state_id: u32) -> Result<Self, Self::Error> { + if Self::is_valid_state(state_id) { + Ok(unsafe { Self::from_u32_unsafe(state_id) }) + } else { + Err(()) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_from_u32() { + assert_eq!(BlockState::try_from(0).unwrap(), BlockState::Air); + + assert!(BlockState::try_from(BlockState::max_state()).is_ok()); + assert!(BlockState::try_from(BlockState::max_state() + 1).is_err()); + } +} |
