From 5dd35c7ed82c38ef36ca28f630e8d05c5db2cbea Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Tue, 7 Mar 2023 22:09:56 -0600 Subject: Add World::find_block (#80) * start adding World::find_block * keep working on find_block * BlockStates * fix sorting * update examples that use find_one_block * azalea_block::properties * fix tests * add a gotoblock command to testbot --- azalea-block/README.md | 12 +- azalea-block/azalea-block-macros/src/lib.rs | 110 +- azalea-block/src/blocks.rs | 4912 -------------------- azalea-block/src/generated.rs | 4899 +++++++++++++++++++ azalea-block/src/lib.rs | 60 +- azalea-block/src/range.rs | 33 + azalea-core/src/position.rs | 18 +- azalea-physics/src/lib.rs | 28 +- .../game/clientbound_chunks_biomes_packet.rs | 7 + azalea-world/src/bit_storage.rs | 12 +- azalea-world/src/iterators.rs | 247 + azalea-world/src/lib.rs | 1 + azalea-world/src/palette.rs | 114 +- azalea-world/src/world.rs | 75 +- azalea/examples/craft_dig_straight_down.rs | 79 - azalea/examples/mine_a_chunk.rs | 53 - azalea/examples/pvp.rs | 65 - azalea/examples/testbot.rs | 37 +- azalea/examples/todo/README.md | 1 + azalea/examples/todo/craft_dig_straight_down.rs | 78 + azalea/examples/todo/mine_a_chunk.rs | 53 + azalea/examples/todo/pvp.rs | 65 + 22 files changed, 5711 insertions(+), 5248 deletions(-) delete mode 100755 azalea-block/src/blocks.rs create mode 100755 azalea-block/src/generated.rs create mode 100644 azalea-block/src/range.rs create mode 100644 azalea-protocol/src/packets/game/clientbound_chunks_biomes_packet.rs create mode 100644 azalea-world/src/iterators.rs delete mode 100755 azalea/examples/craft_dig_straight_down.rs delete mode 100644 azalea/examples/mine_a_chunk.rs delete mode 100755 azalea/examples/pvp.rs create mode 100644 azalea/examples/todo/README.md create mode 100644 azalea/examples/todo/craft_dig_straight_down.rs create mode 100644 azalea/examples/todo/mine_a_chunk.rs create mode 100644 azalea/examples/todo/pvp.rs diff --git a/azalea-block/README.md b/azalea-block/README.md index e4b6357b..9be4c79b 100755 --- a/azalea-block/README.md +++ b/azalea-block/README.md @@ -8,11 +8,11 @@ There's three block types, used for different things. You can (mostly) convert b ``` # use azalea_block::BlockState; -let block_state: BlockState = azalea_block::CobblestoneWallBlock { - east: azalea_block::EastWall::Low, - north: azalea_block::NorthWall::Low, - south: azalea_block::SouthWall::Low, - west: azalea_block::WestWall::Low, +let block_state: BlockState = azalea_block::blocks::CobblestoneWall { + east: azalea_block::properties::EastWall::Low, + north: azalea_block::properties::NorthWall::Low, + south: azalea_block::properties::SouthWall::Low, + west: azalea_block::properties::WestWall::Low, up: false, waterlogged: false, } @@ -36,7 +36,7 @@ let block = Box::::from(block_state); ``` # use azalea_block::{Block, BlockState}; # let block_state: BlockState = azalea_registry::Block::Jukebox.into(); -if let Some(jukebox) = Box::::from(block_state).downcast_ref::() { +if let Some(jukebox) = Box::::from(block_state).downcast_ref::() { // ... } ``` diff --git a/azalea-block/azalea-block-macros/src/lib.rs b/azalea-block/azalea-block-macros/src/lib.rs index b69ebd06..a8739e7c 100755 --- a/azalea-block/azalea-block-macros/src/lib.rs +++ b/azalea-block/azalea-block-macros/src/lib.rs @@ -38,7 +38,7 @@ struct PropertyDefinitions { properties: Vec, } -/// `snowy: false` or `axis: Axis::Y` +/// `snowy: false` or `axis: properties::Axis::Y` #[derive(Debug)] struct PropertyWithNameAndDefault { name: Ident, @@ -59,7 +59,7 @@ struct BlockDefinition { } impl Parse for PropertyWithNameAndDefault { fn parse(input: ParseStream) -> Result { - // `snowy: false` or `axis: Axis::Y` + // `snowy: false` or `axis: properties::Axis::Y` let property_name = input.parse()?; input.parse::()?; @@ -74,7 +74,7 @@ impl Parse for PropertyWithNameAndDefault { is_enum = true; property_type = first_ident; let variant = input.parse::()?; - property_default.extend(quote! { ::#variant }); + property_default = quote! { properties::#property_default::#variant }; } else if first_ident_string == "true" || first_ident_string == "false" { property_type = Ident::new("bool", first_ident.span()); } else { @@ -310,6 +310,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { let mut from_state_to_block_match = quote! {}; let mut from_registry_block_to_block_match = quote! {}; let mut from_registry_block_to_blockstate_match = quote! {}; + let mut from_registry_block_to_blockstates_match = quote! {}; for block in &input.block_definitions.blocks { let block_property_names = &block @@ -386,13 +387,16 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { for PropertyWithNameAndDefault { property_type: struct_name, name, + is_enum, .. } in &properties_with_name { // let property_name_snake = // Ident::new(&property.to_string(), proc_macro2::Span::call_site()); - block_struct_fields.extend(quote! { - pub #name: #struct_name, + block_struct_fields.extend(if *is_enum { + quote! { pub #name: properties::#struct_name, } + } else { + quote! { pub #name: #struct_name, } }); } @@ -400,10 +404,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { &to_pascal_case(&block.name.to_string()), proc_macro2::Span::call_site(), ); - let block_struct_name = Ident::new( - &format!("{block_name_pascal_case}Block"), - proc_macro2::Span::call_site(), - ); + let block_struct_name = Ident::new(&block_name_pascal_case.to_string(), proc_macro2::Span::call_site()); let mut from_block_to_state_match_inner = quote! {}; @@ -445,7 +446,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { } let property_type = if property.is_enum { - quote! {#property_struct_name_ident::#variant} + quote! {properties::#property_struct_name_ident::#variant} } else { quote! {#variant} }; @@ -476,9 +477,9 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { // 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), + // powered: properties::Powered::from((b / 1) % 2), + // facing: properties::Facing::from((b / 2) % 4), + // face: properties::Face::from((b / 8) % 3), // } // } let mut from_state_to_block_inner = quote! {}; @@ -498,7 +499,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { // this is not a mistake, it starts with true for some reason quote! {(b / #division) % #property_variants_count == 0} } else { - quote! {#property_struct_name_ident::from((b / #division) % #property_variants_count)} + quote! {properties::#property_struct_name_ident::from((b / #division) % #property_variants_count)} } }; from_state_to_block_inner.extend(quote! { @@ -523,6 +524,9 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { from_registry_block_to_blockstate_match.extend(quote! { azalea_registry::Block::#block_name_pascal_case => BlockState { id: #default_state_id }, }); + from_registry_block_to_blockstates_match.extend(quote! { + azalea_registry::Block::#block_name_pascal_case => BlockStates::from(#first_state_id..=#last_state_id), + }); let mut block_default_fields = quote! {}; for PropertyWithNameAndDefault { @@ -560,14 +564,14 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { fn id(&self) -> &'static str { #block_id } - fn as_blockstate(&self) -> BlockState { + fn as_block_state(&self) -> BlockState { #from_block_to_state_match } } impl From<#block_struct_name> for BlockState { fn from(b: #block_struct_name) -> Self { - b.as_blockstate() + b.as_block_state() } } @@ -585,21 +589,7 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { let last_state_id = state_id - 1; let mut generated = quote! { - #property_enums - - /// A representation of a state a block can be in. (for example, a stone - /// block only has one state but each possible stair rotation is a - /// different state). - #[derive(Copy, Clone, PartialEq, Eq, Default)] - pub struct BlockState { - /// The protocol ID for the block state. IDs may change every - /// version, so you shouldn't hard-code them or store them in databases. - pub id: u32 - } - impl BlockState { - pub const AIR: BlockState = BlockState { id: 0 }; - /// Returns the highest possible state ID. #[inline] pub fn max_state() -> u32 { @@ -607,38 +597,50 @@ pub fn make_block_states(input: TokenStream) -> TokenStream { } } - impl std::fmt::Debug for BlockState { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - write!(f, "BlockState(id: {}, {:?})", self.id, Box::::from(*self)) - } + pub mod properties { + use super::*; + + #property_enums } }; generated.extend(quote! { - #block_structs - - impl From for Box { - fn from(block_state: BlockState) -> Self { - let b = block_state.id; - match b { - #from_state_to_block_match - _ => panic!("Invalid block state: {}", b), + pub mod blocks { + use super::*; + + #block_structs + + impl From for Box { + fn from(block_state: BlockState) -> Self { + let b = block_state.id; + match b { + #from_state_to_block_match + _ => panic!("Invalid block state: {}", b), + } } } - } - impl From for Box { - fn from(block: azalea_registry::Block) -> Self { - match block { - #from_registry_block_to_block_match - _ => unreachable!("There should always be a block struct for every azalea_registry::Block variant") + impl From for Box { + fn from(block: azalea_registry::Block) -> Self { + match block { + #from_registry_block_to_block_match + _ => unreachable!("There should always be a block struct for every azalea_registry::Block variant") + } } } - } - impl From for BlockState { - fn from(block: azalea_registry::Block) -> Self { - match block { - #from_registry_block_to_blockstate_match - _ => unreachable!("There should always be a block state for every azalea_registry::Block variant") + impl From for BlockState { + fn from(block: azalea_registry::Block) -> Self { + match block { + #from_registry_block_to_blockstate_match + _ => unreachable!("There should always be a block state for every azalea_registry::Block variant") + } + } + } + impl From for BlockStates { + fn from(block: azalea_registry::Block) -> Self { + match block { + #from_registry_block_to_blockstates_match + _ => unreachable!("There should always be a block state for every azalea_registry::Block variant") + } } } } diff --git a/azalea-block/src/blocks.rs b/azalea-block/src/blocks.rs deleted file mode 100755 index e6923d59..00000000 --- a/azalea-block/src/blocks.rs +++ /dev/null @@ -1,4912 +0,0 @@ -use std::any::Any; - -use crate::BlockBehavior; -use azalea_block_macros::make_block_states; -use std::fmt::Debug; - -pub trait Block: Debug + Any { - fn behavior(&self) -> BlockBehavior; - fn id(&self) -> &'static str; - fn as_blockstate(&self) -> BlockState; -} -impl dyn Block { - pub fn downcast_ref(&self) -> Option<&T> { - (self as &dyn Any).downcast_ref::() - } -} - -make_block_states! { - Properties => { - "snowy" => bool, - "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" => bool, - "stage" => MangrovePropaguleStage { - _0, - _1, - }, - "waterlogged" => bool, - "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" => bool, - "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" => bool, - "instrument" => Sound { - Harp, - Basedrum, - Snare, - Hat, - Bass, - Flute, - Bell, - Guitar, - Chime, - Xylophone, - IronXylophone, - CowBell, - Didgeridoo, - Bit, - Banjo, - Pling, - Zombie, - Skeleton, - Creeper, - Dragon, - WitherSkeleton, - Piglin, - CustomHead, - }, - "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" => bool, - "facing" => FacingCardinal { - North, - South, - West, - East, - }, - "occupied" => bool, - "part" => Part { - Head, - Foot, - }, - "shape" => RailShape { - NorthSouth, - EastWest, - AscendingEast, - AscendingWest, - AscendingNorth, - AscendingSouth, - }, - "extended" => bool, - "half" => Half { - Upper, - Lower, - }, - "kind" => PistonType { - Normal, - Sticky, - }, - "short" => bool, - "unstable" => bool, - "slot_0_occupied" => bool, - "slot_1_occupied" => bool, - "slot_2_occupied" => bool, - "slot_3_occupied" => bool, - "slot_4_occupied" => bool, - "slot_5_occupied" => bool, - "age" => FireAge { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "east" => bool, - "north" => bool, - "south" => bool, - "up" => bool, - "west" => bool, - "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" => bool, - "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, - }, - "rotation" => BambooSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "hinge" => Hinge { - Left, - Right, - }, - "open" => bool, - "shape" => Shape { - NorthSouth, - EastWest, - AscendingEast, - AscendingWest, - AscendingNorth, - AscendingSouth, - SouthEast, - SouthWest, - NorthWest, - NorthEast, - }, - "attached" => bool, - "rotation" => OakHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => SpruceHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BirchHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => AcaciaHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => JungleHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => DarkOakHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => CrimsonHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => WarpedHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => MangroveHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "rotation" => BambooHangingSignRotation { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "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" => bool, - "axis" => AxisXZ { - X, - Z, - }, - "bites" => CakeBites { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - }, - "delay" => RepeaterDelay { - _1, - _2, - _3, - _4, - }, - "locked" => bool, - "down" => bool, - "age" => PumpkinStemAge { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - }, - "age" => MelonStemAge { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - }, - "down" => bool, - "north" => bool, - "south" => bool, - "up" => bool, - "west" => bool, - "in_wall" => bool, - "age" => NetherWartAge { - _0, - _1, - _2, - _3, - }, - "has_bottle" => bool, - "level" => WaterCauldronLevel { - _1, - _2, - _3, - }, - "level" => PowderSnowCauldronLevel { - _1, - _2, - _3, - }, - "eye" => bool, - "age" => CocoaAge { - _0, - _1, - _2, - }, - "disarmed" => bool, - "conditional" => bool, - "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, - }, - "rotation" => PiglinHeadRotation { - _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" => bool, - "power" => DaylightDetectorPower { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - _8, - _9, - _10, - _11, - _12, - _13, - _14, - _15, - }, - "enabled" => bool, - "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" => bool, - "bottom" => bool, - "distance" => ScaffoldingDistance { - _0, - _1, - _2, - _3, - _4, - _5, - _6, - _7, - }, - "has_book" => bool, - "attachment" => Attachment { - Floor, - Ceiling, - SingleWall, - DoubleWall, - }, - "signal_fire" => bool, - "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, - }, - "south" => bool, - "west" => bool, - "bloom" => bool, - "can_summon" => bool, - "shrieking" => bool, - "thickness" => Thickness { - TipMerge, - Tip, - Frustum, - Middle, - Base, - }, - "vertical_direction" => TipDirection { - Up, - Down, - }, - "age" => CaveVinesAge { - _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, - }, - "berries" => bool, - "tilt" => Tilt { - None, - Unstable, - Partial, - Full, - }, - "axis" => CacheSize { - 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(), {}, - bamboo_planks => BlockBehavior::default(), {}, - bamboo_mosaic => BlockBehavior::default(), {}, - oak_sapling => BlockBehavior::default(), { - stage: OakSaplingStage::_0, - }, - spruce_sapling => BlockBehavior::default(), { - stage: SpruceSaplingStage::_0, - }, - birch_sapling => BlockBehavior::default(), { - stage: BirchSaplingStage::_0, - }, - jungle_sapling => BlockBehavior::default(), { - stage: JungleSaplingStage::_0, - }, - acacia_sapling => BlockBehavior::default(), { - stage: AcaciaSaplingStage::_0, - }, - dark_oak_sapling => BlockBehavior::default(), { - stage: DarkOakSaplingStage::_0, - }, - mangrove_propagule => BlockBehavior::default(), { - age: MangrovePropaguleAge::_0, - hanging: false, - stage: MangrovePropaguleStage::_0, - waterlogged: false, - }, - bedrock => BlockBehavior::default(), {}, - water => BlockBehavior::default(), { - level: WaterLevel::_0, - }, - lava => BlockBehavior::default(), { - level: 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: Axis::Y, - }, - spruce_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - birch_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - jungle_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - acacia_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - dark_oak_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - mangrove_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - mangrove_roots => BlockBehavior::default(), { - waterlogged: false, - }, - muddy_mangrove_roots => BlockBehavior::default(), { - axis: Axis::Y, - }, - bamboo_block => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_spruce_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_birch_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_jungle_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_acacia_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_dark_oak_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_oak_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_mangrove_log => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_bamboo_block => BlockBehavior::default(), { - axis: Axis::Y, - }, - oak_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - spruce_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - birch_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - jungle_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - acacia_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - dark_oak_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - mangrove_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_oak_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_spruce_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_birch_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_jungle_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_acacia_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_dark_oak_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_mangrove_wood => BlockBehavior::default(), { - axis: Axis::Y, - }, - oak_leaves => BlockBehavior::default(), { - distance: OakLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - spruce_leaves => BlockBehavior::default(), { - distance: SpruceLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - birch_leaves => BlockBehavior::default(), { - distance: BirchLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - jungle_leaves => BlockBehavior::default(), { - distance: JungleLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - acacia_leaves => BlockBehavior::default(), { - distance: AcaciaLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - dark_oak_leaves => BlockBehavior::default(), { - distance: DarkOakLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - mangrove_leaves => BlockBehavior::default(), { - distance: MangroveLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - azalea_leaves => BlockBehavior::default(), { - distance: AzaleaLeavesDistance::_7, - persistent: false, - waterlogged: false, - }, - flowering_azalea_leaves => BlockBehavior::default(), { - distance: 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(), { - facing: FacingCubic::North, - triggered: false, - }, - sandstone => BlockBehavior::default(), {}, - chiseled_sandstone => BlockBehavior::default(), {}, - cut_sandstone => BlockBehavior::default(), {}, - note_block => BlockBehavior::default(), { - instrument: Sound::Harp, - note: NoteBlockNote::_0, - powered: false, - }, - white_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - orange_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - magenta_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - light_blue_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - yellow_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - lime_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - pink_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - gray_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - light_gray_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - cyan_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - purple_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - blue_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - brown_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - green_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - red_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - black_bed => BlockBehavior::default(), { - facing: FacingCardinal::North, - occupied: false, - part: Part::Foot, - }, - powered_rail => BlockBehavior::default(), { - powered: false, - shape: RailShape::NorthSouth, - waterlogged: false, - }, - detector_rail => BlockBehavior::default(), { - powered: false, - shape: RailShape::NorthSouth, - waterlogged: false, - }, - sticky_piston => BlockBehavior::default(), { - extended: false, - facing: FacingCubic::North, - }, - cobweb => BlockBehavior::default(), {}, - grass => BlockBehavior::default(), {}, - fern => BlockBehavior::default(), {}, - dead_bush => BlockBehavior::default(), {}, - seagrass => BlockBehavior::default(), {}, - tall_seagrass => BlockBehavior::default(), { - half: Half::Lower, - }, - piston => BlockBehavior::default(), { - extended: false, - facing: FacingCubic::North, - }, - piston_head => BlockBehavior::default(), { - kind: PistonType::Normal, - facing: 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(), { - kind: PistonType::Normal, - facing: 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(), {}, - chiseled_bookshelf => BlockBehavior::default(), { - facing: FacingCardinal::North, - slot_0_occupied: false, - slot_1_occupied: false, - slot_2_occupied: false, - slot_3_occupied: false, - slot_4_occupied: false, - slot_5_occupied: false, - }, - mossy_cobblestone => BlockBehavior::default(), {}, - obsidian => BlockBehavior::default(), {}, - torch => BlockBehavior::default(), {}, - wall_torch => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - fire => BlockBehavior::default(), { - age: FireAge::_0, - east: false, - north: false, - south: false, - up: false, - west: false, - }, - soul_fire => BlockBehavior::default(), {}, - spawner => BlockBehavior::default(), {}, - oak_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - chest => BlockBehavior::default(), { - kind: ChestType::Single, - facing: FacingCardinal::North, - waterlogged: false, - }, - redstone_wire => BlockBehavior::default(), { - east: WireEast::None, - north: WireNorth::None, - power: RedstoneWirePower::_0, - south: WireSouth::None, - west: WireWest::None, - }, - diamond_ore => BlockBehavior::default(), {}, - deepslate_diamond_ore => BlockBehavior::default(), {}, - diamond_block => BlockBehavior::default(), {}, - crafting_table => BlockBehavior::default(), {}, - wheat => BlockBehavior::default(), { - age: WheatAge::_0, - }, - farmland => BlockBehavior::default(), { - moisture: FarmlandMoisture::_0, - }, - furnace => BlockBehavior::default(), { - facing: FacingCardinal::North, - lit: false, - }, - oak_sign => BlockBehavior::default(), { - rotation: OakSignRotation::_0, - waterlogged: false, - }, - spruce_sign => BlockBehavior::default(), { - rotation: SpruceSignRotation::_0, - waterlogged: false, - }, - birch_sign => BlockBehavior::default(), { - rotation: BirchSignRotation::_0, - waterlogged: false, - }, - acacia_sign => BlockBehavior::default(), { - rotation: AcaciaSignRotation::_0, - waterlogged: false, - }, - jungle_sign => BlockBehavior::default(), { - rotation: JungleSignRotation::_0, - waterlogged: false, - }, - dark_oak_sign => BlockBehavior::default(), { - rotation: DarkOakSignRotation::_0, - waterlogged: false, - }, - mangrove_sign => BlockBehavior::default(), { - rotation: MangroveSignRotation::_0, - waterlogged: false, - }, - bamboo_sign => BlockBehavior::default(), { - rotation: BambooSignRotation::_0, - waterlogged: false, - }, - oak_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - ladder => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - rail => BlockBehavior::default(), { - shape: Shape::NorthSouth, - waterlogged: false, - }, - cobblestone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - oak_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - spruce_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - birch_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - acacia_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - jungle_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - dark_oak_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - mangrove_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - bamboo_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - oak_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: OakHangingSignRotation::_0, - waterlogged: false, - }, - spruce_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: SpruceHangingSignRotation::_0, - waterlogged: false, - }, - birch_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: BirchHangingSignRotation::_0, - waterlogged: false, - }, - acacia_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: AcaciaHangingSignRotation::_0, - waterlogged: false, - }, - jungle_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: JungleHangingSignRotation::_0, - waterlogged: false, - }, - dark_oak_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: DarkOakHangingSignRotation::_0, - waterlogged: false, - }, - crimson_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: CrimsonHangingSignRotation::_0, - waterlogged: false, - }, - warped_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: WarpedHangingSignRotation::_0, - waterlogged: false, - }, - mangrove_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: MangroveHangingSignRotation::_0, - waterlogged: false, - }, - bamboo_hanging_sign => BlockBehavior::default(), { - attached: false, - rotation: BambooHangingSignRotation::_0, - waterlogged: false, - }, - oak_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - spruce_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - birch_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - acacia_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - jungle_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - dark_oak_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - mangrove_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - crimson_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - warped_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - bamboo_wall_hanging_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - lever => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - stone_pressure_plate => BlockBehavior::default(), { - powered: false, - }, - iron_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: 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, - }, - bamboo_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(), { - facing: FacingCardinal::North, - lit: true, - }, - stone_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - snow => BlockBehavior::default(), { - layers: SnowLayers::_1, - }, - ice => BlockBehavior::default(), {}, - snow_block => BlockBehavior::default(), {}, - cactus => BlockBehavior::default(), { - age: CactusAge::_0, - }, - clay => BlockBehavior::default(), {}, - sugar_cane => BlockBehavior::default(), { - age: SugarCaneAge::_0, - }, - jukebox => BlockBehavior::default(), { - has_record: 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: Axis::Y, - }, - polished_basalt => BlockBehavior::default(), { - axis: Axis::Y, - }, - soul_torch => BlockBehavior::default(), {}, - soul_wall_torch => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - glowstone => BlockBehavior::default(), {}, - nether_portal => BlockBehavior::default(), { - axis: AxisXZ::X, - }, - carved_pumpkin => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - jack_o_lantern => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - cake => BlockBehavior::default(), { - bites: CakeBites::_0, - }, - repeater => BlockBehavior::default(), { - delay: RepeaterDelay::_1, - facing: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - spruce_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - birch_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - jungle_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - acacia_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - dark_oak_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - mangrove_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - bamboo_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: 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: 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(), { - facing: FacingCardinal::North, - }, - attached_melon_stem => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - pumpkin_stem => BlockBehavior::default(), { - age: PumpkinStemAge::_0, - }, - melon_stem => BlockBehavior::default(), { - age: MelonStemAge::_0, - }, - vine => BlockBehavior::default(), { - east: false, - north: false, - south: false, - up: false, - west: false, - }, - glow_lichen => BlockBehavior::default(), { - down: false, - east: false, - north: false, - south: false, - up: false, - waterlogged: false, - west: false, - }, - oak_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - stone_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - mud_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - nether_wart => BlockBehavior::default(), { - age: NetherWartAge::_0, - }, - enchanting_table => BlockBehavior::default(), {}, - brewing_stand => BlockBehavior::default(), { - has_bottle: false, - has_bottle: false, - has_bottle: false, - }, - cauldron => BlockBehavior::default(), {}, - water_cauldron => BlockBehavior::default(), { - level: WaterCauldronLevel::_1, - }, - lava_cauldron => BlockBehavior::default(), {}, - powder_snow_cauldron => BlockBehavior::default(), { - level: PowderSnowCauldronLevel::_1, - }, - end_portal => BlockBehavior::default(), {}, - end_portal_frame => BlockBehavior::default(), { - eye: false, - facing: FacingCardinal::North, - }, - end_stone => BlockBehavior::default(), {}, - dragon_egg => BlockBehavior::default(), {}, - redstone_lamp => BlockBehavior::default(), { - lit: false, - }, - cocoa => BlockBehavior::default(), { - age: CocoaAge::_0, - facing: FacingCardinal::North, - }, - sandstone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - emerald_ore => BlockBehavior::default(), {}, - deepslate_emerald_ore => BlockBehavior::default(), {}, - ender_chest => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - tripwire_hook => BlockBehavior::default(), { - attached: false, - facing: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - birch_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - jungle_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - command_block => BlockBehavior::default(), { - conditional: false, - facing: FacingCubic::North, - }, - beacon => BlockBehavior::default(), {}, - cobblestone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - mossy_cobblestone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: 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(), { - age: CarrotsAge::_0, - }, - potatoes => BlockBehavior::default(), { - age: PotatoesAge::_0, - }, - oak_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - spruce_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - birch_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - jungle_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - acacia_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - dark_oak_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - mangrove_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - bamboo_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - skeleton_skull => BlockBehavior::default(), { - rotation: SkeletonSkullRotation::_0, - }, - skeleton_wall_skull => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - wither_skeleton_skull => BlockBehavior::default(), { - rotation: WitherSkeletonSkullRotation::_0, - }, - wither_skeleton_wall_skull => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - zombie_head => BlockBehavior::default(), { - rotation: ZombieHeadRotation::_0, - }, - zombie_wall_head => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - player_head => BlockBehavior::default(), { - rotation: PlayerHeadRotation::_0, - }, - player_wall_head => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - creeper_head => BlockBehavior::default(), { - rotation: CreeperHeadRotation::_0, - }, - creeper_wall_head => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - dragon_head => BlockBehavior::default(), { - rotation: DragonHeadRotation::_0, - }, - dragon_wall_head => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - piglin_head => BlockBehavior::default(), { - rotation: PiglinHeadRotation::_0, - }, - piglin_wall_head => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - anvil => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - chipped_anvil => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - damaged_anvil => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - trapped_chest => BlockBehavior::default(), { - kind: ChestType::Single, - facing: FacingCardinal::North, - waterlogged: false, - }, - light_weighted_pressure_plate => BlockBehavior::default(), { - power: LightWeightedPressurePlatePower::_0, - }, - heavy_weighted_pressure_plate => BlockBehavior::default(), { - power: HeavyWeightedPressurePlatePower::_0, - }, - comparator => BlockBehavior::default(), { - facing: FacingCardinal::North, - mode: ComparatorType::Compare, - powered: false, - }, - daylight_detector => BlockBehavior::default(), { - inverted: false, - power: DaylightDetectorPower::_0, - }, - redstone_block => BlockBehavior::default(), {}, - nether_quartz_ore => BlockBehavior::default(), {}, - hopper => BlockBehavior::default(), { - enabled: true, - facing: Facing::Down, - }, - quartz_block => BlockBehavior::default(), {}, - chiseled_quartz_block => BlockBehavior::default(), {}, - quartz_pillar => BlockBehavior::default(), { - axis: Axis::Y, - }, - quartz_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - activator_rail => BlockBehavior::default(), { - powered: false, - shape: RailShape::NorthSouth, - waterlogged: false, - }, - dropper => BlockBehavior::default(), { - facing: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - dark_oak_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - mangrove_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - bamboo_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - bamboo_mosaic_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - slime_block => BlockBehavior::default(), {}, - barrier => BlockBehavior::default(), {}, - light => BlockBehavior::default(), { - level: LightLevel::_15, - waterlogged: false, - }, - iron_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - prismarine => BlockBehavior::default(), {}, - prismarine_bricks => BlockBehavior::default(), {}, - dark_prismarine => BlockBehavior::default(), {}, - prismarine_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - prismarine_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - dark_prismarine_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - prismarine_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - prismarine_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - dark_prismarine_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - sea_lantern => BlockBehavior::default(), {}, - hay_block => BlockBehavior::default(), { - axis: 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: Half::Lower, - }, - lilac => BlockBehavior::default(), { - half: Half::Lower, - }, - rose_bush => BlockBehavior::default(), { - half: Half::Lower, - }, - peony => BlockBehavior::default(), { - half: Half::Lower, - }, - tall_grass => BlockBehavior::default(), { - half: Half::Lower, - }, - large_fern => BlockBehavior::default(), { - half: Half::Lower, - }, - white_banner => BlockBehavior::default(), { - rotation: WhiteBannerRotation::_0, - }, - orange_banner => BlockBehavior::default(), { - rotation: OrangeBannerRotation::_0, - }, - magenta_banner => BlockBehavior::default(), { - rotation: MagentaBannerRotation::_0, - }, - light_blue_banner => BlockBehavior::default(), { - rotation: LightBlueBannerRotation::_0, - }, - yellow_banner => BlockBehavior::default(), { - rotation: YellowBannerRotation::_0, - }, - lime_banner => BlockBehavior::default(), { - rotation: LimeBannerRotation::_0, - }, - pink_banner => BlockBehavior::default(), { - rotation: PinkBannerRotation::_0, - }, - gray_banner => BlockBehavior::default(), { - rotation: GrayBannerRotation::_0, - }, - light_gray_banner => BlockBehavior::default(), { - rotation: LightGrayBannerRotation::_0, - }, - cyan_banner => BlockBehavior::default(), { - rotation: CyanBannerRotation::_0, - }, - purple_banner => BlockBehavior::default(), { - rotation: PurpleBannerRotation::_0, - }, - blue_banner => BlockBehavior::default(), { - rotation: BlueBannerRotation::_0, - }, - brown_banner => BlockBehavior::default(), { - rotation: BrownBannerRotation::_0, - }, - green_banner => BlockBehavior::default(), { - rotation: GreenBannerRotation::_0, - }, - red_banner => BlockBehavior::default(), { - rotation: RedBannerRotation::_0, - }, - black_banner => BlockBehavior::default(), { - rotation: BlackBannerRotation::_0, - }, - white_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - orange_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - magenta_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - light_blue_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - yellow_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - lime_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - pink_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - gray_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - light_gray_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - cyan_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - purple_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - blue_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - brown_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - green_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - red_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - black_wall_banner => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - red_sandstone => BlockBehavior::default(), {}, - chiseled_red_sandstone => BlockBehavior::default(), {}, - cut_red_sandstone => BlockBehavior::default(), {}, - red_sandstone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - oak_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - spruce_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - birch_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - jungle_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - acacia_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - dark_oak_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - mangrove_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - bamboo_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - bamboo_mosaic_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - stone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - smooth_stone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - cut_sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - petrified_oak_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - cobblestone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - stone_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - mud_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - nether_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - quartz_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - red_sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - cut_red_sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - purpur_slab => BlockBehavior::default(), { - kind: 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(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - birch_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - jungle_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - acacia_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - dark_oak_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - mangrove_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - bamboo_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: 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, - }, - bamboo_fence => BlockBehavior::default(), { - east: false, - north: false, - south: false, - waterlogged: false, - west: false, - }, - spruce_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - birch_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - jungle_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - acacia_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - dark_oak_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - mangrove_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - bamboo_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - end_rod => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - chorus_plant => BlockBehavior::default(), { - down: false, - east: false, - north: false, - south: false, - up: false, - west: false, - }, - chorus_flower => BlockBehavior::default(), { - age: ChorusFlowerAge::_0, - }, - purpur_block => BlockBehavior::default(), {}, - purpur_pillar => BlockBehavior::default(), { - axis: Axis::Y, - }, - purpur_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - end_stone_bricks => BlockBehavior::default(), {}, - beetroots => BlockBehavior::default(), { - age: BeetrootsAge::_0, - }, - dirt_path => BlockBehavior::default(), {}, - end_gateway => BlockBehavior::default(), {}, - repeating_command_block => BlockBehavior::default(), { - conditional: false, - facing: FacingCubic::North, - }, - chain_command_block => BlockBehavior::default(), { - conditional: false, - facing: FacingCubic::North, - }, - frosted_ice => BlockBehavior::default(), { - age: FrostedIceAge::_0, - }, - magma_block => BlockBehavior::default(), {}, - nether_wart_block => BlockBehavior::default(), {}, - red_nether_bricks => BlockBehavior::default(), {}, - bone_block => BlockBehavior::default(), { - axis: Axis::Y, - }, - structure_void => BlockBehavior::default(), {}, - observer => BlockBehavior::default(), { - facing: FacingCubic::South, - powered: false, - }, - shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - white_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - orange_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - magenta_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - light_blue_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - yellow_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - lime_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - pink_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - gray_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - light_gray_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - cyan_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - purple_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - blue_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - brown_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - green_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - red_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - black_shulker_box => BlockBehavior::default(), { - facing: FacingCubic::Up, - }, - white_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - orange_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - magenta_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - light_blue_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - yellow_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - lime_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - pink_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - gray_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - light_gray_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - cyan_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - purple_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - blue_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - brown_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - green_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - red_glazed_terracotta => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - black_glazed_terracotta => BlockBehavior::default(), { - facing: 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(), { - age: KelpAge::_0, - }, - kelp_plant => BlockBehavior::default(), {}, - dried_kelp_block => BlockBehavior::default(), {}, - turtle_egg => BlockBehavior::default(), { - eggs: TurtleEggEggs::_1, - hatch: 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(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - dead_brain_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - dead_bubble_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - dead_fire_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - dead_horn_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - tube_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - brain_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - bubble_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - fire_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - horn_coral_wall_fan => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: true, - }, - sea_pickle => BlockBehavior::default(), { - pickles: SeaPicklePickles::_1, - waterlogged: true, - }, - blue_ice => BlockBehavior::default(), {}, - conduit => BlockBehavior::default(), { - waterlogged: true, - }, - bamboo_sapling => BlockBehavior::default(), {}, - bamboo => BlockBehavior::default(), { - age: BambooAge::_0, - leaves: Leaves::None, - stage: BambooStage::_0, - }, - potted_bamboo => BlockBehavior::default(), {}, - void_air => BlockBehavior::default(), {}, - cave_air => BlockBehavior::default(), {}, - bubble_column => BlockBehavior::default(), { - drag: true, - }, - polished_granite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - smooth_red_sandstone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - mossy_stone_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_diorite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - mossy_cobblestone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - end_stone_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - stone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - smooth_sandstone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - smooth_quartz_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - granite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - andesite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - red_nether_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_andesite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - diorite_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_granite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - smooth_red_sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - mossy_stone_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - polished_diorite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - mossy_cobblestone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - end_stone_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - smooth_sandstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - smooth_quartz_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - granite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - andesite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - red_nether_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - polished_andesite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - diorite_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - prismarine_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - red_sandstone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - mossy_stone_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - granite_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - stone_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - mud_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - nether_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - andesite_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - red_nether_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - sandstone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - end_stone_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - diorite_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - scaffolding => BlockBehavior::default(), { - bottom: false, - distance: ScaffoldingDistance::_7, - waterlogged: false, - }, - loom => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - barrel => BlockBehavior::default(), { - facing: FacingCubic::North, - open: false, - }, - smoker => BlockBehavior::default(), { - facing: FacingCardinal::North, - lit: false, - }, - blast_furnace => BlockBehavior::default(), { - facing: FacingCardinal::North, - lit: false, - }, - cartography_table => BlockBehavior::default(), {}, - fletching_table => BlockBehavior::default(), {}, - grindstone => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - }, - lectern => BlockBehavior::default(), { - facing: FacingCardinal::North, - has_book: false, - powered: false, - }, - smithing_table => BlockBehavior::default(), {}, - stonecutter => BlockBehavior::default(), { - facing: FacingCardinal::North, - }, - bell => BlockBehavior::default(), { - attachment: Attachment::Floor, - facing: FacingCardinal::North, - powered: false, - }, - lantern => BlockBehavior::default(), { - hanging: false, - waterlogged: false, - }, - soul_lantern => BlockBehavior::default(), { - hanging: false, - waterlogged: false, - }, - campfire => BlockBehavior::default(), { - facing: FacingCardinal::North, - lit: true, - signal_fire: false, - waterlogged: false, - }, - soul_campfire => BlockBehavior::default(), { - facing: FacingCardinal::North, - lit: true, - signal_fire: false, - waterlogged: false, - }, - sweet_berry_bush => BlockBehavior::default(), { - age: SweetBerryBushAge::_0, - }, - warped_stem => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_warped_stem => BlockBehavior::default(), { - axis: Axis::Y, - }, - warped_hyphae => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_warped_hyphae => BlockBehavior::default(), { - axis: 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: Axis::Y, - }, - stripped_crimson_stem => BlockBehavior::default(), { - axis: Axis::Y, - }, - crimson_hyphae => BlockBehavior::default(), { - axis: Axis::Y, - }, - stripped_crimson_hyphae => BlockBehavior::default(), { - axis: Axis::Y, - }, - crimson_nylium => BlockBehavior::default(), {}, - crimson_fungus => BlockBehavior::default(), {}, - shroomlight => BlockBehavior::default(), {}, - weeping_vines => BlockBehavior::default(), { - age: WeepingVinesAge::_0, - }, - weeping_vines_plant => BlockBehavior::default(), {}, - twisting_vines => BlockBehavior::default(), { - age: TwistingVinesAge::_0, - }, - twisting_vines_plant => BlockBehavior::default(), {}, - crimson_roots => BlockBehavior::default(), {}, - crimson_planks => BlockBehavior::default(), {}, - warped_planks => BlockBehavior::default(), {}, - crimson_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - warped_slab => BlockBehavior::default(), { - kind: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - warped_trapdoor => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - open: false, - powered: false, - waterlogged: false, - }, - crimson_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - warped_fence_gate => BlockBehavior::default(), { - facing: FacingCardinal::North, - in_wall: false, - open: false, - powered: false, - }, - crimson_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - warped_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - crimson_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - warped_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - crimson_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - warped_door => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - hinge: Hinge::Left, - open: false, - powered: false, - }, - crimson_sign => BlockBehavior::default(), { - rotation: CrimsonSignRotation::_0, - waterlogged: false, - }, - warped_sign => BlockBehavior::default(), { - rotation: WarpedSignRotation::_0, - waterlogged: false, - }, - crimson_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - warped_wall_sign => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - structure_block => BlockBehavior::default(), { - mode: Mode::Load, - }, - jigsaw => BlockBehavior::default(), { - orientation: Orientation::NorthUp, - }, - composter => BlockBehavior::default(), { - level: ComposterLevel::_0, - }, - target => BlockBehavior::default(), { - power: TargetOutputPower::_0, - }, - bee_nest => BlockBehavior::default(), { - facing: FacingCardinal::North, - honey_level: BeeNestHoneyLevel::_0, - }, - beehive => BlockBehavior::default(), { - facing: FacingCardinal::North, - honey_level: 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(), { - charges: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - blackstone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - blackstone_slab => BlockBehavior::default(), { - kind: 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(), { - kind: Type::Bottom, - waterlogged: false, - }, - polished_blackstone_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_blackstone_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - gilded_blackstone => BlockBehavior::default(), {}, - polished_blackstone_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_blackstone_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - polished_blackstone_pressure_plate => BlockBehavior::default(), { - powered: false, - }, - polished_blackstone_button => BlockBehavior::default(), { - face: Face::Wall, - facing: FacingCardinal::North, - powered: false, - }, - polished_blackstone_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - chiseled_nether_bricks => BlockBehavior::default(), {}, - cracked_nether_bricks => BlockBehavior::default(), {}, - quartz_bricks => BlockBehavior::default(), {}, - candle => BlockBehavior::default(), { - candles: CandleCandles::_1, - lit: false, - waterlogged: false, - }, - white_candle => BlockBehavior::default(), { - candles: WhiteCandleCandles::_1, - lit: false, - waterlogged: false, - }, - orange_candle => BlockBehavior::default(), { - candles: OrangeCandleCandles::_1, - lit: false, - waterlogged: false, - }, - magenta_candle => BlockBehavior::default(), { - candles: MagentaCandleCandles::_1, - lit: false, - waterlogged: false, - }, - light_blue_candle => BlockBehavior::default(), { - candles: LightBlueCandleCandles::_1, - lit: false, - waterlogged: false, - }, - yellow_candle => BlockBehavior::default(), { - candles: YellowCandleCandles::_1, - lit: false, - waterlogged: false, - }, - lime_candle => BlockBehavior::default(), { - candles: LimeCandleCandles::_1, - lit: false, - waterlogged: false, - }, - pink_candle => BlockBehavior::default(), { - candles: PinkCandleCandles::_1, - lit: false, - waterlogged: false, - }, - gray_candle => BlockBehavior::default(), { - candles: GrayCandleCandles::_1, - lit: false, - waterlogged: false, - }, - light_gray_candle => BlockBehavior::default(), { - candles: LightGrayCandleCandles::_1, - lit: false, - waterlogged: false, - }, - cyan_candle => BlockBehavior::default(), { - candles: CyanCandleCandles::_1, - lit: false, - waterlogged: false, - }, - purple_candle => BlockBehavior::default(), { - candles: PurpleCandleCandles::_1, - lit: false, - waterlogged: false, - }, - blue_candle => BlockBehavior::default(), { - candles: BlueCandleCandles::_1, - lit: false, - waterlogged: false, - }, - brown_candle => BlockBehavior::default(), { - candles: BrownCandleCandles::_1, - lit: false, - waterlogged: false, - }, - green_candle => BlockBehavior::default(), { - candles: GreenCandleCandles::_1, - lit: false, - waterlogged: false, - }, - red_candle => BlockBehavior::default(), { - candles: RedCandleCandles::_1, - lit: false, - waterlogged: false, - }, - black_candle => BlockBehavior::default(), { - candles: 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(), { - facing: FacingCubic::Up, - waterlogged: false, - }, - large_amethyst_bud => BlockBehavior::default(), { - facing: FacingCubic::Up, - waterlogged: false, - }, - medium_amethyst_bud => BlockBehavior::default(), { - facing: FacingCubic::Up, - waterlogged: false, - }, - small_amethyst_bud => BlockBehavior::default(), { - facing: FacingCubic::Up, - waterlogged: false, - }, - tuff => BlockBehavior::default(), {}, - calcite => BlockBehavior::default(), {}, - tinted_glass => BlockBehavior::default(), {}, - powder_snow => BlockBehavior::default(), {}, - sculk_sensor => BlockBehavior::default(), { - power: SculkSensorPower::_0, - sculk_sensor_phase: Phase::Inactive, - waterlogged: false, - }, - sculk => BlockBehavior::default(), {}, - sculk_vein => BlockBehavior::default(), { - down: false, - east: false, - north: false, - south: false, - up: false, - waterlogged: false, - west: false, - }, - sculk_catalyst => BlockBehavior::default(), { - bloom: false, - }, - sculk_shrieker => BlockBehavior::default(), { - can_summon: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - weathered_cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - exposed_cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - oxidized_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - weathered_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - exposed_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - cut_copper_slab => BlockBehavior::default(), { - kind: 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(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - waxed_weathered_cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - waxed_exposed_cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - waxed_cut_copper_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - waxed_oxidized_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - waxed_weathered_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - waxed_exposed_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - waxed_cut_copper_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - lightning_rod => BlockBehavior::default(), { - facing: FacingCubic::Up, - powered: false, - waterlogged: false, - }, - pointed_dripstone => BlockBehavior::default(), { - thickness: Thickness::Tip, - vertical_direction: TipDirection::Up, - waterlogged: false, - }, - dripstone_block => BlockBehavior::default(), {}, - cave_vines => BlockBehavior::default(), { - age: CaveVinesAge::_0, - berries: false, - }, - cave_vines_plant => BlockBehavior::default(), { - berries: false, - }, - spore_blossom => BlockBehavior::default(), {}, - azalea => BlockBehavior::default(), {}, - flowering_azalea => BlockBehavior::default(), {}, - moss_carpet => BlockBehavior::default(), {}, - moss_block => BlockBehavior::default(), {}, - big_dripleaf => BlockBehavior::default(), { - facing: FacingCardinal::North, - tilt: Tilt::None, - waterlogged: false, - }, - big_dripleaf_stem => BlockBehavior::default(), { - facing: FacingCardinal::North, - waterlogged: false, - }, - small_dripleaf => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: Half::Lower, - waterlogged: false, - }, - hanging_roots => BlockBehavior::default(), { - waterlogged: false, - }, - rooted_dirt => BlockBehavior::default(), {}, - mud => BlockBehavior::default(), {}, - deepslate => BlockBehavior::default(), { - axis: Axis::Y, - }, - cobbled_deepslate => BlockBehavior::default(), {}, - cobbled_deepslate_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - cobbled_deepslate_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - cobbled_deepslate_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - polished_deepslate => BlockBehavior::default(), {}, - polished_deepslate_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - polished_deepslate_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - polished_deepslate_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - deepslate_tiles => BlockBehavior::default(), {}, - deepslate_tile_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - deepslate_tile_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - deepslate_tile_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - deepslate_bricks => BlockBehavior::default(), {}, - deepslate_brick_stairs => BlockBehavior::default(), { - facing: FacingCardinal::North, - half: TopBottom::Bottom, - shape: StairShape::Straight, - waterlogged: false, - }, - deepslate_brick_slab => BlockBehavior::default(), { - kind: Type::Bottom, - waterlogged: false, - }, - deepslate_brick_wall => BlockBehavior::default(), { - east: EastWall::None, - north: NorthWall::None, - south: SouthWall::None, - up: true, - waterlogged: false, - west: WestWall::None, - }, - chiseled_deepslate => BlockBehavior::default(), {}, - cracked_deepslate_bricks => BlockBehavior::default(), {}, - cracked_deepslate_tiles => BlockBehavior::default(), {}, - infested_deepslate => BlockBehavior::default(), { - axis: CacheSize::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: Axis::Y, - }, - verdant_froglight => BlockBehavior::default(), { - axis: Axis::Y, - }, - pearlescent_froglight => BlockBehavior::default(), { - axis: Axis::Y, - }, - frogspawn => BlockBehavior::default(), {}, - reinforced_deepslate => BlockBehavior::default(), {}, - } -} diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs new file mode 100755 index 00000000..afe6dfda --- /dev/null +++ b/azalea-block/src/generated.rs @@ -0,0 +1,4899 @@ +use crate::{Block, BlockBehavior, BlockState, BlockStates}; +use azalea_block_macros::make_block_states; +use std::fmt::Debug; + +make_block_states! { + Properties => { + "snowy" => bool, + "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" => bool, + "stage" => MangrovePropaguleStage { + _0, + _1, + }, + "waterlogged" => bool, + "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" => bool, + "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" => bool, + "instrument" => Sound { + Harp, + Basedrum, + Snare, + Hat, + Bass, + Flute, + Bell, + Guitar, + Chime, + Xylophone, + IronXylophone, + CowBell, + Didgeridoo, + Bit, + Banjo, + Pling, + Zombie, + Skeleton, + Creeper, + Dragon, + WitherSkeleton, + Piglin, + CustomHead, + }, + "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" => bool, + "facing" => FacingCardinal { + North, + South, + West, + East, + }, + "occupied" => bool, + "part" => Part { + Head, + Foot, + }, + "shape" => RailShape { + NorthSouth, + EastWest, + AscendingEast, + AscendingWest, + AscendingNorth, + AscendingSouth, + }, + "extended" => bool, + "half" => Half { + Upper, + Lower, + }, + "kind" => PistonType { + Normal, + Sticky, + }, + "short" => bool, + "unstable" => bool, + "slot_0_occupied" => bool, + "slot_1_occupied" => bool, + "slot_2_occupied" => bool, + "slot_3_occupied" => bool, + "slot_4_occupied" => bool, + "slot_5_occupied" => bool, + "age" => FireAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "east" => bool, + "north" => bool, + "south" => bool, + "up" => bool, + "west" => bool, + "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" => bool, + "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, + }, + "rotation" => BambooSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "hinge" => Hinge { + Left, + Right, + }, + "open" => bool, + "shape" => Shape { + NorthSouth, + EastWest, + AscendingEast, + AscendingWest, + AscendingNorth, + AscendingSouth, + SouthEast, + SouthWest, + NorthWest, + NorthEast, + }, + "attached" => bool, + "rotation" => OakHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => SpruceHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BirchHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => AcaciaHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => JungleHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => DarkOakHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => CrimsonHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => WarpedHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => MangroveHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "rotation" => BambooHangingSignRotation { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "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" => bool, + "axis" => AxisXZ { + X, + Z, + }, + "bites" => CakeBites { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + }, + "delay" => RepeaterDelay { + _1, + _2, + _3, + _4, + }, + "locked" => bool, + "down" => bool, + "age" => PumpkinStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "age" => MelonStemAge { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "down" => bool, + "north" => bool, + "south" => bool, + "up" => bool, + "west" => bool, + "in_wall" => bool, + "age" => NetherWartAge { + _0, + _1, + _2, + _3, + }, + "has_bottle" => bool, + "level" => WaterCauldronLevel { + _1, + _2, + _3, + }, + "level" => PowderSnowCauldronLevel { + _1, + _2, + _3, + }, + "eye" => bool, + "age" => CocoaAge { + _0, + _1, + _2, + }, + "disarmed" => bool, + "conditional" => bool, + "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, + }, + "rotation" => PiglinHeadRotation { + _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" => bool, + "power" => DaylightDetectorPower { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + _8, + _9, + _10, + _11, + _12, + _13, + _14, + _15, + }, + "enabled" => bool, + "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" => bool, + "bottom" => bool, + "distance" => ScaffoldingDistance { + _0, + _1, + _2, + _3, + _4, + _5, + _6, + _7, + }, + "has_book" => bool, + "attachment" => Attachment { + Floor, + Ceiling, + SingleWall, + DoubleWall, + }, + "signal_fire" => bool, + "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, + }, + "south" => bool, + "west" => bool, + "bloom" => bool, + "can_summon" => bool, + "shrieking" => bool, + "thickness" => Thickness { + TipMerge, + Tip, + Frustum, + Middle, + Base, + }, + "vertical_direction" => TipDirection { + Up, + Down, + }, + "age" => CaveVinesAge { + _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, + }, + "berries" => bool, + "tilt" => Tilt { + None, + Unstable, + Partial, + Full, + }, + "axis" => CacheSize { + 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(), {}, + bamboo_planks => BlockBehavior::default(), {}, + bamboo_mosaic => BlockBehavior::default(), {}, + oak_sapling => BlockBehavior::default(), { + stage: OakSaplingStage::_0, + }, + spruce_sapling => BlockBehavior::default(), { + stage: SpruceSaplingStage::_0, + }, + birch_sapling => BlockBehavior::default(), { + stage: BirchSaplingStage::_0, + }, + jungle_sapling => BlockBehavior::default(), { + stage: JungleSaplingStage::_0, + }, + acacia_sapling => BlockBehavior::default(), { + stage: AcaciaSaplingStage::_0, + }, + dark_oak_sapling => BlockBehavior::default(), { + stage: DarkOakSaplingStage::_0, + }, + mangrove_propagule => BlockBehavior::default(), { + age: MangrovePropaguleAge::_0, + hanging: false, + stage: MangrovePropaguleStage::_0, + waterlogged: false, + }, + bedrock => BlockBehavior::default(), {}, + water => BlockBehavior::default(), { + level: WaterLevel::_0, + }, + lava => BlockBehavior::default(), { + level: 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: Axis::Y, + }, + spruce_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + birch_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + jungle_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + acacia_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + dark_oak_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + mangrove_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + mangrove_roots => BlockBehavior::default(), { + waterlogged: false, + }, + muddy_mangrove_roots => BlockBehavior::default(), { + axis: Axis::Y, + }, + bamboo_block => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_spruce_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_birch_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_jungle_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_acacia_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_dark_oak_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_oak_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_mangrove_log => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_bamboo_block => BlockBehavior::default(), { + axis: Axis::Y, + }, + oak_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + spruce_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + birch_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + jungle_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + acacia_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + dark_oak_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + mangrove_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_oak_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_spruce_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_birch_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_jungle_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_acacia_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_dark_oak_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_mangrove_wood => BlockBehavior::default(), { + axis: Axis::Y, + }, + oak_leaves => BlockBehavior::default(), { + distance: OakLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + spruce_leaves => BlockBehavior::default(), { + distance: SpruceLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + birch_leaves => BlockBehavior::default(), { + distance: BirchLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + jungle_leaves => BlockBehavior::default(), { + distance: JungleLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + acacia_leaves => BlockBehavior::default(), { + distance: AcaciaLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + dark_oak_leaves => BlockBehavior::default(), { + distance: DarkOakLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + mangrove_leaves => BlockBehavior::default(), { + distance: MangroveLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + azalea_leaves => BlockBehavior::default(), { + distance: AzaleaLeavesDistance::_7, + persistent: false, + waterlogged: false, + }, + flowering_azalea_leaves => BlockBehavior::default(), { + distance: 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(), { + facing: FacingCubic::North, + triggered: false, + }, + sandstone => BlockBehavior::default(), {}, + chiseled_sandstone => BlockBehavior::default(), {}, + cut_sandstone => BlockBehavior::default(), {}, + note_block => BlockBehavior::default(), { + instrument: Sound::Harp, + note: NoteBlockNote::_0, + powered: false, + }, + white_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + orange_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + magenta_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + light_blue_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + yellow_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + lime_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + pink_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + gray_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + light_gray_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + cyan_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + purple_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + blue_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + brown_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + green_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + red_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + black_bed => BlockBehavior::default(), { + facing: FacingCardinal::North, + occupied: false, + part: Part::Foot, + }, + powered_rail => BlockBehavior::default(), { + powered: false, + shape: RailShape::NorthSouth, + waterlogged: false, + }, + detector_rail => BlockBehavior::default(), { + powered: false, + shape: RailShape::NorthSouth, + waterlogged: false, + }, + sticky_piston => BlockBehavior::default(), { + extended: false, + facing: FacingCubic::North, + }, + cobweb => BlockBehavior::default(), {}, + grass => BlockBehavior::default(), {}, + fern => BlockBehavior::default(), {}, + dead_bush => BlockBehavior::default(), {}, + seagrass => BlockBehavior::default(), {}, + tall_seagrass => BlockBehavior::default(), { + half: Half::Lower, + }, + piston => BlockBehavior::default(), { + extended: false, + facing: FacingCubic::North, + }, + piston_head => BlockBehavior::default(), { + kind: PistonType::Normal, + facing: 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(), { + kind: PistonType::Normal, + facing: 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(), {}, + chiseled_bookshelf => BlockBehavior::default(), { + facing: FacingCardinal::North, + slot_0_occupied: false, + slot_1_occupied: false, + slot_2_occupied: false, + slot_3_occupied: false, + slot_4_occupied: false, + slot_5_occupied: false, + }, + mossy_cobblestone => BlockBehavior::default(), {}, + obsidian => BlockBehavior::default(), {}, + torch => BlockBehavior::default(), {}, + wall_torch => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + fire => BlockBehavior::default(), { + age: FireAge::_0, + east: false, + north: false, + south: false, + up: false, + west: false, + }, + soul_fire => BlockBehavior::default(), {}, + spawner => BlockBehavior::default(), {}, + oak_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + chest => BlockBehavior::default(), { + kind: ChestType::Single, + facing: FacingCardinal::North, + waterlogged: false, + }, + redstone_wire => BlockBehavior::default(), { + east: WireEast::None, + north: WireNorth::None, + power: RedstoneWirePower::_0, + south: WireSouth::None, + west: WireWest::None, + }, + diamond_ore => BlockBehavior::default(), {}, + deepslate_diamond_ore => BlockBehavior::default(), {}, + diamond_block => BlockBehavior::default(), {}, + crafting_table => BlockBehavior::default(), {}, + wheat => BlockBehavior::default(), { + age: WheatAge::_0, + }, + farmland => BlockBehavior::default(), { + moisture: FarmlandMoisture::_0, + }, + furnace => BlockBehavior::default(), { + facing: FacingCardinal::North, + lit: false, + }, + oak_sign => BlockBehavior::default(), { + rotation: OakSignRotation::_0, + waterlogged: false, + }, + spruce_sign => BlockBehavior::default(), { + rotation: SpruceSignRotation::_0, + waterlogged: false, + }, + birch_sign => BlockBehavior::default(), { + rotation: BirchSignRotation::_0, + waterlogged: false, + }, + acacia_sign => BlockBehavior::default(), { + rotation: AcaciaSignRotation::_0, + waterlogged: false, + }, + jungle_sign => BlockBehavior::default(), { + rotation: JungleSignRotation::_0, + waterlogged: false, + }, + dark_oak_sign => BlockBehavior::default(), { + rotation: DarkOakSignRotation::_0, + waterlogged: false, + }, + mangrove_sign => BlockBehavior::default(), { + rotation: MangroveSignRotation::_0, + waterlogged: false, + }, + bamboo_sign => BlockBehavior::default(), { + rotation: BambooSignRotation::_0, + waterlogged: false, + }, + oak_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + ladder => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + rail => BlockBehavior::default(), { + shape: Shape::NorthSouth, + waterlogged: false, + }, + cobblestone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + oak_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + spruce_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + birch_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + acacia_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + jungle_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + dark_oak_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + mangrove_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + bamboo_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + oak_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: OakHangingSignRotation::_0, + waterlogged: false, + }, + spruce_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: SpruceHangingSignRotation::_0, + waterlogged: false, + }, + birch_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: BirchHangingSignRotation::_0, + waterlogged: false, + }, + acacia_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: AcaciaHangingSignRotation::_0, + waterlogged: false, + }, + jungle_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: JungleHangingSignRotation::_0, + waterlogged: false, + }, + dark_oak_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: DarkOakHangingSignRotation::_0, + waterlogged: false, + }, + crimson_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: CrimsonHangingSignRotation::_0, + waterlogged: false, + }, + warped_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: WarpedHangingSignRotation::_0, + waterlogged: false, + }, + mangrove_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: MangroveHangingSignRotation::_0, + waterlogged: false, + }, + bamboo_hanging_sign => BlockBehavior::default(), { + attached: false, + rotation: BambooHangingSignRotation::_0, + waterlogged: false, + }, + oak_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + spruce_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + birch_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + acacia_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + jungle_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + dark_oak_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + mangrove_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + crimson_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + warped_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + bamboo_wall_hanging_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + lever => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + stone_pressure_plate => BlockBehavior::default(), { + powered: false, + }, + iron_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: 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, + }, + bamboo_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(), { + facing: FacingCardinal::North, + lit: true, + }, + stone_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + snow => BlockBehavior::default(), { + layers: SnowLayers::_1, + }, + ice => BlockBehavior::default(), {}, + snow_block => BlockBehavior::default(), {}, + cactus => BlockBehavior::default(), { + age: CactusAge::_0, + }, + clay => BlockBehavior::default(), {}, + sugar_cane => BlockBehavior::default(), { + age: SugarCaneAge::_0, + }, + jukebox => BlockBehavior::default(), { + has_record: 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: Axis::Y, + }, + polished_basalt => BlockBehavior::default(), { + axis: Axis::Y, + }, + soul_torch => BlockBehavior::default(), {}, + soul_wall_torch => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + glowstone => BlockBehavior::default(), {}, + nether_portal => BlockBehavior::default(), { + axis: AxisXZ::X, + }, + carved_pumpkin => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + jack_o_lantern => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + cake => BlockBehavior::default(), { + bites: CakeBites::_0, + }, + repeater => BlockBehavior::default(), { + delay: RepeaterDelay::_1, + facing: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + spruce_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + birch_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + jungle_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + acacia_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + dark_oak_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + mangrove_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + bamboo_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: 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: 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(), { + facing: FacingCardinal::North, + }, + attached_melon_stem => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + pumpkin_stem => BlockBehavior::default(), { + age: PumpkinStemAge::_0, + }, + melon_stem => BlockBehavior::default(), { + age: MelonStemAge::_0, + }, + vine => BlockBehavior::default(), { + east: false, + north: false, + south: false, + up: false, + west: false, + }, + glow_lichen => BlockBehavior::default(), { + down: false, + east: false, + north: false, + south: false, + up: false, + waterlogged: false, + west: false, + }, + oak_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + stone_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + mud_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + nether_wart => BlockBehavior::default(), { + age: NetherWartAge::_0, + }, + enchanting_table => BlockBehavior::default(), {}, + brewing_stand => BlockBehavior::default(), { + has_bottle: false, + has_bottle: false, + has_bottle: false, + }, + cauldron => BlockBehavior::default(), {}, + water_cauldron => BlockBehavior::default(), { + level: WaterCauldronLevel::_1, + }, + lava_cauldron => BlockBehavior::default(), {}, + powder_snow_cauldron => BlockBehavior::default(), { + level: PowderSnowCauldronLevel::_1, + }, + end_portal => BlockBehavior::default(), {}, + end_portal_frame => BlockBehavior::default(), { + eye: false, + facing: FacingCardinal::North, + }, + end_stone => BlockBehavior::default(), {}, + dragon_egg => BlockBehavior::default(), {}, + redstone_lamp => BlockBehavior::default(), { + lit: false, + }, + cocoa => BlockBehavior::default(), { + age: CocoaAge::_0, + facing: FacingCardinal::North, + }, + sandstone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + emerald_ore => BlockBehavior::default(), {}, + deepslate_emerald_ore => BlockBehavior::default(), {}, + ender_chest => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + tripwire_hook => BlockBehavior::default(), { + attached: false, + facing: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + birch_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + jungle_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + command_block => BlockBehavior::default(), { + conditional: false, + facing: FacingCubic::North, + }, + beacon => BlockBehavior::default(), {}, + cobblestone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + mossy_cobblestone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: 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(), { + age: CarrotsAge::_0, + }, + potatoes => BlockBehavior::default(), { + age: PotatoesAge::_0, + }, + oak_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + spruce_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + birch_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + jungle_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + acacia_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + dark_oak_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + mangrove_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + bamboo_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + skeleton_skull => BlockBehavior::default(), { + rotation: SkeletonSkullRotation::_0, + }, + skeleton_wall_skull => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + wither_skeleton_skull => BlockBehavior::default(), { + rotation: WitherSkeletonSkullRotation::_0, + }, + wither_skeleton_wall_skull => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + zombie_head => BlockBehavior::default(), { + rotation: ZombieHeadRotation::_0, + }, + zombie_wall_head => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + player_head => BlockBehavior::default(), { + rotation: PlayerHeadRotation::_0, + }, + player_wall_head => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + creeper_head => BlockBehavior::default(), { + rotation: CreeperHeadRotation::_0, + }, + creeper_wall_head => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + dragon_head => BlockBehavior::default(), { + rotation: DragonHeadRotation::_0, + }, + dragon_wall_head => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + piglin_head => BlockBehavior::default(), { + rotation: PiglinHeadRotation::_0, + }, + piglin_wall_head => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + anvil => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + chipped_anvil => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + damaged_anvil => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + trapped_chest => BlockBehavior::default(), { + kind: ChestType::Single, + facing: FacingCardinal::North, + waterlogged: false, + }, + light_weighted_pressure_plate => BlockBehavior::default(), { + power: LightWeightedPressurePlatePower::_0, + }, + heavy_weighted_pressure_plate => BlockBehavior::default(), { + power: HeavyWeightedPressurePlatePower::_0, + }, + comparator => BlockBehavior::default(), { + facing: FacingCardinal::North, + mode: ComparatorType::Compare, + powered: false, + }, + daylight_detector => BlockBehavior::default(), { + inverted: false, + power: DaylightDetectorPower::_0, + }, + redstone_block => BlockBehavior::default(), {}, + nether_quartz_ore => BlockBehavior::default(), {}, + hopper => BlockBehavior::default(), { + enabled: true, + facing: Facing::Down, + }, + quartz_block => BlockBehavior::default(), {}, + chiseled_quartz_block => BlockBehavior::default(), {}, + quartz_pillar => BlockBehavior::default(), { + axis: Axis::Y, + }, + quartz_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + activator_rail => BlockBehavior::default(), { + powered: false, + shape: RailShape::NorthSouth, + waterlogged: false, + }, + dropper => BlockBehavior::default(), { + facing: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + dark_oak_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + mangrove_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + bamboo_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + bamboo_mosaic_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + slime_block => BlockBehavior::default(), {}, + barrier => BlockBehavior::default(), {}, + light => BlockBehavior::default(), { + level: LightLevel::_15, + waterlogged: false, + }, + iron_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + prismarine => BlockBehavior::default(), {}, + prismarine_bricks => BlockBehavior::default(), {}, + dark_prismarine => BlockBehavior::default(), {}, + prismarine_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + prismarine_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + dark_prismarine_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + prismarine_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + prismarine_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + dark_prismarine_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + sea_lantern => BlockBehavior::default(), {}, + hay_block => BlockBehavior::default(), { + axis: 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: Half::Lower, + }, + lilac => BlockBehavior::default(), { + half: Half::Lower, + }, + rose_bush => BlockBehavior::default(), { + half: Half::Lower, + }, + peony => BlockBehavior::default(), { + half: Half::Lower, + }, + tall_grass => BlockBehavior::default(), { + half: Half::Lower, + }, + large_fern => BlockBehavior::default(), { + half: Half::Lower, + }, + white_banner => BlockBehavior::default(), { + rotation: WhiteBannerRotation::_0, + }, + orange_banner => BlockBehavior::default(), { + rotation: OrangeBannerRotation::_0, + }, + magenta_banner => BlockBehavior::default(), { + rotation: MagentaBannerRotation::_0, + }, + light_blue_banner => BlockBehavior::default(), { + rotation: LightBlueBannerRotation::_0, + }, + yellow_banner => BlockBehavior::default(), { + rotation: YellowBannerRotation::_0, + }, + lime_banner => BlockBehavior::default(), { + rotation: LimeBannerRotation::_0, + }, + pink_banner => BlockBehavior::default(), { + rotation: PinkBannerRotation::_0, + }, + gray_banner => BlockBehavior::default(), { + rotation: GrayBannerRotation::_0, + }, + light_gray_banner => BlockBehavior::default(), { + rotation: LightGrayBannerRotation::_0, + }, + cyan_banner => BlockBehavior::default(), { + rotation: CyanBannerRotation::_0, + }, + purple_banner => BlockBehavior::default(), { + rotation: PurpleBannerRotation::_0, + }, + blue_banner => BlockBehavior::default(), { + rotation: BlueBannerRotation::_0, + }, + brown_banner => BlockBehavior::default(), { + rotation: BrownBannerRotation::_0, + }, + green_banner => BlockBehavior::default(), { + rotation: GreenBannerRotation::_0, + }, + red_banner => BlockBehavior::default(), { + rotation: RedBannerRotation::_0, + }, + black_banner => BlockBehavior::default(), { + rotation: BlackBannerRotation::_0, + }, + white_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + orange_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + magenta_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + light_blue_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + yellow_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + lime_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + pink_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + gray_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + light_gray_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + cyan_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + purple_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + blue_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + brown_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + green_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + red_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + black_wall_banner => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + red_sandstone => BlockBehavior::default(), {}, + chiseled_red_sandstone => BlockBehavior::default(), {}, + cut_red_sandstone => BlockBehavior::default(), {}, + red_sandstone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + oak_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + spruce_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + birch_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + jungle_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + acacia_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + dark_oak_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + mangrove_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + bamboo_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + bamboo_mosaic_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + stone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + smooth_stone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + cut_sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + petrified_oak_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + cobblestone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + stone_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + mud_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + nether_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + quartz_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + red_sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + cut_red_sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + purpur_slab => BlockBehavior::default(), { + kind: 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(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + birch_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + jungle_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + acacia_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + dark_oak_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + mangrove_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + bamboo_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: 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, + }, + bamboo_fence => BlockBehavior::default(), { + east: false, + north: false, + south: false, + waterlogged: false, + west: false, + }, + spruce_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + birch_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + jungle_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + acacia_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + dark_oak_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + mangrove_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + bamboo_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + end_rod => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + chorus_plant => BlockBehavior::default(), { + down: false, + east: false, + north: false, + south: false, + up: false, + west: false, + }, + chorus_flower => BlockBehavior::default(), { + age: ChorusFlowerAge::_0, + }, + purpur_block => BlockBehavior::default(), {}, + purpur_pillar => BlockBehavior::default(), { + axis: Axis::Y, + }, + purpur_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + end_stone_bricks => BlockBehavior::default(), {}, + beetroots => BlockBehavior::default(), { + age: BeetrootsAge::_0, + }, + dirt_path => BlockBehavior::default(), {}, + end_gateway => BlockBehavior::default(), {}, + repeating_command_block => BlockBehavior::default(), { + conditional: false, + facing: FacingCubic::North, + }, + chain_command_block => BlockBehavior::default(), { + conditional: false, + facing: FacingCubic::North, + }, + frosted_ice => BlockBehavior::default(), { + age: FrostedIceAge::_0, + }, + magma_block => BlockBehavior::default(), {}, + nether_wart_block => BlockBehavior::default(), {}, + red_nether_bricks => BlockBehavior::default(), {}, + bone_block => BlockBehavior::default(), { + axis: Axis::Y, + }, + structure_void => BlockBehavior::default(), {}, + observer => BlockBehavior::default(), { + facing: FacingCubic::South, + powered: false, + }, + shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + white_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + orange_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + magenta_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + light_blue_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + yellow_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + lime_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + pink_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + gray_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + light_gray_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + cyan_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + purple_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + blue_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + brown_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + green_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + red_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + black_shulker_box => BlockBehavior::default(), { + facing: FacingCubic::Up, + }, + white_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + orange_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + magenta_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + light_blue_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + yellow_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + lime_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + pink_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + gray_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + light_gray_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + cyan_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + purple_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + blue_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + brown_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + green_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + red_glazed_terracotta => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + black_glazed_terracotta => BlockBehavior::default(), { + facing: 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(), { + age: KelpAge::_0, + }, + kelp_plant => BlockBehavior::default(), {}, + dried_kelp_block => BlockBehavior::default(), {}, + turtle_egg => BlockBehavior::default(), { + eggs: TurtleEggEggs::_1, + hatch: 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(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + dead_brain_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + dead_bubble_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + dead_fire_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + dead_horn_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + tube_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + brain_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + bubble_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + fire_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + horn_coral_wall_fan => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: true, + }, + sea_pickle => BlockBehavior::default(), { + pickles: SeaPicklePickles::_1, + waterlogged: true, + }, + blue_ice => BlockBehavior::default(), {}, + conduit => BlockBehavior::default(), { + waterlogged: true, + }, + bamboo_sapling => BlockBehavior::default(), {}, + bamboo => BlockBehavior::default(), { + age: BambooAge::_0, + leaves: Leaves::None, + stage: BambooStage::_0, + }, + potted_bamboo => BlockBehavior::default(), {}, + void_air => BlockBehavior::default(), {}, + cave_air => BlockBehavior::default(), {}, + bubble_column => BlockBehavior::default(), { + drag: true, + }, + polished_granite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + smooth_red_sandstone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + mossy_stone_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_diorite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + mossy_cobblestone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + end_stone_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + stone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + smooth_sandstone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + smooth_quartz_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + granite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + andesite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + red_nether_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_andesite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + diorite_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_granite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + smooth_red_sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + mossy_stone_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + polished_diorite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + mossy_cobblestone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + end_stone_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + smooth_sandstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + smooth_quartz_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + granite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + andesite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + red_nether_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + polished_andesite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + diorite_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + prismarine_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + red_sandstone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + mossy_stone_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + granite_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + stone_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + mud_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + nether_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + andesite_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + red_nether_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + sandstone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + end_stone_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + diorite_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + scaffolding => BlockBehavior::default(), { + bottom: false, + distance: ScaffoldingDistance::_7, + waterlogged: false, + }, + loom => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + barrel => BlockBehavior::default(), { + facing: FacingCubic::North, + open: false, + }, + smoker => BlockBehavior::default(), { + facing: FacingCardinal::North, + lit: false, + }, + blast_furnace => BlockBehavior::default(), { + facing: FacingCardinal::North, + lit: false, + }, + cartography_table => BlockBehavior::default(), {}, + fletching_table => BlockBehavior::default(), {}, + grindstone => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + }, + lectern => BlockBehavior::default(), { + facing: FacingCardinal::North, + has_book: false, + powered: false, + }, + smithing_table => BlockBehavior::default(), {}, + stonecutter => BlockBehavior::default(), { + facing: FacingCardinal::North, + }, + bell => BlockBehavior::default(), { + attachment: Attachment::Floor, + facing: FacingCardinal::North, + powered: false, + }, + lantern => BlockBehavior::default(), { + hanging: false, + waterlogged: false, + }, + soul_lantern => BlockBehavior::default(), { + hanging: false, + waterlogged: false, + }, + campfire => BlockBehavior::default(), { + facing: FacingCardinal::North, + lit: true, + signal_fire: false, + waterlogged: false, + }, + soul_campfire => BlockBehavior::default(), { + facing: FacingCardinal::North, + lit: true, + signal_fire: false, + waterlogged: false, + }, + sweet_berry_bush => BlockBehavior::default(), { + age: SweetBerryBushAge::_0, + }, + warped_stem => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_warped_stem => BlockBehavior::default(), { + axis: Axis::Y, + }, + warped_hyphae => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_warped_hyphae => BlockBehavior::default(), { + axis: 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: Axis::Y, + }, + stripped_crimson_stem => BlockBehavior::default(), { + axis: Axis::Y, + }, + crimson_hyphae => BlockBehavior::default(), { + axis: Axis::Y, + }, + stripped_crimson_hyphae => BlockBehavior::default(), { + axis: Axis::Y, + }, + crimson_nylium => BlockBehavior::default(), {}, + crimson_fungus => BlockBehavior::default(), {}, + shroomlight => BlockBehavior::default(), {}, + weeping_vines => BlockBehavior::default(), { + age: WeepingVinesAge::_0, + }, + weeping_vines_plant => BlockBehavior::default(), {}, + twisting_vines => BlockBehavior::default(), { + age: TwistingVinesAge::_0, + }, + twisting_vines_plant => BlockBehavior::default(), {}, + crimson_roots => BlockBehavior::default(), {}, + crimson_planks => BlockBehavior::default(), {}, + warped_planks => BlockBehavior::default(), {}, + crimson_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + warped_slab => BlockBehavior::default(), { + kind: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + warped_trapdoor => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + open: false, + powered: false, + waterlogged: false, + }, + crimson_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + warped_fence_gate => BlockBehavior::default(), { + facing: FacingCardinal::North, + in_wall: false, + open: false, + powered: false, + }, + crimson_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + warped_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + crimson_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + warped_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + crimson_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + warped_door => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + hinge: Hinge::Left, + open: false, + powered: false, + }, + crimson_sign => BlockBehavior::default(), { + rotation: CrimsonSignRotation::_0, + waterlogged: false, + }, + warped_sign => BlockBehavior::default(), { + rotation: WarpedSignRotation::_0, + waterlogged: false, + }, + crimson_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + warped_wall_sign => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + structure_block => BlockBehavior::default(), { + mode: Mode::Load, + }, + jigsaw => BlockBehavior::default(), { + orientation: Orientation::NorthUp, + }, + composter => BlockBehavior::default(), { + level: ComposterLevel::_0, + }, + target => BlockBehavior::default(), { + power: TargetOutputPower::_0, + }, + bee_nest => BlockBehavior::default(), { + facing: FacingCardinal::North, + honey_level: BeeNestHoneyLevel::_0, + }, + beehive => BlockBehavior::default(), { + facing: FacingCardinal::North, + honey_level: 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(), { + charges: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + blackstone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + blackstone_slab => BlockBehavior::default(), { + kind: 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(), { + kind: Type::Bottom, + waterlogged: false, + }, + polished_blackstone_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_blackstone_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + gilded_blackstone => BlockBehavior::default(), {}, + polished_blackstone_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_blackstone_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + polished_blackstone_pressure_plate => BlockBehavior::default(), { + powered: false, + }, + polished_blackstone_button => BlockBehavior::default(), { + face: Face::Wall, + facing: FacingCardinal::North, + powered: false, + }, + polished_blackstone_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + chiseled_nether_bricks => BlockBehavior::default(), {}, + cracked_nether_bricks => BlockBehavior::default(), {}, + quartz_bricks => BlockBehavior::default(), {}, + candle => BlockBehavior::default(), { + candles: CandleCandles::_1, + lit: false, + waterlogged: false, + }, + white_candle => BlockBehavior::default(), { + candles: WhiteCandleCandles::_1, + lit: false, + waterlogged: false, + }, + orange_candle => BlockBehavior::default(), { + candles: OrangeCandleCandles::_1, + lit: false, + waterlogged: false, + }, + magenta_candle => BlockBehavior::default(), { + candles: MagentaCandleCandles::_1, + lit: false, + waterlogged: false, + }, + light_blue_candle => BlockBehavior::default(), { + candles: LightBlueCandleCandles::_1, + lit: false, + waterlogged: false, + }, + yellow_candle => BlockBehavior::default(), { + candles: YellowCandleCandles::_1, + lit: false, + waterlogged: false, + }, + lime_candle => BlockBehavior::default(), { + candles: LimeCandleCandles::_1, + lit: false, + waterlogged: false, + }, + pink_candle => BlockBehavior::default(), { + candles: PinkCandleCandles::_1, + lit: false, + waterlogged: false, + }, + gray_candle => BlockBehavior::default(), { + candles: GrayCandleCandles::_1, + lit: false, + waterlogged: false, + }, + light_gray_candle => BlockBehavior::default(), { + candles: LightGrayCandleCandles::_1, + lit: false, + waterlogged: false, + }, + cyan_candle => BlockBehavior::default(), { + candles: CyanCandleCandles::_1, + lit: false, + waterlogged: false, + }, + purple_candle => BlockBehavior::default(), { + candles: PurpleCandleCandles::_1, + lit: false, + waterlogged: false, + }, + blue_candle => BlockBehavior::default(), { + candles: BlueCandleCandles::_1, + lit: false, + waterlogged: false, + }, + brown_candle => BlockBehavior::default(), { + candles: BrownCandleCandles::_1, + lit: false, + waterlogged: false, + }, + green_candle => BlockBehavior::default(), { + candles: GreenCandleCandles::_1, + lit: false, + waterlogged: false, + }, + red_candle => BlockBehavior::default(), { + candles: RedCandleCandles::_1, + lit: false, + waterlogged: false, + }, + black_candle => BlockBehavior::default(), { + candles: 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(), { + facing: FacingCubic::Up, + waterlogged: false, + }, + large_amethyst_bud => BlockBehavior::default(), { + facing: FacingCubic::Up, + waterlogged: false, + }, + medium_amethyst_bud => BlockBehavior::default(), { + facing: FacingCubic::Up, + waterlogged: false, + }, + small_amethyst_bud => BlockBehavior::default(), { + facing: FacingCubic::Up, + waterlogged: false, + }, + tuff => BlockBehavior::default(), {}, + calcite => BlockBehavior::default(), {}, + tinted_glass => BlockBehavior::default(), {}, + powder_snow => BlockBehavior::default(), {}, + sculk_sensor => BlockBehavior::default(), { + power: SculkSensorPower::_0, + sculk_sensor_phase: Phase::Inactive, + waterlogged: false, + }, + sculk => BlockBehavior::default(), {}, + sculk_vein => BlockBehavior::default(), { + down: false, + east: false, + north: false, + south: false, + up: false, + waterlogged: false, + west: false, + }, + sculk_catalyst => BlockBehavior::default(), { + bloom: false, + }, + sculk_shrieker => BlockBehavior::default(), { + can_summon: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + weathered_cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + exposed_cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + oxidized_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + weathered_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + exposed_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + cut_copper_slab => BlockBehavior::default(), { + kind: 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(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + waxed_weathered_cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + waxed_exposed_cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + waxed_cut_copper_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + waxed_oxidized_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + waxed_weathered_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + waxed_exposed_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + waxed_cut_copper_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + lightning_rod => BlockBehavior::default(), { + facing: FacingCubic::Up, + powered: false, + waterlogged: false, + }, + pointed_dripstone => BlockBehavior::default(), { + thickness: Thickness::Tip, + vertical_direction: TipDirection::Up, + waterlogged: false, + }, + dripstone_block => BlockBehavior::default(), {}, + cave_vines => BlockBehavior::default(), { + age: CaveVinesAge::_0, + berries: false, + }, + cave_vines_plant => BlockBehavior::default(), { + berries: false, + }, + spore_blossom => BlockBehavior::default(), {}, + azalea => BlockBehavior::default(), {}, + flowering_azalea => BlockBehavior::default(), {}, + moss_carpet => BlockBehavior::default(), {}, + moss_block => BlockBehavior::default(), {}, + big_dripleaf => BlockBehavior::default(), { + facing: FacingCardinal::North, + tilt: Tilt::None, + waterlogged: false, + }, + big_dripleaf_stem => BlockBehavior::default(), { + facing: FacingCardinal::North, + waterlogged: false, + }, + small_dripleaf => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: Half::Lower, + waterlogged: false, + }, + hanging_roots => BlockBehavior::default(), { + waterlogged: false, + }, + rooted_dirt => BlockBehavior::default(), {}, + mud => BlockBehavior::default(), {}, + deepslate => BlockBehavior::default(), { + axis: Axis::Y, + }, + cobbled_deepslate => BlockBehavior::default(), {}, + cobbled_deepslate_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + cobbled_deepslate_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + cobbled_deepslate_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + polished_deepslate => BlockBehavior::default(), {}, + polished_deepslate_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + polished_deepslate_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + polished_deepslate_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + deepslate_tiles => BlockBehavior::default(), {}, + deepslate_tile_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + deepslate_tile_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + deepslate_tile_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + deepslate_bricks => BlockBehavior::default(), {}, + deepslate_brick_stairs => BlockBehavior::default(), { + facing: FacingCardinal::North, + half: TopBottom::Bottom, + shape: StairShape::Straight, + waterlogged: false, + }, + deepslate_brick_slab => BlockBehavior::default(), { + kind: Type::Bottom, + waterlogged: false, + }, + deepslate_brick_wall => BlockBehavior::default(), { + east: EastWall::None, + north: NorthWall::None, + south: SouthWall::None, + up: true, + waterlogged: false, + west: WestWall::None, + }, + chiseled_deepslate => BlockBehavior::default(), {}, + cracked_deepslate_bricks => BlockBehavior::default(), {}, + cracked_deepslate_tiles => BlockBehavior::default(), {}, + infested_deepslate => BlockBehavior::default(), { + axis: CacheSize::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: Axis::Y, + }, + verdant_froglight => BlockBehavior::default(), { + axis: Axis::Y, + }, + pearlescent_froglight => BlockBehavior::default(), { + axis: Axis::Y, + }, + frogspawn => BlockBehavior::default(), {}, + reinforced_deepslate => BlockBehavior::default(), {}, + } +} diff --git a/azalea-block/src/lib.rs b/azalea-block/src/lib.rs index 7a62e588..43099db5 100755 --- a/azalea-block/src/lib.rs +++ b/azalea-block/src/lib.rs @@ -2,14 +2,49 @@ #![feature(trait_upcasting)] mod behavior; -mod blocks; +mod generated; +mod range; + +pub use generated::{blocks, properties}; use azalea_buf::{BufReadError, McBufReadable, McBufVarReadable, McBufVarWritable, McBufWritable}; pub use behavior::BlockBehavior; -pub use blocks::*; -use std::io::{Cursor, Write}; +use core::fmt::Debug; +pub use range::BlockStates; +use std::{ + any::Any, + io::{Cursor, Write}, +}; + +pub trait Block: Debug + Any { + fn behavior(&self) -> BlockBehavior; + /// Get the Minecraft ID for this block. For example `stone` or + /// `grass_block`. + fn id(&self) -> &'static str; + /// Convert the block to a block state. This is lossless, as the block + /// contains all the state data. + fn as_block_state(&self) -> BlockState; +} +impl dyn Block { + pub fn downcast_ref(&self) -> Option<&T> { + (self as &dyn Any).downcast_ref::() + } +} + +/// A representation of a state a block can be in. +/// +/// For example, a stone block only has one state but each possible stair +/// rotation is a different state. +#[derive(Copy, Clone, PartialEq, Eq, Default, Hash)] +pub struct BlockState { + /// The protocol ID for the block state. IDs may change every + /// version, so you shouldn't hard-code them or store them in databases. + pub id: u32, +} impl BlockState { + pub const AIR: BlockState = BlockState { id: 0 }; + /// Transmutes a u32 to a block state. /// /// # Safety @@ -52,6 +87,17 @@ impl McBufWritable for BlockState { } } +impl std::fmt::Debug for BlockState { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!( + f, + "BlockState(id: {}, {:?})", + self.id, + Box::::from(*self) + ) + } +} + #[cfg(test)] mod tests { use super::*; @@ -80,18 +126,14 @@ mod tests { "{:?}", BlockState::from(azalea_registry::Block::FloweringAzalea) ); - assert!( - formatted.ends_with(", FloweringAzaleaBlock)"), - "{}", - formatted - ); + assert!(formatted.ends_with(", FloweringAzalea)"), "{}", formatted); let formatted = format!( "{:?}", BlockState::from(azalea_registry::Block::BigDripleafStem) ); assert!( - formatted.ends_with(", BigDripleafStemBlock { facing: North, waterlogged: false })"), + formatted.ends_with(", BigDripleafStem { facing: North, waterlogged: false })"), "{}", formatted ); diff --git a/azalea-block/src/range.rs b/azalea-block/src/range.rs new file mode 100644 index 00000000..6ccf4152 --- /dev/null +++ b/azalea-block/src/range.rs @@ -0,0 +1,33 @@ +use std::{collections::HashSet, ops::RangeInclusive}; + +use crate::BlockState; + +#[derive(Debug, Clone)] +pub struct BlockStates { + pub set: HashSet, +} + +impl From> for BlockStates { + fn from(range: RangeInclusive) -> Self { + let mut set = HashSet::with_capacity((range.end() - range.start() + 1) as usize); + for id in range { + set.insert(BlockState { id }); + } + Self { set } + } +} + +impl IntoIterator for BlockStates { + type Item = BlockState; + type IntoIter = std::collections::hash_set::IntoIter; + + fn into_iter(self) -> Self::IntoIter { + self.set.into_iter() + } +} + +impl BlockStates { + pub fn contains(&self, state: &BlockState) -> bool { + self.set.contains(state) + } +} diff --git a/azalea-core/src/position.rs b/azalea-core/src/position.rs index 5ba7143e..3c452d3a 100755 --- a/azalea-core/src/position.rs +++ b/azalea-core/src/position.rs @@ -12,6 +12,8 @@ macro_rules! vec3_impl { Self { x, y, z } } + /// Get the distance of this vector to the origin by doing `x^2 + y^2 + + /// z^2`. pub fn length_sqr(&self) -> $type { self.x * self.x + self.y * self.y + self.z * self.z } @@ -139,6 +141,11 @@ impl BlockPos { z: self.z as f64 + 0.5, } } + + /// Get the distance of this vector from the origin by doing `x + y + z`. + pub fn length_manhattan(&self) -> u32 { + (self.x.abs() + self.y.abs() + self.z.abs()) as u32 + } } /// Chunk coordinates are used to represent where a chunk is in the world. You @@ -148,12 +155,21 @@ pub struct ChunkPos { pub x: i32, pub z: i32, } - impl ChunkPos { pub fn new(x: i32, z: i32) -> Self { ChunkPos { x, z } } } +impl Add for ChunkPos { + type Output = Self; + + fn add(self, rhs: Self) -> Self::Output { + Self { + x: self.x + rhs.x, + z: self.z + rhs.z, + } + } +} /// The coordinates of a chunk section in the world. #[derive(Clone, Copy, Debug, Default, PartialEq, Eq)] diff --git a/azalea-physics/src/lib.rs b/azalea-physics/src/lib.rs index e3954061..1736b8fb 100644 --- a/azalea-physics/src/lib.rs +++ b/azalea-physics/src/lib.rs @@ -467,8 +467,8 @@ mod tests { .id(); let block_state = partial_world.chunks.set_block_state( &BlockPos { x: 0, y: 69, z: 0 }, - azalea_block::StoneSlabBlock { - kind: azalea_block::Type::Bottom, + azalea_block::blocks::StoneSlab { + kind: azalea_block::properties::Type::Bottom, waterlogged: false, } .into(), @@ -521,8 +521,8 @@ mod tests { .id(); let block_state = world_lock.write().chunks.set_block_state( &BlockPos { x: 0, y: 69, z: 0 }, - azalea_block::StoneSlabBlock { - kind: azalea_block::Type::Top, + azalea_block::blocks::StoneSlab { + kind: azalea_block::properties::Type::Top, waterlogged: false, } .into(), @@ -574,11 +574,11 @@ mod tests { .id(); let block_state = world_lock.write().chunks.set_block_state( &BlockPos { x: 0, y: 69, z: 0 }, - azalea_block::CobblestoneWallBlock { - east: azalea_block::EastWall::Low, - north: azalea_block::NorthWall::Low, - south: azalea_block::SouthWall::Low, - west: azalea_block::WestWall::Low, + azalea_block::blocks::CobblestoneWall { + east: azalea_block::properties::EastWall::Low, + north: azalea_block::properties::NorthWall::Low, + south: azalea_block::properties::SouthWall::Low, + west: azalea_block::properties::WestWall::Low, up: false, waterlogged: false, } @@ -636,11 +636,11 @@ mod tests { y: 69, z: -8, }, - azalea_block::CobblestoneWallBlock { - east: azalea_block::EastWall::Low, - north: azalea_block::NorthWall::Low, - south: azalea_block::SouthWall::Low, - west: azalea_block::WestWall::Low, + azalea_block::blocks::CobblestoneWall { + east: azalea_block::properties::EastWall::Low, + north: azalea_block::properties::NorthWall::Low, + south: azalea_block::properties::SouthWall::Low, + west: azalea_block::properties::WestWall::Low, up: false, waterlogged: false, } diff --git a/azalea-protocol/src/packets/game/clientbound_chunks_biomes_packet.rs b/azalea-protocol/src/packets/game/clientbound_chunks_biomes_packet.rs new file mode 100644 index 00000000..9ad242a4 --- /dev/null +++ b/azalea-protocol/src/packets/game/clientbound_chunks_biomes_packet.rs @@ -0,0 +1,7 @@ +use azalea_protocol_macros::ClientboundGamePacket; +use azalea_buf::McBuf; + +#[derive(Clone, Debug, McBuf, ClientboundGamePacket)] +pub struct ClientboundChunksBiomesPacket { +pub chunk_biome_data: todo!(), +} \ No newline at end of file diff --git a/azalea-world/src/bit_storage.rs b/azalea-world/src/bit_storage.rs index f6ca4cd6..09b68fae 100755 --- a/azalea-world/src/bit_storage.rs +++ b/azalea-world/src/bit_storage.rs @@ -158,13 +158,13 @@ impl BitStorage { .unwrap() } + /// Get the data at the given index. + /// + /// # Panics + /// + /// This function will panic if the given index is greater than or equal to + /// the size of this storage. pub fn get(&self, index: usize) -> u64 { - // Validate.inclusiveBetween(0L, (long)(this.size - 1), (long)var1); - // int var2 = this.cellIndex(var1); - // long var3 = this.data[var2]; - // int var5 = (var1 - var2 * this.valuesPerLong) * this.bits; - // return (int)(var3 >> var5 & this.mask); - assert!( index < self.size, "Index {} out of bounds (must be less than {})", diff --git a/azalea-world/src/iterators.rs b/azalea-world/src/iterators.rs new file mode 100644 index 00000000..53a94898 --- /dev/null +++ b/azalea-world/src/iterators.rs @@ -0,0 +1,247 @@ +//! Iterators for iterating over Minecraft blocks and chunks, based on +//! [prismarine-world's iterators](https://github.com/PrismarineJS/prismarine-world/blob/master/src/iterators.js). + +use azalea_core::{BlockPos, ChunkPos}; + +/// An octahedron iterator, useful for iterating over blocks in a world. +/// +/// ``` +/// # use azalea_core::BlockPos; +/// # use azalea_world::iterators::BlockIterator; +/// +/// let mut iter = BlockIterator::new(BlockPos::default(), 4); +/// for block_pos in iter { +/// println!("{:?}", block_pos); +/// } +/// ``` +pub struct BlockIterator { + start: BlockPos, + max_distance: u32, + + pos: BlockPos, + apothem: u32, + left: i32, + right: i32, +} +impl BlockIterator { + pub fn new(start: BlockPos, max_distance: u32) -> Self { + Self { + start, + max_distance, + + pos: BlockPos { + x: -1, + y: -1, + z: -1, + }, + apothem: 1, + left: 1, + right: 2, + } + } +} + +impl Iterator for BlockIterator { + type Item = BlockPos; + + fn next(&mut self) -> Option { + if self.apothem > self.max_distance { + return None; + } + + self.right -= 1; + if self.right < 0 { + self.left -= 1; + if self.left < 0 { + self.pos.z += 2; + if self.pos.z > 1 { + self.pos.y += 2; + if self.pos.y > 1 { + self.pos.x += 2; + if self.pos.x > 1 { + self.apothem += 1; + self.pos.x = -1; + } + self.pos.y = -1; + } + self.pos.z = -1; + } + self.left = self.apothem as i32; + } + self.right = self.left; + } + let x = self.pos.x * self.right; + let y = self.pos.y * ((self.apothem as i32) - self.left); + let z = self.pos.z * ((self.apothem as i32) - (i32::abs(x) + i32::abs(y))); + Some(BlockPos { x: x, y, z } + self.start) + } +} + +/// A spiral iterator, useful for iterating over chunks in a world. Use +/// `ChunkIterator` to sort by x+y+z (Manhattan) distance. +/// +/// ``` +/// # use azalea_core::ChunkPos; +/// # use azalea_world::iterators::SquareChunkIterator; +/// +/// let mut iter = SquareChunkIterator::new(ChunkPos::default(), 4); +/// for chunk_pos in iter { +/// println!("{:?}", chunk_pos); +/// } +/// ``` +pub struct SquareChunkIterator { + start: ChunkPos, + number_of_points: u32, + + dir: ChunkPos, + + segment_len: u32, + pos: ChunkPos, + segment_passed: u32, + current_iter: u32, +} +impl SquareChunkIterator { + pub fn new(start: ChunkPos, max_distance: u32) -> Self { + Self { + start, + number_of_points: u32::pow(max_distance * 2 - 1, 2), + + dir: ChunkPos { x: 1, z: 0 }, + + segment_len: 1, + pos: ChunkPos::default(), + segment_passed: 0, + current_iter: 0, + } + } + + /// Change the distance that this iterator won't go past. + /// + /// ``` + /// # use azalea_core::ChunkPos; + /// # use azalea_world::iterators::SquareChunkIterator; + /// + /// let mut iter = SquareChunkIterator::new(ChunkPos::default(), 2); + /// while let Some(chunk_pos) = iter.next() { + /// println!("{:?}", chunk_pos); + /// } + /// iter.set_max_distance(4); + /// while let Some(chunk_pos) = iter.next() { + /// println!("{:?}", chunk_pos); + /// } + /// ``` + pub fn set_max_distance(&mut self, max_distance: u32) { + self.number_of_points = u32::pow(max_distance * 2 - 1, 2); + } +} +impl Iterator for SquareChunkIterator { + type Item = ChunkPos; + + fn next(&mut self) -> Option { + if self.current_iter > self.number_of_points { + return None; + } + + let output = self.start + self.dir; + + // make a step, add the direction to the current position + self.pos.x += self.dir.x; + self.pos.z += self.dir.z; + self.segment_passed += 1; + + if self.segment_passed == self.segment_len { + // done with current segment + self.segment_passed = 0; + + // rotate directions + (self.dir.x, self.dir.z) = (-self.dir.z, self.dir.x); + + // increase segment length if necessary + if self.dir.z == 0 { + self.segment_len += 1; + } + } + self.current_iter += 1; + Some(output) + } +} + +/// A diagonal spiral iterator, useful for iterating over chunks in a world. +/// +/// ``` +/// # use azalea_core::ChunkPos; +/// # use azalea_world::iterators::ChunkIterator; +/// +/// let mut iter = ChunkIterator::new(ChunkPos::default(), 4); +/// for chunk_pos in iter { +/// println!("{:?}", chunk_pos); +/// } +/// ``` +pub struct ChunkIterator { + pub max_distance: u32, + pub start: ChunkPos, + pub pos: ChunkPos, + pub layer: i32, + pub leg: i32, +} +impl ChunkIterator { + pub fn new(start: ChunkPos, max_distance: u32) -> Self { + Self { + max_distance, + start, + pos: ChunkPos { x: 2, z: -1 }, + layer: 1, + leg: -1, + } + } +} +impl Iterator for ChunkIterator { + type Item = ChunkPos; + + fn next(&mut self) -> Option { + match self.leg { + -1 => { + self.leg = 0; + return Some(self.start); + } + 0 => { + if self.max_distance == 1 { + return None; + } + self.pos.x -= 1; + self.pos.z += 1; + if self.pos.x == 0 { + self.leg = 1; + } + } + 1 => { + self.pos.x -= 1; + self.pos.z -= 1; + if self.pos.z == 0 { + self.leg = 2; + } + } + 2 => { + self.pos.x += 1; + self.pos.z -= 1; + if self.pos.x == 0 { + self.leg = 3; + } + } + 3 => { + self.pos.x += 1; + self.pos.z += 1; + if self.pos.z == 0 { + self.pos.x += 1; + self.leg = 0; + self.layer += 1; + if self.layer == self.max_distance as i32 { + return None; + } + } + } + _ => unreachable!(), + } + Some(self.start + self.pos) + } +} diff --git a/azalea-world/src/lib.rs b/azalea-world/src/lib.rs index 1a419c3a..77498efd 100644 --- a/azalea-world/src/lib.rs +++ b/azalea-world/src/lib.rs @@ -7,6 +7,7 @@ mod bit_storage; mod chunk_storage; mod container; pub mod entity; +pub mod iterators; pub mod palette; mod world; diff --git a/azalea-world/src/palette.rs b/azalea-world/src/palette.rs index d97f61a3..d10357ad 100755 --- a/azalea-world/src/palette.rs +++ b/azalea-world/src/palette.rs @@ -12,6 +12,11 @@ pub enum PalettedContainerType { #[derive(Clone, Debug)] pub struct PalettedContainer { pub bits_per_entry: u8, + /// This is usually a list of unique values that appear in the container so + /// they can be indexed by the bit storage. + /// + /// Sometimes it doesn't contain anything if there's too many unique items + /// in the bit storage, though. pub palette: Palette, /// Compacted list of indices pointing to entry IDs in the Palette. pub storage: BitStorage, @@ -37,7 +42,7 @@ impl PalettedContainer { container_type: &'static PalettedContainerType, ) -> Result { let bits_per_entry = u8::read_from(buf)?; - let palette_type = PaletteType::from_bits_and_type(bits_per_entry, container_type); + let palette_type = PaletteKind::from_bits_and_type(bits_per_entry, container_type); let palette = palette_type.read(buf)?; let size = container_type.size(); @@ -57,15 +62,33 @@ impl PalettedContainer { } /// Calculates the index of the given coordinates. - pub fn get_index(&self, x: usize, y: usize, z: usize) -> usize { + pub fn index_from_coords(&self, x: usize, y: usize, z: usize) -> usize { let size_bits = self.container_type.size_bits(); (((y << size_bits) | z) << size_bits) | x } + pub fn coords_from_index(&self, index: usize) -> (usize, usize, usize) { + let size_bits = self.container_type.size_bits(); + let mask = (1 << size_bits) - 1; + ( + index & mask, + (index >> size_bits >> size_bits) & mask, + (index >> size_bits) & mask, + ) + } + /// Returns the value at the given index. + /// + /// # Panics + /// + /// This function panics if the index is greater than or equal to the number + /// of things in the storage. (So for block states, it must be less than + /// 4096). pub fn get_at_index(&self, index: usize) -> u32 { + // first get the pallete id let paletted_value = self.storage.get(index); + // and then get the value from that id self.palette.value_for(paletted_value as usize) } @@ -73,14 +96,14 @@ impl PalettedContainer { pub fn get(&self, x: usize, y: usize, z: usize) -> u32 { // let paletted_value = self.storage.get(self.get_index(x, y, z)); // self.palette.value_for(paletted_value as usize) - self.get_at_index(self.get_index(x, y, z)) + self.get_at_index(self.index_from_coords(x, y, z)) } /// Sets the id at the given coordinates and return the previous id pub fn get_and_set(&mut self, x: usize, y: usize, z: usize, value: u32) -> u32 { let paletted_value = self.id_for(value); self.storage - .get_and_set(self.get_index(x, y, z), paletted_value as u64) as u32 + .get_and_set(self.index_from_coords(x, y, z), paletted_value as u64) as u32 } /// Sets the id at the given index and return the previous id. You probably @@ -92,12 +115,12 @@ impl PalettedContainer { /// Sets the id at the given coordinates and return the previous id pub fn set(&mut self, x: usize, y: usize, z: usize, value: u32) { - self.set_at_index(self.get_index(x, y, z), value); + self.set_at_index(self.index_from_coords(x, y, z), value); } fn create_or_reuse_data(&self, bits_per_entry: u8) -> PalettedContainer { let new_palette_type = - PaletteType::from_bits_and_type(bits_per_entry, &self.container_type); + PaletteKind::from_bits_and_type(bits_per_entry, &self.container_type); // note for whoever is trying to optimize this: vanilla has this // but it causes a stack overflow since it's not changing the bits per entry // i don't know how to fix this properly so glhf @@ -188,13 +211,14 @@ impl McBufWritable for PalettedContainer { } #[derive(Clone, Debug, PartialEq, Eq)] -pub enum PaletteType { +pub enum PaletteKind { SingleValue, Linear, Hashmap, Global, } +/// A representation of the different types of chunk palettes Minecraft uses. #[derive(Clone, Debug)] pub enum Palette { /// ID of the corresponding entry in its global palette @@ -211,13 +235,7 @@ impl Palette { match self { Palette::SingleValue(v) => *v, Palette::Linear(v) => v[id], - Palette::Hashmap(v) => { - if id >= v.len() { - 0 - } else { - v[id] - } - } + Palette::Hashmap(v) => v.get(id).copied().unwrap_or_default(), Palette::Global => id as u32, } } @@ -241,49 +259,49 @@ impl McBufWritable for Palette { } } -impl PaletteType { +impl PaletteKind { pub fn from_bits_and_type(bits_per_entry: u8, container_type: &PalettedContainerType) -> Self { match container_type { PalettedContainerType::BlockStates => match bits_per_entry { - 0 => PaletteType::SingleValue, - 1..=4 => PaletteType::Linear, - 5..=8 => PaletteType::Hashmap, - _ => PaletteType::Global, + 0 => PaletteKind::SingleValue, + 1..=4 => PaletteKind::Linear, + 5..=8 => PaletteKind::Hashmap, + _ => PaletteKind::Global, }, PalettedContainerType::Biomes => match bits_per_entry { - 0 => PaletteType::SingleValue, - 1..=3 => PaletteType::Linear, - _ => PaletteType::Global, + 0 => PaletteKind::SingleValue, + 1..=3 => PaletteKind::Linear, + _ => PaletteKind::Global, }, } } pub fn read(&self, buf: &mut Cursor<&[u8]>) -> Result { Ok(match self { - PaletteType::SingleValue => Palette::SingleValue(u32::var_read_from(buf)?), - PaletteType::Linear => Palette::Linear(Vec::::var_read_from(buf)?), - PaletteType::Hashmap => Palette::Hashmap(Vec::::var_read_from(buf)?), - PaletteType::Global => Palette::Global, + PaletteKind::SingleValue => Palette::SingleValue(u32::var_read_from(buf)?), + PaletteKind::Linear => Palette::Linear(Vec::::var_read_from(buf)?), + PaletteKind::Hashmap => Palette::Hashmap(Vec::::var_read_from(buf)?), + PaletteKind::Global => Palette::Global, }) } pub fn as_empty_palette(&self) -> Palette { match self { - PaletteType::SingleValue => Palette::SingleValue(0), - PaletteType::Linear => Palette::Linear(Vec::new()), - PaletteType::Hashmap => Palette::Hashmap(Vec::new()), - PaletteType::Global => Palette::Global, + PaletteKind::SingleValue => Palette::SingleValue(0), + PaletteKind::Linear => Palette::Linear(Vec::new()), + PaletteKind::Hashmap => Palette::Hashmap(Vec::new()), + PaletteKind::Global => Palette::Global, } } } -impl From<&Palette> for PaletteType { +impl From<&Palette> for PaletteKind { fn from(palette: &Palette) -> Self { match palette { - Palette::SingleValue(_) => PaletteType::SingleValue, - Palette::Linear(_) => PaletteType::Linear, - Palette::Hashmap(_) => PaletteType::Hashmap, - Palette::Global => PaletteType::Global, + Palette::SingleValue(_) => PaletteKind::SingleValue, + Palette::Linear(_) => PaletteKind::Linear, + Palette::Hashmap(_) => PaletteKind::Hashmap, + Palette::Global => PaletteKind::Global, } } } @@ -313,14 +331,14 @@ mod tests { assert_eq!(palette_container.bits_per_entry, 0); assert_eq!(palette_container.get_at_index(0), 0); assert_eq!( - PaletteType::from(&palette_container.palette), - PaletteType::SingleValue + PaletteKind::from(&palette_container.palette), + PaletteKind::SingleValue ); palette_container.set_at_index(0, 1); assert_eq!(palette_container.get_at_index(0), 1); assert_eq!( - PaletteType::from(&palette_container.palette), - PaletteType::Linear + PaletteKind::from(&palette_container.palette), + PaletteKind::Linear ); } @@ -359,4 +377,22 @@ mod tests { palette_container.set_at_index(16, 16); // 5 bits assert_eq!(palette_container.bits_per_entry, 5); } + + #[test] + fn test_coords_from_index() { + let palette_container = + PalettedContainer::new(&PalettedContainerType::BlockStates).unwrap(); + + for x in 0..15 { + for y in 0..15 { + for z in 0..15 { + assert_eq!( + palette_container + .coords_from_index(palette_container.index_from_coords(x, y, z)), + (x, y, z) + ); + } + } + } + } } diff --git a/azalea-world/src/world.rs b/azalea-world/src/world.rs index 41d83082..5bb9b0b7 100644 --- a/azalea-world/src/world.rs +++ b/azalea-world/src/world.rs @@ -2,9 +2,12 @@ use crate::{ entity::{ EntityInfos, EntityUuid, LoadedBy, Local, MinecraftEntityId, PartialEntityInfos, WorldName, }, + iterators::ChunkIterator, + palette::Palette, ChunkStorage, PartialChunkStorage, WorldContainer, }; -use azalea_core::ChunkPos; +use azalea_block::{BlockState, BlockStates}; +use azalea_core::{BlockPos, ChunkPos}; use bevy_ecs::{ entity::Entity, query::{Changed, With, Without}, @@ -187,6 +190,76 @@ impl Instance { pub fn entity_by_id(&self, entity_id: &MinecraftEntityId) -> Option { self.entity_by_id.get(entity_id).copied() } + + /// Find the coordinates of a block in the world. + /// + /// Note that this is sorted by `x+y+z` and not `x^2+y^2+z^2`, for + /// optimization purposes. + pub fn find_block( + &self, + nearest_to: impl Into, + block_states: &BlockStates, + ) -> Option { + // iterate over every chunk in a 3d spiral pattern + // and then check the palette for the block state + + let nearest_to: BlockPos = nearest_to.into(); + let start_chunk: ChunkPos = (&nearest_to).into(); + let iter = ChunkIterator::new(start_chunk, 32); + + for chunk_pos in iter { + let chunk = self.chunks.get(&chunk_pos).unwrap(); + + let mut nearest_found_pos: Option = None; + let mut nearest_found_distance = 0; + + for (section_index, section) in chunk.read().sections.iter().enumerate() { + let maybe_has_block = match §ion.states.palette { + Palette::SingleValue(id) => block_states.contains(&BlockState { id: *id }), + Palette::Linear(ids) => ids + .iter() + .any(|&id| block_states.contains(&BlockState { id })), + Palette::Hashmap(ids) => ids + .iter() + .any(|&id| block_states.contains(&BlockState { id })), + Palette::Global => true, + }; + if !maybe_has_block { + continue; + } + + for i in 0..4096 { + let block_state = section.states.get_at_index(i); + let block_state = BlockState { id: block_state }; + + if block_states.contains(&block_state) { + let (section_x, section_y, section_z) = section.states.coords_from_index(i); + let (x, y, z) = ( + chunk_pos.x * 16 + (section_x as i32), + self.chunks.min_y + (section_index * 16) as i32 + section_y as i32, + chunk_pos.z * 16 + (section_z as i32), + ); + let this_block_pos = BlockPos { x, y, z }; + let this_block_distance = (nearest_to - this_block_pos).length_manhattan(); + // only update if it's closer + if !nearest_found_pos.is_some() + || this_block_distance < nearest_found_distance + { + nearest_found_pos = Some(this_block_pos); + nearest_found_distance = this_block_distance; + } + } + } + } + + // if we found the position, return it + if nearest_found_pos.is_some() { + return nearest_found_pos; + } + } + + None + } } impl Debug for PartialWorld { diff --git a/azalea/examples/craft_dig_straight_down.rs b/azalea/examples/craft_dig_straight_down.rs deleted file mode 100755 index 0632776e..00000000 --- a/azalea/examples/craft_dig_straight_down.rs +++ /dev/null @@ -1,79 +0,0 @@ -use azalea::pathfinder; -use azalea::prelude::*; -use parking_lot::Mutex; -use std::sync::Arc; - -#[derive(Default, Clone, Component)] -struct State { - pub started: Arc>, -} - -#[tokio::main] -async fn main() { - let account = Account::offline("bot"); - // or let bot = Account::microsoft("email").await; - - azalea::ClientBuilder::new() - .set_handler(handle) - .start(account, "localhost") - .await - .unwrap(); -} - -async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { - match event { - Event::Chat(m) => { - if m.username() == Some(bot.profile.name) { - return Ok(()); - }; - if m.content() == "go" { - { - // make sure we only start once - if *state.started.lock() { - return Ok(()); - }; - *state.started.lock() = true; - } - - bot.goto(pathfinder::Goals::NearXZ(5, azalea::BlockXZ(0, 0))) - .await; - let chest = bot - .open_container(&bot.world().find_one_block(|b| b.id == "minecraft:chest")) - .await - .unwrap(); - bot.take_amount(&chest, 5, |i| i.id == "#minecraft:planks") - .await; - chest.close().await; - - let crafting_table = bot - .open_crafting_table( - &bot.world - .find_one_block(|b| b.id == "minecraft:crafting_table"), - ) - .await - .unwrap(); - bot.craft(&crafting_table, &bot.recipe_for("minecraft:sticks")) - .await?; - let pickaxe = bot - .craft(&crafting_table, &bot.recipe_for("minecraft:wooden_pickaxe")) - .await?; - crafting_table.close().await; - - bot.hold(&pickaxe); - - loop { - if let Err(e) = bot - .dig(azalea::entity::feet_pos(bot.entity()).down(1)) - .await - { - println!("{:?}", e); - break; - } - } - } - } - _ => {} - } - - Ok(()) -} diff --git a/azalea/examples/mine_a_chunk.rs b/azalea/examples/mine_a_chunk.rs deleted file mode 100644 index 74ffacac..00000000 --- a/azalea/examples/mine_a_chunk.rs +++ /dev/null @@ -1,53 +0,0 @@ -use azalea::{prelude::*, swarm::prelude::*}; - -#[tokio::main] -async fn main() { - let mut accounts = Vec::new(); - let mut states = Vec::new(); - - for i in 0..10 { - accounts.push(Account::offline(&format!("bot{i}"))); - states.push(State::default()); - } - - let e = SwarmBuilder::new() - .add_accounts(accounts.clone()) - .set_handler(handle) - .set_swarm_handler(swarm_handle) - .start("localhost") - .await; -} - -#[derive(Default, Clone, Component)] -struct State {} - -#[derive(Default, Clone, Resource)] -struct SwarmState {} - -async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { - Ok(()) -} - -async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: SwarmState) -> anyhow::Result<()> { - match &event { - SwarmEvent::Login => { - swarm.goto(azalea::BlockPos::new(0, 70, 0)).await; - // or bots.goto_goal(pathfinder::Goals::Goto(azalea::BlockPos(0, 70, 0))).await; - - // destroy the blocks in this area and then leave - - swarm - .fill( - azalea::Selection::Range( - azalea::BlockPos::new(0, 0, 0), - azalea::BlockPos::new(16, 255, 16), - ), - azalea::block::Air, - ) - .await; - } - _ => {} - } - - Ok(()) -} diff --git a/azalea/examples/pvp.rs b/azalea/examples/pvp.rs deleted file mode 100755 index fb5a768d..00000000 --- a/azalea/examples/pvp.rs +++ /dev/null @@ -1,65 +0,0 @@ -use std::time::Duration; - -use azalea::ecs::query::With; -use azalea::entity::metadata::Player; -use azalea::{pathfinder, Account, Client, Event, GameProfileComponent}; -use azalea::{prelude::*, swarm::prelude::*}; - -#[tokio::main] -async fn main() { - let mut accounts = Vec::new(); - let mut states = Vec::new(); - - for i in 0..10 { - accounts.push(Account::offline(&format!("bot{i}"))); - states.push(State::default()); - } - - SwarmBuilder::new() - .add_accounts(accounts.clone()) - .set_handler(handle) - .set_swarm_handler(swarm_handle) - .join_delay(Duration::from_millis(1000)) - .start("localhost") - .await - .unwrap(); -} - -#[derive(Component, Default, Clone)] -struct State {} - -#[derive(Resource, Default, Clone)] -struct SwarmState {} - -async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { - Ok(()) -} -async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: SwarmState) -> anyhow::Result<()> { - match event { - SwarmEvent::Tick => { - if let Some(target_entity) = - swarm.entity_by::>(|profile: &&GameProfileComponent| { - profile.name == "Herobrine" - }) - { - let target_bounding_box = - swarm.map_entity(target_entity, |bb: &BoundingBox| bb.clone()); - - for (bot, bot_state) in swarm { - bot.tick_goto_goal(pathfinder::Goals::Reach(target_bounding_box)); - // if target.bounding_box.distance(bot.eyes) < bot.reach_distance() { - if azalea::entities::can_reach(bot.entity(), target_bounding_box) { - bot.swing(); - } - if !bot.using_held_item() && bot.hunger() <= 17 { - bot.hold(azalea::ItemGroup::Food); - tokio::task::spawn(bot.use_held_item()); - } - } - } - } - _ => {} - } - - Ok(()) -} diff --git a/azalea/examples/testbot.rs b/azalea/examples/testbot.rs index 7b7b32b0..a25b28e3 100644 --- a/azalea/examples/testbot.rs +++ b/azalea/examples/testbot.rs @@ -52,17 +52,17 @@ async fn main() -> anyhow::Result<()> { } loop { - // let e = SwarmBuilder::new() - // .add_accounts(accounts.clone()) - // .set_handler(handle) - // .set_swarm_handler(swarm_handle) - // .join_delay(Duration::from_millis(1000)) - // .start("localhost") - // .await; - let e = azalea::ClientBuilder::new() + let e = SwarmBuilder::new() + .add_accounts(accounts.clone()) .set_handler(handle) - .start(Account::offline("bot"), "localhost") + .set_swarm_handler(swarm_handle) + .join_delay(Duration::from_millis(1000)) + .start("localhost") .await; + // let e = azalea::ClientBuilder::new() + // .set_handler(handle) + // .start(Account::offline("bot"), "localhost") + // .await; eprintln!("{e:?}"); } } @@ -140,6 +140,25 @@ async fn handle(mut bot: Client, event: Event, _state: State) -> anyhow::Result< "lag" => { std::thread::sleep(Duration::from_millis(1000)); } + "findblock" => { + let target_pos = bot.world().read().find_block( + bot.component::(), + &azalea_registry::Block::DiamondBlock.into(), + ); + bot.chat(&format!("target_pos: {target_pos:?}",)); + } + "gotoblock" => { + let target_pos = bot.world().read().find_block( + bot.component::(), + &azalea_registry::Block::DiamondBlock.into(), + ); + if let Some(target_pos) = target_pos { + // +1 to stand on top of the block + bot.goto(BlockPosGoal::from(target_pos.up(1))); + } else { + bot.chat("no diamond block found"); + } + } _ => {} } } diff --git a/azalea/examples/todo/README.md b/azalea/examples/todo/README.md new file mode 100644 index 00000000..ab31cf22 --- /dev/null +++ b/azalea/examples/todo/README.md @@ -0,0 +1 @@ +These examples don't work yet and were only written to help design APIs. They will work in the future (probably with minor changes). diff --git a/azalea/examples/todo/craft_dig_straight_down.rs b/azalea/examples/todo/craft_dig_straight_down.rs new file mode 100644 index 00000000..4c980ccf --- /dev/null +++ b/azalea/examples/todo/craft_dig_straight_down.rs @@ -0,0 +1,78 @@ +use azalea::pathfinder; +use azalea::prelude::*; +use parking_lot::Mutex; +use std::sync::Arc; + +#[derive(Default, Clone, Component)] +struct State { + pub started: Arc>, +} + +#[tokio::main] +async fn main() { + let account = Account::offline("bot"); + // or let bot = Account::microsoft("email").await; + + azalea::ClientBuilder::new() + .set_handler(handle) + .start(account, "localhost") + .await + .unwrap(); +} + +async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { + match event { + Event::Chat(m) => { + if m.username() == Some(bot.profile.name) { + return Ok(()); + }; + if m.content() == "go" { + { + // make sure we only start once + if *state.started.lock() { + return Ok(()); + }; + *state.started.lock() = true; + } + + bot.goto(pathfinder::Goals::NearXZ(5, azalea::BlockXZ(0, 0))) + .await; + let chest = bot + .open_container(&bot.world().find_block(azalea_registry::Block::Chest)) + .await + .unwrap(); + bot.take_amount(&chest, 5, |i| i.id == "#minecraft:planks") + .await; + chest.close().await; + + let crafting_table = bot + .open_crafting_table( + &bot.world.find_block(azalea_registry::Block::CraftingTable), + ) + .await + .unwrap(); + bot.craft(&crafting_table, &bot.recipe_for("minecraft:sticks")) + .await?; + let pickaxe = bot + .craft(&crafting_table, &bot.recipe_for("minecraft:wooden_pickaxe")) + .await?; + crafting_table.close().await; + + bot.hold(&pickaxe); + + loop { + if let Err(e) = bot + .dig(azalea::entity::feet_pos(bot.entity()).down(1)) + .await + { + println!("{:?}", e); + break; + } + } + } + } + _ => {} + } + + Ok(()) +} diff --git a/azalea/examples/todo/mine_a_chunk.rs b/azalea/examples/todo/mine_a_chunk.rs new file mode 100644 index 00000000..74ffacac --- /dev/null +++ b/azalea/examples/todo/mine_a_chunk.rs @@ -0,0 +1,53 @@ +use azalea::{prelude::*, swarm::prelude::*}; + +#[tokio::main] +async fn main() { + let mut accounts = Vec::new(); + let mut states = Vec::new(); + + for i in 0..10 { + accounts.push(Account::offline(&format!("bot{i}"))); + states.push(State::default()); + } + + let e = SwarmBuilder::new() + .add_accounts(accounts.clone()) + .set_handler(handle) + .set_swarm_handler(swarm_handle) + .start("localhost") + .await; +} + +#[derive(Default, Clone, Component)] +struct State {} + +#[derive(Default, Clone, Resource)] +struct SwarmState {} + +async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { + Ok(()) +} + +async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: SwarmState) -> anyhow::Result<()> { + match &event { + SwarmEvent::Login => { + swarm.goto(azalea::BlockPos::new(0, 70, 0)).await; + // or bots.goto_goal(pathfinder::Goals::Goto(azalea::BlockPos(0, 70, 0))).await; + + // destroy the blocks in this area and then leave + + swarm + .fill( + azalea::Selection::Range( + azalea::BlockPos::new(0, 0, 0), + azalea::BlockPos::new(16, 255, 16), + ), + azalea::block::Air, + ) + .await; + } + _ => {} + } + + Ok(()) +} diff --git a/azalea/examples/todo/pvp.rs b/azalea/examples/todo/pvp.rs new file mode 100644 index 00000000..fb5a768d --- /dev/null +++ b/azalea/examples/todo/pvp.rs @@ -0,0 +1,65 @@ +use std::time::Duration; + +use azalea::ecs::query::With; +use azalea::entity::metadata::Player; +use azalea::{pathfinder, Account, Client, Event, GameProfileComponent}; +use azalea::{prelude::*, swarm::prelude::*}; + +#[tokio::main] +async fn main() { + let mut accounts = Vec::new(); + let mut states = Vec::new(); + + for i in 0..10 { + accounts.push(Account::offline(&format!("bot{i}"))); + states.push(State::default()); + } + + SwarmBuilder::new() + .add_accounts(accounts.clone()) + .set_handler(handle) + .set_swarm_handler(swarm_handle) + .join_delay(Duration::from_millis(1000)) + .start("localhost") + .await + .unwrap(); +} + +#[derive(Component, Default, Clone)] +struct State {} + +#[derive(Resource, Default, Clone)] +struct SwarmState {} + +async fn handle(bot: Client, event: Event, state: State) -> anyhow::Result<()> { + Ok(()) +} +async fn swarm_handle(swarm: Swarm, event: SwarmEvent, state: SwarmState) -> anyhow::Result<()> { + match event { + SwarmEvent::Tick => { + if let Some(target_entity) = + swarm.entity_by::>(|profile: &&GameProfileComponent| { + profile.name == "Herobrine" + }) + { + let target_bounding_box = + swarm.map_entity(target_entity, |bb: &BoundingBox| bb.clone()); + + for (bot, bot_state) in swarm { + bot.tick_goto_goal(pathfinder::Goals::Reach(target_bounding_box)); + // if target.bounding_box.distance(bot.eyes) < bot.reach_distance() { + if azalea::entities::can_reach(bot.entity(), target_bounding_box) { + bot.swing(); + } + if !bot.using_held_item() && bot.hunger() <= 17 { + bot.hold(azalea::ItemGroup::Food); + tokio::task::spawn(bot.use_held_item()); + } + } + } + } + _ => {} + } + + Ok(()) +} -- cgit v1.2.3