From b71a7af53ae2dba2b43c8efc855a4a3b853ebff2 Mon Sep 17 00:00:00 2001 From: mat <27899617+mat-1@users.noreply.github.com> Date: Tue, 3 Dec 2024 14:42:23 -0600 Subject: [PATCH] 1.21.4 (#189) * start updating to 1.21.4 * fix block codegen and stop using block data from burger * 1.21.4-rc1 * 1.21.4 --- Cargo.lock | 42 +- README.md | 2 +- azalea-auth/Cargo.toml | 2 +- azalea-block/Cargo.toml | 2 +- azalea-block/azalea-block-macros/Cargo.toml | 2 +- azalea-block/src/generated.rs | 94 ++- azalea-brigadier/Cargo.toml | 2 +- azalea-buf/Cargo.toml | 2 +- azalea-buf/azalea-buf-macros/Cargo.toml | 2 +- azalea-chat/Cargo.toml | 2 +- azalea-client/Cargo.toml | 2 +- azalea-core/Cargo.toml | 2 +- azalea-crypto/Cargo.toml | 2 +- azalea-entity/Cargo.toml | 2 +- azalea-entity/src/metadata.rs | 107 +-- azalea-entity/src/particle.rs | 1 + azalea-inventory/Cargo.toml | 2 +- .../azalea-inventory-macros/Cargo.toml | 2 +- azalea-language/Cargo.toml | 2 +- azalea-language/src/en_us.json | 42 +- azalea-physics/Cargo.toml | 2 +- azalea-physics/src/collision/blocks.rs | 641 ++++++++++-------- azalea-protocol/Cargo.toml | 2 +- .../azalea-protocol-macros/Cargo.toml | 2 +- .../src/packets/game/c_level_particles.rs | 10 +- azalea-protocol/src/packets/game/mod.rs | 4 +- ...pick_item.rs => s_pick_item_from_block.rs} | 2 +- azalea-protocol/src/packets/mod.rs | 4 +- azalea-protocol/src/read.rs | 2 +- azalea-registry/Cargo.toml | 2 +- .../azalea-registry-macros/Cargo.toml | 2 +- azalea-registry/src/lib.rs | 42 +- azalea-registry/src/tags/blocks.rs | 239 +++++-- azalea-registry/src/tags/items.rs | 147 ++-- azalea-world/Cargo.toml | 2 +- azalea/Cargo.toml | 2 +- 36 files changed, 822 insertions(+), 599 deletions(-) rename azalea-protocol/src/packets/game/{s_pick_item.rs => s_pick_item_from_block.rs} (79%) diff --git a/Cargo.lock b/Cargo.lock index f7243fd55..7240bb30d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -190,7 +190,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "azalea" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "anyhow", "azalea-auth", @@ -229,7 +229,7 @@ dependencies = [ [[package]] name = "azalea-auth" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-crypto", @@ -249,7 +249,7 @@ dependencies = [ [[package]] name = "azalea-block" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-block-macros", "azalea-buf", @@ -258,7 +258,7 @@ dependencies = [ [[package]] name = "azalea-block-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "proc-macro2", "quote", @@ -267,7 +267,7 @@ dependencies = [ [[package]] name = "azalea-brigadier" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-chat", @@ -278,7 +278,7 @@ dependencies = [ [[package]] name = "azalea-buf" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf-macros", "byteorder", @@ -291,7 +291,7 @@ dependencies = [ [[package]] name = "azalea-buf-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "proc-macro2", "quote", @@ -300,7 +300,7 @@ dependencies = [ [[package]] name = "azalea-chat" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-language", @@ -313,7 +313,7 @@ dependencies = [ [[package]] name = "azalea-client" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "anyhow", "azalea-auth", @@ -347,7 +347,7 @@ dependencies = [ [[package]] name = "azalea-core" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-registry", @@ -361,7 +361,7 @@ dependencies = [ [[package]] name = "azalea-crypto" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "aes", "azalea-buf", @@ -378,7 +378,7 @@ dependencies = [ [[package]] name = "azalea-entity" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-block", "azalea-buf", @@ -401,7 +401,7 @@ dependencies = [ [[package]] name = "azalea-inventory" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-chat", @@ -414,7 +414,7 @@ dependencies = [ [[package]] name = "azalea-inventory-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "proc-macro2", "quote", @@ -423,7 +423,7 @@ dependencies = [ [[package]] name = "azalea-language" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "serde", "serde_json", @@ -431,7 +431,7 @@ dependencies = [ [[package]] name = "azalea-physics" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-block", "azalea-core", @@ -447,7 +447,7 @@ dependencies = [ [[package]] name = "azalea-protocol" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "anyhow", "async-recursion", @@ -484,7 +484,7 @@ dependencies = [ [[package]] name = "azalea-protocol-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "proc-macro2", "quote", @@ -493,7 +493,7 @@ dependencies = [ [[package]] name = "azalea-registry" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-buf", "azalea-registry-macros", @@ -503,7 +503,7 @@ dependencies = [ [[package]] name = "azalea-registry-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "quote", "syn", @@ -511,7 +511,7 @@ dependencies = [ [[package]] name = "azalea-world" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4-rc1" dependencies = [ "azalea-block", "azalea-buf", diff --git a/README.md b/README.md index a8d40905b..bdb1e4789 100755 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools. -_Currently supported Minecraft version: `1.21.3`._ +_Currently supported Minecraft version: `1.21.4`._ > [!WARNING] > Azalea is still very unfinished, though most crates are in a somewhat useable state diff --git a/azalea-auth/Cargo.toml b/azalea-auth/Cargo.toml index ec39650cd..3c83a515e 100644 --- a/azalea-auth/Cargo.toml +++ b/azalea-auth/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-auth" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-auth" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-block/Cargo.toml b/azalea-block/Cargo.toml index 87e3a726b..9f5bf9674 100644 --- a/azalea-block/Cargo.toml +++ b/azalea-block/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-block" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-block" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [lib] diff --git a/azalea-block/azalea-block-macros/Cargo.toml b/azalea-block/azalea-block-macros/Cargo.toml index 70adb167f..46c60d1de 100644 --- a/azalea-block/azalea-block-macros/Cargo.toml +++ b/azalea-block/azalea-block-macros/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-block-macros" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-block/azalea-block-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [lib] proc-macro = true diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs index 00f1299fa..de3605500 100755 --- a/azalea-block/src/generated.rs +++ b/azalea-block/src/generated.rs @@ -326,11 +326,8 @@ make_block_states! { "south" => South(bool), "up" => Up(bool), "west" => West(bool), - "creaking" => Creaking { - Disabled, - Dormant, - Active, - }, + "active" => Active(bool), + "natural" => Natural(bool), "half" => TopBottom { Top, Bottom, @@ -914,6 +911,31 @@ make_block_states! { _7, }, "in_wall" => InWall(bool), + "type" => Type { + Top, + Bottom, + Double, + }, + "east" => WallEast { + None, + Low, + Tall, + }, + "north" => WallNorth { + None, + Low, + Tall, + }, + "south" => WallSouth { + None, + Low, + Tall, + }, + "west" => WallWest { + None, + Low, + Tall, + }, "age" => NetherWartAge { _0, _1, @@ -941,26 +963,6 @@ make_block_states! { }, "disarmed" => Disarmed(bool), "conditional" => Conditional(bool), - "east" => WallEast { - None, - Low, - Tall, - }, - "north" => WallNorth { - None, - Low, - Tall, - }, - "south" => WallSouth { - None, - Low, - Tall, - }, - "west" => WallWest { - None, - Low, - Tall, - }, "age" => CarrotsAge { _0, _1, @@ -1192,11 +1194,6 @@ make_block_states! { _14, _15, }, - "type" => Type { - Top, - Bottom, - Double, - }, "rotation" => WhiteBannerRotation { _0, _1, @@ -2441,8 +2438,9 @@ make_block_states! { soul_fire => BlockBehavior::new(), {}, spawner => BlockBehavior::new().requires_correct_tool_for_drops().strength(5.0, 5.0), {}, creaking_heart => BlockBehavior::new(), { + "active": Active(false), "axis": Axis::Y, - "creaking": Creaking::Disabled, + "natural": Natural(false), }, oak_stairs => BlockBehavior::new().strength(2.0, 3.0), { "facing": FacingCardinal::North, @@ -2972,6 +2970,15 @@ make_block_states! { "waterlogged": Waterlogged(false), "west": West(false), }, + resin_clump => BlockBehavior::new(), { + "down": Down(false), + "east": East(false), + "north": North(false), + "south": South(false), + "up": Up(false), + "waterlogged": Waterlogged(false), + "west": West(false), + }, oak_fence_gate => BlockBehavior::new().strength(2.0, 3.0), { "facing": FacingCardinal::North, "in_wall": InWall(false), @@ -3000,6 +3007,27 @@ make_block_states! { "snowy": Snowy(false), }, lily_pad => BlockBehavior::new(), {}, + resin_block => BlockBehavior::new(), {}, + resin_bricks => BlockBehavior::new(), {}, + resin_brick_stairs => BlockBehavior::new(), { + "facing": FacingCardinal::North, + "half": TopBottom::Bottom, + "shape": StairShape::Straight, + "waterlogged": Waterlogged(false), + }, + resin_brick_slab => BlockBehavior::new(), { + "type": Type::Bottom, + "waterlogged": Waterlogged(false), + }, + resin_brick_wall => BlockBehavior::new(), { + "east": WallEast::None, + "north": WallNorth::None, + "south": WallSouth::None, + "up": Up(true), + "waterlogged": Waterlogged(false), + "west": WallWest::None, + }, + chiseled_resin_bricks => BlockBehavior::new(), {}, nether_bricks => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), {}, nether_brick_fence => BlockBehavior::new().requires_correct_tool_for_drops().strength(2.0, 6.0), { "east": East(false), @@ -5546,5 +5574,9 @@ make_block_states! { pale_hanging_moss => BlockBehavior::new(), { "tip": Tip(true), }, + open_eyeblossom => BlockBehavior::new(), {}, + closed_eyeblossom => BlockBehavior::new(), {}, + potted_open_eyeblossom => BlockBehavior::new(), {}, + potted_closed_eyeblossom => BlockBehavior::new(), {}, } } diff --git a/azalea-brigadier/Cargo.toml b/azalea-brigadier/Cargo.toml index 2b5bddcc5..12efd0fd9 100644 --- a/azalea-brigadier/Cargo.toml +++ b/azalea-brigadier/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-brigadier" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-brigadier" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-buf/Cargo.toml b/azalea-buf/Cargo.toml index 3c8572c88..992f379c8 100644 --- a/azalea-buf/Cargo.toml +++ b/azalea-buf/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-buf" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-buf" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-buf/azalea-buf-macros/Cargo.toml b/azalea-buf/azalea-buf-macros/Cargo.toml index 8920d0353..ade60daed 100644 --- a/azalea-buf/azalea-buf-macros/Cargo.toml +++ b/azalea-buf/azalea-buf-macros/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-buf-macros" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-buf" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [lib] proc-macro = true diff --git a/azalea-chat/Cargo.toml b/azalea-chat/Cargo.toml index b4f38ac33..754299390 100644 --- a/azalea-chat/Cargo.toml +++ b/azalea-chat/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-chat" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-chat" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-client/Cargo.toml b/azalea-client/Cargo.toml index 3746a0762..01001dfa5 100644 --- a/azalea-client/Cargo.toml +++ b/azalea-client/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-client" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-client" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-core/Cargo.toml b/azalea-core/Cargo.toml index ddde62163..8f9674d0b 100644 --- a/azalea-core/Cargo.toml +++ b/azalea-core/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-core" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-core" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-crypto/Cargo.toml b/azalea-crypto/Cargo.toml index a9c6b2543..4243ac447 100644 --- a/azalea-crypto/Cargo.toml +++ b/azalea-crypto/Cargo.toml @@ -3,7 +3,7 @@ description = "Cryptography features used in Minecraft." edition = "2021" license = "MIT" name = "azalea-crypto" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-crypto" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-entity/Cargo.toml b/azalea-entity/Cargo.toml index 14068d206..2508e0925 100644 --- a/azalea-entity/Cargo.toml +++ b/azalea-entity/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "azalea-entity" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" edition = "2021" description = "Things related to Minecraft entities used by Azalea" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-entity" diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs index 4054bfb3c..a70d853d3 100644 --- a/azalea-entity/src/metadata.rs +++ b/azalea-entity/src/metadata.rs @@ -2564,6 +2564,10 @@ impl Default for CowMetadataBundle { pub struct CanMove(pub bool); #[derive(Component, Deref, DerefMut, Clone)] pub struct IsActive(pub bool); +#[derive(Component, Deref, DerefMut, Clone)] +pub struct IsTearingDown(pub bool); +#[derive(Component, Deref, DerefMut, Clone)] +pub struct CreakingHomePos(pub Option); #[derive(Component)] pub struct Creaking; impl Creaking { @@ -2579,6 +2583,12 @@ impl Creaking { 17 => { entity.insert(IsActive(d.value.into_boolean()?)); } + 18 => { + entity.insert(IsTearingDown(d.value.into_boolean()?)); + } + 19 => { + entity.insert(CreakingHomePos(d.value.into_optional_block_pos()?)); + } _ => {} } Ok(()) @@ -2591,6 +2601,8 @@ pub struct CreakingMetadataBundle { parent: AbstractMonsterMetadataBundle, can_move: CanMove, is_active: IsActive, + is_tearing_down: IsTearingDown, + creaking_home_pos: CreakingHomePos, } impl Default for CreakingMetadataBundle { fn default() -> Self { @@ -2638,79 +2650,8 @@ impl Default for CreakingMetadataBundle { }, can_move: CanMove(true), is_active: IsActive(false), - } - } -} - -#[derive(Component)] -pub struct CreakingTransient; -impl CreakingTransient { - pub fn apply_metadata( - entity: &mut bevy_ecs::system::EntityCommands, - d: EntityDataItem, - ) -> Result<(), UpdateMetadataError> { - match d.index { - 0..=17 => Creaking::apply_metadata(entity, d)?, - _ => {} - } - Ok(()) - } -} - -#[derive(Bundle)] -pub struct CreakingTransientMetadataBundle { - _marker: CreakingTransient, - parent: CreakingMetadataBundle, -} -impl Default for CreakingTransientMetadataBundle { - fn default() -> Self { - Self { - _marker: CreakingTransient, - parent: CreakingMetadataBundle { - _marker: Creaking, - parent: AbstractMonsterMetadataBundle { - _marker: AbstractMonster, - parent: AbstractCreatureMetadataBundle { - _marker: AbstractCreature, - parent: AbstractInsentientMetadataBundle { - _marker: AbstractInsentient, - parent: AbstractLivingMetadataBundle { - _marker: AbstractLiving, - parent: AbstractEntityMetadataBundle { - _marker: AbstractEntity, - on_fire: OnFire(false), - shift_key_down: ShiftKeyDown(false), - sprinting: Sprinting(false), - swimming: Swimming(false), - currently_glowing: CurrentlyGlowing(false), - invisible: Invisible(false), - fall_flying: FallFlying(false), - air_supply: AirSupply(Default::default()), - custom_name: CustomName(Default::default()), - custom_name_visible: CustomNameVisible(Default::default()), - silent: Silent(Default::default()), - no_gravity: NoGravity(Default::default()), - pose: Pose::default(), - ticks_frozen: TicksFrozen(Default::default()), - }, - auto_spin_attack: AutoSpinAttack(false), - abstract_living_using_item: AbstractLivingUsingItem(false), - health: Health(1.0), - effect_particles: EffectParticles(Default::default()), - effect_ambience: EffectAmbience(false), - arrow_count: ArrowCount(0), - stinger_count: StingerCount(0), - sleeping_pos: SleepingPos(None), - }, - no_ai: NoAi(false), - left_handed: LeftHanded(false), - aggressive: Aggressive(false), - }, - }, - }, - can_move: CanMove(true), - is_active: IsActive(false), - }, + is_tearing_down: IsTearingDown(false), + creaking_home_pos: CreakingHomePos(None), } } } @@ -8398,7 +8339,7 @@ impl Default for RavagerMetadataBundle { #[derive(Component, Deref, DerefMut, Clone)] pub struct SalmonFromBucket(pub bool); #[derive(Component, Deref, DerefMut, Clone)] -pub struct SalmonKind(pub String); +pub struct SalmonKind(pub i32); #[derive(Component)] pub struct Salmon; impl Salmon { @@ -8412,7 +8353,7 @@ impl Salmon { entity.insert(SalmonFromBucket(d.value.into_boolean()?)); } 17 => { - entity.insert(SalmonKind(d.value.into_string()?)); + entity.insert(SalmonKind(d.value.into_int()?)); } _ => {} } @@ -10509,7 +10450,7 @@ impl Default for TropicalFishMetadataBundle { } #[derive(Component, Deref, DerefMut, Clone)] -pub struct HomePos(pub BlockPos); +pub struct TurtleHomePos(pub BlockPos); #[derive(Component, Deref, DerefMut, Clone)] pub struct HasEgg(pub bool); #[derive(Component, Deref, DerefMut, Clone)] @@ -10530,7 +10471,7 @@ impl Turtle { match d.index { 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, 17 => { - entity.insert(HomePos(d.value.into_block_pos()?)); + entity.insert(TurtleHomePos(d.value.into_block_pos()?)); } 18 => { entity.insert(HasEgg(d.value.into_boolean()?)); @@ -10557,7 +10498,7 @@ impl Turtle { pub struct TurtleMetadataBundle { _marker: Turtle, parent: AbstractAnimalMetadataBundle, - home_pos: HomePos, + turtle_home_pos: TurtleHomePos, has_egg: HasEgg, laying_egg: LayingEgg, travel_pos: TravelPos, @@ -10612,7 +10553,7 @@ impl Default for TurtleMetadataBundle { abstract_ageable_baby: AbstractAgeableBaby(false), }, }, - home_pos: HomePos(BlockPos::new(0, 0, 0)), + turtle_home_pos: TurtleHomePos(BlockPos::new(0, 0, 0)), has_egg: HasEgg(false), laying_egg: LayingEgg(false), travel_pos: TravelPos(BlockPos::new(0, 0, 0)), @@ -12703,11 +12644,6 @@ pub fn apply_metadata( Creaking::apply_metadata(entity, d)?; } } - azalea_registry::EntityKind::CreakingTransient => { - for d in items { - CreakingTransient::apply_metadata(entity, d)?; - } - } azalea_registry::EntityKind::Creeper => { for d in items { Creeper::apply_metadata(entity, d)?; @@ -13402,9 +13338,6 @@ pub fn apply_default_metadata( azalea_registry::EntityKind::Creaking => { entity.insert(CreakingMetadataBundle::default()); } - azalea_registry::EntityKind::CreakingTransient => { - entity.insert(CreakingTransientMetadataBundle::default()); - } azalea_registry::EntityKind::Creeper => { entity.insert(CreeperMetadataBundle::default()); } diff --git a/azalea-entity/src/particle.rs b/azalea-entity/src/particle.rs index fa948f858..76559e58d 100755 --- a/azalea-entity/src/particle.rs +++ b/azalea-entity/src/particle.rs @@ -163,6 +163,7 @@ impl From for Particle { ParticleKind::Fishing => Self::Fishing, ParticleKind::Flame => Self::Flame, ParticleKind::CherryLeaves => Self::CherryLeaves, + ParticleKind::PaleOakLeaves => Self::PaleOakLeaves, ParticleKind::SculkSoul => Self::SculkSoul, ParticleKind::SculkCharge => Self::SculkCharge(SculkChargeParticle::default()), ParticleKind::SculkChargePop => Self::SculkChargePop, diff --git a/azalea-inventory/Cargo.toml b/azalea-inventory/Cargo.toml index 5633c6dd0..2c1b6fc29 100644 --- a/azalea-inventory/Cargo.toml +++ b/azalea-inventory/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-inventory" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-inventory-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-inventory/azalea-inventory-macros/Cargo.toml b/azalea-inventory/azalea-inventory-macros/Cargo.toml index 92b17e978..555d86121 100644 --- a/azalea-inventory/azalea-inventory-macros/Cargo.toml +++ b/azalea-inventory/azalea-inventory-macros/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-inventory-macros" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-inventory/azalea-inventory-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [lib] proc-macro = true diff --git a/azalea-language/Cargo.toml b/azalea-language/Cargo.toml index 2038f31e5..20636a397 100644 --- a/azalea-language/Cargo.toml +++ b/azalea-language/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-language" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-language" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json index e1819511a..2826affe5 100755 --- a/azalea-language/src/en_us.json +++ b/azalea-language/src/en_us.json @@ -1429,6 +1429,7 @@ "block.minecraft.chiseled_polished_blackstone": "Chiseled Polished Blackstone", "block.minecraft.chiseled_quartz_block": "Chiseled Quartz Block", "block.minecraft.chiseled_red_sandstone": "Chiseled Red Sandstone", + "block.minecraft.chiseled_resin_bricks": "Chiseled Resin Bricks", "block.minecraft.chiseled_sandstone": "Chiseled Sandstone", "block.minecraft.chiseled_stone_bricks": "Chiseled Stone Bricks", "block.minecraft.chiseled_tuff": "Chiseled Tuff", @@ -1436,6 +1437,7 @@ "block.minecraft.chorus_flower": "Chorus Flower", "block.minecraft.chorus_plant": "Chorus Plant", "block.minecraft.clay": "Clay", + "block.minecraft.closed_eyeblossom": "Closed Eyeblossom", "block.minecraft.coal_block": "Block of Coal", "block.minecraft.coal_ore": "Coal Ore", "block.minecraft.coarse_dirt": "Coarse Dirt", @@ -1856,6 +1858,7 @@ "block.minecraft.obsidian": "Obsidian", "block.minecraft.ochre_froglight": "Ochre Froglight", "block.minecraft.ominous_banner": "Ominous Banner", + "block.minecraft.open_eyeblossom": "Open Eyeblossom", "block.minecraft.orange_banner": "Orange Banner", "block.minecraft.orange_bed": "Orange Bed", "block.minecraft.orange_candle": "Orange Candle", @@ -1971,6 +1974,7 @@ "block.minecraft.potted_brown_mushroom": "Potted Brown Mushroom", "block.minecraft.potted_cactus": "Potted Cactus", "block.minecraft.potted_cherry_sapling": "Potted Cherry Sapling", + "block.minecraft.potted_closed_eyeblossom": "Potted Closed Eyeblossom", "block.minecraft.potted_cornflower": "Potted Cornflower", "block.minecraft.potted_crimson_fungus": "Potted Crimson Fungus", "block.minecraft.potted_crimson_roots": "Potted Crimson Roots", @@ -1983,6 +1987,7 @@ "block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley", "block.minecraft.potted_mangrove_propagule": "Potted Mangrove Propagule", "block.minecraft.potted_oak_sapling": "Potted Oak Sapling", + "block.minecraft.potted_open_eyeblossom": "Potted Open Eyeblossom", "block.minecraft.potted_orange_tulip": "Potted Orange Tulip", "block.minecraft.potted_oxeye_daisy": "Potted Oxeye Daisy", "block.minecraft.potted_pale_oak_sapling": "Potted Pale Oak Sapling", @@ -2068,6 +2073,12 @@ "block.minecraft.reinforced_deepslate": "Reinforced Deepslate", "block.minecraft.repeater": "Redstone Repeater", "block.minecraft.repeating_command_block": "Repeating Command Block", + "block.minecraft.resin_block": "Block of Resin", + "block.minecraft.resin_brick_slab": "Resin Brick Slab", + "block.minecraft.resin_brick_stairs": "Resin Brick Stairs", + "block.minecraft.resin_brick_wall": "Resin Brick Wall", + "block.minecraft.resin_bricks": "Resin Bricks", + "block.minecraft.resin_clump": "Resin Clump", "block.minecraft.respawn_anchor": "Respawn Anchor", "block.minecraft.rooted_dirt": "Rooted Dirt", "block.minecraft.rose_bush": "Rose Bush", @@ -2431,6 +2442,7 @@ "commands.advancement.revoke.one.to.one.failure": "Couldn't revoke advancement %s from %s as they don't have it", "commands.advancement.revoke.one.to.one.success": "Revoked the advancement %s from %s", "commands.attribute.base_value.get.success": "Base value of attribute %s for entity %s is %s", + "commands.attribute.base_value.reset.success": "Base value for attribute %s for entity %s reset to default %s", "commands.attribute.base_value.set.success": "Base value for attribute %s for entity %s set to %s", "commands.attribute.failed.entity": "%s is not a valid entity for this command", "commands.attribute.failed.modifier_already_present": "Modifier %s is already present on attribute %s for entity %s", @@ -4358,6 +4370,8 @@ "item.minecraft.red_bundle": "Red Bundle", "item.minecraft.red_dye": "Red Dye", "item.minecraft.redstone": "Redstone Dust", + "item.minecraft.resin_brick": "Resin Brick", + "item.minecraft.resin_clump": "Resin Clump", "item.minecraft.rib_armor_trim_smithing_template": "Smithing Template", "item.minecraft.rib_armor_trim_smithing_template.new": "Rib Armor Trim", "item.minecraft.rotten_flesh": "Rotten Flesh", @@ -4569,6 +4583,9 @@ "item.modifiers.mainhand": "When in Main Hand:", "item.modifiers.offhand": "When in Off Hand:", "item.nbt_tags": "NBT: %s tag(s)", + "item.op_block_warning.line1": "Warning:", + "item.op_block_warning.line2": "Use of this item might lead to command execution", + "item.op_block_warning.line3": "Do not use unless you know the exact contents!", "item.unbreakable": "Unbreakable", "itemGroup.buildingBlocks": "Building Blocks", "itemGroup.coloredBlocks": "Colored Blocks", @@ -5999,6 +6016,7 @@ "structure_block.size.z": "structure size z", "structure_block.structure_name": "Structure Name", "subtitles.ambient.cave": "Eerie noise", + "subtitles.ambient.sound": "Eerie noise", "subtitles.block.amethyst_block.chime": "Amethyst chimes", "subtitles.block.amethyst_block.resonate": "Amethyst resonates", "subtitles.block.anvil.destroy": "Anvil destroyed", @@ -6050,7 +6068,7 @@ "subtitles.block.copper_trapdoor.open": "Trapdoor opens", "subtitles.block.crafter.craft": "Crafter crafts", "subtitles.block.crafter.fail": "Crafter fails crafting", - "subtitles.block.creaking_heart.hurt": "Creaking Heart screams", + "subtitles.block.creaking_heart.hurt": "Creaking Heart grumbles", "subtitles.block.creaking_heart.idle": "Eerie noise", "subtitles.block.creaking_heart.spawn": "Creaking Heart awakens", "subtitles.block.decorated_pot.insert": "Decorated Pot fills", @@ -6062,12 +6080,16 @@ "subtitles.block.enchantment_table.use": "Enchanting Table used", "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", "subtitles.block.end_portal.spawn": "End Portal opens", + "subtitles.block.eyeblossom.close": "Eyeblossom closes", + "subtitles.block.eyeblossom.idle": "Eyeblossom whispers", + "subtitles.block.eyeblossom.open": "Eyeblossom opens", "subtitles.block.fence_gate.toggle": "Fence Gate creaks", "subtitles.block.fire.ambient": "Fire crackles", "subtitles.block.fire.extinguish": "Fire extinguished", "subtitles.block.frogspawn.hatch": "Tadpole hatches", "subtitles.block.furnace.fire_crackle": "Furnace crackles", "subtitles.block.generic.break": "Block broken", + "subtitles.block.generic.fall": "Something falls on a block", "subtitles.block.generic.footsteps": "Footsteps", "subtitles.block.generic.hit": "Block breaking", "subtitles.block.generic.place": "Block placed", @@ -6240,15 +6262,15 @@ "subtitles.entity.cow.death": "Cow dies", "subtitles.entity.cow.hurt": "Cow hurts", "subtitles.entity.cow.milk": "Cow gets milked", - "subtitles.entity.creaking.activate": "Creaking activates", + "subtitles.entity.creaking.activate": "Creaking watches", "subtitles.entity.creaking.ambient": "Creaking creaks", - "subtitles.entity.creaking.angry": "Creaking sees player", "subtitles.entity.creaking.attack": "Creaking attacks", - "subtitles.entity.creaking.deactivate": "Creaking deactivates", - "subtitles.entity.creaking.death": "Creaking dies", + "subtitles.entity.creaking.deactivate": "Creaking calms", + "subtitles.entity.creaking.death": "Creaking crumbles", "subtitles.entity.creaking.freeze": "Creaking stops", - "subtitles.entity.creaking.spawn": "Creaking lives", - "subtitles.entity.creaking.sway": "Creaking is shielded", + "subtitles.entity.creaking.spawn": "Creaking manifests", + "subtitles.entity.creaking.sway": "Creaking is hit", + "subtitles.entity.creaking.twitch": "Creaking twitches", "subtitles.entity.creaking.unfreeze": "Creaking moves", "subtitles.entity.creeper.death": "Creeper dies", "subtitles.entity.creeper.hurt": "Creeper hurts", @@ -6315,6 +6337,7 @@ "subtitles.entity.firework_rocket.blast": "Firework blasts", "subtitles.entity.firework_rocket.launch": "Firework launches", "subtitles.entity.firework_rocket.twinkle": "Firework twinkles", + "subtitles.entity.fish.swim": "Splashes", "subtitles.entity.fishing_bobber.retrieve": "Bobber retrieved", "subtitles.entity.fishing_bobber.splash": "Fishing Bobber splashes", "subtitles.entity.fishing_bobber.throw": "Bobber thrown", @@ -6434,6 +6457,8 @@ "subtitles.entity.magma_cube.death": "Magma Cube dies", "subtitles.entity.magma_cube.hurt": "Magma Cube hurts", "subtitles.entity.magma_cube.squish": "Magma Cube squishes", + "subtitles.entity.minecart.inside": "Minecart jangles", + "subtitles.entity.minecart.inside_underwater": "Minecart jangles underwater", "subtitles.entity.minecart.riding": "Minecart rolls", "subtitles.entity.mooshroom.convert": "Mooshroom transforms", "subtitles.entity.mooshroom.eat": "Mooshroom eats", @@ -6590,6 +6615,7 @@ "subtitles.entity.skeleton_horse.ambient": "Skeleton Horse cries", "subtitles.entity.skeleton_horse.death": "Skeleton Horse dies", "subtitles.entity.skeleton_horse.hurt": "Skeleton Horse hurts", + "subtitles.entity.skeleton_horse.jump_water": "Skeleton Horse jumps", "subtitles.entity.skeleton_horse.swim": "Skeleton Horse swims", "subtitles.entity.skeleton.ambient": "Skeleton rattles", "subtitles.entity.skeleton.converted_to_stray": "Skeleton converts to Stray", @@ -6802,6 +6828,7 @@ "subtitles.item.crossbow.load": "Crossbow loads", "subtitles.item.crossbow.shoot": "Crossbow fires", "subtitles.item.dye.use": "Dye stains", + "subtitles.item.elytra.flying": "Swoosh", "subtitles.item.firecharge.use": "Fireball whooshes", "subtitles.item.flintandsteel.use": "Flint and Steel click", "subtitles.item.glow_ink_sac.use": "Glow Ink Sac splotches", @@ -6936,6 +6963,7 @@ "trim_material.minecraft.netherite": "Netherite Material", "trim_material.minecraft.quartz": "Quartz Material", "trim_material.minecraft.redstone": "Redstone Material", + "trim_material.minecraft.resin": "Resin Material", "trim_pattern.minecraft.bolt": "Bolt Armor Trim", "trim_pattern.minecraft.coast": "Coast Armor Trim", "trim_pattern.minecraft.dune": "Dune Armor Trim", diff --git a/azalea-physics/Cargo.toml b/azalea-physics/Cargo.toml index d668db1b7..cd711ebb5 100644 --- a/azalea-physics/Cargo.toml +++ b/azalea-physics/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-physics" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-physics" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs index d3c976ac2..eb6c43012 100644 --- a/azalea-physics/src/collision/blocks.rs +++ b/azalea-physics/src/collision/blocks.rs @@ -1768,15 +1768,15 @@ impl BlockWithShape for BlockState { } fn is_shape_empty(&self) -> bool { - matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2053|2106..=2133|2398..=2915|3030..=4325|4330..=4337|4354..=4577|4610..=4673|4746..=4765|4846..=4901|4910..=5373|5438..=5693|5790..=5815|5880..=5893|5896..=5899|5904..=5938|5965..=5980|6024..=6028|6030..=6031|7043..=7228|7231..=7232|7235..=7236|7239..=7240|7243..=7244|7247..=7248|7251..=7252|7255..=7256|7615..=7618|7636|7751..=7894|8155|8158|8479|8482|8826..=9009|9034..=9081|9398..=9429|9575..=9598|10702..=10733|11082..=11413|11651..=11652|11655..=11656|11659..=11660|11663..=11664|11667..=11668|11671..=11672|11675..=11676|11679..=11680|11683..=11684|11687..=11688|11691..=11692|11695..=11696|11699..=11700|11703..=11704|11707..=11708|11711..=11712|11715..=11716|11719..=11720|11723..=11724|11727..=11728|11731..=11732|11735..=11736|11739..=11740|11743..=11744|11747..=11748|11751..=11752|11755..=11756|11759..=11760|11763..=11764|11767..=11768|11771..=11772|11775..=11776|11779..=11780|11783..=11784|11787..=11788|11791..=11792|11795..=11796|11799..=11800|11803..=11804|11807..=11808|11811..=11812|11815..=11816|11819..=11820|11823..=11824|11827..=11828|11831..=11832|11835..=11836|11839..=11840|11875..=11876|11879..=11880|11883..=11884|11887..=11888|11891..=11892|11895..=11896|11899..=11900|11903..=11904|11907..=11908|11911..=11912|11915..=11916|11919..=11920|11923..=11924|11927..=11928|11931..=11932|11935..=11936|12964..=12965|12968|12970|12972|12974|12976..=12981|12983|13018|13229..=13255|13282..=13401|13413|13427..=13430|14635|14638|14959|14962|15283|15286|15607|15610|15931|15934|16255|16258|16579|16582|16903|16906|17227|17230|17551|17554|17875|17878|18199|18202|18523|18526|19044..=19047|19061|19063..=19064|19078|19080..=19134|19149..=19152|19345..=19346|19349..=19350|19353..=19354|19357..=19358|19361..=19362|19365..=19366|19369..=19370|19373..=19374|19377..=19378|19381..=19382|19385..=19386|19389..=19390|19393..=19394|19397..=19398|19401..=19402|19405..=19406|19569..=19616|19745..=19824|20016|20019|20436|20439|20841..=20866|20873|20876|21643|21646|22054|22057|22466|22469|22787|23269..=23396|25238..=25292|25296..=25311|25319..=25320|25327..=25328|25335..=25336|25343..=25370|25469|25472|25880|25883|26291|26294|26702|26705|27041) + matches!(self.id, 0|29..=42|45..=84|86..=117|1987..=2034|2047..=2053|2106..=2133|2398..=2915|3033..=4328|4333..=4340|4357..=4580|4613..=4676|4749..=4768|4849..=4904|4913..=5376|5441..=5696|5793..=5818|5883..=5896|5899..=5902|5907..=5941|5968..=5983|6027..=6031|6033..=6034|7046..=7229|7358..=7359|7362..=7363|7366..=7367|7370..=7371|7374..=7375|7378..=7379|7382..=7383|7386..=7387|8159..=8162|8180|8295..=8438|8699|8702|9023|9026|9370..=9553|9578..=9625|9942..=9973|10119..=10142|11246..=11277|11626..=11957|12195..=12196|12199..=12200|12203..=12204|12207..=12208|12211..=12212|12215..=12216|12219..=12220|12223..=12224|12227..=12228|12231..=12232|12235..=12236|12239..=12240|12243..=12244|12247..=12248|12251..=12252|12255..=12256|12259..=12260|12263..=12264|12267..=12268|12271..=12272|12275..=12276|12279..=12280|12283..=12284|12287..=12288|12291..=12292|12295..=12296|12299..=12300|12303..=12304|12307..=12308|12311..=12312|12315..=12316|12319..=12320|12323..=12324|12327..=12328|12331..=12332|12335..=12336|12339..=12340|12343..=12344|12347..=12348|12351..=12352|12355..=12356|12359..=12360|12363..=12364|12367..=12368|12371..=12372|12375..=12376|12379..=12380|12383..=12384|12419..=12420|12423..=12424|12427..=12428|12431..=12432|12435..=12436|12439..=12440|12443..=12444|12447..=12448|12451..=12452|12455..=12456|12459..=12460|12463..=12464|12467..=12468|12471..=12472|12475..=12476|12479..=12480|13508..=13509|13512|13514|13516|13518|13520..=13525|13527|13562|13773..=13799|13826..=13945|13957|13971..=13974|15179|15182|15503|15506|15827|15830|16151|16154|16475|16478|16799|16802|17123|17126|17447|17450|17771|17774|18095|18098|18419|18422|18743|18746|19067|19070|19588..=19591|19605|19607..=19608|19622|19624..=19678|19693..=19696|19889..=19890|19893..=19894|19897..=19898|19901..=19902|19905..=19906|19909..=19910|19913..=19914|19917..=19918|19921..=19922|19925..=19926|19929..=19930|19933..=19934|19937..=19938|19941..=19942|19945..=19946|19949..=19950|20113..=20160|20289..=20368|20560|20563|20980|20983|21385..=21410|21417|21420|22187|22190|22598|22601|23010|23013|23331|23813..=23940|25782..=25836|25840..=25855|25863..=25864|25871..=25872|25879..=25880|25887..=25914|26013|26016|26424|26427|26835|26838|27246|27249|27585) } fn is_shape_full(&self) -> bool { - matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2060..=2065|2090..=2105|2134..=2397|2916|4326..=4329|4346..=4353|5900..=5903|5946..=5947|5964|5981..=5982|6015|6017..=6023|6029|6032..=6039|6111..=6126|6767..=6970|7041..=7042|7499..=7500|7502|7645|7647..=7648|7741..=7742|7895|8136..=8148|9478..=9479|9490..=9494|9599..=9626|10699..=10701|10798..=10800|11045..=11046|11051..=11052|11057..=11062|11079..=11081|11414..=11416|11501..=11502|11507..=11508|11513..=11514|11519..=11520|11525..=11526|11531..=11532|11537..=11538|11549..=11550|11555..=11556|11561..=11562|11567..=11568|11573..=11574|11579..=11580|11585..=11586|11591..=11592|11597..=11598|11603..=11604|11609..=11610|11615..=11616|11621..=11622|11627..=11628|11633..=11634|11639..=11640|11645..=11650|12873..=12882|12963|12984..=13017|13019..=13228|13256|13272..=13281|13410|14555..=14556|14561..=14562|14567..=14568|14573..=14574|14579..=14580|14585..=14586|14591..=14592|14597..=14598|14603..=14604|14609..=14610|14615..=14616|14621..=14622|14627..=14628|18873..=18906|18935|19048..=19060|19062|19065..=19077|19079|19135..=19136|19141..=19142|19147..=19148|19825..=19840|19850..=19913|19915..=19923|19928..=19929|20338..=20343|20348..=20349|20754|20839..=20840|21191..=21193|21500..=21501|21550|21555..=21556|21961|21966..=21967|22372..=22373|22378..=22379|22784..=22786|23268|23397..=23398|23407..=23424|23749..=23750|23755..=23756|23761..=23762|23767..=23776|24101..=24102|24107..=24108|24113..=24114|24119..=24120|25145..=25192|25237|25312|25371|25373..=25376|25461..=25462|25787|25872..=25873|26198|26283..=26284|26609|26694..=26695|27020..=27029|27032..=27040|27042|27059..=27112) + matches!(self.id, 1..=21|26..=28|85|118..=156|160..=188|192..=245|249..=447|476..=1730|2041..=2046|2060..=2065|2090..=2105|2134..=2397|2916|4329..=4332|4349..=4356|5903..=5906|5949..=5950|5967|5984..=5985|6018|6020..=6026|6032|6035..=6042|6114..=6129|6770..=6973|7044..=7045|7630..=7631|8046|8189|8191..=8192|8285..=8286|8439|8680..=8692|10022..=10023|10034..=10038|10143..=10170|11243..=11245|11342..=11344|11589..=11590|11595..=11596|11601..=11606|11623..=11625|11958..=11960|12045..=12046|12051..=12052|12057..=12058|12063..=12064|12069..=12070|12075..=12076|12081..=12082|12093..=12094|12099..=12100|12105..=12106|12111..=12112|12117..=12118|12123..=12124|12129..=12130|12135..=12136|12141..=12142|12147..=12148|12153..=12154|12159..=12160|12165..=12166|12171..=12172|12177..=12178|12183..=12184|12189..=12194|13417..=13426|13507|13528..=13561|13563..=13772|13800|13816..=13825|13954|15099..=15100|15105..=15106|15111..=15112|15117..=15118|15123..=15124|15129..=15130|15135..=15136|15141..=15142|15147..=15148|15153..=15154|15159..=15160|15165..=15166|15171..=15172|19417..=19450|19479|19592..=19604|19606|19609..=19621|19623|19679..=19680|19685..=19686|19691..=19692|20369..=20384|20394..=20457|20459..=20467|20472..=20473|20882..=20887|20892..=20893|21298|21383..=21384|21735..=21737|22044..=22045|22094|22099..=22100|22505|22510..=22511|22916..=22917|22922..=22923|23328..=23330|23812|23941..=23942|23951..=23968|24293..=24294|24299..=24300|24305..=24306|24311..=24320|24645..=24646|24651..=24652|24657..=24658|24663..=24664|25689..=25736|25781|25856|25915|25917..=25920|26005..=26006|26331|26416..=26417|26742|26827..=26828|27153|27238..=27239|27564..=27573|27576..=27584|27586|27603..=27656) } } -static SHAPES_MAP: [&LazyLock; 27113] = [ +static SHAPES_MAP: [&LazyLock; 27657] = [ &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, @@ -2069,19 +2069,19 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE29, &SHAPE29, - &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, - &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, - &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, - &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, - &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, - &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, - &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, - &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, - &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE53, &SHAPE53, &SHAPE54, - &SHAPE54, &SHAPE55, &SHAPE55, &SHAPE53, &SHAPE53, &SHAPE55, &SHAPE55, &SHAPE54, &SHAPE54, - &SHAPE53, &SHAPE53, &SHAPE56, &SHAPE56, &SHAPE57, &SHAPE57, &SHAPE53, &SHAPE53, &SHAPE57, - &SHAPE57, &SHAPE56, &SHAPE56, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, + &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, + &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, + &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, + &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, + &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, + &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, + &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, + &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, + &SHAPE53, &SHAPE53, &SHAPE54, &SHAPE54, &SHAPE55, &SHAPE55, &SHAPE53, &SHAPE53, &SHAPE55, + &SHAPE55, &SHAPE54, &SHAPE54, &SHAPE53, &SHAPE53, &SHAPE56, &SHAPE56, &SHAPE57, &SHAPE57, + &SHAPE53, &SHAPE53, &SHAPE57, &SHAPE57, &SHAPE56, &SHAPE56, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2210,11 +2210,10 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, &SHAPE62, + &SHAPE62, &SHAPE62, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2236,42 +2235,43 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE64, &SHAPE64, - &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE65, - &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, - &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, - &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, - &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE66, - &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, - &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE65, - &SHAPE65, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE64, &SHAPE64, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE29, &SHAPE29, - &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, - &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, - &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, - &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, - &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, - &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, - &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, - &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, - &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE64, + &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, + &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, + &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, + &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, + &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, + &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, + &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE64, &SHAPE64, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, + &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, + &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, + &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, + &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, + &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, + &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, + &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, + &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2317,14 +2317,14 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2349,74 +2349,53 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE69, &SHAPE69, &SHAPE69, + &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, + &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, + &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, - &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, - &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, - &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, - &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, - &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, - &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, - &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE69, &SHAPE69, &SHAPE69, + &SHAPE69, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, + &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, + &SHAPE70, &SHAPE70, &SHAPE70, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE69, &SHAPE70, &SHAPE70, + &SHAPE70, &SHAPE70, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE66, - &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, - &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE67, - &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, - &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE65, - &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, - &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE64, - &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, - &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE64, &SHAPE64, + &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE65, + &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, + &SHAPE64, &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, + &SHAPE64, &SHAPE67, &SHAPE67, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, + &SHAPE66, &SHAPE66, &SHAPE65, &SHAPE65, &SHAPE66, &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE66, + &SHAPE66, &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, + &SHAPE67, &SHAPE67, &SHAPE64, &SHAPE64, &SHAPE65, &SHAPE65, &SHAPE64, &SHAPE64, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE7, &SHAPE58, &SHAPE59, &SHAPE8, &SHAPE60, &SHAPE13, - &SHAPE61, &SHAPE1, &SHAPE1, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE7, &SHAPE58, + &SHAPE59, &SHAPE8, &SHAPE60, &SHAPE13, &SHAPE61, &SHAPE1, &SHAPE1, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, - &SHAPE71, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, - &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE76, &SHAPE77, &SHAPE78, - &SHAPE79, &SHAPE78, &SHAPE79, &SHAPE80, &SHAPE81, &SHAPE80, &SHAPE81, &SHAPE82, &SHAPE83, - &SHAPE82, &SHAPE83, &SHAPE84, &SHAPE85, &SHAPE84, &SHAPE85, &SHAPE86, &SHAPE87, &SHAPE86, - &SHAPE87, &SHAPE88, &SHAPE89, &SHAPE88, &SHAPE89, &SHAPE1, &SHAPE61, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, - &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE91, &SHAPE92, &SHAPE93, &SHAPE94, &SHAPE95, &SHAPE96, &SHAPE97, &SHAPE7, &SHAPE7, - &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, + &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE71, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, + &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE78, &SHAPE79, &SHAPE80, &SHAPE81, &SHAPE80, + &SHAPE81, &SHAPE82, &SHAPE83, &SHAPE82, &SHAPE83, &SHAPE84, &SHAPE85, &SHAPE84, &SHAPE85, + &SHAPE86, &SHAPE87, &SHAPE86, &SHAPE87, &SHAPE88, &SHAPE89, &SHAPE88, &SHAPE89, &SHAPE1, + &SHAPE61, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE91, &SHAPE92, &SHAPE93, &SHAPE94, &SHAPE95, &SHAPE96, + &SHAPE97, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, - &SHAPE7, &SHAPE7, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE65, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, - &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, - &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, - &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, - &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, - &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, - &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, - &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, - &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, - &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, - &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, - &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, - &SHAPE99, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, @@ -2444,28 +2423,49 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, - &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, + &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, + &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, + &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, + &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, + &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, + &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE65, &SHAPE65, &SHAPE65, + &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, + &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE98, + &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, &SHAPE99, + &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, + &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE64, + &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE65, &SHAPE65, + &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, + &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, + &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, + &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, + &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, + &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, - &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, - &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, - &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, - &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, - &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, - &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, - &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, - &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, - &SHAPE99, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, &SHAPE98, + &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, &SHAPE99, + &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE66, + &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, &SHAPE66, + &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, &SHAPE64, + &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, &SHAPE64, + &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE98, + &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE65, &SHAPE99, &SHAPE99, + &SHAPE99, &SHAPE99, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE98, &SHAPE98, &SHAPE98, + &SHAPE98, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE67, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, + &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE66, + &SHAPE66, &SHAPE66, &SHAPE66, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE64, &SHAPE64, + &SHAPE64, &SHAPE64, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE98, &SHAPE64, &SHAPE64, &SHAPE64, + &SHAPE64, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE99, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -2485,16 +2485,16 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE100, + &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, + &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, + &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, + &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE115, &SHAPE115, + &SHAPE116, &SHAPE116, &SHAPE117, &SHAPE117, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, - &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE115, &SHAPE115, &SHAPE116, &SHAPE116, &SHAPE117, - &SHAPE117, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, - &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, - &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, - &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, - &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2512,10 +2512,41 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, - &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, - &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, - &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, &SHAPE29, &SHAPE29, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, + &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, + &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, &SHAPE0, &SHAPE0, + &SHAPE83, &SHAPE83, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, &SHAPE0, &SHAPE0, &SHAPE83, &SHAPE83, + &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, + &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, + &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, + &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, + &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, + &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, + &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, + &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, + &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE29, + &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, + &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, + &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, + &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, + &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, + &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, + &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, + &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, + &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, @@ -2524,7 +2555,91 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, - &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE29, &SHAPE29, &SHAPE30, + &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE1, &SHAPE1, &SHAPE119, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, + &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE78, &SHAPE79, &SHAPE80, &SHAPE81, &SHAPE80, + &SHAPE81, &SHAPE82, &SHAPE83, &SHAPE82, &SHAPE83, &SHAPE84, &SHAPE85, &SHAPE84, &SHAPE85, + &SHAPE86, &SHAPE87, &SHAPE86, &SHAPE87, &SHAPE88, &SHAPE89, &SHAPE88, &SHAPE89, &SHAPE29, + &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, + &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, + &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, + &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, + &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, + &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, + &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, + &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, + &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE13, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, + &SHAPE120, &SHAPE120, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, + &SHAPE121, &SHAPE121, &SHAPE0, &SHAPE122, &SHAPE122, &SHAPE122, &SHAPE122, &SHAPE123, + &SHAPE123, &SHAPE123, &SHAPE123, &SHAPE1, &SHAPE72, &SHAPE1, &SHAPE1, &SHAPE124, &SHAPE125, + &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, + &SHAPE134, &SHAPE135, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, + &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, + &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, + &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, + &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, + &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, + &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, + &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, + &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, + &SHAPE47, &SHAPE1, &SHAPE1, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, + &SHAPE53, &SHAPE53, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, @@ -2542,11 +2657,7 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, - &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE1, &SHAPE1, &SHAPE119, &SHAPE1, &SHAPE74, - &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, - &SHAPE78, &SHAPE79, &SHAPE80, &SHAPE81, &SHAPE80, &SHAPE81, &SHAPE82, &SHAPE83, &SHAPE82, - &SHAPE83, &SHAPE84, &SHAPE85, &SHAPE84, &SHAPE85, &SHAPE86, &SHAPE87, &SHAPE86, &SHAPE87, - &SHAPE88, &SHAPE89, &SHAPE88, &SHAPE89, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, + &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, @@ -2555,105 +2666,8 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, - &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE13, &SHAPE120, - &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE120, &SHAPE121, - &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE121, &SHAPE0, - &SHAPE122, &SHAPE122, &SHAPE122, &SHAPE122, &SHAPE123, &SHAPE123, &SHAPE123, &SHAPE123, - &SHAPE1, &SHAPE72, &SHAPE1, &SHAPE1, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE127, &SHAPE128, - &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE29, - &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, - &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, - &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, - &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, - &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, - &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, - &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, - &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, - &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE1, &SHAPE1, - &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE53, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, - &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, - &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, - &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, - &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, - &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, - &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, - &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, - &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, - &SHAPE47, &SHAPE47, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, - &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, - &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, - &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, - &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, - &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, - &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, - &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, - &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, - &SHAPE47, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, - &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, - &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, - &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, - &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, - &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, - &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, - &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, - &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE136, &SHAPE137, &SHAPE137, &SHAPE136, &SHAPE137, &SHAPE137, - &SHAPE0, &SHAPE138, &SHAPE138, &SHAPE0, &SHAPE138, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE140, - &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE141, &SHAPE142, - &SHAPE142, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE141, - &SHAPE142, &SHAPE142, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE144, - &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE146, &SHAPE145, &SHAPE146, - &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, - &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE147, &SHAPE148, &SHAPE148, - &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, - &SHAPE150, &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE145, - &SHAPE146, &SHAPE146, &SHAPE145, &SHAPE146, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE148, - &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, - &SHAPE150, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, - &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE152, - &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE154, &SHAPE153, &SHAPE154, - &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, - &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE155, &SHAPE156, &SHAPE156, - &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, - &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, - &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, - &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, - &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, - &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE159, &SHAPE160, &SHAPE160, - &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, - &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, - &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, - &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, - &SHAPE166, &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE153, - &SHAPE154, &SHAPE154, &SHAPE153, &SHAPE154, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE156, - &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, - &SHAPE158, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, - &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE160, - &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, - &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, - &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, - &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, - &SHAPE166, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, - &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, - &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, - &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, - &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE136, &SHAPE137, &SHAPE137, + &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE136, &SHAPE137, &SHAPE137, &SHAPE136, &SHAPE137, &SHAPE137, &SHAPE0, &SHAPE138, &SHAPE138, &SHAPE0, &SHAPE138, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE139, @@ -2694,10 +2708,51 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, + &SHAPE136, &SHAPE137, &SHAPE137, &SHAPE136, &SHAPE137, &SHAPE137, &SHAPE0, &SHAPE138, + &SHAPE138, &SHAPE0, &SHAPE138, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE139, + &SHAPE140, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE141, &SHAPE142, &SHAPE142, + &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE139, &SHAPE140, &SHAPE140, &SHAPE141, &SHAPE142, + &SHAPE142, &SHAPE141, &SHAPE142, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE143, + &SHAPE144, &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE146, &SHAPE145, &SHAPE146, &SHAPE146, + &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, + &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, + &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, + &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE143, &SHAPE144, &SHAPE144, &SHAPE145, &SHAPE146, + &SHAPE146, &SHAPE145, &SHAPE146, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, + &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, + &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE147, &SHAPE148, &SHAPE148, &SHAPE149, &SHAPE150, + &SHAPE150, &SHAPE149, &SHAPE150, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE151, + &SHAPE152, &SHAPE152, &SHAPE153, &SHAPE154, &SHAPE154, &SHAPE153, &SHAPE154, &SHAPE154, + &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, + &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, + &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, + &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, + &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, + &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, + &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, + &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, + &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, + &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, + &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, + &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, + &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE151, &SHAPE152, &SHAPE152, &SHAPE153, &SHAPE154, + &SHAPE154, &SHAPE153, &SHAPE154, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, + &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, + &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE155, &SHAPE156, &SHAPE156, &SHAPE157, &SHAPE158, + &SHAPE158, &SHAPE157, &SHAPE158, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, + &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, + &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, + &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, + &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, + &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE159, &SHAPE160, &SHAPE160, &SHAPE161, &SHAPE162, + &SHAPE162, &SHAPE161, &SHAPE162, &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, + &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, + &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE163, &SHAPE164, &SHAPE164, &SHAPE165, &SHAPE166, + &SHAPE166, &SHAPE165, &SHAPE166, &SHAPE166, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, + &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE1, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, - &SHAPE1, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, - &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, - &SHAPE27, &SHAPE27, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE27, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -2715,97 +2770,77 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE169, &SHAPE169, + &SHAPE0, &SHAPE0, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE169, &SHAPE169, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE169, &SHAPE169, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE169, &SHAPE169, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE169, &SHAPE169, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE169, &SHAPE169, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, - &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE169, &SHAPE170, &SHAPE170, - &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, &SHAPE173, &SHAPE174, &SHAPE174, + &SHAPE169, &SHAPE170, &SHAPE170, &SHAPE171, &SHAPE171, &SHAPE172, &SHAPE172, &SHAPE173, + &SHAPE173, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, - &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE174, &SHAPE175, &SHAPE175, - &SHAPE176, &SHAPE176, &SHAPE177, &SHAPE177, &SHAPE178, &SHAPE178, &SHAPE179, &SHAPE179, - &SHAPE180, &SHAPE180, &SHAPE179, &SHAPE179, &SHAPE180, &SHAPE180, &SHAPE179, &SHAPE179, - &SHAPE180, &SHAPE180, &SHAPE53, &SHAPE53, &SHAPE54, &SHAPE54, &SHAPE55, &SHAPE55, &SHAPE53, - &SHAPE53, &SHAPE55, &SHAPE55, &SHAPE54, &SHAPE54, &SHAPE53, &SHAPE53, &SHAPE56, &SHAPE56, - &SHAPE57, &SHAPE57, &SHAPE53, &SHAPE53, &SHAPE57, &SHAPE57, &SHAPE56, &SHAPE56, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE174, &SHAPE175, &SHAPE175, &SHAPE176, &SHAPE176, &SHAPE177, &SHAPE177, &SHAPE178, + &SHAPE178, &SHAPE179, &SHAPE179, &SHAPE180, &SHAPE180, &SHAPE179, &SHAPE179, &SHAPE180, + &SHAPE180, &SHAPE179, &SHAPE179, &SHAPE180, &SHAPE180, &SHAPE53, &SHAPE53, &SHAPE54, &SHAPE54, + &SHAPE55, &SHAPE55, &SHAPE53, &SHAPE53, &SHAPE55, &SHAPE55, &SHAPE54, &SHAPE54, &SHAPE53, + &SHAPE53, &SHAPE56, &SHAPE56, &SHAPE57, &SHAPE57, &SHAPE53, &SHAPE53, &SHAPE57, &SHAPE57, + &SHAPE56, &SHAPE56, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, - &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE59, &SHAPE59, &SHAPE59, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, + &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE7, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, - &SHAPE59, &SHAPE59, &SHAPE1, &SHAPE1, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, - &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, - &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, - &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, - &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, - &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, &SHAPE49, &SHAPE41, &SHAPE41, - &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, &SHAPE50, &SHAPE50, &SHAPE46, - &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, &SHAPE37, &SHAPE51, &SHAPE51, - &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, &SHAPE42, &SHAPE42, &SHAPE52, - &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, &SHAPE38, &SHAPE47, &SHAPE47, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE59, &SHAPE1, &SHAPE1, &SHAPE181, &SHAPE182, + &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, + &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, + &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, + &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, + &SHAPE45, &SHAPE45, &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE48, &SHAPE48, &SHAPE49, + &SHAPE49, &SHAPE41, &SHAPE41, &SHAPE30, &SHAPE30, &SHAPE43, &SHAPE43, &SHAPE32, &SHAPE32, + &SHAPE50, &SHAPE50, &SHAPE46, &SHAPE46, &SHAPE35, &SHAPE35, &SHAPE48, &SHAPE48, &SHAPE37, + &SHAPE37, &SHAPE51, &SHAPE51, &SHAPE31, &SHAPE31, &SHAPE40, &SHAPE40, &SHAPE33, &SHAPE33, + &SHAPE42, &SHAPE42, &SHAPE52, &SHAPE52, &SHAPE36, &SHAPE36, &SHAPE45, &SHAPE45, &SHAPE38, + &SHAPE38, &SHAPE47, &SHAPE47, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, - &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, - &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, - &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, - &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, - &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, - &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, - &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE100, - &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, - &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, - &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, - &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, - &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, - &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, - &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, - &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, - &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, - &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, - &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, - &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, @@ -2849,6 +2884,26 @@ static SHAPES_MAP: [&LazyLock; 27113] = [ &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, + &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, + &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, + &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, + &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, + &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, + &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, + &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, + &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, + &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, + &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, + &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, + &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, + &SHAPE114, &SHAPE2, &SHAPE100, &SHAPE101, &SHAPE100, &SHAPE101, &SHAPE102, &SHAPE103, + &SHAPE102, &SHAPE103, &SHAPE104, &SHAPE105, &SHAPE104, &SHAPE105, &SHAPE106, &SHAPE107, + &SHAPE106, &SHAPE107, &SHAPE108, &SHAPE109, &SHAPE108, &SHAPE109, &SHAPE110, &SHAPE111, + &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE2, &SHAPE114, &SHAPE2, &SHAPE29, &SHAPE29, &SHAPE30, &SHAPE30, &SHAPE31, &SHAPE31, &SHAPE32, &SHAPE32, &SHAPE33, &SHAPE33, &SHAPE34, &SHAPE34, &SHAPE35, &SHAPE35, &SHAPE36, &SHAPE36, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE41, diff --git a/azalea-protocol/Cargo.toml b/azalea-protocol/Cargo.toml index 6a24c5ff8..1d053a760 100644 --- a/azalea-protocol/Cargo.toml +++ b/azalea-protocol/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-protocol" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-protocol" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-protocol/azalea-protocol-macros/Cargo.toml b/azalea-protocol/azalea-protocol-macros/Cargo.toml index 5f1d5b6ed..0b5e0fda8 100644 --- a/azalea-protocol/azalea-protocol-macros/Cargo.toml +++ b/azalea-protocol/azalea-protocol-macros/Cargo.toml @@ -3,7 +3,7 @@ description = "Macros internally used in azalea-protocol." edition = "2021" license = "MIT" name = "azalea-protocol-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-protocol/azalea-protocol-macros" [lib] diff --git a/azalea-protocol/src/packets/game/c_level_particles.rs b/azalea-protocol/src/packets/game/c_level_particles.rs index d700673c0..ef50d0cd7 100755 --- a/azalea-protocol/src/packets/game/c_level_particles.rs +++ b/azalea-protocol/src/packets/game/c_level_particles.rs @@ -5,6 +5,7 @@ use azalea_protocol_macros::ClientboundGamePacket; #[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] pub struct ClientboundLevelParticles { pub override_limiter: bool, + pub always_show: bool, pub x: f64, pub y: f64, pub z: f64, @@ -27,13 +28,14 @@ mod tests { #[test] fn test_c_level_particles_packet() { let slice = &[ - 0, 64, 139, 10, 0, 0, 0, 0, 0, 192, 26, 0, 0, 0, 0, 0, 0, 64, 144, 58, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 63, 128, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 63, 128, 0, 0, + 0, 0, 64, 36, 19, 1, 192, 139, 224, 69, 64, 91, 192, 0, 0, 0, 0, 0, 63, 229, 66, 62, + 20, 132, 232, 141, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 25, 153, 154, 0, 0, 0, 70, + 1, 9, ][..]; let mut bytes = Cursor::new(slice); - let _packet = ClientboundLevelParticles::azalea_read(&mut bytes).unwrap(); + let packet = ClientboundLevelParticles::azalea_read(&mut bytes).unwrap(); + println!("{packet:?}"); assert_eq!(bytes.position(), slice.len() as u64); } } diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index 757dd27f1..35c1a2fef 100755 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -172,13 +172,15 @@ declare_state_packets!(GamePacket, move_player_status_only, move_vehicle, paddle_boat, - pick_item, + pick_item_from_block, + pick_item_from_entity, ping_request, place_recipe, player_abilities, player_action, player_command, player_input, + player_loaded, pong, recipe_book_change_settings, recipe_book_seen_recipe, diff --git a/azalea-protocol/src/packets/game/s_pick_item.rs b/azalea-protocol/src/packets/game/s_pick_item_from_block.rs similarity index 79% rename from azalea-protocol/src/packets/game/s_pick_item.rs rename to azalea-protocol/src/packets/game/s_pick_item_from_block.rs index 289da6e70..d923646bb 100755 --- a/azalea-protocol/src/packets/game/s_pick_item.rs +++ b/azalea-protocol/src/packets/game/s_pick_item_from_block.rs @@ -2,7 +2,7 @@ use azalea_buf::AzBuf; use azalea_protocol_macros::ServerboundGamePacket; #[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] -pub struct ServerboundPickItem { +pub struct ServerboundPickItemFromBlock { #[var] pub slot: u32, } diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 14ae7c71b..24a1437cb 100755 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -11,8 +11,8 @@ use azalea_buf::{AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError}; use crate::read::ReadPacketError; -pub const PROTOCOL_VERSION: i32 = 768; -pub const VERSION_NAME: &str = "1.21.3"; +pub const PROTOCOL_VERSION: i32 = 769; +pub const VERSION_NAME: &str = "1.21.4"; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { diff --git a/azalea-protocol/src/read.rs b/azalea-protocol/src/read.rs index d75e3bad8..3e333e528 100755 --- a/azalea-protocol/src/read.rs +++ b/azalea-protocol/src/read.rs @@ -351,7 +351,7 @@ where } if log::log_enabled!(log::Level::Trace) { - const DO_NOT_CUT_OFF_PACKET_LOGS: bool = true; + const DO_NOT_CUT_OFF_PACKET_LOGS: bool = false; let buf_string: String = { if !DO_NOT_CUT_OFF_PACKET_LOGS && buf.len() > 500 { diff --git a/azalea-registry/Cargo.toml b/azalea-registry/Cargo.toml index 1afc14d07..45d16c4a2 100644 --- a/azalea-registry/Cargo.toml +++ b/azalea-registry/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-registry" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-registry" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea-registry/azalea-registry-macros/Cargo.toml b/azalea-registry/azalea-registry-macros/Cargo.toml index 147a21adf..f9e21c57b 100644 --- a/azalea-registry/azalea-registry-macros/Cargo.toml +++ b/azalea-registry/azalea-registry-macros/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-registry-macros" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-registry/azalea-registry-macros" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [lib] proc-macro = true diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs index e1fb2be5c..ffead5b48 100755 --- a/azalea-registry/src/lib.rs +++ b/azalea-registry/src/lib.rs @@ -600,12 +600,19 @@ enum Block { MelonStem => "minecraft:melon_stem", Vine => "minecraft:vine", GlowLichen => "minecraft:glow_lichen", + ResinClump => "minecraft:resin_clump", OakFenceGate => "minecraft:oak_fence_gate", BrickStairs => "minecraft:brick_stairs", StoneBrickStairs => "minecraft:stone_brick_stairs", MudBrickStairs => "minecraft:mud_brick_stairs", Mycelium => "minecraft:mycelium", LilyPad => "minecraft:lily_pad", + ResinBlock => "minecraft:resin_block", + ResinBricks => "minecraft:resin_bricks", + ResinBrickStairs => "minecraft:resin_brick_stairs", + ResinBrickSlab => "minecraft:resin_brick_slab", + ResinBrickWall => "minecraft:resin_brick_wall", + ChiseledResinBricks => "minecraft:chiseled_resin_bricks", NetherBricks => "minecraft:nether_bricks", NetherBrickFence => "minecraft:nether_brick_fence", NetherBrickStairs => "minecraft:nether_brick_stairs", @@ -1351,6 +1358,10 @@ enum Block { PaleMossBlock => "minecraft:pale_moss_block", PaleMossCarpet => "minecraft:pale_moss_carpet", PaleHangingMoss => "minecraft:pale_hanging_moss", + OpenEyeblossom => "minecraft:open_eyeblossom", + ClosedEyeblossom => "minecraft:closed_eyeblossom", + PottedOpenEyeblossom => "minecraft:potted_open_eyeblossom", + PottedClosedEyeblossom => "minecraft:potted_closed_eyeblossom", } } @@ -1677,7 +1688,6 @@ enum EntityKind { CommandBlockMinecart => "minecraft:command_block_minecart", Cow => "minecraft:cow", Creaking => "minecraft:creaking", - CreakingTransient => "minecraft:creaking_transient", Creeper => "minecraft:creeper", DarkOakBoat => "minecraft:dark_oak_boat", DarkOakChestBoat => "minecraft:dark_oak_chest_boat", @@ -2155,6 +2165,8 @@ enum Item { RedWool => "minecraft:red_wool", BlackWool => "minecraft:black_wool", Dandelion => "minecraft:dandelion", + OpenEyeblossom => "minecraft:open_eyeblossom", + ClosedEyeblossom => "minecraft:closed_eyeblossom", Poppy => "minecraft:poppy", BlueOrchid => "minecraft:blue_orchid", Allium => "minecraft:allium", @@ -2303,6 +2315,13 @@ enum Item { Melon => "minecraft:melon", Vine => "minecraft:vine", GlowLichen => "minecraft:glow_lichen", + ResinClump => "minecraft:resin_clump", + ResinBlock => "minecraft:resin_block", + ResinBricks => "minecraft:resin_bricks", + ResinBrickStairs => "minecraft:resin_brick_stairs", + ResinBrickSlab => "minecraft:resin_brick_slab", + ResinBrickWall => "minecraft:resin_brick_wall", + ChiseledResinBricks => "minecraft:chiseled_resin_bricks", BrickStairs => "minecraft:brick_stairs", StoneBrickStairs => "minecraft:stone_brick_stairs", MudBrickStairs => "minecraft:mud_brick_stairs", @@ -3087,6 +3106,7 @@ enum Item { FireworkStar => "minecraft:firework_star", EnchantedBook => "minecraft:enchanted_book", NetherBrick => "minecraft:nether_brick", + ResinBrick => "minecraft:resin_brick", PrismarineShard => "minecraft:prismarine_shard", PrismarineCrystals => "minecraft:prismarine_crystals", Rabbit => "minecraft:rabbit", @@ -3669,6 +3689,7 @@ enum ParticleKind { Flame => "minecraft:flame", Infested => "minecraft:infested", CherryLeaves => "minecraft:cherry_leaves", + PaleOakLeaves => "minecraft:pale_oak_leaves", SculkSoul => "minecraft:sculk_soul", SculkCharge => "minecraft:sculk_charge", SculkChargePop => "minecraft:sculk_charge_pop", @@ -4316,6 +4337,7 @@ enum SoundEvent { EntityCreakingUnfreeze => "minecraft:entity.creaking.unfreeze", EntityCreakingSpawn => "minecraft:entity.creaking.spawn", EntityCreakingSway => "minecraft:entity.creaking.sway", + EntityCreakingTwitch => "minecraft:entity.creaking.twitch", BlockCreakingHeartBreak => "minecraft:block.creaking_heart.break", BlockCreakingHeartFall => "minecraft:block.creaking_heart.fall", BlockCreakingHeartHit => "minecraft:block.creaking_heart.hit", @@ -4454,6 +4476,11 @@ enum SoundEvent { EntityEvokerPrepareWololo => "minecraft:entity.evoker.prepare_wololo", EntityExperienceBottleThrow => "minecraft:entity.experience_bottle.throw", EntityExperienceOrbPickup => "minecraft:entity.experience_orb.pickup", + BlockEyeblossomOpenLong => "minecraft:block.eyeblossom.open_long", + BlockEyeblossomOpen => "minecraft:block.eyeblossom.open", + BlockEyeblossomCloseLong => "minecraft:block.eyeblossom.close_long", + BlockEyeblossomClose => "minecraft:block.eyeblossom.close", + BlockEyeblossomIdle => "minecraft:block.eyeblossom.idle", BlockFenceGateClose => "minecraft:block.fence_gate.close", BlockFenceGateOpen => "minecraft:block.fence_gate.open", ItemFirechargeUse => "minecraft:item.firecharge.use", @@ -5254,6 +5281,15 @@ enum SoundEvent { BlockSpawnerHit => "minecraft:block.spawner.hit", BlockSpawnerPlace => "minecraft:block.spawner.place", BlockSpawnerStep => "minecraft:block.spawner.step", + BlockResinBreak => "minecraft:block.resin.break", + BlockResinFall => "minecraft:block.resin.fall", + BlockResinPlace => "minecraft:block.resin.place", + BlockResinStep => "minecraft:block.resin.step", + BlockResinBricksBreak => "minecraft:block.resin_bricks.break", + BlockResinBricksFall => "minecraft:block.resin_bricks.fall", + BlockResinBricksHit => "minecraft:block.resin_bricks.hit", + BlockResinBricksPlace => "minecraft:block.resin_bricks.place", + BlockResinBricksStep => "minecraft:block.resin_bricks.step", BlockSporeBlossomBreak => "minecraft:block.spore_blossom.break", BlockSporeBlossomFall => "minecraft:block.spore_blossom.fall", BlockSporeBlossomHit => "minecraft:block.spore_blossom.hit", @@ -6106,7 +6142,6 @@ enum BlockKind { CaveVinesPlant => "minecraft:cave_vines_plant", CeilingHangingSign => "minecraft:ceiling_hanging_sign", Chain => "minecraft:chain", - CherryLeaves => "minecraft:cherry_leaves", Chest => "minecraft:chest", ChiseledBookShelf => "minecraft:chiseled_book_shelf", ChorusFlower => "minecraft:chorus_flower", @@ -6144,6 +6179,7 @@ enum BlockKind { EndPortal => "minecraft:end_portal", EndPortalFrame => "minecraft:end_portal_frame", EndRod => "minecraft:end_rod", + Eyeblossom => "minecraft:eyeblossom", Farm => "minecraft:farm", BonemealableFeaturePlacer => "minecraft:bonemealable_feature_placer", Fence => "minecraft:fence", @@ -6195,6 +6231,7 @@ enum BlockKind { MossyCarpet => "minecraft:mossy_carpet", MovingPiston => "minecraft:moving_piston", Mud => "minecraft:mud", + Multiface => "minecraft:multiface", Mushroom => "minecraft:mushroom", Mycelium => "minecraft:mycelium", NetherPortal => "minecraft:nether_portal", @@ -6205,6 +6242,7 @@ enum BlockKind { Nylium => "minecraft:nylium", Observer => "minecraft:observer", Piglinwallskull => "minecraft:piglinwallskull", + ParticleLeaves => "minecraft:particle_leaves", PinkPetals => "minecraft:pink_petals", PistonBase => "minecraft:piston_base", PistonHead => "minecraft:piston_head", diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs index 0697adeb3..f4b2aaf59 100644 --- a/azalea-registry/src/tags/blocks.rs +++ b/azalea-registry/src/tags/blocks.rs @@ -24,6 +24,7 @@ pub static ALL_HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryHangingSign, Block::JungleHangingSign, Block::DarkOakHangingSign, + Block::PaleOakHangingSign, Block::CrimsonHangingSign, Block::WarpedHangingSign, Block::MangroveHangingSign, @@ -35,6 +36,7 @@ pub static ALL_HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryWallHangingSign, Block::JungleWallHangingSign, Block::DarkOakWallHangingSign, + Block::PaleOakWallHangingSign, Block::CrimsonWallHangingSign, Block::WarpedWallHangingSign, Block::MangroveWallHangingSign, @@ -49,6 +51,7 @@ pub static ALL_SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaSign, Block::JungleSign, Block::DarkOakSign, + Block::PaleOakSign, Block::CrimsonSign, Block::WarpedSign, Block::MangroveSign, @@ -60,6 +63,7 @@ pub static ALL_SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaWallSign, Block::JungleWallSign, Block::DarkOakWallSign, + Block::PaleOakWallSign, Block::CrimsonWallSign, Block::WarpedWallSign, Block::MangroveWallSign, @@ -72,6 +76,7 @@ pub static ALL_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryHangingSign, Block::JungleHangingSign, Block::DarkOakHangingSign, + Block::PaleOakHangingSign, Block::CrimsonHangingSign, Block::WarpedHangingSign, Block::MangroveHangingSign, @@ -83,6 +88,7 @@ pub static ALL_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryWallHangingSign, Block::JungleWallHangingSign, Block::DarkOakWallHangingSign, + Block::PaleOakWallHangingSign, Block::CrimsonWallHangingSign, Block::WarpedWallHangingSign, Block::MangroveWallHangingSign, @@ -137,6 +143,7 @@ pub static AZALEA_GROWS_ON: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::Sand, @@ -183,6 +190,7 @@ pub static AZALEA_ROOT_REPLACEABLE: LazyLock> = LazyLock::new(|| Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::Terracotta, @@ -234,6 +242,7 @@ pub static BAMBOO_PLANTABLE_ON: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -325,6 +334,37 @@ pub static BEDS: LazyLock> = LazyLock::new(|| { Block::YellowBed, ]) }); +pub static BEE_ATTRACTIVE: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::Dandelion, + Block::OpenEyeblossom, + Block::Poppy, + Block::BlueOrchid, + Block::Allium, + Block::AzureBluet, + Block::RedTulip, + Block::OrangeTulip, + Block::WhiteTulip, + Block::PinkTulip, + Block::OxeyeDaisy, + Block::Cornflower, + Block::LilyOfTheValley, + Block::WitherRose, + Block::Torchflower, + Block::Sunflower, + Block::Lilac, + Block::Peony, + Block::RoseBush, + Block::PitcherPlant, + Block::FloweringAzaleaLeaves, + Block::FloweringAzalea, + Block::MangrovePropagule, + Block::CherryLeaves, + Block::PinkPetals, + Block::ChorusFlower, + Block::SporeBlossom, + ]) +}); pub static BEE_GROWABLES: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::SweetBerryBush, @@ -354,6 +394,7 @@ pub static BIG_DRIPLEAF_PLACEABLE: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -376,6 +417,7 @@ pub static BUTTONS: LazyLock> = LazyLock::new(|| { Block::JungleButton, Block::AcaciaButton, Block::DarkOakButton, + Block::PaleOakButton, Block::CrimsonButton, Block::WarpedButton, Block::MangroveButton, @@ -472,6 +514,7 @@ pub static CEILING_HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryHangingSign, Block::JungleHangingSign, Block::DarkOakHangingSign, + Block::PaleOakHangingSign, Block::CrimsonHangingSign, Block::WarpedHangingSign, Block::MangroveHangingSign, @@ -504,10 +547,12 @@ pub static COAL_ORES: LazyLock> = pub static COMBINATION_STEP_SOUND_BLOCKS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::MossCarpet, + Block::PaleMossCarpet, Block::Snow, Block::NetherSprouts, Block::WarpedRoots, Block::CrimsonRoots, + Block::ResinClump, Block::WhiteCarpet, Block::OrangeCarpet, Block::MagentaCarpet, @@ -531,6 +576,7 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock> = LazyLock::ne Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -552,6 +598,10 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock> = LazyLock::ne Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -734,6 +784,7 @@ pub static DEAD_BUSH_MAY_PLACE_ON: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -751,6 +802,7 @@ pub static DIRT: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -774,6 +826,7 @@ pub static DOORS: LazyLock> = LazyLock::new(|| { Block::JungleDoor, Block::AcaciaDoor, Block::DarkOakDoor, + Block::PaleOakDoor, Block::CrimsonDoor, Block::WarpedDoor, Block::MangroveDoor, @@ -833,6 +886,7 @@ pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock> = LazyLock::n Block::Snow, Block::Vine, Block::GlowLichen, + Block::ResinClump, Block::Light, Block::TallGrass, Block::LargeFern, @@ -866,6 +920,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock> = LazyLock::new(|| { Block::WarpedNylium, Block::WarpedRoots, Block::Dandelion, + Block::OpenEyeblossom, Block::Poppy, Block::BlueOrchid, Block::Allium, @@ -879,6 +934,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock> = LazyLock::new(|| { Block::LilyOfTheValley, Block::WitherRose, Block::Torchflower, + Block::ClosedEyeblossom, Block::Dirt, Block::GrassBlock, Block::Podzol, @@ -886,6 +942,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -921,6 +978,7 @@ pub static FENCE_GATES: LazyLock> = LazyLock::new(|| { Block::AcaciaFenceGate, Block::BirchFenceGate, Block::DarkOakFenceGate, + Block::PaleOakFenceGate, Block::JungleFenceGate, Block::OakFenceGate, Block::SpruceFenceGate, @@ -937,6 +995,7 @@ pub static FENCES: LazyLock> = LazyLock::new(|| { Block::OakFence, Block::AcaciaFence, Block::DarkOakFence, + Block::PaleOakFence, Block::SpruceFence, Block::BirchFence, Block::JungleFence, @@ -952,6 +1011,8 @@ pub static FIRE: LazyLock> = pub static FLOWER_POTS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::FlowerPot, + Block::PottedOpenEyeblossom, + Block::PottedClosedEyeblossom, Block::PottedPoppy, Block::PottedBlueOrchid, Block::PottedAllium, @@ -968,6 +1029,7 @@ pub static FLOWER_POTS: LazyLock> = LazyLock::new(|| { Block::PottedJungleSapling, Block::PottedAcaciaSapling, Block::PottedDarkOakSapling, + Block::PottedPaleOakSapling, Block::PottedRedMushroom, Block::PottedBrownMushroom, Block::PottedDeadBush, @@ -990,6 +1052,11 @@ pub static FLOWER_POTS: LazyLock> = LazyLock::new(|| { }); pub static FLOWERS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ + Block::Sunflower, + Block::Lilac, + Block::Peony, + Block::RoseBush, + Block::PitcherPlant, Block::FloweringAzaleaLeaves, Block::FloweringAzalea, Block::MangrovePropagule, @@ -998,6 +1065,7 @@ pub static FLOWERS: LazyLock> = LazyLock::new(|| { Block::ChorusFlower, Block::SporeBlossom, Block::Dandelion, + Block::OpenEyeblossom, Block::Poppy, Block::BlueOrchid, Block::Allium, @@ -1011,11 +1079,7 @@ pub static FLOWERS: LazyLock> = LazyLock::new(|| { Block::LilyOfTheValley, Block::WitherRose, Block::Torchflower, - Block::Sunflower, - Block::Lilac, - Block::Peony, - Block::RoseBush, - Block::PitcherPlant, + Block::ClosedEyeblossom, ]) }); pub static FOXES_SPAWNABLE_ON: LazyLock> = LazyLock::new(|| { @@ -1230,14 +1294,6 @@ pub static INCORRECT_FOR_GOLD_TOOL: LazyLock> = LazyLock::new(|| Block::WaxedExposedCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor, - Block::CopperDoor, - Block::ExposedCopperDoor, - Block::WeatheredCopperDoor, - Block::OxidizedCopperDoor, - Block::WaxedCopperDoor, - Block::WaxedExposedCopperDoor, - Block::WaxedWeatheredCopperDoor, - Block::WaxedOxidizedCopperDoor, ]) }); pub static INCORRECT_FOR_IRON_TOOL: LazyLock> = LazyLock::new(|| { @@ -1367,14 +1423,6 @@ pub static INCORRECT_FOR_WOODEN_TOOL: LazyLock> = LazyLock::new(| Block::WaxedExposedCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor, - Block::CopperDoor, - Block::ExposedCopperDoor, - Block::WeatheredCopperDoor, - Block::OxidizedCopperDoor, - Block::WaxedCopperDoor, - Block::WaxedExposedCopperDoor, - Block::WaxedWeatheredCopperDoor, - Block::WaxedOxidizedCopperDoor, ]) }); pub static INFINIBURN_END: LazyLock> = LazyLock::new(|| { @@ -1420,6 +1468,7 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: LazyLock> = LazyLock:: Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -1439,6 +1488,10 @@ pub static LAVA_POOL_STONE_CANNOT_REPLACE: LazyLock> = LazyLock:: Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -1474,6 +1527,7 @@ pub static LEAVES: LazyLock> = LazyLock::new(|| { Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -1497,6 +1551,10 @@ pub static LOGS: LazyLock> = LazyLock::new(|| { Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -1533,6 +1591,10 @@ pub static LOGS_THAT_BURN: LazyLock> = LazyLock::new(|| { Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -1583,6 +1645,7 @@ pub static LUSH_GROUND_REPLACEABLE: LazyLock> = LazyLock::new(|| Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -1706,6 +1769,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::BambooMosaicSlab, Block::BambooMosaicStairs, Block::ChiseledBookshelf, + Block::CreakingHeart, Block::WhiteBanner, Block::OrangeBanner, Block::MagentaBanner, @@ -1741,6 +1805,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::AcaciaFenceGate, Block::BirchFenceGate, Block::DarkOakFenceGate, + Block::PaleOakFenceGate, Block::JungleFenceGate, Block::OakFenceGate, Block::SpruceFenceGate, @@ -1755,6 +1820,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JunglePlanks, Block::AcaciaPlanks, Block::DarkOakPlanks, + Block::PaleOakPlanks, Block::CrimsonPlanks, Block::WarpedPlanks, Block::MangrovePlanks, @@ -1766,6 +1832,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JungleSapling, Block::AcaciaSapling, Block::DarkOakSapling, + Block::PaleOakSapling, Block::Azalea, Block::FloweringAzalea, Block::MangrovePropagule, @@ -1776,6 +1843,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JungleButton, Block::AcaciaButton, Block::DarkOakButton, + Block::PaleOakButton, Block::CrimsonButton, Block::WarpedButton, Block::MangroveButton, @@ -1787,6 +1855,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JungleDoor, Block::AcaciaDoor, Block::DarkOakDoor, + Block::PaleOakDoor, Block::CrimsonDoor, Block::WarpedDoor, Block::MangroveDoor, @@ -1795,6 +1864,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::OakFence, Block::AcaciaFence, Block::DarkOakFence, + Block::PaleOakFence, Block::SpruceFence, Block::BirchFence, Block::JungleFence, @@ -1809,6 +1879,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JunglePressurePlate, Block::AcaciaPressurePlate, Block::DarkOakPressurePlate, + Block::PaleOakPressurePlate, Block::CrimsonPressurePlate, Block::WarpedPressurePlate, Block::MangrovePressurePlate, @@ -1820,6 +1891,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JungleSlab, Block::AcaciaSlab, Block::DarkOakSlab, + Block::PaleOakSlab, Block::CrimsonSlab, Block::WarpedSlab, Block::MangroveSlab, @@ -1831,6 +1903,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::JungleStairs, Block::AcaciaStairs, Block::DarkOakStairs, + Block::PaleOakStairs, Block::CrimsonStairs, Block::WarpedStairs, Block::MangroveStairs, @@ -1839,6 +1912,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::AcaciaTrapdoor, Block::BirchTrapdoor, Block::DarkOakTrapdoor, + Block::PaleOakTrapdoor, Block::JungleTrapdoor, Block::OakTrapdoor, Block::SpruceTrapdoor, @@ -1863,6 +1937,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::AcaciaSign, Block::JungleSign, Block::DarkOakSign, + Block::PaleOakSign, Block::CrimsonSign, Block::WarpedSign, Block::MangroveSign, @@ -1874,6 +1949,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::AcaciaWallSign, Block::JungleWallSign, Block::DarkOakWallSign, + Block::PaleOakWallSign, Block::CrimsonWallSign, Block::WarpedWallSign, Block::MangroveWallSign, @@ -1886,6 +1962,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::CherryHangingSign, Block::JungleHangingSign, Block::DarkOakHangingSign, + Block::PaleOakHangingSign, Block::CrimsonHangingSign, Block::WarpedHangingSign, Block::MangroveHangingSign, @@ -1897,6 +1974,7 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::CherryWallHangingSign, Block::JungleWallHangingSign, Block::DarkOakWallHangingSign, + Block::PaleOakWallHangingSign, Block::CrimsonWallHangingSign, Block::WarpedWallHangingSign, Block::MangroveWallHangingSign, @@ -1905,6 +1983,10 @@ pub static MINEABLE_AXE: LazyLock> = LazyLock::new(|| { Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -1948,6 +2030,7 @@ pub static MINEABLE_HOE: LazyLock> = LazyLock::new(|| { Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -1958,6 +2041,8 @@ pub static MINEABLE_HOE: LazyLock> = LazyLock::new(|| { Block::CalibratedSculkSensor, Block::MossBlock, Block::MossCarpet, + Block::PaleMossBlock, + Block::PaleMossCarpet, Block::Sculk, Block::SculkCatalyst, Block::SculkVein, @@ -2346,6 +2431,11 @@ pub static MINEABLE_PICKAXE: LazyLock> = LazyLock::new(|| { Block::WaxedWeatheredCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor, Block::HeavyCore, + Block::ResinBricks, + Block::ResinBrickSlab, + Block::ResinBrickWall, + Block::ResinBrickStairs, + Block::ChiseledResinBricks, Block::StoneButton, Block::PolishedBlackstoneButton, Block::CobblestoneWall, @@ -2373,6 +2463,7 @@ pub static MINEABLE_PICKAXE: LazyLock> = LazyLock::new(|| { Block::TuffWall, Block::PolishedTuffWall, Block::TuffBrickWall, + Block::ResinBrickWall, Block::ShulkerBox, Block::BlackShulkerBox, Block::BlueShulkerBox, @@ -2459,6 +2550,7 @@ pub static MOB_INTERACTABLE_DOORS: LazyLock> = LazyLock::new(|| { Block::JungleDoor, Block::AcaciaDoor, Block::DarkOakDoor, + Block::PaleOakDoor, Block::CrimsonDoor, Block::WarpedDoor, Block::MangroveDoor, @@ -2485,6 +2577,7 @@ pub static MOSS_REPLACEABLE: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -2600,14 +2693,6 @@ pub static NEEDS_STONE_TOOL: LazyLock> = LazyLock::new(|| { Block::WaxedExposedCopperTrapdoor, Block::WaxedWeatheredCopperTrapdoor, Block::WaxedOxidizedCopperTrapdoor, - Block::CopperDoor, - Block::ExposedCopperDoor, - Block::WeatheredCopperDoor, - Block::OxidizedCopperDoor, - Block::WaxedCopperDoor, - Block::WaxedExposedCopperDoor, - Block::WaxedWeatheredCopperDoor, - Block::WaxedOxidizedCopperDoor, ]) }); pub static NETHER_CARVER_REPLACEABLES: LazyLock> = LazyLock::new(|| { @@ -2630,6 +2715,7 @@ pub static NETHER_CARVER_REPLACEABLES: LazyLock> = LazyLock::new( Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::CrimsonNylium, @@ -2676,7 +2762,6 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock> = LazyLock::n Block::Sandstone, Block::RedSandstone, Block::Calcite, - Block::Snow, Block::PackedIce, Block::RawIronBlock, Block::RawCopperBlock, @@ -2693,6 +2778,7 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock> = LazyLock::n Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::Sand, @@ -2720,6 +2806,9 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock> = LazyLock::n Block::DeepslateIronOre, Block::CopperOre, Block::DeepslateCopperOre, + Block::Snow, + Block::SnowBlock, + Block::PowderSnow, ]) }); pub static OVERWORLD_NATURAL_LOGS: LazyLock> = LazyLock::new(|| { @@ -2730,10 +2819,19 @@ pub static OVERWORLD_NATURAL_LOGS: LazyLock> = LazyLock::new(|| { Block::JungleLog, Block::SpruceLog, Block::DarkOakLog, + Block::PaleOakLog, Block::MangroveLog, Block::CherryLog, ]) }); +pub static PALE_OAK_LOGS: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, + ]) +}); pub static PARROTS_SPAWNABLE_ON: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::GrassBlock, @@ -2741,6 +2839,7 @@ pub static PARROTS_SPAWNABLE_ON: LazyLock> = LazyLock::new(|| { Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -2760,6 +2859,10 @@ pub static PARROTS_SPAWNABLE_ON: LazyLock> = LazyLock::new(|| { Block::DarkOakWood, Block::StrippedDarkOakLog, Block::StrippedDarkOakWood, + Block::PaleOakLog, + Block::PaleOakWood, + Block::StrippedPaleOakLog, + Block::StrippedPaleOakWood, Block::OakLog, Block::OakWood, Block::StrippedOakLog, @@ -2807,6 +2910,7 @@ pub static PLANKS: LazyLock> = LazyLock::new(|| { Block::JunglePlanks, Block::AcaciaPlanks, Block::DarkOakPlanks, + Block::PaleOakPlanks, Block::CrimsonPlanks, Block::WarpedPlanks, Block::MangrovePlanks, @@ -2833,6 +2937,7 @@ pub static PRESSURE_PLATES: LazyLock> = LazyLock::new(|| { Block::JunglePressurePlate, Block::AcaciaPressurePlate, Block::DarkOakPressurePlate, + Block::PaleOakPressurePlate, Block::CrimsonPressurePlate, Block::WarpedPressurePlate, Block::MangrovePressurePlate, @@ -2883,6 +2988,7 @@ pub static REPLACEABLE: LazyLock> = LazyLock::new(|| { Block::Snow, Block::Vine, Block::GlowLichen, + Block::ResinClump, Block::Light, Block::TallGrass, Block::LargeFern, @@ -2898,6 +3004,7 @@ pub static REPLACEABLE: LazyLock> = LazyLock::new(|| { }); pub static REPLACEABLE_BY_TREES: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ + Block::PaleMossCarpet, Block::ShortGrass, Block::Fern, Block::DeadBush, @@ -2920,6 +3027,7 @@ pub static REPLACEABLE_BY_TREES: LazyLock> = LazyLock::new(|| { Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -2927,6 +3035,22 @@ pub static REPLACEABLE_BY_TREES: LazyLock> = LazyLock::new(|| { Block::FloweringAzaleaLeaves, Block::MangroveLeaves, Block::CherryLeaves, + Block::Dandelion, + Block::OpenEyeblossom, + Block::Poppy, + Block::BlueOrchid, + Block::Allium, + Block::AzureBluet, + Block::RedTulip, + Block::OrangeTulip, + Block::WhiteTulip, + Block::PinkTulip, + Block::OxeyeDaisy, + Block::Cornflower, + Block::LilyOfTheValley, + Block::WitherRose, + Block::Torchflower, + Block::ClosedEyeblossom, ]) }); pub static SAND: LazyLock> = LazyLock::new(|| { @@ -2945,6 +3069,7 @@ pub static SAPLINGS: LazyLock> = LazyLock::new(|| { Block::JungleSapling, Block::AcaciaSapling, Block::DarkOakSapling, + Block::PaleOakSapling, Block::Azalea, Block::FloweringAzalea, Block::MangrovePropagule, @@ -2978,6 +3103,7 @@ pub static SCULK_REPLACEABLE: LazyLock> = LazyLock::new(|| { Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::Terracotta, @@ -3037,6 +3163,7 @@ pub static SCULK_REPLACEABLE_WORLD_GEN: LazyLock> = LazyLock::new Block::Mycelium, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, Block::Terracotta, @@ -3092,6 +3219,7 @@ pub static SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaSign, Block::JungleSign, Block::DarkOakSign, + Block::PaleOakSign, Block::CrimsonSign, Block::WarpedSign, Block::MangroveSign, @@ -3103,6 +3231,7 @@ pub static SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaWallSign, Block::JungleWallSign, Block::DarkOakWallSign, + Block::PaleOakWallSign, Block::CrimsonWallSign, Block::WarpedWallSign, Block::MangroveWallSign, @@ -3161,12 +3290,14 @@ pub static SLABS: LazyLock> = LazyLock::new(|| { Block::TuffSlab, Block::PolishedTuffSlab, Block::TuffBrickSlab, + Block::ResinBrickSlab, Block::OakSlab, Block::SpruceSlab, Block::BirchSlab, Block::JungleSlab, Block::AcaciaSlab, Block::DarkOakSlab, + Block::PaleOakSlab, Block::CrimsonSlab, Block::WarpedSlab, Block::MangroveSlab, @@ -3179,6 +3310,7 @@ pub static SMALL_DRIPLEAF_PLACEABLE: LazyLock> = pub static SMALL_FLOWERS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::Dandelion, + Block::OpenEyeblossom, Block::Poppy, Block::BlueOrchid, Block::Allium, @@ -3192,6 +3324,7 @@ pub static SMALL_FLOWERS: LazyLock> = LazyLock::new(|| { Block::LilyOfTheValley, Block::WitherRose, Block::Torchflower, + Block::ClosedEyeblossom, ]) }); pub static SMELTS_TO_GLASS: LazyLock> = @@ -3210,6 +3343,7 @@ pub static SNAPS_GOAT_HORN: LazyLock> = LazyLock::new(|| { Block::JungleLog, Block::SpruceLog, Block::DarkOakLog, + Block::PaleOakLog, Block::MangroveLog, Block::CherryLog, ]) @@ -3222,6 +3356,7 @@ pub static SNIFFER_DIGGABLE_BLOCK: LazyLock> = LazyLock::new(|| { Block::CoarseDirt, Block::RootedDirt, Block::MossBlock, + Block::PaleMossBlock, Block::Mud, Block::MuddyMangroveRoots, ]) @@ -3293,12 +3428,14 @@ pub static STAIRS: LazyLock> = LazyLock::new(|| { Block::TuffStairs, Block::PolishedTuffStairs, Block::TuffBrickStairs, + Block::ResinBrickStairs, Block::OakStairs, Block::SpruceStairs, Block::BirchStairs, Block::JungleStairs, Block::AcaciaStairs, Block::DarkOakStairs, + Block::PaleOakStairs, Block::CrimsonStairs, Block::WarpedStairs, Block::MangroveStairs, @@ -3314,6 +3451,7 @@ pub static STANDING_SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaSign, Block::JungleSign, Block::DarkOakSign, + Block::PaleOakSign, Block::CrimsonSign, Block::WarpedSign, Block::MangroveSign, @@ -3378,7 +3516,6 @@ pub static SWORD_EFFICIENT: LazyLock> = LazyLock::new(|| { Block::CaveVines, Block::CaveVinesPlant, Block::SporeBlossom, - Block::MossCarpet, Block::PinkPetals, Block::BigDripleaf, Block::BigDripleafStem, @@ -3398,6 +3535,7 @@ pub static SWORD_EFFICIENT: LazyLock> = LazyLock::new(|| { Block::JungleLeaves, Block::OakLeaves, Block::SpruceLeaves, + Block::PaleOakLeaves, Block::DarkOakLeaves, Block::AcaciaLeaves, Block::BirchLeaves, @@ -3411,24 +3549,11 @@ pub static SWORD_EFFICIENT: LazyLock> = LazyLock::new(|| { Block::JungleSapling, Block::AcaciaSapling, Block::DarkOakSapling, + Block::PaleOakSapling, Block::Azalea, Block::FloweringAzalea, Block::MangrovePropagule, Block::CherrySapling, - Block::Dandelion, - Block::Poppy, - Block::BlueOrchid, - Block::Allium, - Block::AzureBluet, - Block::RedTulip, - Block::OrangeTulip, - Block::WhiteTulip, - Block::PinkTulip, - Block::OxeyeDaisy, - Block::Cornflower, - Block::LilyOfTheValley, - Block::WitherRose, - Block::Torchflower, Block::Beetroots, Block::Carrots, Block::Potatoes, @@ -3439,15 +3564,6 @@ pub static SWORD_EFFICIENT: LazyLock> = LazyLock::new(|| { Block::PitcherCrop, ]) }); -pub static TALL_FLOWERS: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Block::Sunflower, - Block::Lilac, - Block::Peony, - Block::RoseBush, - Block::PitcherPlant, - ]) -}); pub static TERRACOTTA: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::Terracotta, @@ -3485,6 +3601,7 @@ pub static TRAPDOORS: LazyLock> = LazyLock::new(|| { Block::AcaciaTrapdoor, Block::BirchTrapdoor, Block::DarkOakTrapdoor, + Block::PaleOakTrapdoor, Block::JungleTrapdoor, Block::OakTrapdoor, Block::SpruceTrapdoor, @@ -3520,6 +3637,7 @@ pub static UNSTABLE_BOTTOM_CENTER: LazyLock> = LazyLock::new(|| { Block::AcaciaFenceGate, Block::BirchFenceGate, Block::DarkOakFenceGate, + Block::PaleOakFenceGate, Block::JungleFenceGate, Block::OakFenceGate, Block::SpruceFenceGate, @@ -3552,6 +3670,7 @@ pub static WALL_HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Block::CherryWallHangingSign, Block::JungleWallHangingSign, Block::DarkOakWallHangingSign, + Block::PaleOakWallHangingSign, Block::CrimsonWallHangingSign, Block::WarpedWallHangingSign, Block::MangroveWallHangingSign, @@ -3604,6 +3723,7 @@ pub static WALL_POST_OVERRIDE: LazyLock> = LazyLock::new(|| { Block::AcaciaSign, Block::JungleSign, Block::DarkOakSign, + Block::PaleOakSign, Block::CrimsonSign, Block::WarpedSign, Block::MangroveSign, @@ -3615,6 +3735,7 @@ pub static WALL_POST_OVERRIDE: LazyLock> = LazyLock::new(|| { Block::AcaciaWallSign, Block::JungleWallSign, Block::DarkOakWallSign, + Block::PaleOakWallSign, Block::CrimsonWallSign, Block::WarpedWallSign, Block::MangroveWallSign, @@ -3626,6 +3747,7 @@ pub static WALL_POST_OVERRIDE: LazyLock> = LazyLock::new(|| { Block::JunglePressurePlate, Block::AcaciaPressurePlate, Block::DarkOakPressurePlate, + Block::PaleOakPressurePlate, Block::CrimsonPressurePlate, Block::WarpedPressurePlate, Block::MangrovePressurePlate, @@ -3643,6 +3765,7 @@ pub static WALL_SIGNS: LazyLock> = LazyLock::new(|| { Block::AcaciaWallSign, Block::JungleWallSign, Block::DarkOakWallSign, + Block::PaleOakWallSign, Block::CrimsonWallSign, Block::WarpedWallSign, Block::MangroveWallSign, @@ -3677,6 +3800,7 @@ pub static WALLS: LazyLock> = LazyLock::new(|| { Block::TuffWall, Block::PolishedTuffWall, Block::TuffBrickWall, + Block::ResinBrickWall, ]) }); pub static WARPED_STEMS: LazyLock> = LazyLock::new(|| { @@ -3725,6 +3849,7 @@ pub static WOODEN_BUTTONS: LazyLock> = LazyLock::new(|| { Block::JungleButton, Block::AcaciaButton, Block::DarkOakButton, + Block::PaleOakButton, Block::CrimsonButton, Block::WarpedButton, Block::MangroveButton, @@ -3740,6 +3865,7 @@ pub static WOODEN_DOORS: LazyLock> = LazyLock::new(|| { Block::JungleDoor, Block::AcaciaDoor, Block::DarkOakDoor, + Block::PaleOakDoor, Block::CrimsonDoor, Block::WarpedDoor, Block::MangroveDoor, @@ -3752,6 +3878,7 @@ pub static WOODEN_FENCES: LazyLock> = LazyLock::new(|| { Block::OakFence, Block::AcaciaFence, Block::DarkOakFence, + Block::PaleOakFence, Block::SpruceFence, Block::BirchFence, Block::JungleFence, @@ -3770,6 +3897,7 @@ pub static WOODEN_PRESSURE_PLATES: LazyLock> = LazyLock::new(|| { Block::JunglePressurePlate, Block::AcaciaPressurePlate, Block::DarkOakPressurePlate, + Block::PaleOakPressurePlate, Block::CrimsonPressurePlate, Block::WarpedPressurePlate, Block::MangrovePressurePlate, @@ -3785,6 +3913,7 @@ pub static WOODEN_SLABS: LazyLock> = LazyLock::new(|| { Block::JungleSlab, Block::AcaciaSlab, Block::DarkOakSlab, + Block::PaleOakSlab, Block::CrimsonSlab, Block::WarpedSlab, Block::MangroveSlab, @@ -3800,6 +3929,7 @@ pub static WOODEN_STAIRS: LazyLock> = LazyLock::new(|| { Block::JungleStairs, Block::AcaciaStairs, Block::DarkOakStairs, + Block::PaleOakStairs, Block::CrimsonStairs, Block::WarpedStairs, Block::MangroveStairs, @@ -3812,6 +3942,7 @@ pub static WOODEN_TRAPDOORS: LazyLock> = LazyLock::new(|| { Block::AcaciaTrapdoor, Block::BirchTrapdoor, Block::DarkOakTrapdoor, + Block::PaleOakTrapdoor, Block::JungleTrapdoor, Block::OakTrapdoor, Block::SpruceTrapdoor, diff --git a/azalea-registry/src/tags/items.rs b/azalea-registry/src/tags/items.rs index 421b43afa..f20b5f662 100644 --- a/azalea-registry/src/tags/items.rs +++ b/azalea-registry/src/tags/items.rs @@ -84,14 +84,8 @@ pub static BEDS: LazyLock> = LazyLock::new(|| { }); pub static BEE_FOOD: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ - Item::FloweringAzaleaLeaves, - Item::FloweringAzalea, - Item::MangrovePropagule, - Item::CherryLeaves, - Item::PinkPetals, - Item::ChorusFlower, - Item::SporeBlossom, Item::Dandelion, + Item::OpenEyeblossom, Item::Poppy, Item::BlueOrchid, Item::Allium, @@ -110,6 +104,13 @@ pub static BEE_FOOD: LazyLock> = LazyLock::new(|| { Item::Peony, Item::RoseBush, Item::PitcherPlant, + Item::FloweringAzaleaLeaves, + Item::FloweringAzalea, + Item::MangrovePropagule, + Item::CherryLeaves, + Item::PinkPetals, + Item::ChorusFlower, + Item::SporeBlossom, ]) }); pub static BIRCH_LOGS: LazyLock> = LazyLock::new(|| { @@ -128,6 +129,7 @@ pub static BOATS: LazyLock> = LazyLock::new(|| { Item::JungleBoat, Item::AcaciaBoat, Item::DarkOakBoat, + Item::PaleOakBoat, Item::MangroveBoat, Item::BambooRaft, Item::CherryBoat, @@ -137,6 +139,7 @@ pub static BOATS: LazyLock> = LazyLock::new(|| { Item::JungleChestBoat, Item::AcaciaChestBoat, Item::DarkOakChestBoat, + Item::PaleOakChestBoat, Item::MangroveChestBoat, Item::BambooChestRaft, Item::CherryChestBoat, @@ -218,6 +221,7 @@ pub static BUTTONS: LazyLock> = LazyLock::new(|| { Item::JungleButton, Item::AcaciaButton, Item::DarkOakButton, + Item::PaleOakButton, Item::CrimsonButton, Item::WarpedButton, Item::MangroveButton, @@ -278,6 +282,7 @@ pub static CHEST_BOATS: LazyLock> = LazyLock::new(|| { Item::JungleChestBoat, Item::AcaciaChestBoat, Item::DarkOakChestBoat, + Item::PaleOakChestBoat, Item::MangroveChestBoat, Item::BambooChestRaft, Item::CherryChestBoat, @@ -314,6 +319,7 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock> = LazyLock::new Item::JungleLeaves, Item::OakLeaves, Item::SpruceLeaves, + Item::PaleOakLeaves, Item::DarkOakLeaves, Item::AcaciaLeaves, Item::BirchLeaves, @@ -335,6 +341,10 @@ pub static COMPLETES_FIND_TREE_TUTORIAL: LazyLock> = LazyLock::new Item::DarkOakWood, Item::StrippedDarkOakLog, Item::StrippedDarkOakWood, + Item::PaleOakLog, + Item::PaleOakWood, + Item::StrippedPaleOakLog, + Item::StrippedPaleOakWood, Item::OakLog, Item::OakWood, Item::StrippedOakLog, @@ -507,6 +517,7 @@ pub static DIRT: LazyLock> = LazyLock::new(|| { Item::Mycelium, Item::RootedDirt, Item::MossBlock, + Item::PaleMossBlock, Item::Mud, Item::MuddyMangroveRoots, ]) @@ -528,6 +539,7 @@ pub static DOORS: LazyLock> = LazyLock::new(|| { Item::JungleDoor, Item::AcaciaDoor, Item::DarkOakDoor, + Item::PaleOakDoor, Item::CrimsonDoor, Item::WarpedDoor, Item::MangroveDoor, @@ -535,6 +547,8 @@ pub static DOORS: LazyLock> = LazyLock::new(|| { Item::CherryDoor, ]) }); +pub static DROWNED_PREFERRED_WEAPONS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Trident])); pub static DUPLICATES_ALLAYS: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::AmethystShard])); pub static DYEABLE: LazyLock> = LazyLock::new(|| { @@ -934,6 +948,7 @@ pub static FENCE_GATES: LazyLock> = LazyLock::new(|| { Item::AcaciaFenceGate, Item::BirchFenceGate, Item::DarkOakFenceGate, + Item::PaleOakFenceGate, Item::JungleFenceGate, Item::OakFenceGate, Item::SpruceFenceGate, @@ -950,6 +965,7 @@ pub static FENCES: LazyLock> = LazyLock::new(|| { Item::OakFence, Item::AcaciaFence, Item::DarkOakFence, + Item::PaleOakFence, Item::SpruceFence, Item::BirchFence, Item::JungleFence, @@ -970,36 +986,6 @@ pub static FISHES: LazyLock> = LazyLock::new(|| { Item::TropicalFish, ]) }); -pub static FLOWERS: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Item::FloweringAzaleaLeaves, - Item::FloweringAzalea, - Item::MangrovePropagule, - Item::CherryLeaves, - Item::PinkPetals, - Item::ChorusFlower, - Item::SporeBlossom, - Item::Dandelion, - Item::Poppy, - Item::BlueOrchid, - Item::Allium, - Item::AzureBluet, - Item::RedTulip, - Item::OrangeTulip, - Item::WhiteTulip, - Item::PinkTulip, - Item::OxeyeDaisy, - Item::Cornflower, - Item::LilyOfTheValley, - Item::WitherRose, - Item::Torchflower, - Item::Sunflower, - Item::Lilac, - Item::Peony, - Item::RoseBush, - Item::PitcherPlant, - ]) -}); pub static FOOT_ARMOR: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::LeatherBoots, @@ -1047,6 +1033,7 @@ pub static HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Item::CherryHangingSign, Item::JungleHangingSign, Item::DarkOakHangingSign, + Item::PaleOakHangingSign, Item::CrimsonHangingSign, Item::WarpedHangingSign, Item::MangroveHangingSign, @@ -1115,6 +1102,7 @@ pub static LEAVES: LazyLock> = LazyLock::new(|| { Item::JungleLeaves, Item::OakLeaves, Item::SpruceLeaves, + Item::PaleOakLeaves, Item::DarkOakLeaves, Item::AcaciaLeaves, Item::BirchLeaves, @@ -1154,6 +1142,10 @@ pub static LOGS: LazyLock> = LazyLock::new(|| { Item::DarkOakWood, Item::StrippedDarkOakLog, Item::StrippedDarkOakWood, + Item::PaleOakLog, + Item::PaleOakWood, + Item::StrippedPaleOakLog, + Item::StrippedPaleOakWood, Item::OakLog, Item::OakWood, Item::StrippedOakLog, @@ -1190,6 +1182,10 @@ pub static LOGS_THAT_BURN: LazyLock> = LazyLock::new(|| { Item::DarkOakWood, Item::StrippedDarkOakLog, Item::StrippedDarkOakWood, + Item::PaleOakLog, + Item::PaleOakWood, + Item::StrippedPaleOakLog, + Item::StrippedPaleOakWood, Item::OakLog, Item::OakWood, Item::StrippedOakLog, @@ -1302,6 +1298,14 @@ pub static OAK_LOGS: LazyLock> = LazyLock::new(|| { }); pub static OCELOT_FOOD: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::Cod, Item::Salmon])); +pub static PALE_OAK_LOGS: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Item::PaleOakLog, + Item::PaleOakWood, + Item::StrippedPaleOakLog, + Item::StrippedPaleOakWood, + ]) +}); pub static PANDA_EATS_FROM_GROUND: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::Cake, Item::Bamboo])); pub static PANDA_FOOD: LazyLock> = @@ -1361,6 +1365,8 @@ pub static PIGLIN_LOVED: LazyLock> = LazyLock::new(|| { Item::DeepslateGoldOre, ]) }); +pub static PIGLIN_PREFERRED_WEAPONS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Crossbow])); pub static PIGLIN_REPELLENTS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![Item::SoulTorch, Item::SoulLantern, Item::SoulCampfire]) }); @@ -1372,6 +1378,8 @@ pub static PIGLIN_SAFE_ARMOR: LazyLock> = LazyLock::new(|| { Item::GoldenBoots, ]) }); +pub static PILLAGER_PREFERRED_WEAPONS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Crossbow])); pub static PLANKS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::OakPlanks, @@ -1380,6 +1388,7 @@ pub static PLANKS: LazyLock> = LazyLock::new(|| { Item::JunglePlanks, Item::AcaciaPlanks, Item::DarkOakPlanks, + Item::PaleOakPlanks, Item::CrimsonPlanks, Item::WarpedPlanks, Item::MangrovePlanks, @@ -1431,6 +1440,7 @@ pub static SAPLINGS: LazyLock> = LazyLock::new(|| { Item::JungleSapling, Item::AcaciaSapling, Item::DarkOakSapling, + Item::PaleOakSapling, Item::Azalea, Item::FloweringAzalea, Item::MangrovePropagule, @@ -1478,6 +1488,7 @@ pub static SIGNS: LazyLock> = LazyLock::new(|| { Item::AcaciaSign, Item::JungleSign, Item::DarkOakSign, + Item::PaleOakSign, Item::CrimsonSign, Item::WarpedSign, Item::MangroveSign, @@ -1485,6 +1496,8 @@ pub static SIGNS: LazyLock> = LazyLock::new(|| { Item::CherrySign, ]) }); +pub static SKELETON_PREFERRED_WEAPONS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Bow])); pub static SKULLS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::PlayerHead, @@ -1547,12 +1560,14 @@ pub static SLABS: LazyLock> = LazyLock::new(|| { Item::TuffSlab, Item::PolishedTuffSlab, Item::TuffBrickSlab, + Item::ResinBrickSlab, Item::OakSlab, Item::SpruceSlab, Item::BirchSlab, Item::JungleSlab, Item::AcaciaSlab, Item::DarkOakSlab, + Item::PaleOakSlab, Item::CrimsonSlab, Item::WarpedSlab, Item::MangroveSlab, @@ -1563,6 +1578,7 @@ pub static SLABS: LazyLock> = LazyLock::new(|| { pub static SMALL_FLOWERS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::Dandelion, + Item::OpenEyeblossom, Item::Poppy, Item::BlueOrchid, Item::Allium, @@ -1576,6 +1592,7 @@ pub static SMALL_FLOWERS: LazyLock> = LazyLock::new(|| { Item::LilyOfTheValley, Item::WitherRose, Item::Torchflower, + Item::ClosedEyeblossom, ]) }); pub static SMELTS_TO_GLASS: LazyLock> = @@ -1639,12 +1656,14 @@ pub static STAIRS: LazyLock> = LazyLock::new(|| { Item::TuffStairs, Item::PolishedTuffStairs, Item::TuffBrickStairs, + Item::ResinBrickStairs, Item::OakStairs, Item::SpruceStairs, Item::BirchStairs, Item::JungleStairs, Item::AcaciaStairs, Item::DarkOakStairs, + Item::PaleOakStairs, Item::CrimsonStairs, Item::WarpedStairs, Item::MangroveStairs, @@ -1690,15 +1709,6 @@ pub static SWORDS: LazyLock> = LazyLock::new(|| { Item::IronSword, ]) }); -pub static TALL_FLOWERS: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Item::Sunflower, - Item::Lilac, - Item::Peony, - Item::RoseBush, - Item::PitcherPlant, - ]) -}); pub static TERRACOTTA: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::Terracotta, @@ -1734,6 +1744,7 @@ pub static TRAPDOORS: LazyLock> = LazyLock::new(|| { Item::AcaciaTrapdoor, Item::BirchTrapdoor, Item::DarkOakTrapdoor, + Item::PaleOakTrapdoor, Item::JungleTrapdoor, Item::OakTrapdoor, Item::SpruceTrapdoor, @@ -1746,38 +1757,17 @@ pub static TRAPDOORS: LazyLock> = LazyLock::new(|| { }); pub static TRIM_MATERIALS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ - Item::IronIngot, + Item::AmethystShard, Item::CopperIngot, + Item::Diamond, + Item::Emerald, Item::GoldIngot, + Item::IronIngot, Item::LapisLazuli, - Item::Emerald, - Item::Diamond, Item::NetheriteIngot, - Item::Redstone, Item::Quartz, - Item::AmethystShard, - ]) -}); -pub static TRIM_TEMPLATES: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Item::WardArmorTrimSmithingTemplate, - Item::SpireArmorTrimSmithingTemplate, - Item::CoastArmorTrimSmithingTemplate, - Item::EyeArmorTrimSmithingTemplate, - Item::DuneArmorTrimSmithingTemplate, - Item::WildArmorTrimSmithingTemplate, - Item::RibArmorTrimSmithingTemplate, - Item::TideArmorTrimSmithingTemplate, - Item::SentryArmorTrimSmithingTemplate, - Item::VexArmorTrimSmithingTemplate, - Item::SnoutArmorTrimSmithingTemplate, - Item::WayfinderArmorTrimSmithingTemplate, - Item::ShaperArmorTrimSmithingTemplate, - Item::SilenceArmorTrimSmithingTemplate, - Item::RaiserArmorTrimSmithingTemplate, - Item::HostArmorTrimSmithingTemplate, - Item::FlowArmorTrimSmithingTemplate, - Item::BoltArmorTrimSmithingTemplate, + Item::Redstone, + Item::ResinBrick, ]) }); pub static TRIMMABLE_ARMOR: LazyLock> = LazyLock::new(|| { @@ -1861,6 +1851,7 @@ pub static WALLS: LazyLock> = LazyLock::new(|| { Item::TuffWall, Item::PolishedTuffWall, Item::TuffBrickWall, + Item::ResinBrickWall, ]) }); pub static WARPED_STEMS: LazyLock> = LazyLock::new(|| { @@ -1873,6 +1864,8 @@ pub static WARPED_STEMS: LazyLock> = LazyLock::new(|| { }); pub static WART_BLOCKS: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::NetherWartBlock, Item::WarpedWartBlock])); +pub static WITHER_SKELETON_DISLIKED_WEAPONS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Bow, Item::Crossbow])); pub static WOLF_FOOD: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::Cod, @@ -1903,6 +1896,7 @@ pub static WOODEN_BUTTONS: LazyLock> = LazyLock::new(|| { Item::JungleButton, Item::AcaciaButton, Item::DarkOakButton, + Item::PaleOakButton, Item::CrimsonButton, Item::WarpedButton, Item::MangroveButton, @@ -1918,6 +1912,7 @@ pub static WOODEN_DOORS: LazyLock> = LazyLock::new(|| { Item::JungleDoor, Item::AcaciaDoor, Item::DarkOakDoor, + Item::PaleOakDoor, Item::CrimsonDoor, Item::WarpedDoor, Item::MangroveDoor, @@ -1930,6 +1925,7 @@ pub static WOODEN_FENCES: LazyLock> = LazyLock::new(|| { Item::OakFence, Item::AcaciaFence, Item::DarkOakFence, + Item::PaleOakFence, Item::SpruceFence, Item::BirchFence, Item::JungleFence, @@ -1948,6 +1944,7 @@ pub static WOODEN_PRESSURE_PLATES: LazyLock> = LazyLock::new(|| { Item::JunglePressurePlate, Item::AcaciaPressurePlate, Item::DarkOakPressurePlate, + Item::PaleOakPressurePlate, Item::CrimsonPressurePlate, Item::WarpedPressurePlate, Item::MangrovePressurePlate, @@ -1963,6 +1960,7 @@ pub static WOODEN_SLABS: LazyLock> = LazyLock::new(|| { Item::JungleSlab, Item::AcaciaSlab, Item::DarkOakSlab, + Item::PaleOakSlab, Item::CrimsonSlab, Item::WarpedSlab, Item::MangroveSlab, @@ -1978,6 +1976,7 @@ pub static WOODEN_STAIRS: LazyLock> = LazyLock::new(|| { Item::JungleStairs, Item::AcaciaStairs, Item::DarkOakStairs, + Item::PaleOakStairs, Item::CrimsonStairs, Item::WarpedStairs, Item::MangroveStairs, @@ -1993,6 +1992,7 @@ pub static WOODEN_TOOL_MATERIALS: LazyLock> = LazyLock::new(|| { Item::JunglePlanks, Item::AcaciaPlanks, Item::DarkOakPlanks, + Item::PaleOakPlanks, Item::CrimsonPlanks, Item::WarpedPlanks, Item::MangrovePlanks, @@ -2005,6 +2005,7 @@ pub static WOODEN_TRAPDOORS: LazyLock> = LazyLock::new(|| { Item::AcaciaTrapdoor, Item::BirchTrapdoor, Item::DarkOakTrapdoor, + Item::PaleOakTrapdoor, Item::JungleTrapdoor, Item::OakTrapdoor, Item::SpruceTrapdoor, diff --git a/azalea-world/Cargo.toml b/azalea-world/Cargo.toml index 37bcd5a59..a1e1a7694 100644 --- a/azalea-world/Cargo.toml +++ b/azalea-world/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea-world" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea-world" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/azalea/Cargo.toml b/azalea/Cargo.toml index c0953f540..504280cfa 100644 --- a/azalea/Cargo.toml +++ b/azalea/Cargo.toml @@ -4,7 +4,7 @@ edition = "2021" license = "MIT" name = "azalea" repository = "https://github.com/azalea-rs/azalea/tree/main/azalea" -version = "0.10.3+mc1.21.3" +version = "0.10.3+mc1.21.4" [package.metadata.release] pre-release-replacements = [