diff options
| author | mat <27899617+mat-1@users.noreply.github.com> | 2026-03-24 11:15:56 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-24 11:15:56 -0500 |
| commit | eeaf1435e81d9cbd8daa0efa22029c1f259a64b5 (patch) | |
| tree | 3486e26d5409708370e4e259d240fb77c6e1e439 | |
| parent | 41a9ae6aaff77646c08c64ac1334a8cc6081c24f (diff) | |
| download | azalea-drasl-eeaf1435e81d9cbd8daa0efa22029c1f259a64b5.tar.xz | |
26.1 (#316)
* start updating to 26.1
* start updating to 26.1-snapshot-6
* 26.1-snapshot-6
* 26.1-snapshot-10
* 26.1-rc-1
* fix tests
* 26.1-rc-2 and sort default components
* 26.1
* update changelog
50 files changed, 4765 insertions, 3783 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index cc609b9d..ab5e937b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,7 @@ is breaking anyways, semantic versioning is not followed. ### Changed +- Update to Minecraft 26.1. - Rename `Instance` to `World` (and rename other related types). - Move the `Client` struct out of `azalea-client` into `azalea`. - `Client::ecs` is now an `RwLock` instead of a `Mutex`. @@ -235,7 +235,7 @@ dependencies = [ [[package]] name = "azalea" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-auth", "azalea-block", @@ -275,7 +275,7 @@ dependencies = [ [[package]] name = "azalea-auth" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf", "azalea-crypto", @@ -295,7 +295,7 @@ dependencies = [ [[package]] name = "azalea-block" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-block-macros", "azalea-buf", @@ -304,7 +304,7 @@ dependencies = [ [[package]] name = "azalea-block-macros" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "proc-macro2", "quote", @@ -313,7 +313,7 @@ dependencies = [ [[package]] name = "azalea-brigadier" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf", "azalea-chat", @@ -324,7 +324,7 @@ dependencies = [ [[package]] name = "azalea-buf" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf-macros", "byteorder", @@ -338,7 +338,7 @@ dependencies = [ [[package]] name = "azalea-buf-macros" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "proc-macro2", "quote", @@ -347,7 +347,7 @@ dependencies = [ [[package]] name = "azalea-chat" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf", "azalea-language", @@ -360,7 +360,7 @@ dependencies = [ [[package]] name = "azalea-client" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "async-compat", "azalea-auth", @@ -398,7 +398,7 @@ dependencies = [ [[package]] name = "azalea-core" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf", "azalea-chat", @@ -418,7 +418,7 @@ dependencies = [ [[package]] name = "azalea-crypto" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "aes", "azalea-buf", @@ -437,7 +437,7 @@ dependencies = [ [[package]] name = "azalea-entity" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-block", "azalea-buf", @@ -467,7 +467,7 @@ dependencies = [ [[package]] name = "azalea-inventory" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-auth", "azalea-buf", @@ -484,7 +484,7 @@ dependencies = [ [[package]] name = "azalea-inventory-macros" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "proc-macro2", "quote", @@ -493,7 +493,7 @@ dependencies = [ [[package]] name = "azalea-language" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "compact_str", "serde_json", @@ -501,7 +501,7 @@ dependencies = [ [[package]] name = "azalea-physics" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-block", "azalea-core", @@ -518,7 +518,7 @@ dependencies = [ [[package]] name = "azalea-protocol" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-auth", "azalea-block", @@ -555,7 +555,7 @@ dependencies = [ [[package]] name = "azalea-protocol-macros" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "proc-macro2", "quote", @@ -564,7 +564,7 @@ dependencies = [ [[package]] name = "azalea-registry" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-buf", "azalea-registry-macros", @@ -574,7 +574,7 @@ dependencies = [ [[package]] name = "azalea-registry-macros" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "quote", "syn", @@ -582,7 +582,7 @@ dependencies = [ [[package]] name = "azalea-world" -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1-rc-2" dependencies = [ "azalea-block", "azalea-buf", @@ -23,7 +23,7 @@ resolver = "3" # --- Workspace Settings --- [workspace.package] -version = "0.15.0+mc1.21.11" +version = "0.15.0+mc26.1" edition = "2024" license = "MIT" repository = "https://github.com/azalea-rs/azalea" @@ -10,7 +10,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools. <!-- The line below is automatically read and updated by the migrate script, so don't change it manually. --> -_Currently supported Minecraft version: `1.21.11`._ +_Currently supported Minecraft version: `26.1`._ > [!WARNING] > Many parts of Azalea are still unfinished and will receive breaking changes in the future. Most breaking changes will be listed in the [changelog](CHANGELOG.md). diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs index 3eb1109c..66b17114 100644 --- a/azalea-block/src/generated.rs +++ b/azalea-block/src/generated.rs @@ -199,6 +199,10 @@ make_block_states! { Bit = "bit", Banjo = "banjo", Pling = "pling", + Trumpet = "trumpet", + TrumpetExposed = "trumpet_exposed", + TrumpetOxidized = "trumpet_oxidized", + TrumpetWeathered = "trumpet_weathered", Zombie = "zombie", Skeleton = "skeleton", Creeper = "creeper", @@ -1346,6 +1350,7 @@ make_block_states! { "facing": FacingCubic::North, }, dandelion => BlockBehavior::new(), {}, + golden_dandelion => BlockBehavior::new(), {}, torchflower => BlockBehavior::new(), {}, poppy => BlockBehavior::new(), {}, blue_orchid => BlockBehavior::new(), {}, @@ -1503,43 +1508,43 @@ make_block_states! { "lit": Lit(false), }, oak_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, spruce_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, birch_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, acacia_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, cherry_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, jungle_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, dark_oak_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, pale_oak_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, mangrove_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, bamboo_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, oak_door => BlockBehavior::new().strength(3.0, 3.0), { @@ -1605,62 +1610,62 @@ make_block_states! { }, oak_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, spruce_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, birch_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, acacia_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, cherry_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, jungle_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, dark_oak_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, pale_oak_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, crimson_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, warped_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, mangrove_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, bamboo_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "attached": Attached(false), - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, oak_wall_hanging_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { @@ -2273,6 +2278,7 @@ make_block_states! { potted_mangrove_propagule => BlockBehavior::new(), {}, potted_fern => BlockBehavior::new(), {}, potted_dandelion => BlockBehavior::new(), {}, + potted_golden_dandelion => BlockBehavior::new(), {}, potted_poppy => BlockBehavior::new(), {}, potted_blue_orchid => BlockBehavior::new(), {}, potted_allium => BlockBehavior::new(), {}, @@ -2716,52 +2722,52 @@ make_block_states! { "half": Half::Lower, }, white_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, orange_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, magenta_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, light_blue_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, yellow_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, lime_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, pink_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, gray_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, light_gray_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, cyan_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, purple_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, blue_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, brown_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, green_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, red_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, black_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, }, white_wall_banner => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { "facing": FacingCardinal::North, @@ -3913,11 +3919,11 @@ make_block_states! { "powered": Powered(false), }, crimson_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, warped_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { - "rotation": Rotation::_0, + "rotation": Rotation::_8, "waterlogged": Waterlogged(false), }, crimson_wall_sign => BlockBehavior::new().strength(1.0, 1.0).force_solid(true), { diff --git a/azalea-client/src/plugins/attack.rs b/azalea-client/src/plugins/attack.rs index 41ce114d..4cafc9f8 100644 --- a/azalea-client/src/plugins/attack.rs +++ b/azalea-client/src/plugins/attack.rs @@ -1,10 +1,9 @@ use azalea_core::{game_type::GameMode, tick::GameTick}; use azalea_entity::{ - Attributes, Crouching, Physics, indexing::EntityIdIndex, metadata::Sprinting, - update_bounding_box, + Attributes, Physics, indexing::EntityIdIndex, metadata::Sprinting, update_bounding_box, }; use azalea_physics::PhysicsSystems; -use azalea_protocol::packets::game::s_interact::{self, ServerboundInteract}; +use azalea_protocol::packets::game::ServerboundAttack; use bevy_app::{App, Plugin, Update}; use bevy_ecs::prelude::*; use derive_more::{Deref, DerefMut}; @@ -59,7 +58,6 @@ pub fn handle_attack_queued( &mut Sprinting, &AttackQueued, &LocalGameMode, - &Crouching, &EntityIdIndex, )>, ) { @@ -70,7 +68,6 @@ pub fn handle_attack_queued( mut sprinting, attack_queued, game_mode, - crouching, entity_id_index, ) in &mut query { @@ -84,10 +81,8 @@ pub fn handle_attack_queued( commands.trigger(SendGamePacketEvent::new( client_entity, - ServerboundInteract { + ServerboundAttack { entity_id: target_entity_id, - action: s_interact::ActionType::Attack, - using_secondary_action: **crouching, }, )); commands.trigger(SwingArmEvent { diff --git a/azalea-client/src/plugins/interact/mod.rs b/azalea-client/src/plugins/interact/mod.rs index 04986de7..0eb43818 100644 --- a/azalea-client/src/plugins/interact/mod.rs +++ b/azalea-client/src/plugins/interact/mod.rs @@ -4,6 +4,7 @@ use std::collections::HashMap; use azalea_block::BlockState; use azalea_core::{ + delta::LpVec3, direction::Direction, game_type::GameMode, hit_result::{BlockHitResult, HitResult}, @@ -25,10 +26,8 @@ use azalea_physics::{ local_player::PhysicsState, }; use azalea_protocol::packets::game::{ - ServerboundInteract, ServerboundUseItem, - s_interact::{self, InteractionHand}, - s_swing::ServerboundSwing, - s_use_item_on::ServerboundUseItemOn, + ServerboundInteract, ServerboundUseItem, s_interact::InteractionHand, + s_swing::ServerboundSwing, s_use_item_on::ServerboundUseItemOn, }; use azalea_world::World; use bevy_app::{App, Plugin, Update}; @@ -350,12 +349,10 @@ pub fn handle_entity_interact( } }; - let mut interact = ServerboundInteract { + let interact = ServerboundInteract { entity_id, - action: s_interact::ActionType::InteractAt { - location, - hand: InteractionHand::MainHand, - }, + hand: InteractionHand::MainHand, + location: LpVec3::from(location), using_secondary_action: physics_state.trying_to_crouch, }; commands.trigger(SendGamePacketEvent::new(trigger.client, interact.clone())); @@ -364,11 +361,8 @@ pub fn handle_entity_interact( // in certain cases when interacting with armor stands let consumes_action = false; if !consumes_action { - // but yes, most of the time vanilla really does send two interact packets like - // this - interact.action = s_interact::ActionType::Interact { - hand: InteractionHand::MainHand, - }; + // but yes, most of the time vanilla really does send two identical interact + // packets like this commands.trigger(SendGamePacketEvent::new(trigger.client, interact)); } } diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs index ecc1bc2f..f1bff086 100644 --- a/azalea-client/src/plugins/packet/game/mod.rs +++ b/azalea-client/src/plugins/packet/game/mod.rs @@ -197,6 +197,8 @@ pub fn process_packet(ecs: &mut World, player: Entity, packet: &ClientboundGameP debug_entity_value, debug_event, game_test_highlight_pos, + low_disk_space_warning, + game_rule_values, ] ); } @@ -1644,6 +1646,14 @@ impl GamePacketHandler<'_> { pub fn game_test_highlight_pos(&mut self, p: &ClientboundGameTestHighlightPos) { debug!("Got game test highlight pos packet {p:?}"); } + + pub fn low_disk_space_warning(&mut self, p: &ClientboundLowDiskSpaceWarning) { + debug!("Got low disk space warning packet {p:?}"); + } + + pub fn game_rule_values(&mut self, p: &ClientboundGameRuleValues) { + debug!("Got game rule values packet {p:?}"); + } } struct MoveEntity { diff --git a/azalea-client/src/test_utils/simulation.rs b/azalea-client/src/test_utils/simulation.rs index 6af7ba59..561a4986 100644 --- a/azalea-client/src/test_utils/simulation.rs +++ b/azalea-client/src/test_utils/simulation.rs @@ -389,6 +389,7 @@ pub fn make_basic_empty_chunk( for _ in 0..section_count { sections.push(Section { block_count: 0, + fluid_count: 0, states: PalettedContainer::<BlockState>::new(), biomes: PalettedContainer::<Biome>::new(), }); diff --git a/azalea-entity/src/data.rs b/azalea-entity/src/data.rs index e481b9d1..3ea86ffe 100644 --- a/azalea-entity/src/data.rs +++ b/azalea-entity/src/data.rs @@ -81,12 +81,16 @@ pub enum EntityDataValue { OptionalUnsignedInt(OptionalUnsignedInt), Pose(Pose), CatVariant(azalea_registry::data::CatVariant), + CatSoundVariant(azalea_registry::data::CatSoundVariant), CowVariant(azalea_registry::data::CowVariant), + CowSoundVariant(azalea_registry::data::CowSoundVariant), WolfVariant(azalea_registry::data::WolfVariant), WolfSoundVariant(azalea_registry::data::WolfSoundVariant), FrogVariant(azalea_registry::data::FrogVariant), PigVariant(azalea_registry::data::PigVariant), + PigSoundVariant(azalea_registry::data::PigSoundVariant), ChickenVariant(azalea_registry::data::ChickenVariant), + ChickenSoundVariant(azalea_registry::data::ChickenSoundVariant), ZombieNautilusVariant(azalea_registry::data::ZombieNautilusVariant), OptionalGlobalPos(Option<Box<GlobalPos>>), PaintingVariant(azalea_registry::data::PaintingVariant), @@ -102,10 +106,10 @@ pub enum EntityDataValue { const _: () = assert!(size_of::<EntityDataValue>() == 24); -#[derive(Clone, Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq, Default)] pub struct OptionalUnsignedInt(pub Option<u32>); -#[derive(AzBuf, Clone, Debug, PartialEq)] +#[derive(AzBuf, Clone, Debug, PartialEq, Default)] pub struct Quaternion { pub x: f32, pub y: f32, diff --git a/azalea-entity/src/dimensions.rs b/azalea-entity/src/dimensions.rs index 6c527ab6..4d39380b 100644 --- a/azalea-entity/src/dimensions.rs +++ b/azalea-entity/src/dimensions.rs @@ -170,7 +170,7 @@ impl From<EntityKind> for EntityDimensions { EntityKind::Player => EntityDimensions::new(0.6, 1.8).eye_height(1.62), EntityKind::PolarBear => EntityDimensions::new(1.4, 1.4), EntityKind::Pufferfish => EntityDimensions::new(0.7, 0.7).eye_height(0.455), - EntityKind::Rabbit => EntityDimensions::new(0.4, 0.5), + EntityKind::Rabbit => EntityDimensions::new(0.49, 0.6).eye_height(0.59), EntityKind::Ravager => EntityDimensions::new(1.95, 2.2), EntityKind::Salmon => EntityDimensions::new(0.7, 0.4).eye_height(0.26), EntityKind::Sheep => EntityDimensions::new(0.9, 1.3).eye_height(1.235), diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs index 3c49bf53..41dd01f1 100644 --- a/azalea-entity/src/metadata.rs +++ b/azalea-entity/src/metadata.rs @@ -106,10 +106,11 @@ //! - [Mule] //! - [AbstractTameable] //! - [Cat] -//! - [Nautilus] //! - [Parrot] //! - [Wolf] -//! - [ZombieNautilus] +//! - [AbstractNautilus] +//! - [Nautilus] +//! - [ZombieNautilus] //! - [AbstractVillager] //! - [Villager] //! - [WanderingTrader] @@ -382,10 +383,11 @@ pub struct TicksFrozen(pub i32); /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] /// - [AbstractVillager] /// - [Villager] /// - [WanderingTrader] @@ -2920,10 +2922,11 @@ pub struct SleepingPos(pub Option<BlockPos>); /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] /// - [AbstractVillager] /// - [Villager] /// - [WanderingTrader] @@ -3499,10 +3502,11 @@ pub struct Aggressive(pub bool); /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] /// - [AbstractVillager] /// - [Villager] /// - [WanderingTrader] @@ -4014,10 +4018,11 @@ impl Default for MagmaCubeMetadataBundle { /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] /// - [AbstractVillager] /// - [Villager] /// - [WanderingTrader] @@ -4521,6 +4526,9 @@ impl Default for SnowGolemMetadataBundle { /// A metadata field for [Tadpole]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct TadpoleFromBucket(pub bool); +/// A metadata field for [Tadpole]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct TadpoleAgeLocked(pub bool); /// The marker component for entities of type `minecraft:tadpole`. /// /// # Metadata @@ -4529,6 +4537,7 @@ pub struct TadpoleFromBucket(pub bool); /// to have, in addition to the metadata components from parent types: /// /// - [TadpoleFromBucket] +/// - [TadpoleAgeLocked] /// /// # Parents /// @@ -4555,6 +4564,9 @@ impl Tadpole { 16 => { entity.insert(TadpoleFromBucket(d.value.into_boolean()?)); } + 17 => { + entity.insert(TadpoleAgeLocked(d.value.into_boolean()?)); + } _ => {} } Ok(()) @@ -4569,6 +4581,7 @@ pub struct TadpoleMetadataBundle { _marker: Tadpole, parent: AbstractCreatureMetadataBundle, tadpole_from_bucket: TadpoleFromBucket, + tadpole_age_locked: TadpoleAgeLocked, } impl Default for TadpoleMetadataBundle { fn default() -> Self { @@ -4576,6 +4589,7 @@ impl Default for TadpoleMetadataBundle { _marker: Tadpole, parent: Default::default(), tadpole_from_bucket: TadpoleFromBucket(false), + tadpole_age_locked: TadpoleAgeLocked(false), } } } @@ -4583,6 +4597,9 @@ impl Default for TadpoleMetadataBundle { /// A metadata field for [AbstractAgeable]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct AbstractAgeableBaby(pub bool); +/// A metadata field for [AbstractAgeable]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct AbstractAgeableAgeLocked(pub bool); /// An abstract entity marker component. /// /// # Metadata @@ -4592,6 +4609,7 @@ pub struct AbstractAgeableBaby(pub bool); /// types: /// /// - [AbstractAgeableBaby] +/// - [AbstractAgeableAgeLocked] /// /// # Parents /// @@ -4642,10 +4660,11 @@ pub struct AbstractAgeableBaby(pub bool); /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] /// - [AbstractVillager] /// - [Villager] /// - [WanderingTrader] @@ -4661,6 +4680,9 @@ impl AbstractAgeable { 16 => { entity.insert(AbstractAgeableBaby(d.value.into_boolean()?)); } + 17 => { + entity.insert(AbstractAgeableAgeLocked(d.value.into_boolean()?)); + } _ => {} } Ok(()) @@ -4675,6 +4697,7 @@ pub struct AbstractAgeableMetadataBundle { _marker: AbstractAgeable, parent: AbstractCreatureMetadataBundle, abstract_ageable_baby: AbstractAgeableBaby, + abstract_ageable_age_locked: AbstractAgeableAgeLocked, } impl Default for AbstractAgeableMetadataBundle { fn default() -> Self { @@ -4682,6 +4705,7 @@ impl Default for AbstractAgeableMetadataBundle { _marker: AbstractAgeable, parent: Default::default(), abstract_ageable_baby: AbstractAgeableBaby(false), + abstract_ageable_age_locked: AbstractAgeableAgeLocked(false), } } } @@ -4724,11 +4748,11 @@ impl Dolphin { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAgeable::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAgeable::apply_metadata(entity, d)?, + 18 => { entity.insert(GotFish(d.value.into_boolean()?)); } - 18 => { + 19 => { entity.insert(MoistnessLevel(d.value.into_int()?)); } _ => {} @@ -4787,7 +4811,7 @@ impl Squid { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAgeable::apply_metadata(entity, d)?, + 0..=17 => AbstractAgeable::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -4847,8 +4871,8 @@ impl GlowSquid { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => Squid::apply_metadata(entity, d)?, - 17 => { + 0..=17 => Squid::apply_metadata(entity, d)?, + 18 => { entity.insert(DarkTicksRemaining(d.value.into_int()?)); } _ => {} @@ -4929,10 +4953,11 @@ impl Default for GlowSquidMetadataBundle { /// - [Mule] /// - [AbstractTameable] /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] #[derive(Component)] pub struct AbstractAnimal; impl AbstractAnimal { @@ -4941,7 +4966,7 @@ impl AbstractAnimal { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAgeable::apply_metadata(entity, d)?, + 0..=17 => AbstractAgeable::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -5001,8 +5026,8 @@ impl Armadillo { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(ArmadilloState(d.value.into_armadillo_state()?)); } _ => {} @@ -5073,14 +5098,14 @@ impl Axolotl { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(AxolotlVariant(d.value.into_int()?)); } - 18 => { + 19 => { entity.insert(PlayingDead(d.value.into_boolean()?)); } - 19 => { + 20 => { entity.insert(AxolotlFromBucket(d.value.into_boolean()?)); } _ => {} @@ -5159,14 +5184,14 @@ impl Bee { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { let bitfield = d.value.into_byte()?; entity.insert(HasNectar(bitfield & 0x8 != 0)); entity.insert(HasStung(bitfield & 0x4 != 0)); entity.insert(BeeRolling(bitfield & 0x2 != 0)); } - 18 => { + 19 => { entity.insert(BeeAngerEndTime(d.value.into_long()?)); } _ => {} @@ -5203,6 +5228,9 @@ impl Default for BeeMetadataBundle { /// A metadata field for [Chicken]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct ChickenVariant(pub azalea_registry::data::ChickenVariant); +/// A metadata field for [Chicken]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct ChickenSoundVariant(pub azalea_registry::data::ChickenSoundVariant); /// The marker component for entities of type `minecraft:chicken`. /// /// # Metadata @@ -5211,6 +5239,7 @@ pub struct ChickenVariant(pub azalea_registry::data::ChickenVariant); /// to have, in addition to the metadata components from parent types: /// /// - [ChickenVariant] +/// - [ChickenSoundVariant] /// /// # Parents /// @@ -5235,10 +5264,13 @@ impl Chicken { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(ChickenVariant(d.value.into_chicken_variant()?)); } + 19 => { + entity.insert(ChickenSoundVariant(d.value.into_chicken_sound_variant()?)); + } _ => {} } Ok(()) @@ -5253,6 +5285,7 @@ pub struct ChickenMetadataBundle { _marker: Chicken, parent: AbstractAnimalMetadataBundle, chicken_variant: ChickenVariant, + chicken_sound_variant: ChickenSoundVariant, } impl Default for ChickenMetadataBundle { fn default() -> Self { @@ -5260,6 +5293,9 @@ impl Default for ChickenMetadataBundle { _marker: Chicken, parent: Default::default(), chicken_variant: ChickenVariant(azalea_registry::data::ChickenVariant::new_raw(0)), + chicken_sound_variant: ChickenSoundVariant( + azalea_registry::data::ChickenSoundVariant::new_raw(0), + ), } } } @@ -5267,6 +5303,9 @@ impl Default for ChickenMetadataBundle { /// A metadata field for [Cow]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct CowVariant(pub azalea_registry::data::CowVariant); +/// A metadata field for [Cow]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct CowSoundVariant(pub azalea_registry::data::CowSoundVariant); /// The marker component for entities of type `minecraft:cow`. /// /// # Metadata @@ -5275,6 +5314,7 @@ pub struct CowVariant(pub azalea_registry::data::CowVariant); /// have, in addition to the metadata components from parent types: /// /// - [CowVariant] +/// - [CowSoundVariant] /// /// # Parents /// @@ -5299,10 +5339,13 @@ impl Cow { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(CowVariant(d.value.into_cow_variant()?)); } + 19 => { + entity.insert(CowSoundVariant(d.value.into_cow_sound_variant()?)); + } _ => {} } Ok(()) @@ -5317,6 +5360,7 @@ pub struct CowMetadataBundle { _marker: Cow, parent: AbstractAnimalMetadataBundle, cow_variant: CowVariant, + cow_sound_variant: CowSoundVariant, } impl Default for CowMetadataBundle { fn default() -> Self { @@ -5324,6 +5368,7 @@ impl Default for CowMetadataBundle { _marker: Cow, parent: Default::default(), cow_variant: CowVariant(azalea_registry::data::CowVariant::new_raw(0)), + cow_sound_variant: CowSoundVariant(azalea_registry::data::CowSoundVariant::new_raw(0)), } } } @@ -5399,11 +5444,11 @@ impl Fox { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(FoxKind(d.value.into_int()?)); } - 18 => { + 19 => { let bitfield = d.value.into_byte()?; entity.insert(FoxSitting(bitfield & 0x1 != 0)); entity.insert(Faceplanted(bitfield & 0x40 != 0)); @@ -5413,10 +5458,10 @@ impl Fox { entity.insert(FoxCrouching(bitfield & 0x4 != 0)); entity.insert(FoxInterested(bitfield & 0x8 != 0)); } - 19 => { + 20 => { entity.insert(TrustedId0(d.value.into_optional_living_entity_reference()?)); } - 20 => { + 21 => { entity.insert(TrustedId1(d.value.into_optional_living_entity_reference()?)); } _ => {} @@ -5501,11 +5546,11 @@ impl Frog { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(FrogVariant(d.value.into_frog_variant()?)); } - 18 => { + 19 => { entity.insert(TongueTarget(d.value.into_optional_unsigned_int()?)); } _ => {} @@ -5578,14 +5623,14 @@ impl Goat { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(IsScreamingGoat(d.value.into_boolean()?)); } - 18 => { + 19 => { entity.insert(HasLeftHorn(d.value.into_boolean()?)); } - 19 => { + 20 => { entity.insert(HasRightHorn(d.value.into_boolean()?)); } _ => {} @@ -5657,11 +5702,11 @@ impl HappyGhast { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(IsLeashHolder(d.value.into_boolean()?)); } - 18 => { + 19 => { entity.insert(StaysStill(d.value.into_boolean()?)); } _ => {} @@ -5726,8 +5771,8 @@ impl Hoglin { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(HoglinImmuneToZombification(d.value.into_boolean()?)); } _ => {} @@ -5791,8 +5836,8 @@ impl Mooshroom { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(MooshroomKind(d.value.into_int()?)); } _ => {} @@ -5855,8 +5900,8 @@ impl Ocelot { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(Trusting(d.value.into_boolean()?)); } _ => {} @@ -5951,27 +5996,27 @@ impl Panda { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(PandaUnhappyCounter(d.value.into_int()?)); } - 18 => { + 19 => { entity.insert(SneezeCounter(d.value.into_int()?)); } - 19 => { + 20 => { entity.insert(EatCounter(d.value.into_int()?)); } - 20 => { + 21 => { let bitfield = d.value.into_byte()?; entity.insert(Sneezing(bitfield & 0x2 != 0)); entity.insert(PandaSitting(bitfield & 0x8 != 0)); entity.insert(OnBack(bitfield & 0x10 != 0)); entity.insert(PandaRolling(bitfield & 0x4 != 0)); } - 21 => { + 22 => { entity.insert(HiddenGene(d.value.into_byte()?)); } - 22 => { + 23 => { entity.insert(PandaFlags(d.value.into_byte()?)); } _ => {} @@ -6021,6 +6066,9 @@ pub struct PigBoostTime(pub i32); /// A metadata field for [Pig]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct PigVariant(pub azalea_registry::data::PigVariant); +/// A metadata field for [Pig]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct PigSoundVariant(pub azalea_registry::data::PigSoundVariant); /// The marker component for entities of type `minecraft:pig`. /// /// # Metadata @@ -6030,6 +6078,7 @@ pub struct PigVariant(pub azalea_registry::data::PigVariant); /// /// - [PigBoostTime] /// - [PigVariant] +/// - [PigSoundVariant] /// /// # Parents /// @@ -6054,13 +6103,16 @@ impl Pig { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(PigBoostTime(d.value.into_int()?)); } - 18 => { + 19 => { entity.insert(PigVariant(d.value.into_pig_variant()?)); } + 20 => { + entity.insert(PigSoundVariant(d.value.into_pig_sound_variant()?)); + } _ => {} } Ok(()) @@ -6076,6 +6128,7 @@ pub struct PigMetadataBundle { parent: AbstractAnimalMetadataBundle, pig_boost_time: PigBoostTime, pig_variant: PigVariant, + pig_sound_variant: PigSoundVariant, } impl Default for PigMetadataBundle { fn default() -> Self { @@ -6084,6 +6137,7 @@ impl Default for PigMetadataBundle { parent: Default::default(), pig_boost_time: PigBoostTime(0), pig_variant: PigVariant(azalea_registry::data::PigVariant::new_raw(0)), + pig_sound_variant: PigSoundVariant(azalea_registry::data::PigSoundVariant::new_raw(0)), } } } @@ -6124,8 +6178,8 @@ impl PolarBear { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(PolarBearStanding(d.value.into_boolean()?)); } _ => {} @@ -6188,8 +6242,8 @@ impl Rabbit { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(RabbitKind(d.value.into_int()?)); } _ => {} @@ -6252,8 +6306,8 @@ impl Sheep { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { let bitfield = d.value.into_byte()?; entity.insert(SheepSheared(bitfield & 0x10 != 0)); } @@ -6321,11 +6375,11 @@ impl Sniffer { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(SnifferState(d.value.into_sniffer_state()?)); } - 18 => { + 19 => { entity.insert(DropSeedAtTick(d.value.into_int()?)); } _ => {} @@ -6394,11 +6448,11 @@ impl Strider { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(StriderBoostTime(d.value.into_int()?)); } - 18 => { + 19 => { entity.insert(Suffocating(d.value.into_boolean()?)); } _ => {} @@ -6467,11 +6521,11 @@ impl Turtle { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { entity.insert(HasEgg(d.value.into_boolean()?)); } - 18 => { + 19 => { entity.insert(LayingEgg(d.value.into_boolean()?)); } _ => {} @@ -6558,8 +6612,8 @@ impl AbstractHorse { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { let bitfield = d.value.into_byte()?; entity.insert(Tamed(bitfield & 0x2 != 0)); entity.insert(Eating(bitfield & 0x10 != 0)); @@ -6637,11 +6691,11 @@ impl Camel { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractHorse::apply_metadata(entity, d)?, - 18 => { + 0..=18 => AbstractHorse::apply_metadata(entity, d)?, + 19 => { entity.insert(CamelDash(d.value.into_boolean()?)); } - 19 => { + 20 => { entity.insert(LastPoseChangeTick(d.value.into_long()?)); } _ => {} @@ -6703,7 +6757,7 @@ impl CamelHusk { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=19 => Camel::apply_metadata(entity, d)?, + 0..=20 => Camel::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -6763,8 +6817,8 @@ impl Horse { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractHorse::apply_metadata(entity, d)?, - 18 => { + 0..=18 => AbstractHorse::apply_metadata(entity, d)?, + 19 => { entity.insert(HorseTypeVariant(d.value.into_int()?)); } _ => {} @@ -6823,7 +6877,7 @@ impl SkeletonHorse { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractHorse::apply_metadata(entity, d)?, + 0..=18 => AbstractHorse::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -6878,7 +6932,7 @@ impl ZombieHorse { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractHorse::apply_metadata(entity, d)?, + 0..=18 => AbstractHorse::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -6942,8 +6996,8 @@ impl AbstractChestedHorse { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractHorse::apply_metadata(entity, d)?, - 18 => { + 0..=18 => AbstractHorse::apply_metadata(entity, d)?, + 19 => { entity.insert(Chest(d.value.into_boolean()?)); } _ => {} @@ -7003,7 +7057,7 @@ impl Donkey { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractChestedHorse::apply_metadata(entity, d)?, + 0..=19 => AbstractChestedHorse::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -7068,11 +7122,11 @@ impl Llama { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractChestedHorse::apply_metadata(entity, d)?, - 19 => { + 0..=19 => AbstractChestedHorse::apply_metadata(entity, d)?, + 20 => { entity.insert(Strength(d.value.into_int()?)); } - 20 => { + 21 => { entity.insert(LlamaVariant(d.value.into_int()?)); } _ => {} @@ -7135,7 +7189,7 @@ impl TraderLlama { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=20 => Llama::apply_metadata(entity, d)?, + 0..=21 => Llama::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -7191,7 +7245,7 @@ impl Mule { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractChestedHorse::apply_metadata(entity, d)?, + 0..=19 => AbstractChestedHorse::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -7251,10 +7305,11 @@ pub struct Owneruuid(pub Option<Uuid>); /// # Children /// /// - [Cat] -/// - [Nautilus] /// - [Parrot] /// - [Wolf] -/// - [ZombieNautilus] +/// - [AbstractNautilus] +/// - [Nautilus] +/// - [ZombieNautilus] #[derive(Component)] pub struct AbstractTameable; impl AbstractTameable { @@ -7263,13 +7318,13 @@ impl AbstractTameable { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAnimal::apply_metadata(entity, d)?, + 18 => { let bitfield = d.value.into_byte()?; entity.insert(Tame(bitfield & 0x4 != 0)); entity.insert(InSittingPose(bitfield & 0x1 != 0)); } - 18 => { + 19 => { entity.insert(Owneruuid(d.value.into_optional_living_entity_reference()?)); } _ => {} @@ -7313,6 +7368,9 @@ pub struct RelaxStateOne(pub bool); /// A metadata field for [Cat]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct CatCollarColor(pub i32); +/// A metadata field for [Cat]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct CatSoundVariant(pub azalea_registry::data::CatSoundVariant); /// The marker component for entities of type `minecraft:cat`. /// /// # Metadata @@ -7324,6 +7382,7 @@ pub struct CatCollarColor(pub i32); /// - [IsLying] /// - [RelaxStateOne] /// - [CatCollarColor] +/// - [CatSoundVariant] /// /// # Parents /// @@ -7349,19 +7408,22 @@ impl Cat { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractTameable::apply_metadata(entity, d)?, - 19 => { + 0..=19 => AbstractTameable::apply_metadata(entity, d)?, + 20 => { entity.insert(CatVariant(d.value.into_cat_variant()?)); } - 20 => { + 21 => { entity.insert(IsLying(d.value.into_boolean()?)); } - 21 => { + 22 => { entity.insert(RelaxStateOne(d.value.into_boolean()?)); } - 22 => { + 23 => { entity.insert(CatCollarColor(d.value.into_int()?)); } + 24 => { + entity.insert(CatSoundVariant(d.value.into_cat_sound_variant()?)); + } _ => {} } Ok(()) @@ -7379,6 +7441,7 @@ pub struct CatMetadataBundle { is_lying: IsLying, relax_state_one: RelaxStateOne, cat_collar_color: CatCollarColor, + cat_sound_variant: CatSoundVariant, } impl Default for CatMetadataBundle { fn default() -> Self { @@ -7389,72 +7452,7 @@ impl Default for CatMetadataBundle { is_lying: IsLying(false), relax_state_one: RelaxStateOne(false), cat_collar_color: CatCollarColor(Default::default()), - } - } -} - -/// A metadata field for [Nautilus]. -#[derive(Component, Deref, DerefMut, Clone, PartialEq)] -pub struct NautilusDash(pub bool); -/// The marker component for entities of type `minecraft:nautilus`. -/// -/// # Metadata -/// -/// These are the metadata components that all `Nautilus` entities are -/// guaranteed to have, in addition to the metadata components from parent -/// types: -/// -/// - [NautilusDash] -/// -/// # Parents -/// -/// Entities with `Nautilus` will also have the following marker components and -/// their metadata fields: -/// -/// - [AbstractTameable] -/// - [AbstractAnimal] -/// - [AbstractAgeable] -/// - [AbstractCreature] -/// - [AbstractInsentient] -/// - [AbstractLiving] -/// - [AbstractEntity] -/// -/// # Children -/// -/// This entity type has no children types. -#[derive(Component)] -pub struct Nautilus; -impl Nautilus { - fn apply_metadata( - entity: &mut bevy_ecs::system::EntityCommands, - d: EntityDataItem, - ) -> Result<(), UpdateMetadataError> { - match d.index { - 0..=18 => AbstractTameable::apply_metadata(entity, d)?, - 19 => { - entity.insert(NautilusDash(d.value.into_boolean()?)); - } - _ => {} - } - Ok(()) - } -} - -/// The metadata bundle for [Nautilus]. -/// -/// This type should generally not be used directly. -#[derive(Bundle)] -pub struct NautilusMetadataBundle { - _marker: Nautilus, - parent: AbstractTameableMetadataBundle, - nautilus_dash: NautilusDash, -} -impl Default for NautilusMetadataBundle { - fn default() -> Self { - Self { - _marker: Nautilus, - parent: Default::default(), - nautilus_dash: NautilusDash(false), + cat_sound_variant: CatSoundVariant(azalea_registry::data::CatSoundVariant::new_raw(0)), } } } @@ -7495,8 +7493,8 @@ impl Parrot { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractTameable::apply_metadata(entity, d)?, - 19 => { + 0..=19 => AbstractTameable::apply_metadata(entity, d)?, + 20 => { entity.insert(ParrotVariant(d.value.into_int()?)); } _ => {} @@ -7538,7 +7536,7 @@ pub struct WolfAngerEndTime(pub i64); pub struct WolfVariant(pub azalea_registry::data::WolfVariant); /// A metadata field for [Wolf]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] -pub struct SoundVariant(pub azalea_registry::data::WolfSoundVariant); +pub struct WolfSoundVariant(pub azalea_registry::data::WolfSoundVariant); /// The marker component for entities of type `minecraft:wolf`. /// /// # Metadata @@ -7550,7 +7548,7 @@ pub struct SoundVariant(pub azalea_registry::data::WolfSoundVariant); /// - [WolfCollarColor] /// - [WolfAngerEndTime] /// - [WolfVariant] -/// - [SoundVariant] +/// - [WolfSoundVariant] /// /// # Parents /// @@ -7576,21 +7574,21 @@ impl Wolf { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractTameable::apply_metadata(entity, d)?, - 19 => { + 0..=19 => AbstractTameable::apply_metadata(entity, d)?, + 20 => { entity.insert(WolfInterested(d.value.into_boolean()?)); } - 20 => { + 21 => { entity.insert(WolfCollarColor(d.value.into_int()?)); } - 21 => { + 22 => { entity.insert(WolfAngerEndTime(d.value.into_long()?)); } - 22 => { + 23 => { entity.insert(WolfVariant(d.value.into_wolf_variant()?)); } - 23 => { - entity.insert(SoundVariant(d.value.into_wolf_sound_variant()?)); + 24 => { + entity.insert(WolfSoundVariant(d.value.into_wolf_sound_variant()?)); } _ => {} } @@ -7609,7 +7607,7 @@ pub struct WolfMetadataBundle { wolf_collar_color: WolfCollarColor, wolf_anger_end_time: WolfAngerEndTime, wolf_variant: WolfVariant, - sound_variant: SoundVariant, + wolf_sound_variant: WolfSoundVariant, } impl Default for WolfMetadataBundle { fn default() -> Self { @@ -7620,14 +7618,136 @@ impl Default for WolfMetadataBundle { wolf_collar_color: WolfCollarColor(Default::default()), wolf_anger_end_time: WolfAngerEndTime(-1), wolf_variant: WolfVariant(azalea_registry::data::WolfVariant::new_raw(0)), - sound_variant: SoundVariant(azalea_registry::data::WolfSoundVariant::new_raw(0)), + wolf_sound_variant: WolfSoundVariant(azalea_registry::data::WolfSoundVariant::new_raw( + 0, + )), } } } -/// A metadata field for [ZombieNautilus]. +/// A metadata field for [AbstractNautilus]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] -pub struct ZombieNautilusDash(pub bool); +pub struct AbstractNautilusDash(pub bool); +/// An abstract entity marker component. +/// +/// # Metadata +/// +/// These are the metadata components that all `AbstractNautilus` entities are +/// guaranteed to have, in addition to the metadata components from parent +/// types: +/// +/// - [AbstractNautilusDash] +/// +/// # Parents +/// +/// Entities with `AbstractNautilus` will also have the following marker +/// components and their metadata fields: +/// +/// - [AbstractTameable] +/// - [AbstractAnimal] +/// - [AbstractAgeable] +/// - [AbstractCreature] +/// - [AbstractInsentient] +/// - [AbstractLiving] +/// - [AbstractEntity] +/// +/// # Children +/// +/// - [Nautilus] +/// - [ZombieNautilus] +#[derive(Component)] +pub struct AbstractNautilus; +impl AbstractNautilus { + fn apply_metadata( + entity: &mut bevy_ecs::system::EntityCommands, + d: EntityDataItem, + ) -> Result<(), UpdateMetadataError> { + match d.index { + 0..=19 => AbstractTameable::apply_metadata(entity, d)?, + 20 => { + entity.insert(AbstractNautilusDash(d.value.into_boolean()?)); + } + _ => {} + } + Ok(()) + } +} + +/// The metadata bundle for [AbstractNautilus]. +/// +/// This type should generally not be used directly. +#[derive(Bundle)] +pub struct AbstractNautilusMetadataBundle { + _marker: AbstractNautilus, + parent: AbstractTameableMetadataBundle, + abstract_nautilus_dash: AbstractNautilusDash, +} +impl Default for AbstractNautilusMetadataBundle { + fn default() -> Self { + Self { + _marker: AbstractNautilus, + parent: Default::default(), + abstract_nautilus_dash: AbstractNautilusDash(false), + } + } +} + +/// The marker component for entities of type `minecraft:nautilus`. +/// +/// # Metadata +/// +/// This entity type does not add any additional metadata. It will still have +/// metadata from parent types. +/// +/// # Parents +/// +/// Entities with `Nautilus` will also have the following marker components and +/// their metadata fields: +/// +/// - [AbstractNautilus] +/// - [AbstractTameable] +/// - [AbstractAnimal] +/// - [AbstractAgeable] +/// - [AbstractCreature] +/// - [AbstractInsentient] +/// - [AbstractLiving] +/// - [AbstractEntity] +/// +/// # Children +/// +/// This entity type has no children types. +#[derive(Component)] +pub struct Nautilus; +impl Nautilus { + fn apply_metadata( + entity: &mut bevy_ecs::system::EntityCommands, + d: EntityDataItem, + ) -> Result<(), UpdateMetadataError> { + match d.index { + 0..=20 => AbstractNautilus::apply_metadata(entity, d)?, + _ => {} + } + Ok(()) + } +} + +/// The metadata bundle for [Nautilus]. +/// +/// This type should generally not be used directly. +#[derive(Bundle)] +pub struct NautilusMetadataBundle { + _marker: Nautilus, + parent: AbstractNautilusMetadataBundle, +} +impl Default for NautilusMetadataBundle { + fn default() -> Self { + Self { + _marker: Nautilus, + parent: Default::default(), + } + } +} + /// A metadata field for [ZombieNautilus]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct ZombieNautilusVariant(pub azalea_registry::data::ZombieNautilusVariant); @@ -7639,7 +7759,6 @@ pub struct ZombieNautilusVariant(pub azalea_registry::data::ZombieNautilusVarian /// guaranteed to have, in addition to the metadata components from parent /// types: /// -/// - [ZombieNautilusDash] /// - [ZombieNautilusVariant] /// /// # Parents @@ -7647,6 +7766,7 @@ pub struct ZombieNautilusVariant(pub azalea_registry::data::ZombieNautilusVarian /// Entities with `ZombieNautilus` will also have the following marker /// components and their metadata fields: /// +/// - [AbstractNautilus] /// - [AbstractTameable] /// - [AbstractAnimal] /// - [AbstractAgeable] @@ -7666,11 +7786,8 @@ impl ZombieNautilus { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=18 => AbstractTameable::apply_metadata(entity, d)?, - 19 => { - entity.insert(ZombieNautilusDash(d.value.into_boolean()?)); - } - 20 => { + 0..=20 => AbstractNautilus::apply_metadata(entity, d)?, + 21 => { entity.insert(ZombieNautilusVariant( d.value.into_zombie_nautilus_variant()?, )); @@ -7687,8 +7804,7 @@ impl ZombieNautilus { #[derive(Bundle)] pub struct ZombieNautilusMetadataBundle { _marker: ZombieNautilus, - parent: AbstractTameableMetadataBundle, - zombie_nautilus_dash: ZombieNautilusDash, + parent: AbstractNautilusMetadataBundle, zombie_nautilus_variant: ZombieNautilusVariant, } impl Default for ZombieNautilusMetadataBundle { @@ -7696,7 +7812,6 @@ impl Default for ZombieNautilusMetadataBundle { Self { _marker: ZombieNautilus, parent: Default::default(), - zombie_nautilus_dash: ZombieNautilusDash(false), zombie_nautilus_variant: ZombieNautilusVariant( azalea_registry::data::ZombieNautilusVariant::new_raw(0), ), @@ -7740,8 +7855,8 @@ impl AbstractVillager { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=16 => AbstractAgeable::apply_metadata(entity, d)?, - 17 => { + 0..=17 => AbstractAgeable::apply_metadata(entity, d)?, + 18 => { entity.insert(AbstractVillagerUnhappyCounter(d.value.into_int()?)); } _ => {} @@ -7772,6 +7887,9 @@ impl Default for AbstractVillagerMetadataBundle { /// A metadata field for [Villager]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct VillagerVillagerData(pub VillagerData); +/// A metadata field for [Villager]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct VillagerVillagerDataFinalized(pub bool); /// The marker component for entities of type `minecraft:villager`. /// /// # Metadata @@ -7781,6 +7899,7 @@ pub struct VillagerVillagerData(pub VillagerData); /// types: /// /// - [VillagerVillagerData] +/// - [VillagerVillagerDataFinalized] /// /// # Parents /// @@ -7805,10 +7924,13 @@ impl Villager { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractVillager::apply_metadata(entity, d)?, - 18 => { + 0..=18 => AbstractVillager::apply_metadata(entity, d)?, + 19 => { entity.insert(VillagerVillagerData(d.value.into_villager_data()?)); } + 20 => { + entity.insert(VillagerVillagerDataFinalized(d.value.into_boolean()?)); + } _ => {} } Ok(()) @@ -7823,6 +7945,7 @@ pub struct VillagerMetadataBundle { _marker: Villager, parent: AbstractVillagerMetadataBundle, villager_villager_data: VillagerVillagerData, + villager_villager_data_finalized: VillagerVillagerDataFinalized, } impl Default for VillagerMetadataBundle { fn default() -> Self { @@ -7834,6 +7957,7 @@ impl Default for VillagerMetadataBundle { profession: azalea_registry::builtin::VillagerProfession::None, level: 0, }), + villager_villager_data_finalized: VillagerVillagerDataFinalized(false), } } } @@ -7868,7 +7992,7 @@ impl WanderingTrader { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=17 => AbstractVillager::apply_metadata(entity, d)?, + 0..=18 => AbstractVillager::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -9763,6 +9887,9 @@ pub struct Converting(pub bool); /// A metadata field for [ZombieVillager]. #[derive(Component, Deref, DerefMut, Clone, PartialEq)] pub struct ZombieVillagerVillagerData(pub VillagerData); +/// A metadata field for [ZombieVillager]. +#[derive(Component, Deref, DerefMut, Clone, PartialEq)] +pub struct ZombieVillagerVillagerDataFinalized(pub bool); /// The marker component for entities of type `minecraft:zombie_villager`. /// /// # Metadata @@ -9773,6 +9900,7 @@ pub struct ZombieVillagerVillagerData(pub VillagerData); /// /// - [Converting] /// - [ZombieVillagerVillagerData] +/// - [ZombieVillagerVillagerDataFinalized] /// /// # Parents /// @@ -9804,6 +9932,9 @@ impl ZombieVillager { 20 => { entity.insert(ZombieVillagerVillagerData(d.value.into_villager_data()?)); } + 21 => { + entity.insert(ZombieVillagerVillagerDataFinalized(d.value.into_boolean()?)); + } _ => {} } Ok(()) @@ -9819,6 +9950,7 @@ pub struct ZombieVillagerMetadataBundle { parent: ZombieMetadataBundle, converting: Converting, zombie_villager_villager_data: ZombieVillagerVillagerData, + zombie_villager_villager_data_finalized: ZombieVillagerVillagerDataFinalized, } impl Default for ZombieVillagerMetadataBundle { fn default() -> Self { @@ -9831,6 +9963,7 @@ impl Default for ZombieVillagerMetadataBundle { profession: azalea_registry::builtin::VillagerProfession::None, level: 0, }), + zombie_villager_villager_data_finalized: ZombieVillagerVillagerDataFinalized(false), } } } diff --git a/azalea-entity/src/particle.rs b/azalea-entity/src/particle.rs index 397346cf..7da9870f 100644 --- a/azalea-entity/src/particle.rs +++ b/azalea-entity/src/particle.rs @@ -61,6 +61,8 @@ pub enum Particle { Item(ItemParticle), Vibration(Box<VibrationParticle>), Trail, + PauseMobGrowth, + ResetMobGrowth, ItemSlime, ItemCobweb, ItemSnowball, @@ -254,6 +256,8 @@ impl From<ParticleKind> for Particle { ParticleKind::BlockCrumble => Self::BlockCrumble, ParticleKind::Firefly => Self::Firefly, ParticleKind::CopperFireFlame => Self::CopperFireFlame, + ParticleKind::PauseMobGrowth => Self::PauseMobGrowth, + ParticleKind::ResetMobGrowth => Self::ResetMobGrowth, } } } diff --git a/azalea-inventory/src/components/mod.rs b/azalea-inventory/src/components/mod.rs index 908db28f..e54ad775 100644 --- a/azalea-inventory/src/components/mod.rs +++ b/azalea-inventory/src/components/mod.rs @@ -4,7 +4,7 @@ use core::f64; use std::{ any::Any, collections::HashMap, - fmt::{self, Display}, + fmt::{self, Debug, Display}, io::{self, Cursor}, mem::ManuallyDrop, }; @@ -26,7 +26,7 @@ use azalea_registry::{ Attribute, BlockKind, DataComponentKind, EntityKind, ItemKind, MobEffect, Potion, SoundEvent, VillagerKind, }, - data::{self, DamageKind, Enchantment, JukeboxSong, TrimMaterial, TrimPattern}, + data::{self, BannerPatternKind, DamageKind, Enchantment, TrimMaterial, TrimPattern}, identifier::Identifier, }; pub use profile::*; @@ -42,7 +42,7 @@ pub trait DataComponentTrait: const KIND: DataComponentKind; } -pub trait EncodableDataComponent: Send + Sync + Any { +pub trait EncodableDataComponent: Send + Sync + Any + Debug { fn encode(&self, buf: &mut Vec<u8>) -> io::Result<()>; fn crc_hash(&self, registries: &RegistryHolder) -> Checksum; // using the Clone trait makes it not be object-safe, so we have our own clone @@ -54,7 +54,7 @@ pub trait EncodableDataComponent: Send + Sync + Any { impl<T> EncodableDataComponent for T where - T: DataComponentTrait + Clone + AzBuf + PartialEq, + T: DataComponentTrait + Clone + AzBuf + PartialEq + Debug, { fn encode(&self, buf: &mut Vec<u8>) -> io::Result<()> { self.azalea_write(buf) @@ -300,6 +300,12 @@ define_data_components!( SwingAnimation, ZombieNautilusVariant, AttackRange, + AdditionalTradeCost, + Dye, + PigSoundVariant, + CowSoundVariant, + ChickenSoundVariant, + CatSoundVariant, ); #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -360,7 +366,7 @@ pub enum Rarity { Epic, } -#[derive(AzBuf, Clone, Default, PartialEq, Serialize)] +#[derive(AzBuf, Clone, Default, PartialEq, Serialize, Debug)] #[serde(transparent)] pub struct Enchantments { /// Enchantment levels here are 1-indexed, level 0 does not exist. @@ -714,7 +720,7 @@ pub struct WritableBookContent { pub pages: Vec<Filterable<String>>, } -#[derive(AzBuf, Clone, PartialEq, Serialize)] +#[derive(AzBuf, Clone, PartialEq, Serialize, Debug)] pub struct WrittenBookContent { #[limit(32)] pub title: Filterable<String>, @@ -763,10 +769,9 @@ pub struct BlockEntityData { } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -#[serde(untagged)] -pub enum Instrument { - Registry(data::Instrument), - Holder(Holder<data::Instrument, InstrumentData>), +#[serde(transparent)] +pub struct Instrument { + pub value: Holder<azalea_registry::data::Instrument, InstrumentData>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -851,7 +856,7 @@ pub struct NoteBlockSound { } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -pub struct BannerPattern { +pub struct BannerPatternLayer { #[var] pub pattern: i32, #[var] @@ -861,7 +866,7 @@ pub struct BannerPattern { #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] #[serde(transparent)] pub struct BannerPatterns { - pub patterns: Vec<BannerPattern>, + pub patterns: Vec<BannerPatternLayer>, } #[derive(AzBuf, Clone, Copy, Debug, PartialEq, Serialize)] @@ -936,10 +941,9 @@ pub struct ContainerLoot { } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -#[serde(untagged)] -pub enum JukeboxPlayable { - Referenced(Identifier), - Direct(Holder<JukeboxSong, JukeboxSongData>), +#[serde(transparent)] +pub struct JukeboxPlayable { + pub value: Holder<azalea_registry::data::JukeboxSong, JukeboxSongData>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -1050,8 +1054,7 @@ pub struct ItemModel { #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] pub struct DamageResistant { - /// In vanilla this only allows tag keys, i.e. it must start with '#' - pub types: Identifier, + pub types: HolderSet<DamageKind, Identifier>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -1591,7 +1594,7 @@ pub struct BlocksAttacks { #[serde(skip_serializing_if = "is_default")] pub item_damage: ItemDamageFunction, #[serde(skip_serializing_if = "is_default")] - pub bypassed_by: Option<Identifier>, + pub bypassed_by: Option<HolderSet<DamageKind, Identifier>>, #[serde(skip_serializing_if = "is_default")] pub block_sound: Option<azalea_registry::Holder<SoundEvent, CustomSound>>, #[serde(skip_serializing_if = "is_default")] @@ -1654,10 +1657,9 @@ impl Default for ItemDamageFunction { } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -#[serde(untagged)] -pub enum ProvidesTrimMaterial { - Referenced(Identifier), - Direct(Holder<TrimMaterial, DirectTrimMaterial>), +#[serde(transparent)] +pub struct ProvidesTrimMaterial { + pub value: Holder<azalea_registry::data::TrimMaterial, DirectTrimMaterial>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -1680,7 +1682,7 @@ pub struct AssetInfo { #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] #[serde(transparent)] pub struct ProvidesBannerPatterns { - pub key: Identifier, + pub key: HolderSet<BannerPatternKind, Identifier>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -1702,26 +1704,14 @@ pub struct CowVariant { } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -#[serde(untagged)] -pub enum ChickenVariant { - Referenced(Identifier), - Direct(ChickenVariantData), -} - -#[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -pub struct ChickenVariantData { - pub registry: azalea_registry::data::ChickenVariant, +#[serde(transparent)] +pub struct ChickenVariant { + pub data: azalea_registry::data::ChickenVariant, } -// TODO: check in-game if this is correct -#[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -pub enum ZombieNautilusVariant { - Referenced(Identifier), - Direct(ZombieNautilusVariantData), -} #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] #[serde(transparent)] -pub struct ZombieNautilusVariantData { +pub struct ZombieNautilusVariant { pub value: azalea_registry::data::ZombieNautilusVariant, } @@ -1752,12 +1742,10 @@ pub struct MinimumAttackCharge { pub value: f32, } -// TODO: this is probably wrong, check in-game #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] -#[serde(untagged)] -pub enum DamageType { - Registry(DamageKind), - Holder(Holder<DamageKind, DamageTypeElement>), +#[serde(transparent)] +pub struct DamageType { + pub value: Holder<azalea_registry::data::DamageKind, DamageTypeElement>, } #[derive(AzBuf, Clone, Debug, PartialEq, Serialize)] @@ -1895,3 +1883,34 @@ impl Default for AttackRange { Self::new() } } + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct AdditionalTradeCost { + #[var] + pub cost: i32, +} + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct Dye { + pub color: DyeColor, +} + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct PigSoundVariant { + pub value: azalea_registry::data::PigSoundVariant, +} + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct CowSoundVariant { + pub value: azalea_registry::data::CowSoundVariant, +} + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct ChickenSoundVariant { + pub value: azalea_registry::data::ChickenSoundVariant, +} + +#[derive(Clone, PartialEq, AzBuf, Debug, Serialize)] +pub struct CatSoundVariant { + pub value: azalea_registry::data::CatSoundVariant, +} diff --git a/azalea-inventory/src/default_components/generated.rs b/azalea-inventory/src/default_components/generated.rs index 97885a7c..883fcd08 100644 --- a/azalea-inventory/src/default_components/generated.rs +++ b/azalea-inventory/src/default_components/generated.rs @@ -2048,6 +2048,58 @@ impl DefaultableComponent for BreakSound { Some(BreakSound { sound: value }) } } +impl DefaultableComponent for Container { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::AcaciaShelf => vec![], + ItemKind::BambooShelf => vec![], + ItemKind::Barrel => vec![], + ItemKind::BirchShelf => vec![], + ItemKind::BlackShulkerBox => vec![], + ItemKind::BlastFurnace => vec![], + ItemKind::BlueShulkerBox => vec![], + ItemKind::BrewingStand => vec![], + ItemKind::BrownShulkerBox => vec![], + ItemKind::Campfire => vec![], + ItemKind::CherryShelf => vec![], + ItemKind::Chest => vec![], + ItemKind::ChiseledBookshelf => vec![], + ItemKind::Crafter => vec![], + ItemKind::CrimsonShelf => vec![], + ItemKind::CyanShulkerBox => vec![], + ItemKind::DarkOakShelf => vec![], + ItemKind::DecoratedPot => vec![], + ItemKind::Dispenser => vec![], + ItemKind::Dropper => vec![], + ItemKind::Furnace => vec![], + ItemKind::GrayShulkerBox => vec![], + ItemKind::GreenShulkerBox => vec![], + ItemKind::Hopper => vec![], + ItemKind::JungleShelf => vec![], + ItemKind::LightBlueShulkerBox => vec![], + ItemKind::LightGrayShulkerBox => vec![], + ItemKind::LimeShulkerBox => vec![], + ItemKind::MagentaShulkerBox => vec![], + ItemKind::MangroveShelf => vec![], + ItemKind::OakShelf => vec![], + ItemKind::OrangeShulkerBox => vec![], + ItemKind::PaleOakShelf => vec![], + ItemKind::PinkShulkerBox => vec![], + ItemKind::PurpleShulkerBox => vec![], + ItemKind::RedShulkerBox => vec![], + ItemKind::ShulkerBox => vec![], + ItemKind::Smoker => vec![], + ItemKind::SoulCampfire => vec![], + ItemKind::SpruceShelf => vec![], + ItemKind::TrappedChest => vec![], + ItemKind::WarpedShelf => vec![], + ItemKind::WhiteShulkerBox => vec![], + ItemKind::YellowShulkerBox => vec![], + _ => return None, + }; + Some(Container { items: value }) + } +} impl DefaultableComponent for Enchantments { fn default_for_item(_item: ItemKind) -> Option<Self> { Some(Enchantments { @@ -2056,7 +2108,7 @@ impl DefaultableComponent for Enchantments { } } #[rustfmt::skip] -static ITEM_MODEL_VALUES: [&str; 1505] = ["minecraft:air","minecraft:stone","minecraft:granite","minecraft:polished_granite","minecraft:diorite","minecraft:polished_diorite","minecraft:andesite","minecraft:polished_andesite","minecraft:deepslate","minecraft:cobbled_deepslate","minecraft:polished_deepslate","minecraft:calcite","minecraft:tuff","minecraft:tuff_slab","minecraft:tuff_stairs","minecraft:tuff_wall","minecraft:chiseled_tuff","minecraft:polished_tuff","minecraft:polished_tuff_slab","minecraft:polished_tuff_stairs","minecraft:polished_tuff_wall","minecraft:tuff_bricks","minecraft:tuff_brick_slab","minecraft:tuff_brick_stairs","minecraft:tuff_brick_wall","minecraft:chiseled_tuff_bricks","minecraft:dripstone_block","minecraft:grass_block","minecraft:dirt","minecraft:coarse_dirt","minecraft:podzol","minecraft:rooted_dirt","minecraft:mud","minecraft:crimson_nylium","minecraft:warped_nylium","minecraft:cobblestone","minecraft:oak_planks","minecraft:spruce_planks","minecraft:birch_planks","minecraft:jungle_planks","minecraft:acacia_planks","minecraft:cherry_planks","minecraft:dark_oak_planks","minecraft:pale_oak_planks","minecraft:mangrove_planks","minecraft:bamboo_planks","minecraft:crimson_planks","minecraft:warped_planks","minecraft:bamboo_mosaic","minecraft:oak_sapling","minecraft:spruce_sapling","minecraft:birch_sapling","minecraft:jungle_sapling","minecraft:acacia_sapling","minecraft:cherry_sapling","minecraft:dark_oak_sapling","minecraft:pale_oak_sapling","minecraft:mangrove_propagule","minecraft:bedrock","minecraft:sand","minecraft:suspicious_sand","minecraft:suspicious_gravel","minecraft:red_sand","minecraft:gravel","minecraft:coal_ore","minecraft:deepslate_coal_ore","minecraft:iron_ore","minecraft:deepslate_iron_ore","minecraft:copper_ore","minecraft:deepslate_copper_ore","minecraft:gold_ore","minecraft:deepslate_gold_ore","minecraft:redstone_ore","minecraft:deepslate_redstone_ore","minecraft:emerald_ore","minecraft:deepslate_emerald_ore","minecraft:lapis_ore","minecraft:deepslate_lapis_ore","minecraft:diamond_ore","minecraft:deepslate_diamond_ore","minecraft:nether_gold_ore","minecraft:nether_quartz_ore","minecraft:ancient_debris","minecraft:coal_block","minecraft:raw_iron_block","minecraft:raw_copper_block","minecraft:raw_gold_block","minecraft:heavy_core","minecraft:amethyst_block","minecraft:budding_amethyst","minecraft:iron_block","minecraft:copper_block","minecraft:gold_block","minecraft:diamond_block","minecraft:netherite_block","minecraft:exposed_copper","minecraft:weathered_copper","minecraft:oxidized_copper","minecraft:chiseled_copper","minecraft:exposed_chiseled_copper","minecraft:weathered_chiseled_copper","minecraft:oxidized_chiseled_copper","minecraft:cut_copper","minecraft:exposed_cut_copper","minecraft:weathered_cut_copper","minecraft:oxidized_cut_copper","minecraft:cut_copper_stairs","minecraft:exposed_cut_copper_stairs","minecraft:weathered_cut_copper_stairs","minecraft:oxidized_cut_copper_stairs","minecraft:cut_copper_slab","minecraft:exposed_cut_copper_slab","minecraft:weathered_cut_copper_slab","minecraft:oxidized_cut_copper_slab","minecraft:waxed_copper_block","minecraft:waxed_exposed_copper","minecraft:waxed_weathered_copper","minecraft:waxed_oxidized_copper","minecraft:waxed_chiseled_copper","minecraft:waxed_exposed_chiseled_copper","minecraft:waxed_weathered_chiseled_copper","minecraft:waxed_oxidized_chiseled_copper","minecraft:waxed_cut_copper","minecraft:waxed_exposed_cut_copper","minecraft:waxed_weathered_cut_copper","minecraft:waxed_oxidized_cut_copper","minecraft:waxed_cut_copper_stairs","minecraft:waxed_exposed_cut_copper_stairs","minecraft:waxed_weathered_cut_copper_stairs","minecraft:waxed_oxidized_cut_copper_stairs","minecraft:waxed_cut_copper_slab","minecraft:waxed_exposed_cut_copper_slab","minecraft:waxed_weathered_cut_copper_slab","minecraft:waxed_oxidized_cut_copper_slab","minecraft:oak_log","minecraft:spruce_log","minecraft:birch_log","minecraft:jungle_log","minecraft:acacia_log","minecraft:cherry_log","minecraft:pale_oak_log","minecraft:dark_oak_log","minecraft:mangrove_log","minecraft:mangrove_roots","minecraft:muddy_mangrove_roots","minecraft:crimson_stem","minecraft:warped_stem","minecraft:bamboo_block","minecraft:stripped_oak_log","minecraft:stripped_spruce_log","minecraft:stripped_birch_log","minecraft:stripped_jungle_log","minecraft:stripped_acacia_log","minecraft:stripped_cherry_log","minecraft:stripped_dark_oak_log","minecraft:stripped_pale_oak_log","minecraft:stripped_mangrove_log","minecraft:stripped_crimson_stem","minecraft:stripped_warped_stem","minecraft:stripped_oak_wood","minecraft:stripped_spruce_wood","minecraft:stripped_birch_wood","minecraft:stripped_jungle_wood","minecraft:stripped_acacia_wood","minecraft:stripped_cherry_wood","minecraft:stripped_dark_oak_wood","minecraft:stripped_pale_oak_wood","minecraft:stripped_mangrove_wood","minecraft:stripped_crimson_hyphae","minecraft:stripped_warped_hyphae","minecraft:stripped_bamboo_block","minecraft:oak_wood","minecraft:spruce_wood","minecraft:birch_wood","minecraft:jungle_wood","minecraft:acacia_wood","minecraft:cherry_wood","minecraft:pale_oak_wood","minecraft:dark_oak_wood","minecraft:mangrove_wood","minecraft:crimson_hyphae","minecraft:warped_hyphae","minecraft:oak_leaves","minecraft:spruce_leaves","minecraft:birch_leaves","minecraft:jungle_leaves","minecraft:acacia_leaves","minecraft:cherry_leaves","minecraft:dark_oak_leaves","minecraft:pale_oak_leaves","minecraft:mangrove_leaves","minecraft:azalea_leaves","minecraft:flowering_azalea_leaves","minecraft:sponge","minecraft:wet_sponge","minecraft:glass","minecraft:tinted_glass","minecraft:lapis_block","minecraft:sandstone","minecraft:chiseled_sandstone","minecraft:cut_sandstone","minecraft:cobweb","minecraft:short_grass","minecraft:fern","minecraft:bush","minecraft:azalea","minecraft:flowering_azalea","minecraft:dead_bush","minecraft:firefly_bush","minecraft:short_dry_grass","minecraft:tall_dry_grass","minecraft:seagrass","minecraft:sea_pickle","minecraft:white_wool","minecraft:orange_wool","minecraft:magenta_wool","minecraft:light_blue_wool","minecraft:yellow_wool","minecraft:lime_wool","minecraft:pink_wool","minecraft:gray_wool","minecraft:light_gray_wool","minecraft:cyan_wool","minecraft:purple_wool","minecraft:blue_wool","minecraft:brown_wool","minecraft:green_wool","minecraft:red_wool","minecraft:black_wool","minecraft:dandelion","minecraft:open_eyeblossom","minecraft:closed_eyeblossom","minecraft:poppy","minecraft:blue_orchid","minecraft:allium","minecraft:azure_bluet","minecraft:red_tulip","minecraft:orange_tulip","minecraft:white_tulip","minecraft:pink_tulip","minecraft:oxeye_daisy","minecraft:cornflower","minecraft:lily_of_the_valley","minecraft:wither_rose","minecraft:torchflower","minecraft:pitcher_plant","minecraft:spore_blossom","minecraft:brown_mushroom","minecraft:red_mushroom","minecraft:crimson_fungus","minecraft:warped_fungus","minecraft:crimson_roots","minecraft:warped_roots","minecraft:nether_sprouts","minecraft:weeping_vines","minecraft:twisting_vines","minecraft:sugar_cane","minecraft:kelp","minecraft:pink_petals","minecraft:wildflowers","minecraft:leaf_litter","minecraft:moss_carpet","minecraft:moss_block","minecraft:pale_moss_carpet","minecraft:pale_hanging_moss","minecraft:pale_moss_block","minecraft:hanging_roots","minecraft:big_dripleaf","minecraft:small_dripleaf","minecraft:bamboo","minecraft:oak_slab","minecraft:spruce_slab","minecraft:birch_slab","minecraft:jungle_slab","minecraft:acacia_slab","minecraft:cherry_slab","minecraft:dark_oak_slab","minecraft:pale_oak_slab","minecraft:mangrove_slab","minecraft:bamboo_slab","minecraft:bamboo_mosaic_slab","minecraft:crimson_slab","minecraft:warped_slab","minecraft:stone_slab","minecraft:smooth_stone_slab","minecraft:sandstone_slab","minecraft:cut_sandstone_slab","minecraft:petrified_oak_slab","minecraft:cobblestone_slab","minecraft:brick_slab","minecraft:stone_brick_slab","minecraft:mud_brick_slab","minecraft:nether_brick_slab","minecraft:quartz_slab","minecraft:red_sandstone_slab","minecraft:cut_red_sandstone_slab","minecraft:purpur_slab","minecraft:prismarine_slab","minecraft:prismarine_brick_slab","minecraft:dark_prismarine_slab","minecraft:smooth_quartz","minecraft:smooth_red_sandstone","minecraft:smooth_sandstone","minecraft:smooth_stone","minecraft:bricks","minecraft:acacia_shelf","minecraft:bamboo_shelf","minecraft:birch_shelf","minecraft:cherry_shelf","minecraft:crimson_shelf","minecraft:dark_oak_shelf","minecraft:jungle_shelf","minecraft:mangrove_shelf","minecraft:oak_shelf","minecraft:pale_oak_shelf","minecraft:spruce_shelf","minecraft:warped_shelf","minecraft:bookshelf","minecraft:chiseled_bookshelf","minecraft:decorated_pot","minecraft:mossy_cobblestone","minecraft:obsidian","minecraft:torch","minecraft:end_rod","minecraft:chorus_plant","minecraft:chorus_flower","minecraft:purpur_block","minecraft:purpur_pillar","minecraft:purpur_stairs","minecraft:spawner","minecraft:creaking_heart","minecraft:chest","minecraft:crafting_table","minecraft:farmland","minecraft:furnace","minecraft:ladder","minecraft:cobblestone_stairs","minecraft:snow","minecraft:ice","minecraft:snow_block","minecraft:cactus","minecraft:cactus_flower","minecraft:clay","minecraft:jukebox","minecraft:oak_fence","minecraft:spruce_fence","minecraft:birch_fence","minecraft:jungle_fence","minecraft:acacia_fence","minecraft:cherry_fence","minecraft:dark_oak_fence","minecraft:pale_oak_fence","minecraft:mangrove_fence","minecraft:bamboo_fence","minecraft:crimson_fence","minecraft:warped_fence","minecraft:pumpkin","minecraft:carved_pumpkin","minecraft:jack_o_lantern","minecraft:netherrack","minecraft:soul_sand","minecraft:soul_soil","minecraft:basalt","minecraft:polished_basalt","minecraft:smooth_basalt","minecraft:soul_torch","minecraft:copper_torch","minecraft:glowstone","minecraft:infested_stone","minecraft:infested_cobblestone","minecraft:infested_stone_bricks","minecraft:infested_mossy_stone_bricks","minecraft:infested_cracked_stone_bricks","minecraft:infested_chiseled_stone_bricks","minecraft:infested_deepslate","minecraft:stone_bricks","minecraft:mossy_stone_bricks","minecraft:cracked_stone_bricks","minecraft:chiseled_stone_bricks","minecraft:packed_mud","minecraft:mud_bricks","minecraft:deepslate_bricks","minecraft:cracked_deepslate_bricks","minecraft:deepslate_tiles","minecraft:cracked_deepslate_tiles","minecraft:chiseled_deepslate","minecraft:reinforced_deepslate","minecraft:brown_mushroom_block","minecraft:red_mushroom_block","minecraft:mushroom_stem","minecraft:iron_bars","minecraft:copper_bars","minecraft:exposed_copper_bars","minecraft:weathered_copper_bars","minecraft:oxidized_copper_bars","minecraft:waxed_copper_bars","minecraft:waxed_exposed_copper_bars","minecraft:waxed_weathered_copper_bars","minecraft:waxed_oxidized_copper_bars","minecraft:iron_chain","minecraft:copper_chain","minecraft:exposed_copper_chain","minecraft:weathered_copper_chain","minecraft:oxidized_copper_chain","minecraft:waxed_copper_chain","minecraft:waxed_exposed_copper_chain","minecraft:waxed_weathered_copper_chain","minecraft:waxed_oxidized_copper_chain","minecraft:glass_pane","minecraft:melon","minecraft:vine","minecraft:glow_lichen","minecraft:resin_clump","minecraft:resin_block","minecraft:resin_bricks","minecraft:resin_brick_stairs","minecraft:resin_brick_slab","minecraft:resin_brick_wall","minecraft:chiseled_resin_bricks","minecraft:brick_stairs","minecraft:stone_brick_stairs","minecraft:mud_brick_stairs","minecraft:mycelium","minecraft:lily_pad","minecraft:nether_bricks","minecraft:cracked_nether_bricks","minecraft:chiseled_nether_bricks","minecraft:nether_brick_fence","minecraft:nether_brick_stairs","minecraft:sculk","minecraft:sculk_vein","minecraft:sculk_catalyst","minecraft:sculk_shrieker","minecraft:enchanting_table","minecraft:end_portal_frame","minecraft:end_stone","minecraft:end_stone_bricks","minecraft:dragon_egg","minecraft:sandstone_stairs","minecraft:ender_chest","minecraft:emerald_block","minecraft:oak_stairs","minecraft:spruce_stairs","minecraft:birch_stairs","minecraft:jungle_stairs","minecraft:acacia_stairs","minecraft:cherry_stairs","minecraft:dark_oak_stairs","minecraft:pale_oak_stairs","minecraft:mangrove_stairs","minecraft:bamboo_stairs","minecraft:bamboo_mosaic_stairs","minecraft:crimson_stairs","minecraft:warped_stairs","minecraft:command_block","minecraft:beacon","minecraft:cobblestone_wall","minecraft:mossy_cobblestone_wall","minecraft:brick_wall","minecraft:prismarine_wall","minecraft:red_sandstone_wall","minecraft:mossy_stone_brick_wall","minecraft:granite_wall","minecraft:stone_brick_wall","minecraft:mud_brick_wall","minecraft:nether_brick_wall","minecraft:andesite_wall","minecraft:red_nether_brick_wall","minecraft:sandstone_wall","minecraft:end_stone_brick_wall","minecraft:diorite_wall","minecraft:blackstone_wall","minecraft:polished_blackstone_wall","minecraft:polished_blackstone_brick_wall","minecraft:cobbled_deepslate_wall","minecraft:polished_deepslate_wall","minecraft:deepslate_brick_wall","minecraft:deepslate_tile_wall","minecraft:anvil","minecraft:chipped_anvil","minecraft:damaged_anvil","minecraft:chiseled_quartz_block","minecraft:quartz_block","minecraft:quartz_bricks","minecraft:quartz_pillar","minecraft:quartz_stairs","minecraft:white_terracotta","minecraft:orange_terracotta","minecraft:magenta_terracotta","minecraft:light_blue_terracotta","minecraft:yellow_terracotta","minecraft:lime_terracotta","minecraft:pink_terracotta","minecraft:gray_terracotta","minecraft:light_gray_terracotta","minecraft:cyan_terracotta","minecraft:purple_terracotta","minecraft:blue_terracotta","minecraft:brown_terracotta","minecraft:green_terracotta","minecraft:red_terracotta","minecraft:black_terracotta","minecraft:barrier","minecraft:light","minecraft:hay_block","minecraft:white_carpet","minecraft:orange_carpet","minecraft:magenta_carpet","minecraft:light_blue_carpet","minecraft:yellow_carpet","minecraft:lime_carpet","minecraft:pink_carpet","minecraft:gray_carpet","minecraft:light_gray_carpet","minecraft:cyan_carpet","minecraft:purple_carpet","minecraft:blue_carpet","minecraft:brown_carpet","minecraft:green_carpet","minecraft:red_carpet","minecraft:black_carpet","minecraft:terracotta","minecraft:packed_ice","minecraft:dirt_path","minecraft:sunflower","minecraft:lilac","minecraft:rose_bush","minecraft:peony","minecraft:tall_grass","minecraft:large_fern","minecraft:white_stained_glass","minecraft:orange_stained_glass","minecraft:magenta_stained_glass","minecraft:light_blue_stained_glass","minecraft:yellow_stained_glass","minecraft:lime_stained_glass","minecraft:pink_stained_glass","minecraft:gray_stained_glass","minecraft:light_gray_stained_glass","minecraft:cyan_stained_glass","minecraft:purple_stained_glass","minecraft:blue_stained_glass","minecraft:brown_stained_glass","minecraft:green_stained_glass","minecraft:red_stained_glass","minecraft:black_stained_glass","minecraft:white_stained_glass_pane","minecraft:orange_stained_glass_pane","minecraft:magenta_stained_glass_pane","minecraft:light_blue_stained_glass_pane","minecraft:yellow_stained_glass_pane","minecraft:lime_stained_glass_pane","minecraft:pink_stained_glass_pane","minecraft:gray_stained_glass_pane","minecraft:light_gray_stained_glass_pane","minecraft:cyan_stained_glass_pane","minecraft:purple_stained_glass_pane","minecraft:blue_stained_glass_pane","minecraft:brown_stained_glass_pane","minecraft:green_stained_glass_pane","minecraft:red_stained_glass_pane","minecraft:black_stained_glass_pane","minecraft:prismarine","minecraft:prismarine_bricks","minecraft:dark_prismarine","minecraft:prismarine_stairs","minecraft:prismarine_brick_stairs","minecraft:dark_prismarine_stairs","minecraft:sea_lantern","minecraft:red_sandstone","minecraft:chiseled_red_sandstone","minecraft:cut_red_sandstone","minecraft:red_sandstone_stairs","minecraft:repeating_command_block","minecraft:chain_command_block","minecraft:magma_block","minecraft:nether_wart_block","minecraft:warped_wart_block","minecraft:red_nether_bricks","minecraft:bone_block","minecraft:structure_void","minecraft:shulker_box","minecraft:white_shulker_box","minecraft:orange_shulker_box","minecraft:magenta_shulker_box","minecraft:light_blue_shulker_box","minecraft:yellow_shulker_box","minecraft:lime_shulker_box","minecraft:pink_shulker_box","minecraft:gray_shulker_box","minecraft:light_gray_shulker_box","minecraft:cyan_shulker_box","minecraft:purple_shulker_box","minecraft:blue_shulker_box","minecraft:brown_shulker_box","minecraft:green_shulker_box","minecraft:red_shulker_box","minecraft:black_shulker_box","minecraft:white_glazed_terracotta","minecraft:orange_glazed_terracotta","minecraft:magenta_glazed_terracotta","minecraft:light_blue_glazed_terracotta","minecraft:yellow_glazed_terracotta","minecraft:lime_glazed_terracotta","minecraft:pink_glazed_terracotta","minecraft:gray_glazed_terracotta","minecraft:light_gray_glazed_terracotta","minecraft:cyan_glazed_terracotta","minecraft:purple_glazed_terracotta","minecraft:blue_glazed_terracotta","minecraft:brown_glazed_terracotta","minecraft:green_glazed_terracotta","minecraft:red_glazed_terracotta","minecraft:black_glazed_terracotta","minecraft:white_concrete","minecraft:orange_concrete","minecraft:magenta_concrete","minecraft:light_blue_concrete","minecraft:yellow_concrete","minecraft:lime_concrete","minecraft:pink_concrete","minecraft:gray_concrete","minecraft:light_gray_concrete","minecraft:cyan_concrete","minecraft:purple_concrete","minecraft:blue_concrete","minecraft:brown_concrete","minecraft:green_concrete","minecraft:red_concrete","minecraft:black_concrete","minecraft:white_concrete_powder","minecraft:orange_concrete_powder","minecraft:magenta_concrete_powder","minecraft:light_blue_concrete_powder","minecraft:yellow_concrete_powder","minecraft:lime_concrete_powder","minecraft:pink_concrete_powder","minecraft:gray_concrete_powder","minecraft:light_gray_concrete_powder","minecraft:cyan_concrete_powder","minecraft:purple_concrete_powder","minecraft:blue_concrete_powder","minecraft:brown_concrete_powder","minecraft:green_concrete_powder","minecraft:red_concrete_powder","minecraft:black_concrete_powder","minecraft:turtle_egg","minecraft:sniffer_egg","minecraft:dried_ghast","minecraft:dead_tube_coral_block","minecraft:dead_brain_coral_block","minecraft:dead_bubble_coral_block","minecraft:dead_fire_coral_block","minecraft:dead_horn_coral_block","minecraft:tube_coral_block","minecraft:brain_coral_block","minecraft:bubble_coral_block","minecraft:fire_coral_block","minecraft:horn_coral_block","minecraft:tube_coral","minecraft:brain_coral","minecraft:bubble_coral","minecraft:fire_coral","minecraft:horn_coral","minecraft:dead_brain_coral","minecraft:dead_bubble_coral","minecraft:dead_fire_coral","minecraft:dead_horn_coral","minecraft:dead_tube_coral","minecraft:tube_coral_fan","minecraft:brain_coral_fan","minecraft:bubble_coral_fan","minecraft:fire_coral_fan","minecraft:horn_coral_fan","minecraft:dead_tube_coral_fan","minecraft:dead_brain_coral_fan","minecraft:dead_bubble_coral_fan","minecraft:dead_fire_coral_fan","minecraft:dead_horn_coral_fan","minecraft:blue_ice","minecraft:conduit","minecraft:polished_granite_stairs","minecraft:smooth_red_sandstone_stairs","minecraft:mossy_stone_brick_stairs","minecraft:polished_diorite_stairs","minecraft:mossy_cobblestone_stairs","minecraft:end_stone_brick_stairs","minecraft:stone_stairs","minecraft:smooth_sandstone_stairs","minecraft:smooth_quartz_stairs","minecraft:granite_stairs","minecraft:andesite_stairs","minecraft:red_nether_brick_stairs","minecraft:polished_andesite_stairs","minecraft:diorite_stairs","minecraft:cobbled_deepslate_stairs","minecraft:polished_deepslate_stairs","minecraft:deepslate_brick_stairs","minecraft:deepslate_tile_stairs","minecraft:polished_granite_slab","minecraft:smooth_red_sandstone_slab","minecraft:mossy_stone_brick_slab","minecraft:polished_diorite_slab","minecraft:mossy_cobblestone_slab","minecraft:end_stone_brick_slab","minecraft:smooth_sandstone_slab","minecraft:smooth_quartz_slab","minecraft:granite_slab","minecraft:andesite_slab","minecraft:red_nether_brick_slab","minecraft:polished_andesite_slab","minecraft:diorite_slab","minecraft:cobbled_deepslate_slab","minecraft:polished_deepslate_slab","minecraft:deepslate_brick_slab","minecraft:deepslate_tile_slab","minecraft:scaffolding","minecraft:redstone","minecraft:redstone_torch","minecraft:redstone_block","minecraft:repeater","minecraft:comparator","minecraft:piston","minecraft:sticky_piston","minecraft:slime_block","minecraft:honey_block","minecraft:observer","minecraft:hopper","minecraft:dispenser","minecraft:dropper","minecraft:lectern","minecraft:target","minecraft:lever","minecraft:lightning_rod","minecraft:exposed_lightning_rod","minecraft:weathered_lightning_rod","minecraft:oxidized_lightning_rod","minecraft:waxed_lightning_rod","minecraft:waxed_exposed_lightning_rod","minecraft:waxed_weathered_lightning_rod","minecraft:waxed_oxidized_lightning_rod","minecraft:daylight_detector","minecraft:sculk_sensor","minecraft:calibrated_sculk_sensor","minecraft:tripwire_hook","minecraft:trapped_chest","minecraft:tnt","minecraft:redstone_lamp","minecraft:note_block","minecraft:stone_button","minecraft:polished_blackstone_button","minecraft:oak_button","minecraft:spruce_button","minecraft:birch_button","minecraft:jungle_button","minecraft:acacia_button","minecraft:cherry_button","minecraft:dark_oak_button","minecraft:pale_oak_button","minecraft:mangrove_button","minecraft:bamboo_button","minecraft:crimson_button","minecraft:warped_button","minecraft:stone_pressure_plate","minecraft:polished_blackstone_pressure_plate","minecraft:light_weighted_pressure_plate","minecraft:heavy_weighted_pressure_plate","minecraft:oak_pressure_plate","minecraft:spruce_pressure_plate","minecraft:birch_pressure_plate","minecraft:jungle_pressure_plate","minecraft:acacia_pressure_plate","minecraft:cherry_pressure_plate","minecraft:dark_oak_pressure_plate","minecraft:pale_oak_pressure_plate","minecraft:mangrove_pressure_plate","minecraft:bamboo_pressure_plate","minecraft:crimson_pressure_plate","minecraft:warped_pressure_plate","minecraft:iron_door","minecraft:oak_door","minecraft:spruce_door","minecraft:birch_door","minecraft:jungle_door","minecraft:acacia_door","minecraft:cherry_door","minecraft:dark_oak_door","minecraft:pale_oak_door","minecraft:mangrove_door","minecraft:bamboo_door","minecraft:crimson_door","minecraft:warped_door","minecraft:copper_door","minecraft:exposed_copper_door","minecraft:weathered_copper_door","minecraft:oxidized_copper_door","minecraft:waxed_copper_door","minecraft:waxed_exposed_copper_door","minecraft:waxed_weathered_copper_door","minecraft:waxed_oxidized_copper_door","minecraft:iron_trapdoor","minecraft:oak_trapdoor","minecraft:spruce_trapdoor","minecraft:birch_trapdoor","minecraft:jungle_trapdoor","minecraft:acacia_trapdoor","minecraft:cherry_trapdoor","minecraft:dark_oak_trapdoor","minecraft:pale_oak_trapdoor","minecraft:mangrove_trapdoor","minecraft:bamboo_trapdoor","minecraft:crimson_trapdoor","minecraft:warped_trapdoor","minecraft:copper_trapdoor","minecraft:exposed_copper_trapdoor","minecraft:weathered_copper_trapdoor","minecraft:oxidized_copper_trapdoor","minecraft:waxed_copper_trapdoor","minecraft:waxed_exposed_copper_trapdoor","minecraft:waxed_weathered_copper_trapdoor","minecraft:waxed_oxidized_copper_trapdoor","minecraft:oak_fence_gate","minecraft:spruce_fence_gate","minecraft:birch_fence_gate","minecraft:jungle_fence_gate","minecraft:acacia_fence_gate","minecraft:cherry_fence_gate","minecraft:dark_oak_fence_gate","minecraft:pale_oak_fence_gate","minecraft:mangrove_fence_gate","minecraft:bamboo_fence_gate","minecraft:crimson_fence_gate","minecraft:warped_fence_gate","minecraft:powered_rail","minecraft:detector_rail","minecraft:rail","minecraft:activator_rail","minecraft:saddle","minecraft:white_harness","minecraft:orange_harness","minecraft:magenta_harness","minecraft:light_blue_harness","minecraft:yellow_harness","minecraft:lime_harness","minecraft:pink_harness","minecraft:gray_harness","minecraft:light_gray_harness","minecraft:cyan_harness","minecraft:purple_harness","minecraft:blue_harness","minecraft:brown_harness","minecraft:green_harness","minecraft:red_harness","minecraft:black_harness","minecraft:minecart","minecraft:chest_minecart","minecraft:furnace_minecart","minecraft:tnt_minecart","minecraft:hopper_minecart","minecraft:carrot_on_a_stick","minecraft:warped_fungus_on_a_stick","minecraft:phantom_membrane","minecraft:elytra","minecraft:oak_boat","minecraft:oak_chest_boat","minecraft:spruce_boat","minecraft:spruce_chest_boat","minecraft:birch_boat","minecraft:birch_chest_boat","minecraft:jungle_boat","minecraft:jungle_chest_boat","minecraft:acacia_boat","minecraft:acacia_chest_boat","minecraft:cherry_boat","minecraft:cherry_chest_boat","minecraft:dark_oak_boat","minecraft:dark_oak_chest_boat","minecraft:pale_oak_boat","minecraft:pale_oak_chest_boat","minecraft:mangrove_boat","minecraft:mangrove_chest_boat","minecraft:bamboo_raft","minecraft:bamboo_chest_raft","minecraft:structure_block","minecraft:jigsaw","minecraft:test_block","minecraft:test_instance_block","minecraft:turtle_helmet","minecraft:turtle_scute","minecraft:armadillo_scute","minecraft:wolf_armor","minecraft:flint_and_steel","minecraft:bowl","minecraft:apple","minecraft:bow","minecraft:arrow","minecraft:coal","minecraft:charcoal","minecraft:diamond","minecraft:emerald","minecraft:lapis_lazuli","minecraft:quartz","minecraft:amethyst_shard","minecraft:raw_iron","minecraft:iron_ingot","minecraft:raw_copper","minecraft:copper_ingot","minecraft:raw_gold","minecraft:gold_ingot","minecraft:netherite_ingot","minecraft:netherite_scrap","minecraft:wooden_sword","minecraft:wooden_shovel","minecraft:wooden_pickaxe","minecraft:wooden_axe","minecraft:wooden_hoe","minecraft:copper_sword","minecraft:copper_shovel","minecraft:copper_pickaxe","minecraft:copper_axe","minecraft:copper_hoe","minecraft:stone_sword","minecraft:stone_shovel","minecraft:stone_pickaxe","minecraft:stone_axe","minecraft:stone_hoe","minecraft:golden_sword","minecraft:golden_shovel","minecraft:golden_pickaxe","minecraft:golden_axe","minecraft:golden_hoe","minecraft:iron_sword","minecraft:iron_shovel","minecraft:iron_pickaxe","minecraft:iron_axe","minecraft:iron_hoe","minecraft:diamond_sword","minecraft:diamond_shovel","minecraft:diamond_pickaxe","minecraft:diamond_axe","minecraft:diamond_hoe","minecraft:netherite_sword","minecraft:netherite_shovel","minecraft:netherite_pickaxe","minecraft:netherite_axe","minecraft:netherite_hoe","minecraft:stick","minecraft:mushroom_stew","minecraft:string","minecraft:feather","minecraft:gunpowder","minecraft:wheat_seeds","minecraft:wheat","minecraft:bread","minecraft:leather_helmet","minecraft:leather_chestplate","minecraft:leather_leggings","minecraft:leather_boots","minecraft:copper_helmet","minecraft:copper_chestplate","minecraft:copper_leggings","minecraft:copper_boots","minecraft:chainmail_helmet","minecraft:chainmail_chestplate","minecraft:chainmail_leggings","minecraft:chainmail_boots","minecraft:iron_helmet","minecraft:iron_chestplate","minecraft:iron_leggings","minecraft:iron_boots","minecraft:diamond_helmet","minecraft:diamond_chestplate","minecraft:diamond_leggings","minecraft:diamond_boots","minecraft:golden_helmet","minecraft:golden_chestplate","minecraft:golden_leggings","minecraft:golden_boots","minecraft:netherite_helmet","minecraft:netherite_chestplate","minecraft:netherite_leggings","minecraft:netherite_boots","minecraft:flint","minecraft:porkchop","minecraft:cooked_porkchop","minecraft:painting","minecraft:golden_apple","minecraft:enchanted_golden_apple","minecraft:oak_sign","minecraft:spruce_sign","minecraft:birch_sign","minecraft:jungle_sign","minecraft:acacia_sign","minecraft:cherry_sign","minecraft:dark_oak_sign","minecraft:pale_oak_sign","minecraft:mangrove_sign","minecraft:bamboo_sign","minecraft:crimson_sign","minecraft:warped_sign","minecraft:oak_hanging_sign","minecraft:spruce_hanging_sign","minecraft:birch_hanging_sign","minecraft:jungle_hanging_sign","minecraft:acacia_hanging_sign","minecraft:cherry_hanging_sign","minecraft:dark_oak_hanging_sign","minecraft:pale_oak_hanging_sign","minecraft:mangrove_hanging_sign","minecraft:bamboo_hanging_sign","minecraft:crimson_hanging_sign","minecraft:warped_hanging_sign","minecraft:bucket","minecraft:water_bucket","minecraft:lava_bucket","minecraft:powder_snow_bucket","minecraft:snowball","minecraft:leather","minecraft:milk_bucket","minecraft:pufferfish_bucket","minecraft:salmon_bucket","minecraft:cod_bucket","minecraft:tropical_fish_bucket","minecraft:axolotl_bucket","minecraft:tadpole_bucket","minecraft:brick","minecraft:clay_ball","minecraft:dried_kelp_block","minecraft:paper","minecraft:book","minecraft:slime_ball","minecraft:egg","minecraft:blue_egg","minecraft:brown_egg","minecraft:compass","minecraft:recovery_compass","minecraft:bundle","minecraft:white_bundle","minecraft:orange_bundle","minecraft:magenta_bundle","minecraft:light_blue_bundle","minecraft:yellow_bundle","minecraft:lime_bundle","minecraft:pink_bundle","minecraft:gray_bundle","minecraft:light_gray_bundle","minecraft:cyan_bundle","minecraft:purple_bundle","minecraft:blue_bundle","minecraft:brown_bundle","minecraft:green_bundle","minecraft:red_bundle","minecraft:black_bundle","minecraft:fishing_rod","minecraft:clock","minecraft:spyglass","minecraft:glowstone_dust","minecraft:cod","minecraft:salmon","minecraft:tropical_fish","minecraft:pufferfish","minecraft:cooked_cod","minecraft:cooked_salmon","minecraft:ink_sac","minecraft:glow_ink_sac","minecraft:cocoa_beans","minecraft:white_dye","minecraft:orange_dye","minecraft:magenta_dye","minecraft:light_blue_dye","minecraft:yellow_dye","minecraft:lime_dye","minecraft:pink_dye","minecraft:gray_dye","minecraft:light_gray_dye","minecraft:cyan_dye","minecraft:purple_dye","minecraft:blue_dye","minecraft:brown_dye","minecraft:green_dye","minecraft:red_dye","minecraft:black_dye","minecraft:bone_meal","minecraft:bone","minecraft:sugar","minecraft:cake","minecraft:white_bed","minecraft:orange_bed","minecraft:magenta_bed","minecraft:light_blue_bed","minecraft:yellow_bed","minecraft:lime_bed","minecraft:pink_bed","minecraft:gray_bed","minecraft:light_gray_bed","minecraft:cyan_bed","minecraft:purple_bed","minecraft:blue_bed","minecraft:brown_bed","minecraft:green_bed","minecraft:red_bed","minecraft:black_bed","minecraft:cookie","minecraft:crafter","minecraft:filled_map","minecraft:shears","minecraft:melon_slice","minecraft:dried_kelp","minecraft:pumpkin_seeds","minecraft:melon_seeds","minecraft:beef","minecraft:cooked_beef","minecraft:chicken","minecraft:cooked_chicken","minecraft:rotten_flesh","minecraft:ender_pearl","minecraft:blaze_rod","minecraft:ghast_tear","minecraft:gold_nugget","minecraft:nether_wart","minecraft:glass_bottle","minecraft:potion","minecraft:spider_eye","minecraft:fermented_spider_eye","minecraft:blaze_powder","minecraft:magma_cream","minecraft:brewing_stand","minecraft:cauldron","minecraft:ender_eye","minecraft:glistering_melon_slice","minecraft:chicken_spawn_egg","minecraft:cow_spawn_egg","minecraft:pig_spawn_egg","minecraft:sheep_spawn_egg","minecraft:camel_spawn_egg","minecraft:donkey_spawn_egg","minecraft:horse_spawn_egg","minecraft:mule_spawn_egg","minecraft:cat_spawn_egg","minecraft:parrot_spawn_egg","minecraft:wolf_spawn_egg","minecraft:armadillo_spawn_egg","minecraft:bat_spawn_egg","minecraft:bee_spawn_egg","minecraft:fox_spawn_egg","minecraft:goat_spawn_egg","minecraft:llama_spawn_egg","minecraft:ocelot_spawn_egg","minecraft:panda_spawn_egg","minecraft:polar_bear_spawn_egg","minecraft:rabbit_spawn_egg","minecraft:axolotl_spawn_egg","minecraft:cod_spawn_egg","minecraft:dolphin_spawn_egg","minecraft:frog_spawn_egg","minecraft:glow_squid_spawn_egg","minecraft:nautilus_spawn_egg","minecraft:pufferfish_spawn_egg","minecraft:salmon_spawn_egg","minecraft:squid_spawn_egg","minecraft:tadpole_spawn_egg","minecraft:tropical_fish_spawn_egg","minecraft:turtle_spawn_egg","minecraft:allay_spawn_egg","minecraft:mooshroom_spawn_egg","minecraft:sniffer_spawn_egg","minecraft:copper_golem_spawn_egg","minecraft:iron_golem_spawn_egg","minecraft:snow_golem_spawn_egg","minecraft:trader_llama_spawn_egg","minecraft:villager_spawn_egg","minecraft:wandering_trader_spawn_egg","minecraft:bogged_spawn_egg","minecraft:camel_husk_spawn_egg","minecraft:drowned_spawn_egg","minecraft:husk_spawn_egg","minecraft:parched_spawn_egg","minecraft:skeleton_spawn_egg","minecraft:skeleton_horse_spawn_egg","minecraft:stray_spawn_egg","minecraft:wither_spawn_egg","minecraft:wither_skeleton_spawn_egg","minecraft:zombie_spawn_egg","minecraft:zombie_horse_spawn_egg","minecraft:zombie_nautilus_spawn_egg","minecraft:zombie_villager_spawn_egg","minecraft:cave_spider_spawn_egg","minecraft:spider_spawn_egg","minecraft:breeze_spawn_egg","minecraft:creaking_spawn_egg","minecraft:creeper_spawn_egg","minecraft:elder_guardian_spawn_egg","minecraft:guardian_spawn_egg","minecraft:phantom_spawn_egg","minecraft:silverfish_spawn_egg","minecraft:slime_spawn_egg","minecraft:warden_spawn_egg","minecraft:witch_spawn_egg","minecraft:evoker_spawn_egg","minecraft:pillager_spawn_egg","minecraft:ravager_spawn_egg","minecraft:vindicator_spawn_egg","minecraft:vex_spawn_egg","minecraft:blaze_spawn_egg","minecraft:ghast_spawn_egg","minecraft:happy_ghast_spawn_egg","minecraft:hoglin_spawn_egg","minecraft:magma_cube_spawn_egg","minecraft:piglin_spawn_egg","minecraft:piglin_brute_spawn_egg","minecraft:strider_spawn_egg","minecraft:zoglin_spawn_egg","minecraft:zombified_piglin_spawn_egg","minecraft:ender_dragon_spawn_egg","minecraft:enderman_spawn_egg","minecraft:endermite_spawn_egg","minecraft:shulker_spawn_egg","minecraft:experience_bottle","minecraft:fire_charge","minecraft:wind_charge","minecraft:writable_book","minecraft:written_book","minecraft:breeze_rod","minecraft:mace","minecraft:item_frame","minecraft:glow_item_frame","minecraft:flower_pot","minecraft:carrot","minecraft:potato","minecraft:baked_potato","minecraft:poisonous_potato","minecraft:map","minecraft:golden_carrot","minecraft:skeleton_skull","minecraft:wither_skeleton_skull","minecraft:player_head","minecraft:zombie_head","minecraft:creeper_head","minecraft:dragon_head","minecraft:piglin_head","minecraft:nether_star","minecraft:pumpkin_pie","minecraft:firework_rocket","minecraft:firework_star","minecraft:enchanted_book","minecraft:nether_brick","minecraft:resin_brick","minecraft:prismarine_shard","minecraft:prismarine_crystals","minecraft:rabbit","minecraft:cooked_rabbit","minecraft:rabbit_stew","minecraft:rabbit_foot","minecraft:rabbit_hide","minecraft:armor_stand","minecraft:copper_horse_armor","minecraft:iron_horse_armor","minecraft:golden_horse_armor","minecraft:diamond_horse_armor","minecraft:netherite_horse_armor","minecraft:leather_horse_armor","minecraft:lead","minecraft:name_tag","minecraft:command_block_minecart","minecraft:mutton","minecraft:cooked_mutton","minecraft:white_banner","minecraft:orange_banner","minecraft:magenta_banner","minecraft:light_blue_banner","minecraft:yellow_banner","minecraft:lime_banner","minecraft:pink_banner","minecraft:gray_banner","minecraft:light_gray_banner","minecraft:cyan_banner","minecraft:purple_banner","minecraft:blue_banner","minecraft:brown_banner","minecraft:green_banner","minecraft:red_banner","minecraft:black_banner","minecraft:end_crystal","minecraft:chorus_fruit","minecraft:popped_chorus_fruit","minecraft:torchflower_seeds","minecraft:pitcher_pod","minecraft:beetroot","minecraft:beetroot_seeds","minecraft:beetroot_soup","minecraft:dragon_breath","minecraft:splash_potion","minecraft:spectral_arrow","minecraft:tipped_arrow","minecraft:lingering_potion","minecraft:shield","minecraft:wooden_spear","minecraft:stone_spear","minecraft:copper_spear","minecraft:iron_spear","minecraft:golden_spear","minecraft:diamond_spear","minecraft:netherite_spear","minecraft:totem_of_undying","minecraft:shulker_shell","minecraft:iron_nugget","minecraft:copper_nugget","minecraft:knowledge_book","minecraft:debug_stick","minecraft:music_disc_13","minecraft:music_disc_cat","minecraft:music_disc_blocks","minecraft:music_disc_chirp","minecraft:music_disc_creator","minecraft:music_disc_creator_music_box","minecraft:music_disc_far","minecraft:music_disc_lava_chicken","minecraft:music_disc_mall","minecraft:music_disc_mellohi","minecraft:music_disc_stal","minecraft:music_disc_strad","minecraft:music_disc_ward","minecraft:music_disc_11","minecraft:music_disc_wait","minecraft:music_disc_otherside","minecraft:music_disc_relic","minecraft:music_disc_5","minecraft:music_disc_pigstep","minecraft:music_disc_precipice","minecraft:music_disc_tears","minecraft:disc_fragment_5","minecraft:trident","minecraft:nautilus_shell","minecraft:iron_nautilus_armor","minecraft:golden_nautilus_armor","minecraft:diamond_nautilus_armor","minecraft:netherite_nautilus_armor","minecraft:copper_nautilus_armor","minecraft:heart_of_the_sea","minecraft:crossbow","minecraft:suspicious_stew","minecraft:loom","minecraft:flower_banner_pattern","minecraft:creeper_banner_pattern","minecraft:skull_banner_pattern","minecraft:mojang_banner_pattern","minecraft:globe_banner_pattern","minecraft:piglin_banner_pattern","minecraft:flow_banner_pattern","minecraft:guster_banner_pattern","minecraft:field_masoned_banner_pattern","minecraft:bordure_indented_banner_pattern","minecraft:goat_horn","minecraft:composter","minecraft:barrel","minecraft:smoker","minecraft:blast_furnace","minecraft:cartography_table","minecraft:fletching_table","minecraft:grindstone","minecraft:smithing_table","minecraft:stonecutter","minecraft:bell","minecraft:lantern","minecraft:soul_lantern","minecraft:copper_lantern","minecraft:exposed_copper_lantern","minecraft:weathered_copper_lantern","minecraft:oxidized_copper_lantern","minecraft:waxed_copper_lantern","minecraft:waxed_exposed_copper_lantern","minecraft:waxed_weathered_copper_lantern","minecraft:waxed_oxidized_copper_lantern","minecraft:sweet_berries","minecraft:glow_berries","minecraft:campfire","minecraft:soul_campfire","minecraft:shroomlight","minecraft:honeycomb","minecraft:bee_nest","minecraft:beehive","minecraft:honey_bottle","minecraft:honeycomb_block","minecraft:lodestone","minecraft:crying_obsidian","minecraft:blackstone","minecraft:blackstone_slab","minecraft:blackstone_stairs","minecraft:gilded_blackstone","minecraft:polished_blackstone","minecraft:polished_blackstone_slab","minecraft:polished_blackstone_stairs","minecraft:chiseled_polished_blackstone","minecraft:polished_blackstone_bricks","minecraft:polished_blackstone_brick_slab","minecraft:polished_blackstone_brick_stairs","minecraft:cracked_polished_blackstone_bricks","minecraft:respawn_anchor","minecraft:candle","minecraft:white_candle","minecraft:orange_candle","minecraft:magenta_candle","minecraft:light_blue_candle","minecraft:yellow_candle","minecraft:lime_candle","minecraft:pink_candle","minecraft:gray_candle","minecraft:light_gray_candle","minecraft:cyan_candle","minecraft:purple_candle","minecraft:blue_candle","minecraft:brown_candle","minecraft:green_candle","minecraft:red_candle","minecraft:black_candle","minecraft:small_amethyst_bud","minecraft:medium_amethyst_bud","minecraft:large_amethyst_bud","minecraft:amethyst_cluster","minecraft:pointed_dripstone","minecraft:ochre_froglight","minecraft:verdant_froglight","minecraft:pearlescent_froglight","minecraft:frogspawn","minecraft:echo_shard","minecraft:brush","minecraft:netherite_upgrade_smithing_template","minecraft:sentry_armor_trim_smithing_template","minecraft:dune_armor_trim_smithing_template","minecraft:coast_armor_trim_smithing_template","minecraft:wild_armor_trim_smithing_template","minecraft:ward_armor_trim_smithing_template","minecraft:eye_armor_trim_smithing_template","minecraft:vex_armor_trim_smithing_template","minecraft:tide_armor_trim_smithing_template","minecraft:snout_armor_trim_smithing_template","minecraft:rib_armor_trim_smithing_template","minecraft:spire_armor_trim_smithing_template","minecraft:wayfinder_armor_trim_smithing_template","minecraft:shaper_armor_trim_smithing_template","minecraft:silence_armor_trim_smithing_template","minecraft:raiser_armor_trim_smithing_template","minecraft:host_armor_trim_smithing_template","minecraft:flow_armor_trim_smithing_template","minecraft:bolt_armor_trim_smithing_template","minecraft:angler_pottery_sherd","minecraft:archer_pottery_sherd","minecraft:arms_up_pottery_sherd","minecraft:blade_pottery_sherd","minecraft:brewer_pottery_sherd","minecraft:burn_pottery_sherd","minecraft:danger_pottery_sherd","minecraft:explorer_pottery_sherd","minecraft:flow_pottery_sherd","minecraft:friend_pottery_sherd","minecraft:guster_pottery_sherd","minecraft:heart_pottery_sherd","minecraft:heartbreak_pottery_sherd","minecraft:howl_pottery_sherd","minecraft:miner_pottery_sherd","minecraft:mourner_pottery_sherd","minecraft:plenty_pottery_sherd","minecraft:prize_pottery_sherd","minecraft:scrape_pottery_sherd","minecraft:sheaf_pottery_sherd","minecraft:shelter_pottery_sherd","minecraft:skull_pottery_sherd","minecraft:snort_pottery_sherd","minecraft:copper_grate","minecraft:exposed_copper_grate","minecraft:weathered_copper_grate","minecraft:oxidized_copper_grate","minecraft:waxed_copper_grate","minecraft:waxed_exposed_copper_grate","minecraft:waxed_weathered_copper_grate","minecraft:waxed_oxidized_copper_grate","minecraft:copper_bulb","minecraft:exposed_copper_bulb","minecraft:weathered_copper_bulb","minecraft:oxidized_copper_bulb","minecraft:waxed_copper_bulb","minecraft:waxed_exposed_copper_bulb","minecraft:waxed_weathered_copper_bulb","minecraft:waxed_oxidized_copper_bulb","minecraft:copper_chest","minecraft:exposed_copper_chest","minecraft:weathered_copper_chest","minecraft:oxidized_copper_chest","minecraft:waxed_copper_chest","minecraft:waxed_exposed_copper_chest","minecraft:waxed_weathered_copper_chest","minecraft:waxed_oxidized_copper_chest","minecraft:copper_golem_statue","minecraft:exposed_copper_golem_statue","minecraft:weathered_copper_golem_statue","minecraft:oxidized_copper_golem_statue","minecraft:waxed_copper_golem_statue","minecraft:waxed_exposed_copper_golem_statue","minecraft:waxed_weathered_copper_golem_statue","minecraft:waxed_oxidized_copper_golem_statue","minecraft:trial_spawner","minecraft:trial_key","minecraft:ominous_trial_key","minecraft:vault","minecraft:ominous_bottle"]; +static ITEM_MODEL_VALUES: [&str; 1506] = ["minecraft:air","minecraft:stone","minecraft:granite","minecraft:polished_granite","minecraft:diorite","minecraft:polished_diorite","minecraft:andesite","minecraft:polished_andesite","minecraft:deepslate","minecraft:cobbled_deepslate","minecraft:polished_deepslate","minecraft:calcite","minecraft:tuff","minecraft:tuff_slab","minecraft:tuff_stairs","minecraft:tuff_wall","minecraft:chiseled_tuff","minecraft:polished_tuff","minecraft:polished_tuff_slab","minecraft:polished_tuff_stairs","minecraft:polished_tuff_wall","minecraft:tuff_bricks","minecraft:tuff_brick_slab","minecraft:tuff_brick_stairs","minecraft:tuff_brick_wall","minecraft:chiseled_tuff_bricks","minecraft:dripstone_block","minecraft:grass_block","minecraft:dirt","minecraft:coarse_dirt","minecraft:podzol","minecraft:rooted_dirt","minecraft:mud","minecraft:crimson_nylium","minecraft:warped_nylium","minecraft:cobblestone","minecraft:oak_planks","minecraft:spruce_planks","minecraft:birch_planks","minecraft:jungle_planks","minecraft:acacia_planks","minecraft:cherry_planks","minecraft:dark_oak_planks","minecraft:pale_oak_planks","minecraft:mangrove_planks","minecraft:bamboo_planks","minecraft:crimson_planks","minecraft:warped_planks","minecraft:bamboo_mosaic","minecraft:oak_sapling","minecraft:spruce_sapling","minecraft:birch_sapling","minecraft:jungle_sapling","minecraft:acacia_sapling","minecraft:cherry_sapling","minecraft:dark_oak_sapling","minecraft:pale_oak_sapling","minecraft:mangrove_propagule","minecraft:bedrock","minecraft:sand","minecraft:suspicious_sand","minecraft:suspicious_gravel","minecraft:red_sand","minecraft:gravel","minecraft:coal_ore","minecraft:deepslate_coal_ore","minecraft:iron_ore","minecraft:deepslate_iron_ore","minecraft:copper_ore","minecraft:deepslate_copper_ore","minecraft:gold_ore","minecraft:deepslate_gold_ore","minecraft:redstone_ore","minecraft:deepslate_redstone_ore","minecraft:emerald_ore","minecraft:deepslate_emerald_ore","minecraft:lapis_ore","minecraft:deepslate_lapis_ore","minecraft:diamond_ore","minecraft:deepslate_diamond_ore","minecraft:nether_gold_ore","minecraft:nether_quartz_ore","minecraft:ancient_debris","minecraft:coal_block","minecraft:raw_iron_block","minecraft:raw_copper_block","minecraft:raw_gold_block","minecraft:heavy_core","minecraft:amethyst_block","minecraft:budding_amethyst","minecraft:iron_block","minecraft:copper_block","minecraft:gold_block","minecraft:diamond_block","minecraft:netherite_block","minecraft:exposed_copper","minecraft:weathered_copper","minecraft:oxidized_copper","minecraft:chiseled_copper","minecraft:exposed_chiseled_copper","minecraft:weathered_chiseled_copper","minecraft:oxidized_chiseled_copper","minecraft:cut_copper","minecraft:exposed_cut_copper","minecraft:weathered_cut_copper","minecraft:oxidized_cut_copper","minecraft:cut_copper_stairs","minecraft:exposed_cut_copper_stairs","minecraft:weathered_cut_copper_stairs","minecraft:oxidized_cut_copper_stairs","minecraft:cut_copper_slab","minecraft:exposed_cut_copper_slab","minecraft:weathered_cut_copper_slab","minecraft:oxidized_cut_copper_slab","minecraft:waxed_copper_block","minecraft:waxed_exposed_copper","minecraft:waxed_weathered_copper","minecraft:waxed_oxidized_copper","minecraft:waxed_chiseled_copper","minecraft:waxed_exposed_chiseled_copper","minecraft:waxed_weathered_chiseled_copper","minecraft:waxed_oxidized_chiseled_copper","minecraft:waxed_cut_copper","minecraft:waxed_exposed_cut_copper","minecraft:waxed_weathered_cut_copper","minecraft:waxed_oxidized_cut_copper","minecraft:waxed_cut_copper_stairs","minecraft:waxed_exposed_cut_copper_stairs","minecraft:waxed_weathered_cut_copper_stairs","minecraft:waxed_oxidized_cut_copper_stairs","minecraft:waxed_cut_copper_slab","minecraft:waxed_exposed_cut_copper_slab","minecraft:waxed_weathered_cut_copper_slab","minecraft:waxed_oxidized_cut_copper_slab","minecraft:oak_log","minecraft:spruce_log","minecraft:birch_log","minecraft:jungle_log","minecraft:acacia_log","minecraft:cherry_log","minecraft:pale_oak_log","minecraft:dark_oak_log","minecraft:mangrove_log","minecraft:mangrove_roots","minecraft:muddy_mangrove_roots","minecraft:crimson_stem","minecraft:warped_stem","minecraft:bamboo_block","minecraft:stripped_oak_log","minecraft:stripped_spruce_log","minecraft:stripped_birch_log","minecraft:stripped_jungle_log","minecraft:stripped_acacia_log","minecraft:stripped_cherry_log","minecraft:stripped_dark_oak_log","minecraft:stripped_pale_oak_log","minecraft:stripped_mangrove_log","minecraft:stripped_crimson_stem","minecraft:stripped_warped_stem","minecraft:stripped_oak_wood","minecraft:stripped_spruce_wood","minecraft:stripped_birch_wood","minecraft:stripped_jungle_wood","minecraft:stripped_acacia_wood","minecraft:stripped_cherry_wood","minecraft:stripped_dark_oak_wood","minecraft:stripped_pale_oak_wood","minecraft:stripped_mangrove_wood","minecraft:stripped_crimson_hyphae","minecraft:stripped_warped_hyphae","minecraft:stripped_bamboo_block","minecraft:oak_wood","minecraft:spruce_wood","minecraft:birch_wood","minecraft:jungle_wood","minecraft:acacia_wood","minecraft:cherry_wood","minecraft:pale_oak_wood","minecraft:dark_oak_wood","minecraft:mangrove_wood","minecraft:crimson_hyphae","minecraft:warped_hyphae","minecraft:oak_leaves","minecraft:spruce_leaves","minecraft:birch_leaves","minecraft:jungle_leaves","minecraft:acacia_leaves","minecraft:cherry_leaves","minecraft:dark_oak_leaves","minecraft:pale_oak_leaves","minecraft:mangrove_leaves","minecraft:azalea_leaves","minecraft:flowering_azalea_leaves","minecraft:sponge","minecraft:wet_sponge","minecraft:glass","minecraft:tinted_glass","minecraft:lapis_block","minecraft:sandstone","minecraft:chiseled_sandstone","minecraft:cut_sandstone","minecraft:cobweb","minecraft:short_grass","minecraft:fern","minecraft:bush","minecraft:azalea","minecraft:flowering_azalea","minecraft:dead_bush","minecraft:firefly_bush","minecraft:short_dry_grass","minecraft:tall_dry_grass","minecraft:seagrass","minecraft:sea_pickle","minecraft:white_wool","minecraft:orange_wool","minecraft:magenta_wool","minecraft:light_blue_wool","minecraft:yellow_wool","minecraft:lime_wool","minecraft:pink_wool","minecraft:gray_wool","minecraft:light_gray_wool","minecraft:cyan_wool","minecraft:purple_wool","minecraft:blue_wool","minecraft:brown_wool","minecraft:green_wool","minecraft:red_wool","minecraft:black_wool","minecraft:dandelion","minecraft:golden_dandelion","minecraft:open_eyeblossom","minecraft:closed_eyeblossom","minecraft:poppy","minecraft:blue_orchid","minecraft:allium","minecraft:azure_bluet","minecraft:red_tulip","minecraft:orange_tulip","minecraft:white_tulip","minecraft:pink_tulip","minecraft:oxeye_daisy","minecraft:cornflower","minecraft:lily_of_the_valley","minecraft:wither_rose","minecraft:torchflower","minecraft:pitcher_plant","minecraft:spore_blossom","minecraft:brown_mushroom","minecraft:red_mushroom","minecraft:crimson_fungus","minecraft:warped_fungus","minecraft:crimson_roots","minecraft:warped_roots","minecraft:nether_sprouts","minecraft:weeping_vines","minecraft:twisting_vines","minecraft:sugar_cane","minecraft:kelp","minecraft:pink_petals","minecraft:wildflowers","minecraft:leaf_litter","minecraft:moss_carpet","minecraft:moss_block","minecraft:pale_moss_carpet","minecraft:pale_hanging_moss","minecraft:pale_moss_block","minecraft:hanging_roots","minecraft:big_dripleaf","minecraft:small_dripleaf","minecraft:bamboo","minecraft:oak_slab","minecraft:spruce_slab","minecraft:birch_slab","minecraft:jungle_slab","minecraft:acacia_slab","minecraft:cherry_slab","minecraft:dark_oak_slab","minecraft:pale_oak_slab","minecraft:mangrove_slab","minecraft:bamboo_slab","minecraft:bamboo_mosaic_slab","minecraft:crimson_slab","minecraft:warped_slab","minecraft:stone_slab","minecraft:smooth_stone_slab","minecraft:sandstone_slab","minecraft:cut_sandstone_slab","minecraft:petrified_oak_slab","minecraft:cobblestone_slab","minecraft:brick_slab","minecraft:stone_brick_slab","minecraft:mud_brick_slab","minecraft:nether_brick_slab","minecraft:quartz_slab","minecraft:red_sandstone_slab","minecraft:cut_red_sandstone_slab","minecraft:purpur_slab","minecraft:prismarine_slab","minecraft:prismarine_brick_slab","minecraft:dark_prismarine_slab","minecraft:smooth_quartz","minecraft:smooth_red_sandstone","minecraft:smooth_sandstone","minecraft:smooth_stone","minecraft:bricks","minecraft:acacia_shelf","minecraft:bamboo_shelf","minecraft:birch_shelf","minecraft:cherry_shelf","minecraft:crimson_shelf","minecraft:dark_oak_shelf","minecraft:jungle_shelf","minecraft:mangrove_shelf","minecraft:oak_shelf","minecraft:pale_oak_shelf","minecraft:spruce_shelf","minecraft:warped_shelf","minecraft:bookshelf","minecraft:chiseled_bookshelf","minecraft:decorated_pot","minecraft:mossy_cobblestone","minecraft:obsidian","minecraft:torch","minecraft:end_rod","minecraft:chorus_plant","minecraft:chorus_flower","minecraft:purpur_block","minecraft:purpur_pillar","minecraft:purpur_stairs","minecraft:spawner","minecraft:creaking_heart","minecraft:chest","minecraft:crafting_table","minecraft:farmland","minecraft:furnace","minecraft:ladder","minecraft:cobblestone_stairs","minecraft:snow","minecraft:ice","minecraft:snow_block","minecraft:cactus","minecraft:cactus_flower","minecraft:clay","minecraft:jukebox","minecraft:oak_fence","minecraft:spruce_fence","minecraft:birch_fence","minecraft:jungle_fence","minecraft:acacia_fence","minecraft:cherry_fence","minecraft:dark_oak_fence","minecraft:pale_oak_fence","minecraft:mangrove_fence","minecraft:bamboo_fence","minecraft:crimson_fence","minecraft:warped_fence","minecraft:pumpkin","minecraft:carved_pumpkin","minecraft:jack_o_lantern","minecraft:netherrack","minecraft:soul_sand","minecraft:soul_soil","minecraft:basalt","minecraft:polished_basalt","minecraft:smooth_basalt","minecraft:soul_torch","minecraft:copper_torch","minecraft:glowstone","minecraft:infested_stone","minecraft:infested_cobblestone","minecraft:infested_stone_bricks","minecraft:infested_mossy_stone_bricks","minecraft:infested_cracked_stone_bricks","minecraft:infested_chiseled_stone_bricks","minecraft:infested_deepslate","minecraft:stone_bricks","minecraft:mossy_stone_bricks","minecraft:cracked_stone_bricks","minecraft:chiseled_stone_bricks","minecraft:packed_mud","minecraft:mud_bricks","minecraft:deepslate_bricks","minecraft:cracked_deepslate_bricks","minecraft:deepslate_tiles","minecraft:cracked_deepslate_tiles","minecraft:chiseled_deepslate","minecraft:reinforced_deepslate","minecraft:brown_mushroom_block","minecraft:red_mushroom_block","minecraft:mushroom_stem","minecraft:iron_bars","minecraft:copper_bars","minecraft:exposed_copper_bars","minecraft:weathered_copper_bars","minecraft:oxidized_copper_bars","minecraft:waxed_copper_bars","minecraft:waxed_exposed_copper_bars","minecraft:waxed_weathered_copper_bars","minecraft:waxed_oxidized_copper_bars","minecraft:iron_chain","minecraft:copper_chain","minecraft:exposed_copper_chain","minecraft:weathered_copper_chain","minecraft:oxidized_copper_chain","minecraft:waxed_copper_chain","minecraft:waxed_exposed_copper_chain","minecraft:waxed_weathered_copper_chain","minecraft:waxed_oxidized_copper_chain","minecraft:glass_pane","minecraft:melon","minecraft:vine","minecraft:glow_lichen","minecraft:resin_clump","minecraft:resin_block","minecraft:resin_bricks","minecraft:resin_brick_stairs","minecraft:resin_brick_slab","minecraft:resin_brick_wall","minecraft:chiseled_resin_bricks","minecraft:brick_stairs","minecraft:stone_brick_stairs","minecraft:mud_brick_stairs","minecraft:mycelium","minecraft:lily_pad","minecraft:nether_bricks","minecraft:cracked_nether_bricks","minecraft:chiseled_nether_bricks","minecraft:nether_brick_fence","minecraft:nether_brick_stairs","minecraft:sculk","minecraft:sculk_vein","minecraft:sculk_catalyst","minecraft:sculk_shrieker","minecraft:enchanting_table","minecraft:end_portal_frame","minecraft:end_stone","minecraft:end_stone_bricks","minecraft:dragon_egg","minecraft:sandstone_stairs","minecraft:ender_chest","minecraft:emerald_block","minecraft:oak_stairs","minecraft:spruce_stairs","minecraft:birch_stairs","minecraft:jungle_stairs","minecraft:acacia_stairs","minecraft:cherry_stairs","minecraft:dark_oak_stairs","minecraft:pale_oak_stairs","minecraft:mangrove_stairs","minecraft:bamboo_stairs","minecraft:bamboo_mosaic_stairs","minecraft:crimson_stairs","minecraft:warped_stairs","minecraft:command_block","minecraft:beacon","minecraft:cobblestone_wall","minecraft:mossy_cobblestone_wall","minecraft:brick_wall","minecraft:prismarine_wall","minecraft:red_sandstone_wall","minecraft:mossy_stone_brick_wall","minecraft:granite_wall","minecraft:stone_brick_wall","minecraft:mud_brick_wall","minecraft:nether_brick_wall","minecraft:andesite_wall","minecraft:red_nether_brick_wall","minecraft:sandstone_wall","minecraft:end_stone_brick_wall","minecraft:diorite_wall","minecraft:blackstone_wall","minecraft:polished_blackstone_wall","minecraft:polished_blackstone_brick_wall","minecraft:cobbled_deepslate_wall","minecraft:polished_deepslate_wall","minecraft:deepslate_brick_wall","minecraft:deepslate_tile_wall","minecraft:anvil","minecraft:chipped_anvil","minecraft:damaged_anvil","minecraft:chiseled_quartz_block","minecraft:quartz_block","minecraft:quartz_bricks","minecraft:quartz_pillar","minecraft:quartz_stairs","minecraft:white_terracotta","minecraft:orange_terracotta","minecraft:magenta_terracotta","minecraft:light_blue_terracotta","minecraft:yellow_terracotta","minecraft:lime_terracotta","minecraft:pink_terracotta","minecraft:gray_terracotta","minecraft:light_gray_terracotta","minecraft:cyan_terracotta","minecraft:purple_terracotta","minecraft:blue_terracotta","minecraft:brown_terracotta","minecraft:green_terracotta","minecraft:red_terracotta","minecraft:black_terracotta","minecraft:barrier","minecraft:light","minecraft:hay_block","minecraft:white_carpet","minecraft:orange_carpet","minecraft:magenta_carpet","minecraft:light_blue_carpet","minecraft:yellow_carpet","minecraft:lime_carpet","minecraft:pink_carpet","minecraft:gray_carpet","minecraft:light_gray_carpet","minecraft:cyan_carpet","minecraft:purple_carpet","minecraft:blue_carpet","minecraft:brown_carpet","minecraft:green_carpet","minecraft:red_carpet","minecraft:black_carpet","minecraft:terracotta","minecraft:packed_ice","minecraft:dirt_path","minecraft:sunflower","minecraft:lilac","minecraft:rose_bush","minecraft:peony","minecraft:tall_grass","minecraft:large_fern","minecraft:white_stained_glass","minecraft:orange_stained_glass","minecraft:magenta_stained_glass","minecraft:light_blue_stained_glass","minecraft:yellow_stained_glass","minecraft:lime_stained_glass","minecraft:pink_stained_glass","minecraft:gray_stained_glass","minecraft:light_gray_stained_glass","minecraft:cyan_stained_glass","minecraft:purple_stained_glass","minecraft:blue_stained_glass","minecraft:brown_stained_glass","minecraft:green_stained_glass","minecraft:red_stained_glass","minecraft:black_stained_glass","minecraft:white_stained_glass_pane","minecraft:orange_stained_glass_pane","minecraft:magenta_stained_glass_pane","minecraft:light_blue_stained_glass_pane","minecraft:yellow_stained_glass_pane","minecraft:lime_stained_glass_pane","minecraft:pink_stained_glass_pane","minecraft:gray_stained_glass_pane","minecraft:light_gray_stained_glass_pane","minecraft:cyan_stained_glass_pane","minecraft:purple_stained_glass_pane","minecraft:blue_stained_glass_pane","minecraft:brown_stained_glass_pane","minecraft:green_stained_glass_pane","minecraft:red_stained_glass_pane","minecraft:black_stained_glass_pane","minecraft:prismarine","minecraft:prismarine_bricks","minecraft:dark_prismarine","minecraft:prismarine_stairs","minecraft:prismarine_brick_stairs","minecraft:dark_prismarine_stairs","minecraft:sea_lantern","minecraft:red_sandstone","minecraft:chiseled_red_sandstone","minecraft:cut_red_sandstone","minecraft:red_sandstone_stairs","minecraft:repeating_command_block","minecraft:chain_command_block","minecraft:magma_block","minecraft:nether_wart_block","minecraft:warped_wart_block","minecraft:red_nether_bricks","minecraft:bone_block","minecraft:structure_void","minecraft:shulker_box","minecraft:white_shulker_box","minecraft:orange_shulker_box","minecraft:magenta_shulker_box","minecraft:light_blue_shulker_box","minecraft:yellow_shulker_box","minecraft:lime_shulker_box","minecraft:pink_shulker_box","minecraft:gray_shulker_box","minecraft:light_gray_shulker_box","minecraft:cyan_shulker_box","minecraft:purple_shulker_box","minecraft:blue_shulker_box","minecraft:brown_shulker_box","minecraft:green_shulker_box","minecraft:red_shulker_box","minecraft:black_shulker_box","minecraft:white_glazed_terracotta","minecraft:orange_glazed_terracotta","minecraft:magenta_glazed_terracotta","minecraft:light_blue_glazed_terracotta","minecraft:yellow_glazed_terracotta","minecraft:lime_glazed_terracotta","minecraft:pink_glazed_terracotta","minecraft:gray_glazed_terracotta","minecraft:light_gray_glazed_terracotta","minecraft:cyan_glazed_terracotta","minecraft:purple_glazed_terracotta","minecraft:blue_glazed_terracotta","minecraft:brown_glazed_terracotta","minecraft:green_glazed_terracotta","minecraft:red_glazed_terracotta","minecraft:black_glazed_terracotta","minecraft:white_concrete","minecraft:orange_concrete","minecraft:magenta_concrete","minecraft:light_blue_concrete","minecraft:yellow_concrete","minecraft:lime_concrete","minecraft:pink_concrete","minecraft:gray_concrete","minecraft:light_gray_concrete","minecraft:cyan_concrete","minecraft:purple_concrete","minecraft:blue_concrete","minecraft:brown_concrete","minecraft:green_concrete","minecraft:red_concrete","minecraft:black_concrete","minecraft:white_concrete_powder","minecraft:orange_concrete_powder","minecraft:magenta_concrete_powder","minecraft:light_blue_concrete_powder","minecraft:yellow_concrete_powder","minecraft:lime_concrete_powder","minecraft:pink_concrete_powder","minecraft:gray_concrete_powder","minecraft:light_gray_concrete_powder","minecraft:cyan_concrete_powder","minecraft:purple_concrete_powder","minecraft:blue_concrete_powder","minecraft:brown_concrete_powder","minecraft:green_concrete_powder","minecraft:red_concrete_powder","minecraft:black_concrete_powder","minecraft:turtle_egg","minecraft:sniffer_egg","minecraft:dried_ghast","minecraft:dead_tube_coral_block","minecraft:dead_brain_coral_block","minecraft:dead_bubble_coral_block","minecraft:dead_fire_coral_block","minecraft:dead_horn_coral_block","minecraft:tube_coral_block","minecraft:brain_coral_block","minecraft:bubble_coral_block","minecraft:fire_coral_block","minecraft:horn_coral_block","minecraft:tube_coral","minecraft:brain_coral","minecraft:bubble_coral","minecraft:fire_coral","minecraft:horn_coral","minecraft:dead_brain_coral","minecraft:dead_bubble_coral","minecraft:dead_fire_coral","minecraft:dead_horn_coral","minecraft:dead_tube_coral","minecraft:tube_coral_fan","minecraft:brain_coral_fan","minecraft:bubble_coral_fan","minecraft:fire_coral_fan","minecraft:horn_coral_fan","minecraft:dead_tube_coral_fan","minecraft:dead_brain_coral_fan","minecraft:dead_bubble_coral_fan","minecraft:dead_fire_coral_fan","minecraft:dead_horn_coral_fan","minecraft:blue_ice","minecraft:conduit","minecraft:polished_granite_stairs","minecraft:smooth_red_sandstone_stairs","minecraft:mossy_stone_brick_stairs","minecraft:polished_diorite_stairs","minecraft:mossy_cobblestone_stairs","minecraft:end_stone_brick_stairs","minecraft:stone_stairs","minecraft:smooth_sandstone_stairs","minecraft:smooth_quartz_stairs","minecraft:granite_stairs","minecraft:andesite_stairs","minecraft:red_nether_brick_stairs","minecraft:polished_andesite_stairs","minecraft:diorite_stairs","minecraft:cobbled_deepslate_stairs","minecraft:polished_deepslate_stairs","minecraft:deepslate_brick_stairs","minecraft:deepslate_tile_stairs","minecraft:polished_granite_slab","minecraft:smooth_red_sandstone_slab","minecraft:mossy_stone_brick_slab","minecraft:polished_diorite_slab","minecraft:mossy_cobblestone_slab","minecraft:end_stone_brick_slab","minecraft:smooth_sandstone_slab","minecraft:smooth_quartz_slab","minecraft:granite_slab","minecraft:andesite_slab","minecraft:red_nether_brick_slab","minecraft:polished_andesite_slab","minecraft:diorite_slab","minecraft:cobbled_deepslate_slab","minecraft:polished_deepslate_slab","minecraft:deepslate_brick_slab","minecraft:deepslate_tile_slab","minecraft:scaffolding","minecraft:redstone","minecraft:redstone_torch","minecraft:redstone_block","minecraft:repeater","minecraft:comparator","minecraft:piston","minecraft:sticky_piston","minecraft:slime_block","minecraft:honey_block","minecraft:observer","minecraft:hopper","minecraft:dispenser","minecraft:dropper","minecraft:lectern","minecraft:target","minecraft:lever","minecraft:lightning_rod","minecraft:exposed_lightning_rod","minecraft:weathered_lightning_rod","minecraft:oxidized_lightning_rod","minecraft:waxed_lightning_rod","minecraft:waxed_exposed_lightning_rod","minecraft:waxed_weathered_lightning_rod","minecraft:waxed_oxidized_lightning_rod","minecraft:daylight_detector","minecraft:sculk_sensor","minecraft:calibrated_sculk_sensor","minecraft:tripwire_hook","minecraft:trapped_chest","minecraft:tnt","minecraft:redstone_lamp","minecraft:note_block","minecraft:stone_button","minecraft:polished_blackstone_button","minecraft:oak_button","minecraft:spruce_button","minecraft:birch_button","minecraft:jungle_button","minecraft:acacia_button","minecraft:cherry_button","minecraft:dark_oak_button","minecraft:pale_oak_button","minecraft:mangrove_button","minecraft:bamboo_button","minecraft:crimson_button","minecraft:warped_button","minecraft:stone_pressure_plate","minecraft:polished_blackstone_pressure_plate","minecraft:light_weighted_pressure_plate","minecraft:heavy_weighted_pressure_plate","minecraft:oak_pressure_plate","minecraft:spruce_pressure_plate","minecraft:birch_pressure_plate","minecraft:jungle_pressure_plate","minecraft:acacia_pressure_plate","minecraft:cherry_pressure_plate","minecraft:dark_oak_pressure_plate","minecraft:pale_oak_pressure_plate","minecraft:mangrove_pressure_plate","minecraft:bamboo_pressure_plate","minecraft:crimson_pressure_plate","minecraft:warped_pressure_plate","minecraft:iron_door","minecraft:oak_door","minecraft:spruce_door","minecraft:birch_door","minecraft:jungle_door","minecraft:acacia_door","minecraft:cherry_door","minecraft:dark_oak_door","minecraft:pale_oak_door","minecraft:mangrove_door","minecraft:bamboo_door","minecraft:crimson_door","minecraft:warped_door","minecraft:copper_door","minecraft:exposed_copper_door","minecraft:weathered_copper_door","minecraft:oxidized_copper_door","minecraft:waxed_copper_door","minecraft:waxed_exposed_copper_door","minecraft:waxed_weathered_copper_door","minecraft:waxed_oxidized_copper_door","minecraft:iron_trapdoor","minecraft:oak_trapdoor","minecraft:spruce_trapdoor","minecraft:birch_trapdoor","minecraft:jungle_trapdoor","minecraft:acacia_trapdoor","minecraft:cherry_trapdoor","minecraft:dark_oak_trapdoor","minecraft:pale_oak_trapdoor","minecraft:mangrove_trapdoor","minecraft:bamboo_trapdoor","minecraft:crimson_trapdoor","minecraft:warped_trapdoor","minecraft:copper_trapdoor","minecraft:exposed_copper_trapdoor","minecraft:weathered_copper_trapdoor","minecraft:oxidized_copper_trapdoor","minecraft:waxed_copper_trapdoor","minecraft:waxed_exposed_copper_trapdoor","minecraft:waxed_weathered_copper_trapdoor","minecraft:waxed_oxidized_copper_trapdoor","minecraft:oak_fence_gate","minecraft:spruce_fence_gate","minecraft:birch_fence_gate","minecraft:jungle_fence_gate","minecraft:acacia_fence_gate","minecraft:cherry_fence_gate","minecraft:dark_oak_fence_gate","minecraft:pale_oak_fence_gate","minecraft:mangrove_fence_gate","minecraft:bamboo_fence_gate","minecraft:crimson_fence_gate","minecraft:warped_fence_gate","minecraft:powered_rail","minecraft:detector_rail","minecraft:rail","minecraft:activator_rail","minecraft:saddle","minecraft:white_harness","minecraft:orange_harness","minecraft:magenta_harness","minecraft:light_blue_harness","minecraft:yellow_harness","minecraft:lime_harness","minecraft:pink_harness","minecraft:gray_harness","minecraft:light_gray_harness","minecraft:cyan_harness","minecraft:purple_harness","minecraft:blue_harness","minecraft:brown_harness","minecraft:green_harness","minecraft:red_harness","minecraft:black_harness","minecraft:minecart","minecraft:chest_minecart","minecraft:furnace_minecart","minecraft:tnt_minecart","minecraft:hopper_minecart","minecraft:carrot_on_a_stick","minecraft:warped_fungus_on_a_stick","minecraft:phantom_membrane","minecraft:elytra","minecraft:oak_boat","minecraft:oak_chest_boat","minecraft:spruce_boat","minecraft:spruce_chest_boat","minecraft:birch_boat","minecraft:birch_chest_boat","minecraft:jungle_boat","minecraft:jungle_chest_boat","minecraft:acacia_boat","minecraft:acacia_chest_boat","minecraft:cherry_boat","minecraft:cherry_chest_boat","minecraft:dark_oak_boat","minecraft:dark_oak_chest_boat","minecraft:pale_oak_boat","minecraft:pale_oak_chest_boat","minecraft:mangrove_boat","minecraft:mangrove_chest_boat","minecraft:bamboo_raft","minecraft:bamboo_chest_raft","minecraft:structure_block","minecraft:jigsaw","minecraft:test_block","minecraft:test_instance_block","minecraft:turtle_helmet","minecraft:turtle_scute","minecraft:armadillo_scute","minecraft:wolf_armor","minecraft:flint_and_steel","minecraft:bowl","minecraft:apple","minecraft:bow","minecraft:arrow","minecraft:coal","minecraft:charcoal","minecraft:diamond","minecraft:emerald","minecraft:lapis_lazuli","minecraft:quartz","minecraft:amethyst_shard","minecraft:raw_iron","minecraft:iron_ingot","minecraft:raw_copper","minecraft:copper_ingot","minecraft:raw_gold","minecraft:gold_ingot","minecraft:netherite_ingot","minecraft:netherite_scrap","minecraft:wooden_sword","minecraft:wooden_shovel","minecraft:wooden_pickaxe","minecraft:wooden_axe","minecraft:wooden_hoe","minecraft:copper_sword","minecraft:copper_shovel","minecraft:copper_pickaxe","minecraft:copper_axe","minecraft:copper_hoe","minecraft:stone_sword","minecraft:stone_shovel","minecraft:stone_pickaxe","minecraft:stone_axe","minecraft:stone_hoe","minecraft:golden_sword","minecraft:golden_shovel","minecraft:golden_pickaxe","minecraft:golden_axe","minecraft:golden_hoe","minecraft:iron_sword","minecraft:iron_shovel","minecraft:iron_pickaxe","minecraft:iron_axe","minecraft:iron_hoe","minecraft:diamond_sword","minecraft:diamond_shovel","minecraft:diamond_pickaxe","minecraft:diamond_axe","minecraft:diamond_hoe","minecraft:netherite_sword","minecraft:netherite_shovel","minecraft:netherite_pickaxe","minecraft:netherite_axe","minecraft:netherite_hoe","minecraft:stick","minecraft:mushroom_stew","minecraft:string","minecraft:feather","minecraft:gunpowder","minecraft:wheat_seeds","minecraft:wheat","minecraft:bread","minecraft:leather_helmet","minecraft:leather_chestplate","minecraft:leather_leggings","minecraft:leather_boots","minecraft:copper_helmet","minecraft:copper_chestplate","minecraft:copper_leggings","minecraft:copper_boots","minecraft:chainmail_helmet","minecraft:chainmail_chestplate","minecraft:chainmail_leggings","minecraft:chainmail_boots","minecraft:iron_helmet","minecraft:iron_chestplate","minecraft:iron_leggings","minecraft:iron_boots","minecraft:diamond_helmet","minecraft:diamond_chestplate","minecraft:diamond_leggings","minecraft:diamond_boots","minecraft:golden_helmet","minecraft:golden_chestplate","minecraft:golden_leggings","minecraft:golden_boots","minecraft:netherite_helmet","minecraft:netherite_chestplate","minecraft:netherite_leggings","minecraft:netherite_boots","minecraft:flint","minecraft:porkchop","minecraft:cooked_porkchop","minecraft:painting","minecraft:golden_apple","minecraft:enchanted_golden_apple","minecraft:oak_sign","minecraft:spruce_sign","minecraft:birch_sign","minecraft:jungle_sign","minecraft:acacia_sign","minecraft:cherry_sign","minecraft:dark_oak_sign","minecraft:pale_oak_sign","minecraft:mangrove_sign","minecraft:bamboo_sign","minecraft:crimson_sign","minecraft:warped_sign","minecraft:oak_hanging_sign","minecraft:spruce_hanging_sign","minecraft:birch_hanging_sign","minecraft:jungle_hanging_sign","minecraft:acacia_hanging_sign","minecraft:cherry_hanging_sign","minecraft:dark_oak_hanging_sign","minecraft:pale_oak_hanging_sign","minecraft:mangrove_hanging_sign","minecraft:bamboo_hanging_sign","minecraft:crimson_hanging_sign","minecraft:warped_hanging_sign","minecraft:bucket","minecraft:water_bucket","minecraft:lava_bucket","minecraft:powder_snow_bucket","minecraft:snowball","minecraft:leather","minecraft:milk_bucket","minecraft:pufferfish_bucket","minecraft:salmon_bucket","minecraft:cod_bucket","minecraft:tropical_fish_bucket","minecraft:axolotl_bucket","minecraft:tadpole_bucket","minecraft:brick","minecraft:clay_ball","minecraft:dried_kelp_block","minecraft:paper","minecraft:book","minecraft:slime_ball","minecraft:egg","minecraft:blue_egg","minecraft:brown_egg","minecraft:compass","minecraft:recovery_compass","minecraft:bundle","minecraft:white_bundle","minecraft:orange_bundle","minecraft:magenta_bundle","minecraft:light_blue_bundle","minecraft:yellow_bundle","minecraft:lime_bundle","minecraft:pink_bundle","minecraft:gray_bundle","minecraft:light_gray_bundle","minecraft:cyan_bundle","minecraft:purple_bundle","minecraft:blue_bundle","minecraft:brown_bundle","minecraft:green_bundle","minecraft:red_bundle","minecraft:black_bundle","minecraft:fishing_rod","minecraft:clock","minecraft:spyglass","minecraft:glowstone_dust","minecraft:cod","minecraft:salmon","minecraft:tropical_fish","minecraft:pufferfish","minecraft:cooked_cod","minecraft:cooked_salmon","minecraft:ink_sac","minecraft:glow_ink_sac","minecraft:cocoa_beans","minecraft:white_dye","minecraft:orange_dye","minecraft:magenta_dye","minecraft:light_blue_dye","minecraft:yellow_dye","minecraft:lime_dye","minecraft:pink_dye","minecraft:gray_dye","minecraft:light_gray_dye","minecraft:cyan_dye","minecraft:purple_dye","minecraft:blue_dye","minecraft:brown_dye","minecraft:green_dye","minecraft:red_dye","minecraft:black_dye","minecraft:bone_meal","minecraft:bone","minecraft:sugar","minecraft:cake","minecraft:white_bed","minecraft:orange_bed","minecraft:magenta_bed","minecraft:light_blue_bed","minecraft:yellow_bed","minecraft:lime_bed","minecraft:pink_bed","minecraft:gray_bed","minecraft:light_gray_bed","minecraft:cyan_bed","minecraft:purple_bed","minecraft:blue_bed","minecraft:brown_bed","minecraft:green_bed","minecraft:red_bed","minecraft:black_bed","minecraft:cookie","minecraft:crafter","minecraft:filled_map","minecraft:shears","minecraft:melon_slice","minecraft:dried_kelp","minecraft:pumpkin_seeds","minecraft:melon_seeds","minecraft:beef","minecraft:cooked_beef","minecraft:chicken","minecraft:cooked_chicken","minecraft:rotten_flesh","minecraft:ender_pearl","minecraft:blaze_rod","minecraft:ghast_tear","minecraft:gold_nugget","minecraft:nether_wart","minecraft:glass_bottle","minecraft:potion","minecraft:spider_eye","minecraft:fermented_spider_eye","minecraft:blaze_powder","minecraft:magma_cream","minecraft:brewing_stand","minecraft:cauldron","minecraft:ender_eye","minecraft:glistering_melon_slice","minecraft:chicken_spawn_egg","minecraft:cow_spawn_egg","minecraft:pig_spawn_egg","minecraft:sheep_spawn_egg","minecraft:camel_spawn_egg","minecraft:donkey_spawn_egg","minecraft:horse_spawn_egg","minecraft:mule_spawn_egg","minecraft:cat_spawn_egg","minecraft:parrot_spawn_egg","minecraft:wolf_spawn_egg","minecraft:armadillo_spawn_egg","minecraft:bat_spawn_egg","minecraft:bee_spawn_egg","minecraft:fox_spawn_egg","minecraft:goat_spawn_egg","minecraft:llama_spawn_egg","minecraft:ocelot_spawn_egg","minecraft:panda_spawn_egg","minecraft:polar_bear_spawn_egg","minecraft:rabbit_spawn_egg","minecraft:axolotl_spawn_egg","minecraft:cod_spawn_egg","minecraft:dolphin_spawn_egg","minecraft:frog_spawn_egg","minecraft:glow_squid_spawn_egg","minecraft:nautilus_spawn_egg","minecraft:pufferfish_spawn_egg","minecraft:salmon_spawn_egg","minecraft:squid_spawn_egg","minecraft:tadpole_spawn_egg","minecraft:tropical_fish_spawn_egg","minecraft:turtle_spawn_egg","minecraft:allay_spawn_egg","minecraft:mooshroom_spawn_egg","minecraft:sniffer_spawn_egg","minecraft:copper_golem_spawn_egg","minecraft:iron_golem_spawn_egg","minecraft:snow_golem_spawn_egg","minecraft:trader_llama_spawn_egg","minecraft:villager_spawn_egg","minecraft:wandering_trader_spawn_egg","minecraft:bogged_spawn_egg","minecraft:camel_husk_spawn_egg","minecraft:drowned_spawn_egg","minecraft:husk_spawn_egg","minecraft:parched_spawn_egg","minecraft:skeleton_spawn_egg","minecraft:skeleton_horse_spawn_egg","minecraft:stray_spawn_egg","minecraft:wither_spawn_egg","minecraft:wither_skeleton_spawn_egg","minecraft:zombie_spawn_egg","minecraft:zombie_horse_spawn_egg","minecraft:zombie_nautilus_spawn_egg","minecraft:zombie_villager_spawn_egg","minecraft:cave_spider_spawn_egg","minecraft:spider_spawn_egg","minecraft:breeze_spawn_egg","minecraft:creaking_spawn_egg","minecraft:creeper_spawn_egg","minecraft:elder_guardian_spawn_egg","minecraft:guardian_spawn_egg","minecraft:phantom_spawn_egg","minecraft:silverfish_spawn_egg","minecraft:slime_spawn_egg","minecraft:warden_spawn_egg","minecraft:witch_spawn_egg","minecraft:evoker_spawn_egg","minecraft:pillager_spawn_egg","minecraft:ravager_spawn_egg","minecraft:vindicator_spawn_egg","minecraft:vex_spawn_egg","minecraft:blaze_spawn_egg","minecraft:ghast_spawn_egg","minecraft:happy_ghast_spawn_egg","minecraft:hoglin_spawn_egg","minecraft:magma_cube_spawn_egg","minecraft:piglin_spawn_egg","minecraft:piglin_brute_spawn_egg","minecraft:strider_spawn_egg","minecraft:zoglin_spawn_egg","minecraft:zombified_piglin_spawn_egg","minecraft:ender_dragon_spawn_egg","minecraft:enderman_spawn_egg","minecraft:endermite_spawn_egg","minecraft:shulker_spawn_egg","minecraft:experience_bottle","minecraft:fire_charge","minecraft:wind_charge","minecraft:writable_book","minecraft:written_book","minecraft:breeze_rod","minecraft:mace","minecraft:item_frame","minecraft:glow_item_frame","minecraft:flower_pot","minecraft:carrot","minecraft:potato","minecraft:baked_potato","minecraft:poisonous_potato","minecraft:map","minecraft:golden_carrot","minecraft:skeleton_skull","minecraft:wither_skeleton_skull","minecraft:player_head","minecraft:zombie_head","minecraft:creeper_head","minecraft:dragon_head","minecraft:piglin_head","minecraft:nether_star","minecraft:pumpkin_pie","minecraft:firework_rocket","minecraft:firework_star","minecraft:enchanted_book","minecraft:nether_brick","minecraft:resin_brick","minecraft:prismarine_shard","minecraft:prismarine_crystals","minecraft:rabbit","minecraft:cooked_rabbit","minecraft:rabbit_stew","minecraft:rabbit_foot","minecraft:rabbit_hide","minecraft:armor_stand","minecraft:copper_horse_armor","minecraft:iron_horse_armor","minecraft:golden_horse_armor","minecraft:diamond_horse_armor","minecraft:netherite_horse_armor","minecraft:leather_horse_armor","minecraft:lead","minecraft:name_tag","minecraft:command_block_minecart","minecraft:mutton","minecraft:cooked_mutton","minecraft:white_banner","minecraft:orange_banner","minecraft:magenta_banner","minecraft:light_blue_banner","minecraft:yellow_banner","minecraft:lime_banner","minecraft:pink_banner","minecraft:gray_banner","minecraft:light_gray_banner","minecraft:cyan_banner","minecraft:purple_banner","minecraft:blue_banner","minecraft:brown_banner","minecraft:green_banner","minecraft:red_banner","minecraft:black_banner","minecraft:end_crystal","minecraft:chorus_fruit","minecraft:popped_chorus_fruit","minecraft:torchflower_seeds","minecraft:pitcher_pod","minecraft:beetroot","minecraft:beetroot_seeds","minecraft:beetroot_soup","minecraft:dragon_breath","minecraft:splash_potion","minecraft:spectral_arrow","minecraft:tipped_arrow","minecraft:lingering_potion","minecraft:shield","minecraft:wooden_spear","minecraft:stone_spear","minecraft:copper_spear","minecraft:iron_spear","minecraft:golden_spear","minecraft:diamond_spear","minecraft:netherite_spear","minecraft:totem_of_undying","minecraft:shulker_shell","minecraft:iron_nugget","minecraft:copper_nugget","minecraft:knowledge_book","minecraft:debug_stick","minecraft:music_disc_13","minecraft:music_disc_cat","minecraft:music_disc_blocks","minecraft:music_disc_chirp","minecraft:music_disc_creator","minecraft:music_disc_creator_music_box","minecraft:music_disc_far","minecraft:music_disc_lava_chicken","minecraft:music_disc_mall","minecraft:music_disc_mellohi","minecraft:music_disc_stal","minecraft:music_disc_strad","minecraft:music_disc_ward","minecraft:music_disc_11","minecraft:music_disc_wait","minecraft:music_disc_otherside","minecraft:music_disc_relic","minecraft:music_disc_5","minecraft:music_disc_pigstep","minecraft:music_disc_precipice","minecraft:music_disc_tears","minecraft:disc_fragment_5","minecraft:trident","minecraft:nautilus_shell","minecraft:iron_nautilus_armor","minecraft:golden_nautilus_armor","minecraft:diamond_nautilus_armor","minecraft:netherite_nautilus_armor","minecraft:copper_nautilus_armor","minecraft:heart_of_the_sea","minecraft:crossbow","minecraft:suspicious_stew","minecraft:loom","minecraft:flower_banner_pattern","minecraft:creeper_banner_pattern","minecraft:skull_banner_pattern","minecraft:mojang_banner_pattern","minecraft:globe_banner_pattern","minecraft:piglin_banner_pattern","minecraft:flow_banner_pattern","minecraft:guster_banner_pattern","minecraft:field_masoned_banner_pattern","minecraft:bordure_indented_banner_pattern","minecraft:goat_horn","minecraft:composter","minecraft:barrel","minecraft:smoker","minecraft:blast_furnace","minecraft:cartography_table","minecraft:fletching_table","minecraft:grindstone","minecraft:smithing_table","minecraft:stonecutter","minecraft:bell","minecraft:lantern","minecraft:soul_lantern","minecraft:copper_lantern","minecraft:exposed_copper_lantern","minecraft:weathered_copper_lantern","minecraft:oxidized_copper_lantern","minecraft:waxed_copper_lantern","minecraft:waxed_exposed_copper_lantern","minecraft:waxed_weathered_copper_lantern","minecraft:waxed_oxidized_copper_lantern","minecraft:sweet_berries","minecraft:glow_berries","minecraft:campfire","minecraft:soul_campfire","minecraft:shroomlight","minecraft:honeycomb","minecraft:bee_nest","minecraft:beehive","minecraft:honey_bottle","minecraft:honeycomb_block","minecraft:lodestone","minecraft:crying_obsidian","minecraft:blackstone","minecraft:blackstone_slab","minecraft:blackstone_stairs","minecraft:gilded_blackstone","minecraft:polished_blackstone","minecraft:polished_blackstone_slab","minecraft:polished_blackstone_stairs","minecraft:chiseled_polished_blackstone","minecraft:polished_blackstone_bricks","minecraft:polished_blackstone_brick_slab","minecraft:polished_blackstone_brick_stairs","minecraft:cracked_polished_blackstone_bricks","minecraft:respawn_anchor","minecraft:candle","minecraft:white_candle","minecraft:orange_candle","minecraft:magenta_candle","minecraft:light_blue_candle","minecraft:yellow_candle","minecraft:lime_candle","minecraft:pink_candle","minecraft:gray_candle","minecraft:light_gray_candle","minecraft:cyan_candle","minecraft:purple_candle","minecraft:blue_candle","minecraft:brown_candle","minecraft:green_candle","minecraft:red_candle","minecraft:black_candle","minecraft:small_amethyst_bud","minecraft:medium_amethyst_bud","minecraft:large_amethyst_bud","minecraft:amethyst_cluster","minecraft:pointed_dripstone","minecraft:ochre_froglight","minecraft:verdant_froglight","minecraft:pearlescent_froglight","minecraft:frogspawn","minecraft:echo_shard","minecraft:brush","minecraft:netherite_upgrade_smithing_template","minecraft:sentry_armor_trim_smithing_template","minecraft:dune_armor_trim_smithing_template","minecraft:coast_armor_trim_smithing_template","minecraft:wild_armor_trim_smithing_template","minecraft:ward_armor_trim_smithing_template","minecraft:eye_armor_trim_smithing_template","minecraft:vex_armor_trim_smithing_template","minecraft:tide_armor_trim_smithing_template","minecraft:snout_armor_trim_smithing_template","minecraft:rib_armor_trim_smithing_template","minecraft:spire_armor_trim_smithing_template","minecraft:wayfinder_armor_trim_smithing_template","minecraft:shaper_armor_trim_smithing_template","minecraft:silence_armor_trim_smithing_template","minecraft:raiser_armor_trim_smithing_template","minecraft:host_armor_trim_smithing_template","minecraft:flow_armor_trim_smithing_template","minecraft:bolt_armor_trim_smithing_template","minecraft:angler_pottery_sherd","minecraft:archer_pottery_sherd","minecraft:arms_up_pottery_sherd","minecraft:blade_pottery_sherd","minecraft:brewer_pottery_sherd","minecraft:burn_pottery_sherd","minecraft:danger_pottery_sherd","minecraft:explorer_pottery_sherd","minecraft:flow_pottery_sherd","minecraft:friend_pottery_sherd","minecraft:guster_pottery_sherd","minecraft:heart_pottery_sherd","minecraft:heartbreak_pottery_sherd","minecraft:howl_pottery_sherd","minecraft:miner_pottery_sherd","minecraft:mourner_pottery_sherd","minecraft:plenty_pottery_sherd","minecraft:prize_pottery_sherd","minecraft:scrape_pottery_sherd","minecraft:sheaf_pottery_sherd","minecraft:shelter_pottery_sherd","minecraft:skull_pottery_sherd","minecraft:snort_pottery_sherd","minecraft:copper_grate","minecraft:exposed_copper_grate","minecraft:weathered_copper_grate","minecraft:oxidized_copper_grate","minecraft:waxed_copper_grate","minecraft:waxed_exposed_copper_grate","minecraft:waxed_weathered_copper_grate","minecraft:waxed_oxidized_copper_grate","minecraft:copper_bulb","minecraft:exposed_copper_bulb","minecraft:weathered_copper_bulb","minecraft:oxidized_copper_bulb","minecraft:waxed_copper_bulb","minecraft:waxed_exposed_copper_bulb","minecraft:waxed_weathered_copper_bulb","minecraft:waxed_oxidized_copper_bulb","minecraft:copper_chest","minecraft:exposed_copper_chest","minecraft:weathered_copper_chest","minecraft:oxidized_copper_chest","minecraft:waxed_copper_chest","minecraft:waxed_exposed_copper_chest","minecraft:waxed_weathered_copper_chest","minecraft:waxed_oxidized_copper_chest","minecraft:copper_golem_statue","minecraft:exposed_copper_golem_statue","minecraft:weathered_copper_golem_statue","minecraft:oxidized_copper_golem_statue","minecraft:waxed_copper_golem_statue","minecraft:waxed_exposed_copper_golem_statue","minecraft:waxed_weathered_copper_golem_statue","minecraft:waxed_oxidized_copper_golem_statue","minecraft:trial_spawner","minecraft:trial_key","minecraft:ominous_trial_key","minecraft:vault","minecraft:ominous_bottle"]; impl DefaultableComponent for ItemModel { fn default_for_item(item: ItemKind) -> Option<Self> { let value = ITEM_MODEL_VALUES[item as usize]; @@ -2066,7 +2118,7 @@ impl DefaultableComponent for ItemModel { } } #[rustfmt::skip] -static ITEM_NAME_VALUES: [&str; 1505] = ["block.minecraft.air","block.minecraft.stone","block.minecraft.granite","block.minecraft.polished_granite","block.minecraft.diorite","block.minecraft.polished_diorite","block.minecraft.andesite","block.minecraft.polished_andesite","block.minecraft.deepslate","block.minecraft.cobbled_deepslate","block.minecraft.polished_deepslate","block.minecraft.calcite","block.minecraft.tuff","block.minecraft.tuff_slab","block.minecraft.tuff_stairs","block.minecraft.tuff_wall","block.minecraft.chiseled_tuff","block.minecraft.polished_tuff","block.minecraft.polished_tuff_slab","block.minecraft.polished_tuff_stairs","block.minecraft.polished_tuff_wall","block.minecraft.tuff_bricks","block.minecraft.tuff_brick_slab","block.minecraft.tuff_brick_stairs","block.minecraft.tuff_brick_wall","block.minecraft.chiseled_tuff_bricks","block.minecraft.dripstone_block","block.minecraft.grass_block","block.minecraft.dirt","block.minecraft.coarse_dirt","block.minecraft.podzol","block.minecraft.rooted_dirt","block.minecraft.mud","block.minecraft.crimson_nylium","block.minecraft.warped_nylium","block.minecraft.cobblestone","block.minecraft.oak_planks","block.minecraft.spruce_planks","block.minecraft.birch_planks","block.minecraft.jungle_planks","block.minecraft.acacia_planks","block.minecraft.cherry_planks","block.minecraft.dark_oak_planks","block.minecraft.pale_oak_planks","block.minecraft.mangrove_planks","block.minecraft.bamboo_planks","block.minecraft.crimson_planks","block.minecraft.warped_planks","block.minecraft.bamboo_mosaic","block.minecraft.oak_sapling","block.minecraft.spruce_sapling","block.minecraft.birch_sapling","block.minecraft.jungle_sapling","block.minecraft.acacia_sapling","block.minecraft.cherry_sapling","block.minecraft.dark_oak_sapling","block.minecraft.pale_oak_sapling","block.minecraft.mangrove_propagule","block.minecraft.bedrock","block.minecraft.sand","block.minecraft.suspicious_sand","block.minecraft.suspicious_gravel","block.minecraft.red_sand","block.minecraft.gravel","block.minecraft.coal_ore","block.minecraft.deepslate_coal_ore","block.minecraft.iron_ore","block.minecraft.deepslate_iron_ore","block.minecraft.copper_ore","block.minecraft.deepslate_copper_ore","block.minecraft.gold_ore","block.minecraft.deepslate_gold_ore","block.minecraft.redstone_ore","block.minecraft.deepslate_redstone_ore","block.minecraft.emerald_ore","block.minecraft.deepslate_emerald_ore","block.minecraft.lapis_ore","block.minecraft.deepslate_lapis_ore","block.minecraft.diamond_ore","block.minecraft.deepslate_diamond_ore","block.minecraft.nether_gold_ore","block.minecraft.nether_quartz_ore","block.minecraft.ancient_debris","block.minecraft.coal_block","block.minecraft.raw_iron_block","block.minecraft.raw_copper_block","block.minecraft.raw_gold_block","block.minecraft.heavy_core","block.minecraft.amethyst_block","block.minecraft.budding_amethyst","block.minecraft.iron_block","block.minecraft.copper_block","block.minecraft.gold_block","block.minecraft.diamond_block","block.minecraft.netherite_block","block.minecraft.exposed_copper","block.minecraft.weathered_copper","block.minecraft.oxidized_copper","block.minecraft.chiseled_copper","block.minecraft.exposed_chiseled_copper","block.minecraft.weathered_chiseled_copper","block.minecraft.oxidized_chiseled_copper","block.minecraft.cut_copper","block.minecraft.exposed_cut_copper","block.minecraft.weathered_cut_copper","block.minecraft.oxidized_cut_copper","block.minecraft.cut_copper_stairs","block.minecraft.exposed_cut_copper_stairs","block.minecraft.weathered_cut_copper_stairs","block.minecraft.oxidized_cut_copper_stairs","block.minecraft.cut_copper_slab","block.minecraft.exposed_cut_copper_slab","block.minecraft.weathered_cut_copper_slab","block.minecraft.oxidized_cut_copper_slab","block.minecraft.waxed_copper_block","block.minecraft.waxed_exposed_copper","block.minecraft.waxed_weathered_copper","block.minecraft.waxed_oxidized_copper","block.minecraft.waxed_chiseled_copper","block.minecraft.waxed_exposed_chiseled_copper","block.minecraft.waxed_weathered_chiseled_copper","block.minecraft.waxed_oxidized_chiseled_copper","block.minecraft.waxed_cut_copper","block.minecraft.waxed_exposed_cut_copper","block.minecraft.waxed_weathered_cut_copper","block.minecraft.waxed_oxidized_cut_copper","block.minecraft.waxed_cut_copper_stairs","block.minecraft.waxed_exposed_cut_copper_stairs","block.minecraft.waxed_weathered_cut_copper_stairs","block.minecraft.waxed_oxidized_cut_copper_stairs","block.minecraft.waxed_cut_copper_slab","block.minecraft.waxed_exposed_cut_copper_slab","block.minecraft.waxed_weathered_cut_copper_slab","block.minecraft.waxed_oxidized_cut_copper_slab","block.minecraft.oak_log","block.minecraft.spruce_log","block.minecraft.birch_log","block.minecraft.jungle_log","block.minecraft.acacia_log","block.minecraft.cherry_log","block.minecraft.pale_oak_log","block.minecraft.dark_oak_log","block.minecraft.mangrove_log","block.minecraft.mangrove_roots","block.minecraft.muddy_mangrove_roots","block.minecraft.crimson_stem","block.minecraft.warped_stem","block.minecraft.bamboo_block","block.minecraft.stripped_oak_log","block.minecraft.stripped_spruce_log","block.minecraft.stripped_birch_log","block.minecraft.stripped_jungle_log","block.minecraft.stripped_acacia_log","block.minecraft.stripped_cherry_log","block.minecraft.stripped_dark_oak_log","block.minecraft.stripped_pale_oak_log","block.minecraft.stripped_mangrove_log","block.minecraft.stripped_crimson_stem","block.minecraft.stripped_warped_stem","block.minecraft.stripped_oak_wood","block.minecraft.stripped_spruce_wood","block.minecraft.stripped_birch_wood","block.minecraft.stripped_jungle_wood","block.minecraft.stripped_acacia_wood","block.minecraft.stripped_cherry_wood","block.minecraft.stripped_dark_oak_wood","block.minecraft.stripped_pale_oak_wood","block.minecraft.stripped_mangrove_wood","block.minecraft.stripped_crimson_hyphae","block.minecraft.stripped_warped_hyphae","block.minecraft.stripped_bamboo_block","block.minecraft.oak_wood","block.minecraft.spruce_wood","block.minecraft.birch_wood","block.minecraft.jungle_wood","block.minecraft.acacia_wood","block.minecraft.cherry_wood","block.minecraft.pale_oak_wood","block.minecraft.dark_oak_wood","block.minecraft.mangrove_wood","block.minecraft.crimson_hyphae","block.minecraft.warped_hyphae","block.minecraft.oak_leaves","block.minecraft.spruce_leaves","block.minecraft.birch_leaves","block.minecraft.jungle_leaves","block.minecraft.acacia_leaves","block.minecraft.cherry_leaves","block.minecraft.dark_oak_leaves","block.minecraft.pale_oak_leaves","block.minecraft.mangrove_leaves","block.minecraft.azalea_leaves","block.minecraft.flowering_azalea_leaves","block.minecraft.sponge","block.minecraft.wet_sponge","block.minecraft.glass","block.minecraft.tinted_glass","block.minecraft.lapis_block","block.minecraft.sandstone","block.minecraft.chiseled_sandstone","block.minecraft.cut_sandstone","block.minecraft.cobweb","block.minecraft.short_grass","block.minecraft.fern","block.minecraft.bush","block.minecraft.azalea","block.minecraft.flowering_azalea","block.minecraft.dead_bush","block.minecraft.firefly_bush","block.minecraft.short_dry_grass","block.minecraft.tall_dry_grass","block.minecraft.seagrass","block.minecraft.sea_pickle","block.minecraft.white_wool","block.minecraft.orange_wool","block.minecraft.magenta_wool","block.minecraft.light_blue_wool","block.minecraft.yellow_wool","block.minecraft.lime_wool","block.minecraft.pink_wool","block.minecraft.gray_wool","block.minecraft.light_gray_wool","block.minecraft.cyan_wool","block.minecraft.purple_wool","block.minecraft.blue_wool","block.minecraft.brown_wool","block.minecraft.green_wool","block.minecraft.red_wool","block.minecraft.black_wool","block.minecraft.dandelion","block.minecraft.open_eyeblossom","block.minecraft.closed_eyeblossom","block.minecraft.poppy","block.minecraft.blue_orchid","block.minecraft.allium","block.minecraft.azure_bluet","block.minecraft.red_tulip","block.minecraft.orange_tulip","block.minecraft.white_tulip","block.minecraft.pink_tulip","block.minecraft.oxeye_daisy","block.minecraft.cornflower","block.minecraft.lily_of_the_valley","block.minecraft.wither_rose","block.minecraft.torchflower","block.minecraft.pitcher_plant","block.minecraft.spore_blossom","block.minecraft.brown_mushroom","block.minecraft.red_mushroom","block.minecraft.crimson_fungus","block.minecraft.warped_fungus","block.minecraft.crimson_roots","block.minecraft.warped_roots","block.minecraft.nether_sprouts","block.minecraft.weeping_vines","block.minecraft.twisting_vines","block.minecraft.sugar_cane","block.minecraft.kelp","block.minecraft.pink_petals","block.minecraft.wildflowers","block.minecraft.leaf_litter","block.minecraft.moss_carpet","block.minecraft.moss_block","block.minecraft.pale_moss_carpet","block.minecraft.pale_hanging_moss","block.minecraft.pale_moss_block","block.minecraft.hanging_roots","block.minecraft.big_dripleaf","block.minecraft.small_dripleaf","block.minecraft.bamboo","block.minecraft.oak_slab","block.minecraft.spruce_slab","block.minecraft.birch_slab","block.minecraft.jungle_slab","block.minecraft.acacia_slab","block.minecraft.cherry_slab","block.minecraft.dark_oak_slab","block.minecraft.pale_oak_slab","block.minecraft.mangrove_slab","block.minecraft.bamboo_slab","block.minecraft.bamboo_mosaic_slab","block.minecraft.crimson_slab","block.minecraft.warped_slab","block.minecraft.stone_slab","block.minecraft.smooth_stone_slab","block.minecraft.sandstone_slab","block.minecraft.cut_sandstone_slab","block.minecraft.petrified_oak_slab","block.minecraft.cobblestone_slab","block.minecraft.brick_slab","block.minecraft.stone_brick_slab","block.minecraft.mud_brick_slab","block.minecraft.nether_brick_slab","block.minecraft.quartz_slab","block.minecraft.red_sandstone_slab","block.minecraft.cut_red_sandstone_slab","block.minecraft.purpur_slab","block.minecraft.prismarine_slab","block.minecraft.prismarine_brick_slab","block.minecraft.dark_prismarine_slab","block.minecraft.smooth_quartz","block.minecraft.smooth_red_sandstone","block.minecraft.smooth_sandstone","block.minecraft.smooth_stone","block.minecraft.bricks","block.minecraft.acacia_shelf","block.minecraft.bamboo_shelf","block.minecraft.birch_shelf","block.minecraft.cherry_shelf","block.minecraft.crimson_shelf","block.minecraft.dark_oak_shelf","block.minecraft.jungle_shelf","block.minecraft.mangrove_shelf","block.minecraft.oak_shelf","block.minecraft.pale_oak_shelf","block.minecraft.spruce_shelf","block.minecraft.warped_shelf","block.minecraft.bookshelf","block.minecraft.chiseled_bookshelf","block.minecraft.decorated_pot","block.minecraft.mossy_cobblestone","block.minecraft.obsidian","block.minecraft.torch","block.minecraft.end_rod","block.minecraft.chorus_plant","block.minecraft.chorus_flower","block.minecraft.purpur_block","block.minecraft.purpur_pillar","block.minecraft.purpur_stairs","block.minecraft.spawner","block.minecraft.creaking_heart","block.minecraft.chest","block.minecraft.crafting_table","block.minecraft.farmland","block.minecraft.furnace","block.minecraft.ladder","block.minecraft.cobblestone_stairs","block.minecraft.snow","block.minecraft.ice","block.minecraft.snow_block","block.minecraft.cactus","block.minecraft.cactus_flower","block.minecraft.clay","block.minecraft.jukebox","block.minecraft.oak_fence","block.minecraft.spruce_fence","block.minecraft.birch_fence","block.minecraft.jungle_fence","block.minecraft.acacia_fence","block.minecraft.cherry_fence","block.minecraft.dark_oak_fence","block.minecraft.pale_oak_fence","block.minecraft.mangrove_fence","block.minecraft.bamboo_fence","block.minecraft.crimson_fence","block.minecraft.warped_fence","block.minecraft.pumpkin","block.minecraft.carved_pumpkin","block.minecraft.jack_o_lantern","block.minecraft.netherrack","block.minecraft.soul_sand","block.minecraft.soul_soil","block.minecraft.basalt","block.minecraft.polished_basalt","block.minecraft.smooth_basalt","block.minecraft.soul_torch","block.minecraft.copper_torch","block.minecraft.glowstone","block.minecraft.infested_stone","block.minecraft.infested_cobblestone","block.minecraft.infested_stone_bricks","block.minecraft.infested_mossy_stone_bricks","block.minecraft.infested_cracked_stone_bricks","block.minecraft.infested_chiseled_stone_bricks","block.minecraft.infested_deepslate","block.minecraft.stone_bricks","block.minecraft.mossy_stone_bricks","block.minecraft.cracked_stone_bricks","block.minecraft.chiseled_stone_bricks","block.minecraft.packed_mud","block.minecraft.mud_bricks","block.minecraft.deepslate_bricks","block.minecraft.cracked_deepslate_bricks","block.minecraft.deepslate_tiles","block.minecraft.cracked_deepslate_tiles","block.minecraft.chiseled_deepslate","block.minecraft.reinforced_deepslate","block.minecraft.brown_mushroom_block","block.minecraft.red_mushroom_block","block.minecraft.mushroom_stem","block.minecraft.iron_bars","block.minecraft.copper_bars","block.minecraft.exposed_copper_bars","block.minecraft.weathered_copper_bars","block.minecraft.oxidized_copper_bars","block.minecraft.waxed_copper_bars","block.minecraft.waxed_exposed_copper_bars","block.minecraft.waxed_weathered_copper_bars","block.minecraft.waxed_oxidized_copper_bars","block.minecraft.iron_chain","block.minecraft.copper_chain","block.minecraft.exposed_copper_chain","block.minecraft.weathered_copper_chain","block.minecraft.oxidized_copper_chain","block.minecraft.waxed_copper_chain","block.minecraft.waxed_exposed_copper_chain","block.minecraft.waxed_weathered_copper_chain","block.minecraft.waxed_oxidized_copper_chain","block.minecraft.glass_pane","block.minecraft.melon","block.minecraft.vine","block.minecraft.glow_lichen","item.minecraft.resin_clump","block.minecraft.resin_block","block.minecraft.resin_bricks","block.minecraft.resin_brick_stairs","block.minecraft.resin_brick_slab","block.minecraft.resin_brick_wall","block.minecraft.chiseled_resin_bricks","block.minecraft.brick_stairs","block.minecraft.stone_brick_stairs","block.minecraft.mud_brick_stairs","block.minecraft.mycelium","block.minecraft.lily_pad","block.minecraft.nether_bricks","block.minecraft.cracked_nether_bricks","block.minecraft.chiseled_nether_bricks","block.minecraft.nether_brick_fence","block.minecraft.nether_brick_stairs","block.minecraft.sculk","block.minecraft.sculk_vein","block.minecraft.sculk_catalyst","block.minecraft.sculk_shrieker","block.minecraft.enchanting_table","block.minecraft.end_portal_frame","block.minecraft.end_stone","block.minecraft.end_stone_bricks","block.minecraft.dragon_egg","block.minecraft.sandstone_stairs","block.minecraft.ender_chest","block.minecraft.emerald_block","block.minecraft.oak_stairs","block.minecraft.spruce_stairs","block.minecraft.birch_stairs","block.minecraft.jungle_stairs","block.minecraft.acacia_stairs","block.minecraft.cherry_stairs","block.minecraft.dark_oak_stairs","block.minecraft.pale_oak_stairs","block.minecraft.mangrove_stairs","block.minecraft.bamboo_stairs","block.minecraft.bamboo_mosaic_stairs","block.minecraft.crimson_stairs","block.minecraft.warped_stairs","block.minecraft.command_block","block.minecraft.beacon","block.minecraft.cobblestone_wall","block.minecraft.mossy_cobblestone_wall","block.minecraft.brick_wall","block.minecraft.prismarine_wall","block.minecraft.red_sandstone_wall","block.minecraft.mossy_stone_brick_wall","block.minecraft.granite_wall","block.minecraft.stone_brick_wall","block.minecraft.mud_brick_wall","block.minecraft.nether_brick_wall","block.minecraft.andesite_wall","block.minecraft.red_nether_brick_wall","block.minecraft.sandstone_wall","block.minecraft.end_stone_brick_wall","block.minecraft.diorite_wall","block.minecraft.blackstone_wall","block.minecraft.polished_blackstone_wall","block.minecraft.polished_blackstone_brick_wall","block.minecraft.cobbled_deepslate_wall","block.minecraft.polished_deepslate_wall","block.minecraft.deepslate_brick_wall","block.minecraft.deepslate_tile_wall","block.minecraft.anvil","block.minecraft.chipped_anvil","block.minecraft.damaged_anvil","block.minecraft.chiseled_quartz_block","block.minecraft.quartz_block","block.minecraft.quartz_bricks","block.minecraft.quartz_pillar","block.minecraft.quartz_stairs","block.minecraft.white_terracotta","block.minecraft.orange_terracotta","block.minecraft.magenta_terracotta","block.minecraft.light_blue_terracotta","block.minecraft.yellow_terracotta","block.minecraft.lime_terracotta","block.minecraft.pink_terracotta","block.minecraft.gray_terracotta","block.minecraft.light_gray_terracotta","block.minecraft.cyan_terracotta","block.minecraft.purple_terracotta","block.minecraft.blue_terracotta","block.minecraft.brown_terracotta","block.minecraft.green_terracotta","block.minecraft.red_terracotta","block.minecraft.black_terracotta","block.minecraft.barrier","block.minecraft.light","block.minecraft.hay_block","block.minecraft.white_carpet","block.minecraft.orange_carpet","block.minecraft.magenta_carpet","block.minecraft.light_blue_carpet","block.minecraft.yellow_carpet","block.minecraft.lime_carpet","block.minecraft.pink_carpet","block.minecraft.gray_carpet","block.minecraft.light_gray_carpet","block.minecraft.cyan_carpet","block.minecraft.purple_carpet","block.minecraft.blue_carpet","block.minecraft.brown_carpet","block.minecraft.green_carpet","block.minecraft.red_carpet","block.minecraft.black_carpet","block.minecraft.terracotta","block.minecraft.packed_ice","block.minecraft.dirt_path","block.minecraft.sunflower","block.minecraft.lilac","block.minecraft.rose_bush","block.minecraft.peony","block.minecraft.tall_grass","block.minecraft.large_fern","block.minecraft.white_stained_glass","block.minecraft.orange_stained_glass","block.minecraft.magenta_stained_glass","block.minecraft.light_blue_stained_glass","block.minecraft.yellow_stained_glass","block.minecraft.lime_stained_glass","block.minecraft.pink_stained_glass","block.minecraft.gray_stained_glass","block.minecraft.light_gray_stained_glass","block.minecraft.cyan_stained_glass","block.minecraft.purple_stained_glass","block.minecraft.blue_stained_glass","block.minecraft.brown_stained_glass","block.minecraft.green_stained_glass","block.minecraft.red_stained_glass","block.minecraft.black_stained_glass","block.minecraft.white_stained_glass_pane","block.minecraft.orange_stained_glass_pane","block.minecraft.magenta_stained_glass_pane","block.minecraft.light_blue_stained_glass_pane","block.minecraft.yellow_stained_glass_pane","block.minecraft.lime_stained_glass_pane","block.minecraft.pink_stained_glass_pane","block.minecraft.gray_stained_glass_pane","block.minecraft.light_gray_stained_glass_pane","block.minecraft.cyan_stained_glass_pane","block.minecraft.purple_stained_glass_pane","block.minecraft.blue_stained_glass_pane","block.minecraft.brown_stained_glass_pane","block.minecraft.green_stained_glass_pane","block.minecraft.red_stained_glass_pane","block.minecraft.black_stained_glass_pane","block.minecraft.prismarine","block.minecraft.prismarine_bricks","block.minecraft.dark_prismarine","block.minecraft.prismarine_stairs","block.minecraft.prismarine_brick_stairs","block.minecraft.dark_prismarine_stairs","block.minecraft.sea_lantern","block.minecraft.red_sandstone","block.minecraft.chiseled_red_sandstone","block.minecraft.cut_red_sandstone","block.minecraft.red_sandstone_stairs","block.minecraft.repeating_command_block","block.minecraft.chain_command_block","block.minecraft.magma_block","block.minecraft.nether_wart_block","block.minecraft.warped_wart_block","block.minecraft.red_nether_bricks","block.minecraft.bone_block","block.minecraft.structure_void","block.minecraft.shulker_box","block.minecraft.white_shulker_box","block.minecraft.orange_shulker_box","block.minecraft.magenta_shulker_box","block.minecraft.light_blue_shulker_box","block.minecraft.yellow_shulker_box","block.minecraft.lime_shulker_box","block.minecraft.pink_shulker_box","block.minecraft.gray_shulker_box","block.minecraft.light_gray_shulker_box","block.minecraft.cyan_shulker_box","block.minecraft.purple_shulker_box","block.minecraft.blue_shulker_box","block.minecraft.brown_shulker_box","block.minecraft.green_shulker_box","block.minecraft.red_shulker_box","block.minecraft.black_shulker_box","block.minecraft.white_glazed_terracotta","block.minecraft.orange_glazed_terracotta","block.minecraft.magenta_glazed_terracotta","block.minecraft.light_blue_glazed_terracotta","block.minecraft.yellow_glazed_terracotta","block.minecraft.lime_glazed_terracotta","block.minecraft.pink_glazed_terracotta","block.minecraft.gray_glazed_terracotta","block.minecraft.light_gray_glazed_terracotta","block.minecraft.cyan_glazed_terracotta","block.minecraft.purple_glazed_terracotta","block.minecraft.blue_glazed_terracotta","block.minecraft.brown_glazed_terracotta","block.minecraft.green_glazed_terracotta","block.minecraft.red_glazed_terracotta","block.minecraft.black_glazed_terracotta","block.minecraft.white_concrete","block.minecraft.orange_concrete","block.minecraft.magenta_concrete","block.minecraft.light_blue_concrete","block.minecraft.yellow_concrete","block.minecraft.lime_concrete","block.minecraft.pink_concrete","block.minecraft.gray_concrete","block.minecraft.light_gray_concrete","block.minecraft.cyan_concrete","block.minecraft.purple_concrete","block.minecraft.blue_concrete","block.minecraft.brown_concrete","block.minecraft.green_concrete","block.minecraft.red_concrete","block.minecraft.black_concrete","block.minecraft.white_concrete_powder","block.minecraft.orange_concrete_powder","block.minecraft.magenta_concrete_powder","block.minecraft.light_blue_concrete_powder","block.minecraft.yellow_concrete_powder","block.minecraft.lime_concrete_powder","block.minecraft.pink_concrete_powder","block.minecraft.gray_concrete_powder","block.minecraft.light_gray_concrete_powder","block.minecraft.cyan_concrete_powder","block.minecraft.purple_concrete_powder","block.minecraft.blue_concrete_powder","block.minecraft.brown_concrete_powder","block.minecraft.green_concrete_powder","block.minecraft.red_concrete_powder","block.minecraft.black_concrete_powder","block.minecraft.turtle_egg","block.minecraft.sniffer_egg","block.minecraft.dried_ghast","block.minecraft.dead_tube_coral_block","block.minecraft.dead_brain_coral_block","block.minecraft.dead_bubble_coral_block","block.minecraft.dead_fire_coral_block","block.minecraft.dead_horn_coral_block","block.minecraft.tube_coral_block","block.minecraft.brain_coral_block","block.minecraft.bubble_coral_block","block.minecraft.fire_coral_block","block.minecraft.horn_coral_block","block.minecraft.tube_coral","block.minecraft.brain_coral","block.minecraft.bubble_coral","block.minecraft.fire_coral","block.minecraft.horn_coral","block.minecraft.dead_brain_coral","block.minecraft.dead_bubble_coral","block.minecraft.dead_fire_coral","block.minecraft.dead_horn_coral","block.minecraft.dead_tube_coral","block.minecraft.tube_coral_fan","block.minecraft.brain_coral_fan","block.minecraft.bubble_coral_fan","block.minecraft.fire_coral_fan","block.minecraft.horn_coral_fan","block.minecraft.dead_tube_coral_fan","block.minecraft.dead_brain_coral_fan","block.minecraft.dead_bubble_coral_fan","block.minecraft.dead_fire_coral_fan","block.minecraft.dead_horn_coral_fan","block.minecraft.blue_ice","block.minecraft.conduit","block.minecraft.polished_granite_stairs","block.minecraft.smooth_red_sandstone_stairs","block.minecraft.mossy_stone_brick_stairs","block.minecraft.polished_diorite_stairs","block.minecraft.mossy_cobblestone_stairs","block.minecraft.end_stone_brick_stairs","block.minecraft.stone_stairs","block.minecraft.smooth_sandstone_stairs","block.minecraft.smooth_quartz_stairs","block.minecraft.granite_stairs","block.minecraft.andesite_stairs","block.minecraft.red_nether_brick_stairs","block.minecraft.polished_andesite_stairs","block.minecraft.diorite_stairs","block.minecraft.cobbled_deepslate_stairs","block.minecraft.polished_deepslate_stairs","block.minecraft.deepslate_brick_stairs","block.minecraft.deepslate_tile_stairs","block.minecraft.polished_granite_slab","block.minecraft.smooth_red_sandstone_slab","block.minecraft.mossy_stone_brick_slab","block.minecraft.polished_diorite_slab","block.minecraft.mossy_cobblestone_slab","block.minecraft.end_stone_brick_slab","block.minecraft.smooth_sandstone_slab","block.minecraft.smooth_quartz_slab","block.minecraft.granite_slab","block.minecraft.andesite_slab","block.minecraft.red_nether_brick_slab","block.minecraft.polished_andesite_slab","block.minecraft.diorite_slab","block.minecraft.cobbled_deepslate_slab","block.minecraft.polished_deepslate_slab","block.minecraft.deepslate_brick_slab","block.minecraft.deepslate_tile_slab","block.minecraft.scaffolding","item.minecraft.redstone","block.minecraft.redstone_torch","block.minecraft.redstone_block","block.minecraft.repeater","block.minecraft.comparator","block.minecraft.piston","block.minecraft.sticky_piston","block.minecraft.slime_block","block.minecraft.honey_block","block.minecraft.observer","block.minecraft.hopper","block.minecraft.dispenser","block.minecraft.dropper","block.minecraft.lectern","block.minecraft.target","block.minecraft.lever","block.minecraft.lightning_rod","block.minecraft.exposed_lightning_rod","block.minecraft.weathered_lightning_rod","block.minecraft.oxidized_lightning_rod","block.minecraft.waxed_lightning_rod","block.minecraft.waxed_exposed_lightning_rod","block.minecraft.waxed_weathered_lightning_rod","block.minecraft.waxed_oxidized_lightning_rod","block.minecraft.daylight_detector","block.minecraft.sculk_sensor","block.minecraft.calibrated_sculk_sensor","block.minecraft.tripwire_hook","block.minecraft.trapped_chest","block.minecraft.tnt","block.minecraft.redstone_lamp","block.minecraft.note_block","block.minecraft.stone_button","block.minecraft.polished_blackstone_button","block.minecraft.oak_button","block.minecraft.spruce_button","block.minecraft.birch_button","block.minecraft.jungle_button","block.minecraft.acacia_button","block.minecraft.cherry_button","block.minecraft.dark_oak_button","block.minecraft.pale_oak_button","block.minecraft.mangrove_button","block.minecraft.bamboo_button","block.minecraft.crimson_button","block.minecraft.warped_button","block.minecraft.stone_pressure_plate","block.minecraft.polished_blackstone_pressure_plate","block.minecraft.light_weighted_pressure_plate","block.minecraft.heavy_weighted_pressure_plate","block.minecraft.oak_pressure_plate","block.minecraft.spruce_pressure_plate","block.minecraft.birch_pressure_plate","block.minecraft.jungle_pressure_plate","block.minecraft.acacia_pressure_plate","block.minecraft.cherry_pressure_plate","block.minecraft.dark_oak_pressure_plate","block.minecraft.pale_oak_pressure_plate","block.minecraft.mangrove_pressure_plate","block.minecraft.bamboo_pressure_plate","block.minecraft.crimson_pressure_plate","block.minecraft.warped_pressure_plate","block.minecraft.iron_door","block.minecraft.oak_door","block.minecraft.spruce_door","block.minecraft.birch_door","block.minecraft.jungle_door","block.minecraft.acacia_door","block.minecraft.cherry_door","block.minecraft.dark_oak_door","block.minecraft.pale_oak_door","block.minecraft.mangrove_door","block.minecraft.bamboo_door","block.minecraft.crimson_door","block.minecraft.warped_door","block.minecraft.copper_door","block.minecraft.exposed_copper_door","block.minecraft.weathered_copper_door","block.minecraft.oxidized_copper_door","block.minecraft.waxed_copper_door","block.minecraft.waxed_exposed_copper_door","block.minecraft.waxed_weathered_copper_door","block.minecraft.waxed_oxidized_copper_door","block.minecraft.iron_trapdoor","block.minecraft.oak_trapdoor","block.minecraft.spruce_trapdoor","block.minecraft.birch_trapdoor","block.minecraft.jungle_trapdoor","block.minecraft.acacia_trapdoor","block.minecraft.cherry_trapdoor","block.minecraft.dark_oak_trapdoor","block.minecraft.pale_oak_trapdoor","block.minecraft.mangrove_trapdoor","block.minecraft.bamboo_trapdoor","block.minecraft.crimson_trapdoor","block.minecraft.warped_trapdoor","block.minecraft.copper_trapdoor","block.minecraft.exposed_copper_trapdoor","block.minecraft.weathered_copper_trapdoor","block.minecraft.oxidized_copper_trapdoor","block.minecraft.waxed_copper_trapdoor","block.minecraft.waxed_exposed_copper_trapdoor","block.minecraft.waxed_weathered_copper_trapdoor","block.minecraft.waxed_oxidized_copper_trapdoor","block.minecraft.oak_fence_gate","block.minecraft.spruce_fence_gate","block.minecraft.birch_fence_gate","block.minecraft.jungle_fence_gate","block.minecraft.acacia_fence_gate","block.minecraft.cherry_fence_gate","block.minecraft.dark_oak_fence_gate","block.minecraft.pale_oak_fence_gate","block.minecraft.mangrove_fence_gate","block.minecraft.bamboo_fence_gate","block.minecraft.crimson_fence_gate","block.minecraft.warped_fence_gate","block.minecraft.powered_rail","block.minecraft.detector_rail","block.minecraft.rail","block.minecraft.activator_rail","item.minecraft.saddle","item.minecraft.white_harness","item.minecraft.orange_harness","item.minecraft.magenta_harness","item.minecraft.light_blue_harness","item.minecraft.yellow_harness","item.minecraft.lime_harness","item.minecraft.pink_harness","item.minecraft.gray_harness","item.minecraft.light_gray_harness","item.minecraft.cyan_harness","item.minecraft.purple_harness","item.minecraft.blue_harness","item.minecraft.brown_harness","item.minecraft.green_harness","item.minecraft.red_harness","item.minecraft.black_harness","item.minecraft.minecart","item.minecraft.chest_minecart","item.minecraft.furnace_minecart","item.minecraft.tnt_minecart","item.minecraft.hopper_minecart","item.minecraft.carrot_on_a_stick","item.minecraft.warped_fungus_on_a_stick","item.minecraft.phantom_membrane","item.minecraft.elytra","item.minecraft.oak_boat","item.minecraft.oak_chest_boat","item.minecraft.spruce_boat","item.minecraft.spruce_chest_boat","item.minecraft.birch_boat","item.minecraft.birch_chest_boat","item.minecraft.jungle_boat","item.minecraft.jungle_chest_boat","item.minecraft.acacia_boat","item.minecraft.acacia_chest_boat","item.minecraft.cherry_boat","item.minecraft.cherry_chest_boat","item.minecraft.dark_oak_boat","item.minecraft.dark_oak_chest_boat","item.minecraft.pale_oak_boat","item.minecraft.pale_oak_chest_boat","item.minecraft.mangrove_boat","item.minecraft.mangrove_chest_boat","item.minecraft.bamboo_raft","item.minecraft.bamboo_chest_raft","block.minecraft.structure_block","block.minecraft.jigsaw","block.minecraft.test_block","block.minecraft.test_instance_block","item.minecraft.turtle_helmet","item.minecraft.turtle_scute","item.minecraft.armadillo_scute","item.minecraft.wolf_armor","item.minecraft.flint_and_steel","item.minecraft.bowl","item.minecraft.apple","item.minecraft.bow","item.minecraft.arrow","item.minecraft.coal","item.minecraft.charcoal","item.minecraft.diamond","item.minecraft.emerald","item.minecraft.lapis_lazuli","item.minecraft.quartz","item.minecraft.amethyst_shard","item.minecraft.raw_iron","item.minecraft.iron_ingot","item.minecraft.raw_copper","item.minecraft.copper_ingot","item.minecraft.raw_gold","item.minecraft.gold_ingot","item.minecraft.netherite_ingot","item.minecraft.netherite_scrap","item.minecraft.wooden_sword","item.minecraft.wooden_shovel","item.minecraft.wooden_pickaxe","item.minecraft.wooden_axe","item.minecraft.wooden_hoe","item.minecraft.copper_sword","item.minecraft.copper_shovel","item.minecraft.copper_pickaxe","item.minecraft.copper_axe","item.minecraft.copper_hoe","item.minecraft.stone_sword","item.minecraft.stone_shovel","item.minecraft.stone_pickaxe","item.minecraft.stone_axe","item.minecraft.stone_hoe","item.minecraft.golden_sword","item.minecraft.golden_shovel","item.minecraft.golden_pickaxe","item.minecraft.golden_axe","item.minecraft.golden_hoe","item.minecraft.iron_sword","item.minecraft.iron_shovel","item.minecraft.iron_pickaxe","item.minecraft.iron_axe","item.minecraft.iron_hoe","item.minecraft.diamond_sword","item.minecraft.diamond_shovel","item.minecraft.diamond_pickaxe","item.minecraft.diamond_axe","item.minecraft.diamond_hoe","item.minecraft.netherite_sword","item.minecraft.netherite_shovel","item.minecraft.netherite_pickaxe","item.minecraft.netherite_axe","item.minecraft.netherite_hoe","item.minecraft.stick","item.minecraft.mushroom_stew","item.minecraft.string","item.minecraft.feather","item.minecraft.gunpowder","item.minecraft.wheat_seeds","item.minecraft.wheat","item.minecraft.bread","item.minecraft.leather_helmet","item.minecraft.leather_chestplate","item.minecraft.leather_leggings","item.minecraft.leather_boots","item.minecraft.copper_helmet","item.minecraft.copper_chestplate","item.minecraft.copper_leggings","item.minecraft.copper_boots","item.minecraft.chainmail_helmet","item.minecraft.chainmail_chestplate","item.minecraft.chainmail_leggings","item.minecraft.chainmail_boots","item.minecraft.iron_helmet","item.minecraft.iron_chestplate","item.minecraft.iron_leggings","item.minecraft.iron_boots","item.minecraft.diamond_helmet","item.minecraft.diamond_chestplate","item.minecraft.diamond_leggings","item.minecraft.diamond_boots","item.minecraft.golden_helmet","item.minecraft.golden_chestplate","item.minecraft.golden_leggings","item.minecraft.golden_boots","item.minecraft.netherite_helmet","item.minecraft.netherite_chestplate","item.minecraft.netherite_leggings","item.minecraft.netherite_boots","item.minecraft.flint","item.minecraft.porkchop","item.minecraft.cooked_porkchop","item.minecraft.painting","item.minecraft.golden_apple","item.minecraft.enchanted_golden_apple","block.minecraft.oak_sign","block.minecraft.spruce_sign","block.minecraft.birch_sign","block.minecraft.jungle_sign","block.minecraft.acacia_sign","block.minecraft.cherry_sign","block.minecraft.dark_oak_sign","block.minecraft.pale_oak_sign","block.minecraft.mangrove_sign","block.minecraft.bamboo_sign","block.minecraft.crimson_sign","block.minecraft.warped_sign","block.minecraft.oak_hanging_sign","block.minecraft.spruce_hanging_sign","block.minecraft.birch_hanging_sign","block.minecraft.jungle_hanging_sign","block.minecraft.acacia_hanging_sign","block.minecraft.cherry_hanging_sign","block.minecraft.dark_oak_hanging_sign","block.minecraft.pale_oak_hanging_sign","block.minecraft.mangrove_hanging_sign","block.minecraft.bamboo_hanging_sign","block.minecraft.crimson_hanging_sign","block.minecraft.warped_hanging_sign","item.minecraft.bucket","item.minecraft.water_bucket","item.minecraft.lava_bucket","item.minecraft.powder_snow_bucket","item.minecraft.snowball","item.minecraft.leather","item.minecraft.milk_bucket","item.minecraft.pufferfish_bucket","item.minecraft.salmon_bucket","item.minecraft.cod_bucket","item.minecraft.tropical_fish_bucket","item.minecraft.axolotl_bucket","item.minecraft.tadpole_bucket","item.minecraft.brick","item.minecraft.clay_ball","block.minecraft.dried_kelp_block","item.minecraft.paper","item.minecraft.book","item.minecraft.slime_ball","item.minecraft.egg","item.minecraft.blue_egg","item.minecraft.brown_egg","item.minecraft.compass","item.minecraft.recovery_compass","item.minecraft.bundle","item.minecraft.white_bundle","item.minecraft.orange_bundle","item.minecraft.magenta_bundle","item.minecraft.light_blue_bundle","item.minecraft.yellow_bundle","item.minecraft.lime_bundle","item.minecraft.pink_bundle","item.minecraft.gray_bundle","item.minecraft.light_gray_bundle","item.minecraft.cyan_bundle","item.minecraft.purple_bundle","item.minecraft.blue_bundle","item.minecraft.brown_bundle","item.minecraft.green_bundle","item.minecraft.red_bundle","item.minecraft.black_bundle","item.minecraft.fishing_rod","item.minecraft.clock","item.minecraft.spyglass","item.minecraft.glowstone_dust","item.minecraft.cod","item.minecraft.salmon","item.minecraft.tropical_fish","item.minecraft.pufferfish","item.minecraft.cooked_cod","item.minecraft.cooked_salmon","item.minecraft.ink_sac","item.minecraft.glow_ink_sac","item.minecraft.cocoa_beans","item.minecraft.white_dye","item.minecraft.orange_dye","item.minecraft.magenta_dye","item.minecraft.light_blue_dye","item.minecraft.yellow_dye","item.minecraft.lime_dye","item.minecraft.pink_dye","item.minecraft.gray_dye","item.minecraft.light_gray_dye","item.minecraft.cyan_dye","item.minecraft.purple_dye","item.minecraft.blue_dye","item.minecraft.brown_dye","item.minecraft.green_dye","item.minecraft.red_dye","item.minecraft.black_dye","item.minecraft.bone_meal","item.minecraft.bone","item.minecraft.sugar","block.minecraft.cake","block.minecraft.white_bed","block.minecraft.orange_bed","block.minecraft.magenta_bed","block.minecraft.light_blue_bed","block.minecraft.yellow_bed","block.minecraft.lime_bed","block.minecraft.pink_bed","block.minecraft.gray_bed","block.minecraft.light_gray_bed","block.minecraft.cyan_bed","block.minecraft.purple_bed","block.minecraft.blue_bed","block.minecraft.brown_bed","block.minecraft.green_bed","block.minecraft.red_bed","block.minecraft.black_bed","item.minecraft.cookie","block.minecraft.crafter","item.minecraft.filled_map","item.minecraft.shears","item.minecraft.melon_slice","item.minecraft.dried_kelp","item.minecraft.pumpkin_seeds","item.minecraft.melon_seeds","item.minecraft.beef","item.minecraft.cooked_beef","item.minecraft.chicken","item.minecraft.cooked_chicken","item.minecraft.rotten_flesh","item.minecraft.ender_pearl","item.minecraft.blaze_rod","item.minecraft.ghast_tear","item.minecraft.gold_nugget","item.minecraft.nether_wart","item.minecraft.glass_bottle","item.minecraft.potion","item.minecraft.spider_eye","item.minecraft.fermented_spider_eye","item.minecraft.blaze_powder","item.minecraft.magma_cream","block.minecraft.brewing_stand","block.minecraft.cauldron","item.minecraft.ender_eye","item.minecraft.glistering_melon_slice","item.minecraft.chicken_spawn_egg","item.minecraft.cow_spawn_egg","item.minecraft.pig_spawn_egg","item.minecraft.sheep_spawn_egg","item.minecraft.camel_spawn_egg","item.minecraft.donkey_spawn_egg","item.minecraft.horse_spawn_egg","item.minecraft.mule_spawn_egg","item.minecraft.cat_spawn_egg","item.minecraft.parrot_spawn_egg","item.minecraft.wolf_spawn_egg","item.minecraft.armadillo_spawn_egg","item.minecraft.bat_spawn_egg","item.minecraft.bee_spawn_egg","item.minecraft.fox_spawn_egg","item.minecraft.goat_spawn_egg","item.minecraft.llama_spawn_egg","item.minecraft.ocelot_spawn_egg","item.minecraft.panda_spawn_egg","item.minecraft.polar_bear_spawn_egg","item.minecraft.rabbit_spawn_egg","item.minecraft.axolotl_spawn_egg","item.minecraft.cod_spawn_egg","item.minecraft.dolphin_spawn_egg","item.minecraft.frog_spawn_egg","item.minecraft.glow_squid_spawn_egg","item.minecraft.nautilus_spawn_egg","item.minecraft.pufferfish_spawn_egg","item.minecraft.salmon_spawn_egg","item.minecraft.squid_spawn_egg","item.minecraft.tadpole_spawn_egg","item.minecraft.tropical_fish_spawn_egg","item.minecraft.turtle_spawn_egg","item.minecraft.allay_spawn_egg","item.minecraft.mooshroom_spawn_egg","item.minecraft.sniffer_spawn_egg","item.minecraft.copper_golem_spawn_egg","item.minecraft.iron_golem_spawn_egg","item.minecraft.snow_golem_spawn_egg","item.minecraft.trader_llama_spawn_egg","item.minecraft.villager_spawn_egg","item.minecraft.wandering_trader_spawn_egg","item.minecraft.bogged_spawn_egg","item.minecraft.camel_husk_spawn_egg","item.minecraft.drowned_spawn_egg","item.minecraft.husk_spawn_egg","item.minecraft.parched_spawn_egg","item.minecraft.skeleton_spawn_egg","item.minecraft.skeleton_horse_spawn_egg","item.minecraft.stray_spawn_egg","item.minecraft.wither_spawn_egg","item.minecraft.wither_skeleton_spawn_egg","item.minecraft.zombie_spawn_egg","item.minecraft.zombie_horse_spawn_egg","item.minecraft.zombie_nautilus_spawn_egg","item.minecraft.zombie_villager_spawn_egg","item.minecraft.cave_spider_spawn_egg","item.minecraft.spider_spawn_egg","item.minecraft.breeze_spawn_egg","item.minecraft.creaking_spawn_egg","item.minecraft.creeper_spawn_egg","item.minecraft.elder_guardian_spawn_egg","item.minecraft.guardian_spawn_egg","item.minecraft.phantom_spawn_egg","item.minecraft.silverfish_spawn_egg","item.minecraft.slime_spawn_egg","item.minecraft.warden_spawn_egg","item.minecraft.witch_spawn_egg","item.minecraft.evoker_spawn_egg","item.minecraft.pillager_spawn_egg","item.minecraft.ravager_spawn_egg","item.minecraft.vindicator_spawn_egg","item.minecraft.vex_spawn_egg","item.minecraft.blaze_spawn_egg","item.minecraft.ghast_spawn_egg","item.minecraft.happy_ghast_spawn_egg","item.minecraft.hoglin_spawn_egg","item.minecraft.magma_cube_spawn_egg","item.minecraft.piglin_spawn_egg","item.minecraft.piglin_brute_spawn_egg","item.minecraft.strider_spawn_egg","item.minecraft.zoglin_spawn_egg","item.minecraft.zombified_piglin_spawn_egg","item.minecraft.ender_dragon_spawn_egg","item.minecraft.enderman_spawn_egg","item.minecraft.endermite_spawn_egg","item.minecraft.shulker_spawn_egg","item.minecraft.experience_bottle","item.minecraft.fire_charge","item.minecraft.wind_charge","item.minecraft.writable_book","item.minecraft.written_book","item.minecraft.breeze_rod","item.minecraft.mace","item.minecraft.item_frame","item.minecraft.glow_item_frame","block.minecraft.flower_pot","item.minecraft.carrot","item.minecraft.potato","item.minecraft.baked_potato","item.minecraft.poisonous_potato","item.minecraft.map","item.minecraft.golden_carrot","block.minecraft.skeleton_skull","block.minecraft.wither_skeleton_skull","block.minecraft.player_head","block.minecraft.zombie_head","block.minecraft.creeper_head","block.minecraft.dragon_head","block.minecraft.piglin_head","item.minecraft.nether_star","item.minecraft.pumpkin_pie","item.minecraft.firework_rocket","item.minecraft.firework_star","item.minecraft.enchanted_book","item.minecraft.nether_brick","item.minecraft.resin_brick","item.minecraft.prismarine_shard","item.minecraft.prismarine_crystals","item.minecraft.rabbit","item.minecraft.cooked_rabbit","item.minecraft.rabbit_stew","item.minecraft.rabbit_foot","item.minecraft.rabbit_hide","item.minecraft.armor_stand","item.minecraft.copper_horse_armor","item.minecraft.iron_horse_armor","item.minecraft.golden_horse_armor","item.minecraft.diamond_horse_armor","item.minecraft.netherite_horse_armor","item.minecraft.leather_horse_armor","item.minecraft.lead","item.minecraft.name_tag","item.minecraft.command_block_minecart","item.minecraft.mutton","item.minecraft.cooked_mutton","block.minecraft.white_banner","block.minecraft.orange_banner","block.minecraft.magenta_banner","block.minecraft.light_blue_banner","block.minecraft.yellow_banner","block.minecraft.lime_banner","block.minecraft.pink_banner","block.minecraft.gray_banner","block.minecraft.light_gray_banner","block.minecraft.cyan_banner","block.minecraft.purple_banner","block.minecraft.blue_banner","block.minecraft.brown_banner","block.minecraft.green_banner","block.minecraft.red_banner","block.minecraft.black_banner","item.minecraft.end_crystal","item.minecraft.chorus_fruit","item.minecraft.popped_chorus_fruit","item.minecraft.torchflower_seeds","item.minecraft.pitcher_pod","item.minecraft.beetroot","item.minecraft.beetroot_seeds","item.minecraft.beetroot_soup","item.minecraft.dragon_breath","item.minecraft.splash_potion","item.minecraft.spectral_arrow","item.minecraft.tipped_arrow","item.minecraft.lingering_potion","item.minecraft.shield","item.minecraft.wooden_spear","item.minecraft.stone_spear","item.minecraft.copper_spear","item.minecraft.iron_spear","item.minecraft.golden_spear","item.minecraft.diamond_spear","item.minecraft.netherite_spear","item.minecraft.totem_of_undying","item.minecraft.shulker_shell","item.minecraft.iron_nugget","item.minecraft.copper_nugget","item.minecraft.knowledge_book","item.minecraft.debug_stick","item.minecraft.music_disc_13","item.minecraft.music_disc_cat","item.minecraft.music_disc_blocks","item.minecraft.music_disc_chirp","item.minecraft.music_disc_creator","item.minecraft.music_disc_creator_music_box","item.minecraft.music_disc_far","item.minecraft.music_disc_lava_chicken","item.minecraft.music_disc_mall","item.minecraft.music_disc_mellohi","item.minecraft.music_disc_stal","item.minecraft.music_disc_strad","item.minecraft.music_disc_ward","item.minecraft.music_disc_11","item.minecraft.music_disc_wait","item.minecraft.music_disc_otherside","item.minecraft.music_disc_relic","item.minecraft.music_disc_5","item.minecraft.music_disc_pigstep","item.minecraft.music_disc_precipice","item.minecraft.music_disc_tears","item.minecraft.disc_fragment_5","item.minecraft.trident","item.minecraft.nautilus_shell","item.minecraft.iron_nautilus_armor","item.minecraft.golden_nautilus_armor","item.minecraft.diamond_nautilus_armor","item.minecraft.netherite_nautilus_armor","item.minecraft.copper_nautilus_armor","item.minecraft.heart_of_the_sea","item.minecraft.crossbow","item.minecraft.suspicious_stew","block.minecraft.loom","item.minecraft.flower_banner_pattern","item.minecraft.creeper_banner_pattern","item.minecraft.skull_banner_pattern","item.minecraft.mojang_banner_pattern","item.minecraft.globe_banner_pattern","item.minecraft.piglin_banner_pattern","item.minecraft.flow_banner_pattern","item.minecraft.guster_banner_pattern","item.minecraft.field_masoned_banner_pattern","item.minecraft.bordure_indented_banner_pattern","item.minecraft.goat_horn","block.minecraft.composter","block.minecraft.barrel","block.minecraft.smoker","block.minecraft.blast_furnace","block.minecraft.cartography_table","block.minecraft.fletching_table","block.minecraft.grindstone","block.minecraft.smithing_table","block.minecraft.stonecutter","block.minecraft.bell","block.minecraft.lantern","block.minecraft.soul_lantern","block.minecraft.copper_lantern","block.minecraft.exposed_copper_lantern","block.minecraft.weathered_copper_lantern","block.minecraft.oxidized_copper_lantern","block.minecraft.waxed_copper_lantern","block.minecraft.waxed_exposed_copper_lantern","block.minecraft.waxed_weathered_copper_lantern","block.minecraft.waxed_oxidized_copper_lantern","item.minecraft.sweet_berries","item.minecraft.glow_berries","block.minecraft.campfire","block.minecraft.soul_campfire","block.minecraft.shroomlight","item.minecraft.honeycomb","block.minecraft.bee_nest","block.minecraft.beehive","item.minecraft.honey_bottle","block.minecraft.honeycomb_block","block.minecraft.lodestone","block.minecraft.crying_obsidian","block.minecraft.blackstone","block.minecraft.blackstone_slab","block.minecraft.blackstone_stairs","block.minecraft.gilded_blackstone","block.minecraft.polished_blackstone","block.minecraft.polished_blackstone_slab","block.minecraft.polished_blackstone_stairs","block.minecraft.chiseled_polished_blackstone","block.minecraft.polished_blackstone_bricks","block.minecraft.polished_blackstone_brick_slab","block.minecraft.polished_blackstone_brick_stairs","block.minecraft.cracked_polished_blackstone_bricks","block.minecraft.respawn_anchor","block.minecraft.candle","block.minecraft.white_candle","block.minecraft.orange_candle","block.minecraft.magenta_candle","block.minecraft.light_blue_candle","block.minecraft.yellow_candle","block.minecraft.lime_candle","block.minecraft.pink_candle","block.minecraft.gray_candle","block.minecraft.light_gray_candle","block.minecraft.cyan_candle","block.minecraft.purple_candle","block.minecraft.blue_candle","block.minecraft.brown_candle","block.minecraft.green_candle","block.minecraft.red_candle","block.minecraft.black_candle","block.minecraft.small_amethyst_bud","block.minecraft.medium_amethyst_bud","block.minecraft.large_amethyst_bud","block.minecraft.amethyst_cluster","block.minecraft.pointed_dripstone","block.minecraft.ochre_froglight","block.minecraft.verdant_froglight","block.minecraft.pearlescent_froglight","block.minecraft.frogspawn","item.minecraft.echo_shard","item.minecraft.brush","item.minecraft.netherite_upgrade_smithing_template","item.minecraft.sentry_armor_trim_smithing_template","item.minecraft.dune_armor_trim_smithing_template","item.minecraft.coast_armor_trim_smithing_template","item.minecraft.wild_armor_trim_smithing_template","item.minecraft.ward_armor_trim_smithing_template","item.minecraft.eye_armor_trim_smithing_template","item.minecraft.vex_armor_trim_smithing_template","item.minecraft.tide_armor_trim_smithing_template","item.minecraft.snout_armor_trim_smithing_template","item.minecraft.rib_armor_trim_smithing_template","item.minecraft.spire_armor_trim_smithing_template","item.minecraft.wayfinder_armor_trim_smithing_template","item.minecraft.shaper_armor_trim_smithing_template","item.minecraft.silence_armor_trim_smithing_template","item.minecraft.raiser_armor_trim_smithing_template","item.minecraft.host_armor_trim_smithing_template","item.minecraft.flow_armor_trim_smithing_template","item.minecraft.bolt_armor_trim_smithing_template","item.minecraft.angler_pottery_sherd","item.minecraft.archer_pottery_sherd","item.minecraft.arms_up_pottery_sherd","item.minecraft.blade_pottery_sherd","item.minecraft.brewer_pottery_sherd","item.minecraft.burn_pottery_sherd","item.minecraft.danger_pottery_sherd","item.minecraft.explorer_pottery_sherd","item.minecraft.flow_pottery_sherd","item.minecraft.friend_pottery_sherd","item.minecraft.guster_pottery_sherd","item.minecraft.heart_pottery_sherd","item.minecraft.heartbreak_pottery_sherd","item.minecraft.howl_pottery_sherd","item.minecraft.miner_pottery_sherd","item.minecraft.mourner_pottery_sherd","item.minecraft.plenty_pottery_sherd","item.minecraft.prize_pottery_sherd","item.minecraft.scrape_pottery_sherd","item.minecraft.sheaf_pottery_sherd","item.minecraft.shelter_pottery_sherd","item.minecraft.skull_pottery_sherd","item.minecraft.snort_pottery_sherd","block.minecraft.copper_grate","block.minecraft.exposed_copper_grate","block.minecraft.weathered_copper_grate","block.minecraft.oxidized_copper_grate","block.minecraft.waxed_copper_grate","block.minecraft.waxed_exposed_copper_grate","block.minecraft.waxed_weathered_copper_grate","block.minecraft.waxed_oxidized_copper_grate","block.minecraft.copper_bulb","block.minecraft.exposed_copper_bulb","block.minecraft.weathered_copper_bulb","block.minecraft.oxidized_copper_bulb","block.minecraft.waxed_copper_bulb","block.minecraft.waxed_exposed_copper_bulb","block.minecraft.waxed_weathered_copper_bulb","block.minecraft.waxed_oxidized_copper_bulb","block.minecraft.copper_chest","block.minecraft.exposed_copper_chest","block.minecraft.weathered_copper_chest","block.minecraft.oxidized_copper_chest","block.minecraft.waxed_copper_chest","block.minecraft.waxed_exposed_copper_chest","block.minecraft.waxed_weathered_copper_chest","block.minecraft.waxed_oxidized_copper_chest","block.minecraft.copper_golem_statue","block.minecraft.exposed_copper_golem_statue","block.minecraft.weathered_copper_golem_statue","block.minecraft.oxidized_copper_golem_statue","block.minecraft.waxed_copper_golem_statue","block.minecraft.waxed_exposed_copper_golem_statue","block.minecraft.waxed_weathered_copper_golem_statue","block.minecraft.waxed_oxidized_copper_golem_statue","block.minecraft.trial_spawner","item.minecraft.trial_key","item.minecraft.ominous_trial_key","block.minecraft.vault","item.minecraft.ominous_bottle"]; +static ITEM_NAME_VALUES: [&str; 1506] = ["block.minecraft.air","block.minecraft.stone","block.minecraft.granite","block.minecraft.polished_granite","block.minecraft.diorite","block.minecraft.polished_diorite","block.minecraft.andesite","block.minecraft.polished_andesite","block.minecraft.deepslate","block.minecraft.cobbled_deepslate","block.minecraft.polished_deepslate","block.minecraft.calcite","block.minecraft.tuff","block.minecraft.tuff_slab","block.minecraft.tuff_stairs","block.minecraft.tuff_wall","block.minecraft.chiseled_tuff","block.minecraft.polished_tuff","block.minecraft.polished_tuff_slab","block.minecraft.polished_tuff_stairs","block.minecraft.polished_tuff_wall","block.minecraft.tuff_bricks","block.minecraft.tuff_brick_slab","block.minecraft.tuff_brick_stairs","block.minecraft.tuff_brick_wall","block.minecraft.chiseled_tuff_bricks","block.minecraft.dripstone_block","block.minecraft.grass_block","block.minecraft.dirt","block.minecraft.coarse_dirt","block.minecraft.podzol","block.minecraft.rooted_dirt","block.minecraft.mud","block.minecraft.crimson_nylium","block.minecraft.warped_nylium","block.minecraft.cobblestone","block.minecraft.oak_planks","block.minecraft.spruce_planks","block.minecraft.birch_planks","block.minecraft.jungle_planks","block.minecraft.acacia_planks","block.minecraft.cherry_planks","block.minecraft.dark_oak_planks","block.minecraft.pale_oak_planks","block.minecraft.mangrove_planks","block.minecraft.bamboo_planks","block.minecraft.crimson_planks","block.minecraft.warped_planks","block.minecraft.bamboo_mosaic","block.minecraft.oak_sapling","block.minecraft.spruce_sapling","block.minecraft.birch_sapling","block.minecraft.jungle_sapling","block.minecraft.acacia_sapling","block.minecraft.cherry_sapling","block.minecraft.dark_oak_sapling","block.minecraft.pale_oak_sapling","block.minecraft.mangrove_propagule","block.minecraft.bedrock","block.minecraft.sand","block.minecraft.suspicious_sand","block.minecraft.suspicious_gravel","block.minecraft.red_sand","block.minecraft.gravel","block.minecraft.coal_ore","block.minecraft.deepslate_coal_ore","block.minecraft.iron_ore","block.minecraft.deepslate_iron_ore","block.minecraft.copper_ore","block.minecraft.deepslate_copper_ore","block.minecraft.gold_ore","block.minecraft.deepslate_gold_ore","block.minecraft.redstone_ore","block.minecraft.deepslate_redstone_ore","block.minecraft.emerald_ore","block.minecraft.deepslate_emerald_ore","block.minecraft.lapis_ore","block.minecraft.deepslate_lapis_ore","block.minecraft.diamond_ore","block.minecraft.deepslate_diamond_ore","block.minecraft.nether_gold_ore","block.minecraft.nether_quartz_ore","block.minecraft.ancient_debris","block.minecraft.coal_block","block.minecraft.raw_iron_block","block.minecraft.raw_copper_block","block.minecraft.raw_gold_block","block.minecraft.heavy_core","block.minecraft.amethyst_block","block.minecraft.budding_amethyst","block.minecraft.iron_block","block.minecraft.copper_block","block.minecraft.gold_block","block.minecraft.diamond_block","block.minecraft.netherite_block","block.minecraft.exposed_copper","block.minecraft.weathered_copper","block.minecraft.oxidized_copper","block.minecraft.chiseled_copper","block.minecraft.exposed_chiseled_copper","block.minecraft.weathered_chiseled_copper","block.minecraft.oxidized_chiseled_copper","block.minecraft.cut_copper","block.minecraft.exposed_cut_copper","block.minecraft.weathered_cut_copper","block.minecraft.oxidized_cut_copper","block.minecraft.cut_copper_stairs","block.minecraft.exposed_cut_copper_stairs","block.minecraft.weathered_cut_copper_stairs","block.minecraft.oxidized_cut_copper_stairs","block.minecraft.cut_copper_slab","block.minecraft.exposed_cut_copper_slab","block.minecraft.weathered_cut_copper_slab","block.minecraft.oxidized_cut_copper_slab","block.minecraft.waxed_copper_block","block.minecraft.waxed_exposed_copper","block.minecraft.waxed_weathered_copper","block.minecraft.waxed_oxidized_copper","block.minecraft.waxed_chiseled_copper","block.minecraft.waxed_exposed_chiseled_copper","block.minecraft.waxed_weathered_chiseled_copper","block.minecraft.waxed_oxidized_chiseled_copper","block.minecraft.waxed_cut_copper","block.minecraft.waxed_exposed_cut_copper","block.minecraft.waxed_weathered_cut_copper","block.minecraft.waxed_oxidized_cut_copper","block.minecraft.waxed_cut_copper_stairs","block.minecraft.waxed_exposed_cut_copper_stairs","block.minecraft.waxed_weathered_cut_copper_stairs","block.minecraft.waxed_oxidized_cut_copper_stairs","block.minecraft.waxed_cut_copper_slab","block.minecraft.waxed_exposed_cut_copper_slab","block.minecraft.waxed_weathered_cut_copper_slab","block.minecraft.waxed_oxidized_cut_copper_slab","block.minecraft.oak_log","block.minecraft.spruce_log","block.minecraft.birch_log","block.minecraft.jungle_log","block.minecraft.acacia_log","block.minecraft.cherry_log","block.minecraft.pale_oak_log","block.minecraft.dark_oak_log","block.minecraft.mangrove_log","block.minecraft.mangrove_roots","block.minecraft.muddy_mangrove_roots","block.minecraft.crimson_stem","block.minecraft.warped_stem","block.minecraft.bamboo_block","block.minecraft.stripped_oak_log","block.minecraft.stripped_spruce_log","block.minecraft.stripped_birch_log","block.minecraft.stripped_jungle_log","block.minecraft.stripped_acacia_log","block.minecraft.stripped_cherry_log","block.minecraft.stripped_dark_oak_log","block.minecraft.stripped_pale_oak_log","block.minecraft.stripped_mangrove_log","block.minecraft.stripped_crimson_stem","block.minecraft.stripped_warped_stem","block.minecraft.stripped_oak_wood","block.minecraft.stripped_spruce_wood","block.minecraft.stripped_birch_wood","block.minecraft.stripped_jungle_wood","block.minecraft.stripped_acacia_wood","block.minecraft.stripped_cherry_wood","block.minecraft.stripped_dark_oak_wood","block.minecraft.stripped_pale_oak_wood","block.minecraft.stripped_mangrove_wood","block.minecraft.stripped_crimson_hyphae","block.minecraft.stripped_warped_hyphae","block.minecraft.stripped_bamboo_block","block.minecraft.oak_wood","block.minecraft.spruce_wood","block.minecraft.birch_wood","block.minecraft.jungle_wood","block.minecraft.acacia_wood","block.minecraft.cherry_wood","block.minecraft.pale_oak_wood","block.minecraft.dark_oak_wood","block.minecraft.mangrove_wood","block.minecraft.crimson_hyphae","block.minecraft.warped_hyphae","block.minecraft.oak_leaves","block.minecraft.spruce_leaves","block.minecraft.birch_leaves","block.minecraft.jungle_leaves","block.minecraft.acacia_leaves","block.minecraft.cherry_leaves","block.minecraft.dark_oak_leaves","block.minecraft.pale_oak_leaves","block.minecraft.mangrove_leaves","block.minecraft.azalea_leaves","block.minecraft.flowering_azalea_leaves","block.minecraft.sponge","block.minecraft.wet_sponge","block.minecraft.glass","block.minecraft.tinted_glass","block.minecraft.lapis_block","block.minecraft.sandstone","block.minecraft.chiseled_sandstone","block.minecraft.cut_sandstone","block.minecraft.cobweb","block.minecraft.short_grass","block.minecraft.fern","block.minecraft.bush","block.minecraft.azalea","block.minecraft.flowering_azalea","block.minecraft.dead_bush","block.minecraft.firefly_bush","block.minecraft.short_dry_grass","block.minecraft.tall_dry_grass","block.minecraft.seagrass","block.minecraft.sea_pickle","block.minecraft.white_wool","block.minecraft.orange_wool","block.minecraft.magenta_wool","block.minecraft.light_blue_wool","block.minecraft.yellow_wool","block.minecraft.lime_wool","block.minecraft.pink_wool","block.minecraft.gray_wool","block.minecraft.light_gray_wool","block.minecraft.cyan_wool","block.minecraft.purple_wool","block.minecraft.blue_wool","block.minecraft.brown_wool","block.minecraft.green_wool","block.minecraft.red_wool","block.minecraft.black_wool","block.minecraft.dandelion","block.minecraft.golden_dandelion","block.minecraft.open_eyeblossom","block.minecraft.closed_eyeblossom","block.minecraft.poppy","block.minecraft.blue_orchid","block.minecraft.allium","block.minecraft.azure_bluet","block.minecraft.red_tulip","block.minecraft.orange_tulip","block.minecraft.white_tulip","block.minecraft.pink_tulip","block.minecraft.oxeye_daisy","block.minecraft.cornflower","block.minecraft.lily_of_the_valley","block.minecraft.wither_rose","block.minecraft.torchflower","block.minecraft.pitcher_plant","block.minecraft.spore_blossom","block.minecraft.brown_mushroom","block.minecraft.red_mushroom","block.minecraft.crimson_fungus","block.minecraft.warped_fungus","block.minecraft.crimson_roots","block.minecraft.warped_roots","block.minecraft.nether_sprouts","block.minecraft.weeping_vines","block.minecraft.twisting_vines","block.minecraft.sugar_cane","block.minecraft.kelp","block.minecraft.pink_petals","block.minecraft.wildflowers","block.minecraft.leaf_litter","block.minecraft.moss_carpet","block.minecraft.moss_block","block.minecraft.pale_moss_carpet","block.minecraft.pale_hanging_moss","block.minecraft.pale_moss_block","block.minecraft.hanging_roots","block.minecraft.big_dripleaf","block.minecraft.small_dripleaf","block.minecraft.bamboo","block.minecraft.oak_slab","block.minecraft.spruce_slab","block.minecraft.birch_slab","block.minecraft.jungle_slab","block.minecraft.acacia_slab","block.minecraft.cherry_slab","block.minecraft.dark_oak_slab","block.minecraft.pale_oak_slab","block.minecraft.mangrove_slab","block.minecraft.bamboo_slab","block.minecraft.bamboo_mosaic_slab","block.minecraft.crimson_slab","block.minecraft.warped_slab","block.minecraft.stone_slab","block.minecraft.smooth_stone_slab","block.minecraft.sandstone_slab","block.minecraft.cut_sandstone_slab","block.minecraft.petrified_oak_slab","block.minecraft.cobblestone_slab","block.minecraft.brick_slab","block.minecraft.stone_brick_slab","block.minecraft.mud_brick_slab","block.minecraft.nether_brick_slab","block.minecraft.quartz_slab","block.minecraft.red_sandstone_slab","block.minecraft.cut_red_sandstone_slab","block.minecraft.purpur_slab","block.minecraft.prismarine_slab","block.minecraft.prismarine_brick_slab","block.minecraft.dark_prismarine_slab","block.minecraft.smooth_quartz","block.minecraft.smooth_red_sandstone","block.minecraft.smooth_sandstone","block.minecraft.smooth_stone","block.minecraft.bricks","block.minecraft.acacia_shelf","block.minecraft.bamboo_shelf","block.minecraft.birch_shelf","block.minecraft.cherry_shelf","block.minecraft.crimson_shelf","block.minecraft.dark_oak_shelf","block.minecraft.jungle_shelf","block.minecraft.mangrove_shelf","block.minecraft.oak_shelf","block.minecraft.pale_oak_shelf","block.minecraft.spruce_shelf","block.minecraft.warped_shelf","block.minecraft.bookshelf","block.minecraft.chiseled_bookshelf","block.minecraft.decorated_pot","block.minecraft.mossy_cobblestone","block.minecraft.obsidian","block.minecraft.torch","block.minecraft.end_rod","block.minecraft.chorus_plant","block.minecraft.chorus_flower","block.minecraft.purpur_block","block.minecraft.purpur_pillar","block.minecraft.purpur_stairs","block.minecraft.spawner","block.minecraft.creaking_heart","block.minecraft.chest","block.minecraft.crafting_table","block.minecraft.farmland","block.minecraft.furnace","block.minecraft.ladder","block.minecraft.cobblestone_stairs","block.minecraft.snow","block.minecraft.ice","block.minecraft.snow_block","block.minecraft.cactus","block.minecraft.cactus_flower","block.minecraft.clay","block.minecraft.jukebox","block.minecraft.oak_fence","block.minecraft.spruce_fence","block.minecraft.birch_fence","block.minecraft.jungle_fence","block.minecraft.acacia_fence","block.minecraft.cherry_fence","block.minecraft.dark_oak_fence","block.minecraft.pale_oak_fence","block.minecraft.mangrove_fence","block.minecraft.bamboo_fence","block.minecraft.crimson_fence","block.minecraft.warped_fence","block.minecraft.pumpkin","block.minecraft.carved_pumpkin","block.minecraft.jack_o_lantern","block.minecraft.netherrack","block.minecraft.soul_sand","block.minecraft.soul_soil","block.minecraft.basalt","block.minecraft.polished_basalt","block.minecraft.smooth_basalt","block.minecraft.soul_torch","block.minecraft.copper_torch","block.minecraft.glowstone","block.minecraft.infested_stone","block.minecraft.infested_cobblestone","block.minecraft.infested_stone_bricks","block.minecraft.infested_mossy_stone_bricks","block.minecraft.infested_cracked_stone_bricks","block.minecraft.infested_chiseled_stone_bricks","block.minecraft.infested_deepslate","block.minecraft.stone_bricks","block.minecraft.mossy_stone_bricks","block.minecraft.cracked_stone_bricks","block.minecraft.chiseled_stone_bricks","block.minecraft.packed_mud","block.minecraft.mud_bricks","block.minecraft.deepslate_bricks","block.minecraft.cracked_deepslate_bricks","block.minecraft.deepslate_tiles","block.minecraft.cracked_deepslate_tiles","block.minecraft.chiseled_deepslate","block.minecraft.reinforced_deepslate","block.minecraft.brown_mushroom_block","block.minecraft.red_mushroom_block","block.minecraft.mushroom_stem","block.minecraft.iron_bars","block.minecraft.copper_bars","block.minecraft.exposed_copper_bars","block.minecraft.weathered_copper_bars","block.minecraft.oxidized_copper_bars","block.minecraft.waxed_copper_bars","block.minecraft.waxed_exposed_copper_bars","block.minecraft.waxed_weathered_copper_bars","block.minecraft.waxed_oxidized_copper_bars","block.minecraft.iron_chain","block.minecraft.copper_chain","block.minecraft.exposed_copper_chain","block.minecraft.weathered_copper_chain","block.minecraft.oxidized_copper_chain","block.minecraft.waxed_copper_chain","block.minecraft.waxed_exposed_copper_chain","block.minecraft.waxed_weathered_copper_chain","block.minecraft.waxed_oxidized_copper_chain","block.minecraft.glass_pane","block.minecraft.melon","block.minecraft.vine","block.minecraft.glow_lichen","item.minecraft.resin_clump","block.minecraft.resin_block","block.minecraft.resin_bricks","block.minecraft.resin_brick_stairs","block.minecraft.resin_brick_slab","block.minecraft.resin_brick_wall","block.minecraft.chiseled_resin_bricks","block.minecraft.brick_stairs","block.minecraft.stone_brick_stairs","block.minecraft.mud_brick_stairs","block.minecraft.mycelium","block.minecraft.lily_pad","block.minecraft.nether_bricks","block.minecraft.cracked_nether_bricks","block.minecraft.chiseled_nether_bricks","block.minecraft.nether_brick_fence","block.minecraft.nether_brick_stairs","block.minecraft.sculk","block.minecraft.sculk_vein","block.minecraft.sculk_catalyst","block.minecraft.sculk_shrieker","block.minecraft.enchanting_table","block.minecraft.end_portal_frame","block.minecraft.end_stone","block.minecraft.end_stone_bricks","block.minecraft.dragon_egg","block.minecraft.sandstone_stairs","block.minecraft.ender_chest","block.minecraft.emerald_block","block.minecraft.oak_stairs","block.minecraft.spruce_stairs","block.minecraft.birch_stairs","block.minecraft.jungle_stairs","block.minecraft.acacia_stairs","block.minecraft.cherry_stairs","block.minecraft.dark_oak_stairs","block.minecraft.pale_oak_stairs","block.minecraft.mangrove_stairs","block.minecraft.bamboo_stairs","block.minecraft.bamboo_mosaic_stairs","block.minecraft.crimson_stairs","block.minecraft.warped_stairs","block.minecraft.command_block","block.minecraft.beacon","block.minecraft.cobblestone_wall","block.minecraft.mossy_cobblestone_wall","block.minecraft.brick_wall","block.minecraft.prismarine_wall","block.minecraft.red_sandstone_wall","block.minecraft.mossy_stone_brick_wall","block.minecraft.granite_wall","block.minecraft.stone_brick_wall","block.minecraft.mud_brick_wall","block.minecraft.nether_brick_wall","block.minecraft.andesite_wall","block.minecraft.red_nether_brick_wall","block.minecraft.sandstone_wall","block.minecraft.end_stone_brick_wall","block.minecraft.diorite_wall","block.minecraft.blackstone_wall","block.minecraft.polished_blackstone_wall","block.minecraft.polished_blackstone_brick_wall","block.minecraft.cobbled_deepslate_wall","block.minecraft.polished_deepslate_wall","block.minecraft.deepslate_brick_wall","block.minecraft.deepslate_tile_wall","block.minecraft.anvil","block.minecraft.chipped_anvil","block.minecraft.damaged_anvil","block.minecraft.chiseled_quartz_block","block.minecraft.quartz_block","block.minecraft.quartz_bricks","block.minecraft.quartz_pillar","block.minecraft.quartz_stairs","block.minecraft.white_terracotta","block.minecraft.orange_terracotta","block.minecraft.magenta_terracotta","block.minecraft.light_blue_terracotta","block.minecraft.yellow_terracotta","block.minecraft.lime_terracotta","block.minecraft.pink_terracotta","block.minecraft.gray_terracotta","block.minecraft.light_gray_terracotta","block.minecraft.cyan_terracotta","block.minecraft.purple_terracotta","block.minecraft.blue_terracotta","block.minecraft.brown_terracotta","block.minecraft.green_terracotta","block.minecraft.red_terracotta","block.minecraft.black_terracotta","block.minecraft.barrier","block.minecraft.light","block.minecraft.hay_block","block.minecraft.white_carpet","block.minecraft.orange_carpet","block.minecraft.magenta_carpet","block.minecraft.light_blue_carpet","block.minecraft.yellow_carpet","block.minecraft.lime_carpet","block.minecraft.pink_carpet","block.minecraft.gray_carpet","block.minecraft.light_gray_carpet","block.minecraft.cyan_carpet","block.minecraft.purple_carpet","block.minecraft.blue_carpet","block.minecraft.brown_carpet","block.minecraft.green_carpet","block.minecraft.red_carpet","block.minecraft.black_carpet","block.minecraft.terracotta","block.minecraft.packed_ice","block.minecraft.dirt_path","block.minecraft.sunflower","block.minecraft.lilac","block.minecraft.rose_bush","block.minecraft.peony","block.minecraft.tall_grass","block.minecraft.large_fern","block.minecraft.white_stained_glass","block.minecraft.orange_stained_glass","block.minecraft.magenta_stained_glass","block.minecraft.light_blue_stained_glass","block.minecraft.yellow_stained_glass","block.minecraft.lime_stained_glass","block.minecraft.pink_stained_glass","block.minecraft.gray_stained_glass","block.minecraft.light_gray_stained_glass","block.minecraft.cyan_stained_glass","block.minecraft.purple_stained_glass","block.minecraft.blue_stained_glass","block.minecraft.brown_stained_glass","block.minecraft.green_stained_glass","block.minecraft.red_stained_glass","block.minecraft.black_stained_glass","block.minecraft.white_stained_glass_pane","block.minecraft.orange_stained_glass_pane","block.minecraft.magenta_stained_glass_pane","block.minecraft.light_blue_stained_glass_pane","block.minecraft.yellow_stained_glass_pane","block.minecraft.lime_stained_glass_pane","block.minecraft.pink_stained_glass_pane","block.minecraft.gray_stained_glass_pane","block.minecraft.light_gray_stained_glass_pane","block.minecraft.cyan_stained_glass_pane","block.minecraft.purple_stained_glass_pane","block.minecraft.blue_stained_glass_pane","block.minecraft.brown_stained_glass_pane","block.minecraft.green_stained_glass_pane","block.minecraft.red_stained_glass_pane","block.minecraft.black_stained_glass_pane","block.minecraft.prismarine","block.minecraft.prismarine_bricks","block.minecraft.dark_prismarine","block.minecraft.prismarine_stairs","block.minecraft.prismarine_brick_stairs","block.minecraft.dark_prismarine_stairs","block.minecraft.sea_lantern","block.minecraft.red_sandstone","block.minecraft.chiseled_red_sandstone","block.minecraft.cut_red_sandstone","block.minecraft.red_sandstone_stairs","block.minecraft.repeating_command_block","block.minecraft.chain_command_block","block.minecraft.magma_block","block.minecraft.nether_wart_block","block.minecraft.warped_wart_block","block.minecraft.red_nether_bricks","block.minecraft.bone_block","block.minecraft.structure_void","block.minecraft.shulker_box","block.minecraft.white_shulker_box","block.minecraft.orange_shulker_box","block.minecraft.magenta_shulker_box","block.minecraft.light_blue_shulker_box","block.minecraft.yellow_shulker_box","block.minecraft.lime_shulker_box","block.minecraft.pink_shulker_box","block.minecraft.gray_shulker_box","block.minecraft.light_gray_shulker_box","block.minecraft.cyan_shulker_box","block.minecraft.purple_shulker_box","block.minecraft.blue_shulker_box","block.minecraft.brown_shulker_box","block.minecraft.green_shulker_box","block.minecraft.red_shulker_box","block.minecraft.black_shulker_box","block.minecraft.white_glazed_terracotta","block.minecraft.orange_glazed_terracotta","block.minecraft.magenta_glazed_terracotta","block.minecraft.light_blue_glazed_terracotta","block.minecraft.yellow_glazed_terracotta","block.minecraft.lime_glazed_terracotta","block.minecraft.pink_glazed_terracotta","block.minecraft.gray_glazed_terracotta","block.minecraft.light_gray_glazed_terracotta","block.minecraft.cyan_glazed_terracotta","block.minecraft.purple_glazed_terracotta","block.minecraft.blue_glazed_terracotta","block.minecraft.brown_glazed_terracotta","block.minecraft.green_glazed_terracotta","block.minecraft.red_glazed_terracotta","block.minecraft.black_glazed_terracotta","block.minecraft.white_concrete","block.minecraft.orange_concrete","block.minecraft.magenta_concrete","block.minecraft.light_blue_concrete","block.minecraft.yellow_concrete","block.minecraft.lime_concrete","block.minecraft.pink_concrete","block.minecraft.gray_concrete","block.minecraft.light_gray_concrete","block.minecraft.cyan_concrete","block.minecraft.purple_concrete","block.minecraft.blue_concrete","block.minecraft.brown_concrete","block.minecraft.green_concrete","block.minecraft.red_concrete","block.minecraft.black_concrete","block.minecraft.white_concrete_powder","block.minecraft.orange_concrete_powder","block.minecraft.magenta_concrete_powder","block.minecraft.light_blue_concrete_powder","block.minecraft.yellow_concrete_powder","block.minecraft.lime_concrete_powder","block.minecraft.pink_concrete_powder","block.minecraft.gray_concrete_powder","block.minecraft.light_gray_concrete_powder","block.minecraft.cyan_concrete_powder","block.minecraft.purple_concrete_powder","block.minecraft.blue_concrete_powder","block.minecraft.brown_concrete_powder","block.minecraft.green_concrete_powder","block.minecraft.red_concrete_powder","block.minecraft.black_concrete_powder","block.minecraft.turtle_egg","block.minecraft.sniffer_egg","block.minecraft.dried_ghast","block.minecraft.dead_tube_coral_block","block.minecraft.dead_brain_coral_block","block.minecraft.dead_bubble_coral_block","block.minecraft.dead_fire_coral_block","block.minecraft.dead_horn_coral_block","block.minecraft.tube_coral_block","block.minecraft.brain_coral_block","block.minecraft.bubble_coral_block","block.minecraft.fire_coral_block","block.minecraft.horn_coral_block","block.minecraft.tube_coral","block.minecraft.brain_coral","block.minecraft.bubble_coral","block.minecraft.fire_coral","block.minecraft.horn_coral","block.minecraft.dead_brain_coral","block.minecraft.dead_bubble_coral","block.minecraft.dead_fire_coral","block.minecraft.dead_horn_coral","block.minecraft.dead_tube_coral","block.minecraft.tube_coral_fan","block.minecraft.brain_coral_fan","block.minecraft.bubble_coral_fan","block.minecraft.fire_coral_fan","block.minecraft.horn_coral_fan","block.minecraft.dead_tube_coral_fan","block.minecraft.dead_brain_coral_fan","block.minecraft.dead_bubble_coral_fan","block.minecraft.dead_fire_coral_fan","block.minecraft.dead_horn_coral_fan","block.minecraft.blue_ice","block.minecraft.conduit","block.minecraft.polished_granite_stairs","block.minecraft.smooth_red_sandstone_stairs","block.minecraft.mossy_stone_brick_stairs","block.minecraft.polished_diorite_stairs","block.minecraft.mossy_cobblestone_stairs","block.minecraft.end_stone_brick_stairs","block.minecraft.stone_stairs","block.minecraft.smooth_sandstone_stairs","block.minecraft.smooth_quartz_stairs","block.minecraft.granite_stairs","block.minecraft.andesite_stairs","block.minecraft.red_nether_brick_stairs","block.minecraft.polished_andesite_stairs","block.minecraft.diorite_stairs","block.minecraft.cobbled_deepslate_stairs","block.minecraft.polished_deepslate_stairs","block.minecraft.deepslate_brick_stairs","block.minecraft.deepslate_tile_stairs","block.minecraft.polished_granite_slab","block.minecraft.smooth_red_sandstone_slab","block.minecraft.mossy_stone_brick_slab","block.minecraft.polished_diorite_slab","block.minecraft.mossy_cobblestone_slab","block.minecraft.end_stone_brick_slab","block.minecraft.smooth_sandstone_slab","block.minecraft.smooth_quartz_slab","block.minecraft.granite_slab","block.minecraft.andesite_slab","block.minecraft.red_nether_brick_slab","block.minecraft.polished_andesite_slab","block.minecraft.diorite_slab","block.minecraft.cobbled_deepslate_slab","block.minecraft.polished_deepslate_slab","block.minecraft.deepslate_brick_slab","block.minecraft.deepslate_tile_slab","block.minecraft.scaffolding","item.minecraft.redstone","block.minecraft.redstone_torch","block.minecraft.redstone_block","block.minecraft.repeater","block.minecraft.comparator","block.minecraft.piston","block.minecraft.sticky_piston","block.minecraft.slime_block","block.minecraft.honey_block","block.minecraft.observer","block.minecraft.hopper","block.minecraft.dispenser","block.minecraft.dropper","block.minecraft.lectern","block.minecraft.target","block.minecraft.lever","block.minecraft.lightning_rod","block.minecraft.exposed_lightning_rod","block.minecraft.weathered_lightning_rod","block.minecraft.oxidized_lightning_rod","block.minecraft.waxed_lightning_rod","block.minecraft.waxed_exposed_lightning_rod","block.minecraft.waxed_weathered_lightning_rod","block.minecraft.waxed_oxidized_lightning_rod","block.minecraft.daylight_detector","block.minecraft.sculk_sensor","block.minecraft.calibrated_sculk_sensor","block.minecraft.tripwire_hook","block.minecraft.trapped_chest","block.minecraft.tnt","block.minecraft.redstone_lamp","block.minecraft.note_block","block.minecraft.stone_button","block.minecraft.polished_blackstone_button","block.minecraft.oak_button","block.minecraft.spruce_button","block.minecraft.birch_button","block.minecraft.jungle_button","block.minecraft.acacia_button","block.minecraft.cherry_button","block.minecraft.dark_oak_button","block.minecraft.pale_oak_button","block.minecraft.mangrove_button","block.minecraft.bamboo_button","block.minecraft.crimson_button","block.minecraft.warped_button","block.minecraft.stone_pressure_plate","block.minecraft.polished_blackstone_pressure_plate","block.minecraft.light_weighted_pressure_plate","block.minecraft.heavy_weighted_pressure_plate","block.minecraft.oak_pressure_plate","block.minecraft.spruce_pressure_plate","block.minecraft.birch_pressure_plate","block.minecraft.jungle_pressure_plate","block.minecraft.acacia_pressure_plate","block.minecraft.cherry_pressure_plate","block.minecraft.dark_oak_pressure_plate","block.minecraft.pale_oak_pressure_plate","block.minecraft.mangrove_pressure_plate","block.minecraft.bamboo_pressure_plate","block.minecraft.crimson_pressure_plate","block.minecraft.warped_pressure_plate","block.minecraft.iron_door","block.minecraft.oak_door","block.minecraft.spruce_door","block.minecraft.birch_door","block.minecraft.jungle_door","block.minecraft.acacia_door","block.minecraft.cherry_door","block.minecraft.dark_oak_door","block.minecraft.pale_oak_door","block.minecraft.mangrove_door","block.minecraft.bamboo_door","block.minecraft.crimson_door","block.minecraft.warped_door","block.minecraft.copper_door","block.minecraft.exposed_copper_door","block.minecraft.weathered_copper_door","block.minecraft.oxidized_copper_door","block.minecraft.waxed_copper_door","block.minecraft.waxed_exposed_copper_door","block.minecraft.waxed_weathered_copper_door","block.minecraft.waxed_oxidized_copper_door","block.minecraft.iron_trapdoor","block.minecraft.oak_trapdoor","block.minecraft.spruce_trapdoor","block.minecraft.birch_trapdoor","block.minecraft.jungle_trapdoor","block.minecraft.acacia_trapdoor","block.minecraft.cherry_trapdoor","block.minecraft.dark_oak_trapdoor","block.minecraft.pale_oak_trapdoor","block.minecraft.mangrove_trapdoor","block.minecraft.bamboo_trapdoor","block.minecraft.crimson_trapdoor","block.minecraft.warped_trapdoor","block.minecraft.copper_trapdoor","block.minecraft.exposed_copper_trapdoor","block.minecraft.weathered_copper_trapdoor","block.minecraft.oxidized_copper_trapdoor","block.minecraft.waxed_copper_trapdoor","block.minecraft.waxed_exposed_copper_trapdoor","block.minecraft.waxed_weathered_copper_trapdoor","block.minecraft.waxed_oxidized_copper_trapdoor","block.minecraft.oak_fence_gate","block.minecraft.spruce_fence_gate","block.minecraft.birch_fence_gate","block.minecraft.jungle_fence_gate","block.minecraft.acacia_fence_gate","block.minecraft.cherry_fence_gate","block.minecraft.dark_oak_fence_gate","block.minecraft.pale_oak_fence_gate","block.minecraft.mangrove_fence_gate","block.minecraft.bamboo_fence_gate","block.minecraft.crimson_fence_gate","block.minecraft.warped_fence_gate","block.minecraft.powered_rail","block.minecraft.detector_rail","block.minecraft.rail","block.minecraft.activator_rail","item.minecraft.saddle","item.minecraft.white_harness","item.minecraft.orange_harness","item.minecraft.magenta_harness","item.minecraft.light_blue_harness","item.minecraft.yellow_harness","item.minecraft.lime_harness","item.minecraft.pink_harness","item.minecraft.gray_harness","item.minecraft.light_gray_harness","item.minecraft.cyan_harness","item.minecraft.purple_harness","item.minecraft.blue_harness","item.minecraft.brown_harness","item.minecraft.green_harness","item.minecraft.red_harness","item.minecraft.black_harness","item.minecraft.minecart","item.minecraft.chest_minecart","item.minecraft.furnace_minecart","item.minecraft.tnt_minecart","item.minecraft.hopper_minecart","item.minecraft.carrot_on_a_stick","item.minecraft.warped_fungus_on_a_stick","item.minecraft.phantom_membrane","item.minecraft.elytra","item.minecraft.oak_boat","item.minecraft.oak_chest_boat","item.minecraft.spruce_boat","item.minecraft.spruce_chest_boat","item.minecraft.birch_boat","item.minecraft.birch_chest_boat","item.minecraft.jungle_boat","item.minecraft.jungle_chest_boat","item.minecraft.acacia_boat","item.minecraft.acacia_chest_boat","item.minecraft.cherry_boat","item.minecraft.cherry_chest_boat","item.minecraft.dark_oak_boat","item.minecraft.dark_oak_chest_boat","item.minecraft.pale_oak_boat","item.minecraft.pale_oak_chest_boat","item.minecraft.mangrove_boat","item.minecraft.mangrove_chest_boat","item.minecraft.bamboo_raft","item.minecraft.bamboo_chest_raft","block.minecraft.structure_block","block.minecraft.jigsaw","block.minecraft.test_block","block.minecraft.test_instance_block","item.minecraft.turtle_helmet","item.minecraft.turtle_scute","item.minecraft.armadillo_scute","item.minecraft.wolf_armor","item.minecraft.flint_and_steel","item.minecraft.bowl","item.minecraft.apple","item.minecraft.bow","item.minecraft.arrow","item.minecraft.coal","item.minecraft.charcoal","item.minecraft.diamond","item.minecraft.emerald","item.minecraft.lapis_lazuli","item.minecraft.quartz","item.minecraft.amethyst_shard","item.minecraft.raw_iron","item.minecraft.iron_ingot","item.minecraft.raw_copper","item.minecraft.copper_ingot","item.minecraft.raw_gold","item.minecraft.gold_ingot","item.minecraft.netherite_ingot","item.minecraft.netherite_scrap","item.minecraft.wooden_sword","item.minecraft.wooden_shovel","item.minecraft.wooden_pickaxe","item.minecraft.wooden_axe","item.minecraft.wooden_hoe","item.minecraft.copper_sword","item.minecraft.copper_shovel","item.minecraft.copper_pickaxe","item.minecraft.copper_axe","item.minecraft.copper_hoe","item.minecraft.stone_sword","item.minecraft.stone_shovel","item.minecraft.stone_pickaxe","item.minecraft.stone_axe","item.minecraft.stone_hoe","item.minecraft.golden_sword","item.minecraft.golden_shovel","item.minecraft.golden_pickaxe","item.minecraft.golden_axe","item.minecraft.golden_hoe","item.minecraft.iron_sword","item.minecraft.iron_shovel","item.minecraft.iron_pickaxe","item.minecraft.iron_axe","item.minecraft.iron_hoe","item.minecraft.diamond_sword","item.minecraft.diamond_shovel","item.minecraft.diamond_pickaxe","item.minecraft.diamond_axe","item.minecraft.diamond_hoe","item.minecraft.netherite_sword","item.minecraft.netherite_shovel","item.minecraft.netherite_pickaxe","item.minecraft.netherite_axe","item.minecraft.netherite_hoe","item.minecraft.stick","item.minecraft.mushroom_stew","item.minecraft.string","item.minecraft.feather","item.minecraft.gunpowder","item.minecraft.wheat_seeds","item.minecraft.wheat","item.minecraft.bread","item.minecraft.leather_helmet","item.minecraft.leather_chestplate","item.minecraft.leather_leggings","item.minecraft.leather_boots","item.minecraft.copper_helmet","item.minecraft.copper_chestplate","item.minecraft.copper_leggings","item.minecraft.copper_boots","item.minecraft.chainmail_helmet","item.minecraft.chainmail_chestplate","item.minecraft.chainmail_leggings","item.minecraft.chainmail_boots","item.minecraft.iron_helmet","item.minecraft.iron_chestplate","item.minecraft.iron_leggings","item.minecraft.iron_boots","item.minecraft.diamond_helmet","item.minecraft.diamond_chestplate","item.minecraft.diamond_leggings","item.minecraft.diamond_boots","item.minecraft.golden_helmet","item.minecraft.golden_chestplate","item.minecraft.golden_leggings","item.minecraft.golden_boots","item.minecraft.netherite_helmet","item.minecraft.netherite_chestplate","item.minecraft.netherite_leggings","item.minecraft.netherite_boots","item.minecraft.flint","item.minecraft.porkchop","item.minecraft.cooked_porkchop","item.minecraft.painting","item.minecraft.golden_apple","item.minecraft.enchanted_golden_apple","block.minecraft.oak_sign","block.minecraft.spruce_sign","block.minecraft.birch_sign","block.minecraft.jungle_sign","block.minecraft.acacia_sign","block.minecraft.cherry_sign","block.minecraft.dark_oak_sign","block.minecraft.pale_oak_sign","block.minecraft.mangrove_sign","block.minecraft.bamboo_sign","block.minecraft.crimson_sign","block.minecraft.warped_sign","block.minecraft.oak_hanging_sign","block.minecraft.spruce_hanging_sign","block.minecraft.birch_hanging_sign","block.minecraft.jungle_hanging_sign","block.minecraft.acacia_hanging_sign","block.minecraft.cherry_hanging_sign","block.minecraft.dark_oak_hanging_sign","block.minecraft.pale_oak_hanging_sign","block.minecraft.mangrove_hanging_sign","block.minecraft.bamboo_hanging_sign","block.minecraft.crimson_hanging_sign","block.minecraft.warped_hanging_sign","item.minecraft.bucket","item.minecraft.water_bucket","item.minecraft.lava_bucket","item.minecraft.powder_snow_bucket","item.minecraft.snowball","item.minecraft.leather","item.minecraft.milk_bucket","item.minecraft.pufferfish_bucket","item.minecraft.salmon_bucket","item.minecraft.cod_bucket","item.minecraft.tropical_fish_bucket","item.minecraft.axolotl_bucket","item.minecraft.tadpole_bucket","item.minecraft.brick","item.minecraft.clay_ball","block.minecraft.dried_kelp_block","item.minecraft.paper","item.minecraft.book","item.minecraft.slime_ball","item.minecraft.egg","item.minecraft.blue_egg","item.minecraft.brown_egg","item.minecraft.compass","item.minecraft.recovery_compass","item.minecraft.bundle","item.minecraft.white_bundle","item.minecraft.orange_bundle","item.minecraft.magenta_bundle","item.minecraft.light_blue_bundle","item.minecraft.yellow_bundle","item.minecraft.lime_bundle","item.minecraft.pink_bundle","item.minecraft.gray_bundle","item.minecraft.light_gray_bundle","item.minecraft.cyan_bundle","item.minecraft.purple_bundle","item.minecraft.blue_bundle","item.minecraft.brown_bundle","item.minecraft.green_bundle","item.minecraft.red_bundle","item.minecraft.black_bundle","item.minecraft.fishing_rod","item.minecraft.clock","item.minecraft.spyglass","item.minecraft.glowstone_dust","item.minecraft.cod","item.minecraft.salmon","item.minecraft.tropical_fish","item.minecraft.pufferfish","item.minecraft.cooked_cod","item.minecraft.cooked_salmon","item.minecraft.ink_sac","item.minecraft.glow_ink_sac","item.minecraft.cocoa_beans","item.minecraft.white_dye","item.minecraft.orange_dye","item.minecraft.magenta_dye","item.minecraft.light_blue_dye","item.minecraft.yellow_dye","item.minecraft.lime_dye","item.minecraft.pink_dye","item.minecraft.gray_dye","item.minecraft.light_gray_dye","item.minecraft.cyan_dye","item.minecraft.purple_dye","item.minecraft.blue_dye","item.minecraft.brown_dye","item.minecraft.green_dye","item.minecraft.red_dye","item.minecraft.black_dye","item.minecraft.bone_meal","item.minecraft.bone","item.minecraft.sugar","block.minecraft.cake","block.minecraft.white_bed","block.minecraft.orange_bed","block.minecraft.magenta_bed","block.minecraft.light_blue_bed","block.minecraft.yellow_bed","block.minecraft.lime_bed","block.minecraft.pink_bed","block.minecraft.gray_bed","block.minecraft.light_gray_bed","block.minecraft.cyan_bed","block.minecraft.purple_bed","block.minecraft.blue_bed","block.minecraft.brown_bed","block.minecraft.green_bed","block.minecraft.red_bed","block.minecraft.black_bed","item.minecraft.cookie","block.minecraft.crafter","item.minecraft.filled_map","item.minecraft.shears","item.minecraft.melon_slice","item.minecraft.dried_kelp","item.minecraft.pumpkin_seeds","item.minecraft.melon_seeds","item.minecraft.beef","item.minecraft.cooked_beef","item.minecraft.chicken","item.minecraft.cooked_chicken","item.minecraft.rotten_flesh","item.minecraft.ender_pearl","item.minecraft.blaze_rod","item.minecraft.ghast_tear","item.minecraft.gold_nugget","item.minecraft.nether_wart","item.minecraft.glass_bottle","item.minecraft.potion","item.minecraft.spider_eye","item.minecraft.fermented_spider_eye","item.minecraft.blaze_powder","item.minecraft.magma_cream","block.minecraft.brewing_stand","block.minecraft.cauldron","item.minecraft.ender_eye","item.minecraft.glistering_melon_slice","item.minecraft.chicken_spawn_egg","item.minecraft.cow_spawn_egg","item.minecraft.pig_spawn_egg","item.minecraft.sheep_spawn_egg","item.minecraft.camel_spawn_egg","item.minecraft.donkey_spawn_egg","item.minecraft.horse_spawn_egg","item.minecraft.mule_spawn_egg","item.minecraft.cat_spawn_egg","item.minecraft.parrot_spawn_egg","item.minecraft.wolf_spawn_egg","item.minecraft.armadillo_spawn_egg","item.minecraft.bat_spawn_egg","item.minecraft.bee_spawn_egg","item.minecraft.fox_spawn_egg","item.minecraft.goat_spawn_egg","item.minecraft.llama_spawn_egg","item.minecraft.ocelot_spawn_egg","item.minecraft.panda_spawn_egg","item.minecraft.polar_bear_spawn_egg","item.minecraft.rabbit_spawn_egg","item.minecraft.axolotl_spawn_egg","item.minecraft.cod_spawn_egg","item.minecraft.dolphin_spawn_egg","item.minecraft.frog_spawn_egg","item.minecraft.glow_squid_spawn_egg","item.minecraft.nautilus_spawn_egg","item.minecraft.pufferfish_spawn_egg","item.minecraft.salmon_spawn_egg","item.minecraft.squid_spawn_egg","item.minecraft.tadpole_spawn_egg","item.minecraft.tropical_fish_spawn_egg","item.minecraft.turtle_spawn_egg","item.minecraft.allay_spawn_egg","item.minecraft.mooshroom_spawn_egg","item.minecraft.sniffer_spawn_egg","item.minecraft.copper_golem_spawn_egg","item.minecraft.iron_golem_spawn_egg","item.minecraft.snow_golem_spawn_egg","item.minecraft.trader_llama_spawn_egg","item.minecraft.villager_spawn_egg","item.minecraft.wandering_trader_spawn_egg","item.minecraft.bogged_spawn_egg","item.minecraft.camel_husk_spawn_egg","item.minecraft.drowned_spawn_egg","item.minecraft.husk_spawn_egg","item.minecraft.parched_spawn_egg","item.minecraft.skeleton_spawn_egg","item.minecraft.skeleton_horse_spawn_egg","item.minecraft.stray_spawn_egg","item.minecraft.wither_spawn_egg","item.minecraft.wither_skeleton_spawn_egg","item.minecraft.zombie_spawn_egg","item.minecraft.zombie_horse_spawn_egg","item.minecraft.zombie_nautilus_spawn_egg","item.minecraft.zombie_villager_spawn_egg","item.minecraft.cave_spider_spawn_egg","item.minecraft.spider_spawn_egg","item.minecraft.breeze_spawn_egg","item.minecraft.creaking_spawn_egg","item.minecraft.creeper_spawn_egg","item.minecraft.elder_guardian_spawn_egg","item.minecraft.guardian_spawn_egg","item.minecraft.phantom_spawn_egg","item.minecraft.silverfish_spawn_egg","item.minecraft.slime_spawn_egg","item.minecraft.warden_spawn_egg","item.minecraft.witch_spawn_egg","item.minecraft.evoker_spawn_egg","item.minecraft.pillager_spawn_egg","item.minecraft.ravager_spawn_egg","item.minecraft.vindicator_spawn_egg","item.minecraft.vex_spawn_egg","item.minecraft.blaze_spawn_egg","item.minecraft.ghast_spawn_egg","item.minecraft.happy_ghast_spawn_egg","item.minecraft.hoglin_spawn_egg","item.minecraft.magma_cube_spawn_egg","item.minecraft.piglin_spawn_egg","item.minecraft.piglin_brute_spawn_egg","item.minecraft.strider_spawn_egg","item.minecraft.zoglin_spawn_egg","item.minecraft.zombified_piglin_spawn_egg","item.minecraft.ender_dragon_spawn_egg","item.minecraft.enderman_spawn_egg","item.minecraft.endermite_spawn_egg","item.minecraft.shulker_spawn_egg","item.minecraft.experience_bottle","item.minecraft.fire_charge","item.minecraft.wind_charge","item.minecraft.writable_book","item.minecraft.written_book","item.minecraft.breeze_rod","item.minecraft.mace","item.minecraft.item_frame","item.minecraft.glow_item_frame","block.minecraft.flower_pot","item.minecraft.carrot","item.minecraft.potato","item.minecraft.baked_potato","item.minecraft.poisonous_potato","item.minecraft.map","item.minecraft.golden_carrot","block.minecraft.skeleton_skull","block.minecraft.wither_skeleton_skull","block.minecraft.player_head","block.minecraft.zombie_head","block.minecraft.creeper_head","block.minecraft.dragon_head","block.minecraft.piglin_head","item.minecraft.nether_star","item.minecraft.pumpkin_pie","item.minecraft.firework_rocket","item.minecraft.firework_star","item.minecraft.enchanted_book","item.minecraft.nether_brick","item.minecraft.resin_brick","item.minecraft.prismarine_shard","item.minecraft.prismarine_crystals","item.minecraft.rabbit","item.minecraft.cooked_rabbit","item.minecraft.rabbit_stew","item.minecraft.rabbit_foot","item.minecraft.rabbit_hide","item.minecraft.armor_stand","item.minecraft.copper_horse_armor","item.minecraft.iron_horse_armor","item.minecraft.golden_horse_armor","item.minecraft.diamond_horse_armor","item.minecraft.netherite_horse_armor","item.minecraft.leather_horse_armor","item.minecraft.lead","item.minecraft.name_tag","item.minecraft.command_block_minecart","item.minecraft.mutton","item.minecraft.cooked_mutton","block.minecraft.white_banner","block.minecraft.orange_banner","block.minecraft.magenta_banner","block.minecraft.light_blue_banner","block.minecraft.yellow_banner","block.minecraft.lime_banner","block.minecraft.pink_banner","block.minecraft.gray_banner","block.minecraft.light_gray_banner","block.minecraft.cyan_banner","block.minecraft.purple_banner","block.minecraft.blue_banner","block.minecraft.brown_banner","block.minecraft.green_banner","block.minecraft.red_banner","block.minecraft.black_banner","item.minecraft.end_crystal","item.minecraft.chorus_fruit","item.minecraft.popped_chorus_fruit","item.minecraft.torchflower_seeds","item.minecraft.pitcher_pod","item.minecraft.beetroot","item.minecraft.beetroot_seeds","item.minecraft.beetroot_soup","item.minecraft.dragon_breath","item.minecraft.splash_potion","item.minecraft.spectral_arrow","item.minecraft.tipped_arrow","item.minecraft.lingering_potion","item.minecraft.shield","item.minecraft.wooden_spear","item.minecraft.stone_spear","item.minecraft.copper_spear","item.minecraft.iron_spear","item.minecraft.golden_spear","item.minecraft.diamond_spear","item.minecraft.netherite_spear","item.minecraft.totem_of_undying","item.minecraft.shulker_shell","item.minecraft.iron_nugget","item.minecraft.copper_nugget","item.minecraft.knowledge_book","item.minecraft.debug_stick","item.minecraft.music_disc_13","item.minecraft.music_disc_cat","item.minecraft.music_disc_blocks","item.minecraft.music_disc_chirp","item.minecraft.music_disc_creator","item.minecraft.music_disc_creator_music_box","item.minecraft.music_disc_far","item.minecraft.music_disc_lava_chicken","item.minecraft.music_disc_mall","item.minecraft.music_disc_mellohi","item.minecraft.music_disc_stal","item.minecraft.music_disc_strad","item.minecraft.music_disc_ward","item.minecraft.music_disc_11","item.minecraft.music_disc_wait","item.minecraft.music_disc_otherside","item.minecraft.music_disc_relic","item.minecraft.music_disc_5","item.minecraft.music_disc_pigstep","item.minecraft.music_disc_precipice","item.minecraft.music_disc_tears","item.minecraft.disc_fragment_5","item.minecraft.trident","item.minecraft.nautilus_shell","item.minecraft.iron_nautilus_armor","item.minecraft.golden_nautilus_armor","item.minecraft.diamond_nautilus_armor","item.minecraft.netherite_nautilus_armor","item.minecraft.copper_nautilus_armor","item.minecraft.heart_of_the_sea","item.minecraft.crossbow","item.minecraft.suspicious_stew","block.minecraft.loom","item.minecraft.flower_banner_pattern","item.minecraft.creeper_banner_pattern","item.minecraft.skull_banner_pattern","item.minecraft.mojang_banner_pattern","item.minecraft.globe_banner_pattern","item.minecraft.piglin_banner_pattern","item.minecraft.flow_banner_pattern","item.minecraft.guster_banner_pattern","item.minecraft.field_masoned_banner_pattern","item.minecraft.bordure_indented_banner_pattern","item.minecraft.goat_horn","block.minecraft.composter","block.minecraft.barrel","block.minecraft.smoker","block.minecraft.blast_furnace","block.minecraft.cartography_table","block.minecraft.fletching_table","block.minecraft.grindstone","block.minecraft.smithing_table","block.minecraft.stonecutter","block.minecraft.bell","block.minecraft.lantern","block.minecraft.soul_lantern","block.minecraft.copper_lantern","block.minecraft.exposed_copper_lantern","block.minecraft.weathered_copper_lantern","block.minecraft.oxidized_copper_lantern","block.minecraft.waxed_copper_lantern","block.minecraft.waxed_exposed_copper_lantern","block.minecraft.waxed_weathered_copper_lantern","block.minecraft.waxed_oxidized_copper_lantern","item.minecraft.sweet_berries","item.minecraft.glow_berries","block.minecraft.campfire","block.minecraft.soul_campfire","block.minecraft.shroomlight","item.minecraft.honeycomb","block.minecraft.bee_nest","block.minecraft.beehive","item.minecraft.honey_bottle","block.minecraft.honeycomb_block","block.minecraft.lodestone","block.minecraft.crying_obsidian","block.minecraft.blackstone","block.minecraft.blackstone_slab","block.minecraft.blackstone_stairs","block.minecraft.gilded_blackstone","block.minecraft.polished_blackstone","block.minecraft.polished_blackstone_slab","block.minecraft.polished_blackstone_stairs","block.minecraft.chiseled_polished_blackstone","block.minecraft.polished_blackstone_bricks","block.minecraft.polished_blackstone_brick_slab","block.minecraft.polished_blackstone_brick_stairs","block.minecraft.cracked_polished_blackstone_bricks","block.minecraft.respawn_anchor","block.minecraft.candle","block.minecraft.white_candle","block.minecraft.orange_candle","block.minecraft.magenta_candle","block.minecraft.light_blue_candle","block.minecraft.yellow_candle","block.minecraft.lime_candle","block.minecraft.pink_candle","block.minecraft.gray_candle","block.minecraft.light_gray_candle","block.minecraft.cyan_candle","block.minecraft.purple_candle","block.minecraft.blue_candle","block.minecraft.brown_candle","block.minecraft.green_candle","block.minecraft.red_candle","block.minecraft.black_candle","block.minecraft.small_amethyst_bud","block.minecraft.medium_amethyst_bud","block.minecraft.large_amethyst_bud","block.minecraft.amethyst_cluster","block.minecraft.pointed_dripstone","block.minecraft.ochre_froglight","block.minecraft.verdant_froglight","block.minecraft.pearlescent_froglight","block.minecraft.frogspawn","item.minecraft.echo_shard","item.minecraft.brush","item.minecraft.netherite_upgrade_smithing_template","item.minecraft.sentry_armor_trim_smithing_template","item.minecraft.dune_armor_trim_smithing_template","item.minecraft.coast_armor_trim_smithing_template","item.minecraft.wild_armor_trim_smithing_template","item.minecraft.ward_armor_trim_smithing_template","item.minecraft.eye_armor_trim_smithing_template","item.minecraft.vex_armor_trim_smithing_template","item.minecraft.tide_armor_trim_smithing_template","item.minecraft.snout_armor_trim_smithing_template","item.minecraft.rib_armor_trim_smithing_template","item.minecraft.spire_armor_trim_smithing_template","item.minecraft.wayfinder_armor_trim_smithing_template","item.minecraft.shaper_armor_trim_smithing_template","item.minecraft.silence_armor_trim_smithing_template","item.minecraft.raiser_armor_trim_smithing_template","item.minecraft.host_armor_trim_smithing_template","item.minecraft.flow_armor_trim_smithing_template","item.minecraft.bolt_armor_trim_smithing_template","item.minecraft.angler_pottery_sherd","item.minecraft.archer_pottery_sherd","item.minecraft.arms_up_pottery_sherd","item.minecraft.blade_pottery_sherd","item.minecraft.brewer_pottery_sherd","item.minecraft.burn_pottery_sherd","item.minecraft.danger_pottery_sherd","item.minecraft.explorer_pottery_sherd","item.minecraft.flow_pottery_sherd","item.minecraft.friend_pottery_sherd","item.minecraft.guster_pottery_sherd","item.minecraft.heart_pottery_sherd","item.minecraft.heartbreak_pottery_sherd","item.minecraft.howl_pottery_sherd","item.minecraft.miner_pottery_sherd","item.minecraft.mourner_pottery_sherd","item.minecraft.plenty_pottery_sherd","item.minecraft.prize_pottery_sherd","item.minecraft.scrape_pottery_sherd","item.minecraft.sheaf_pottery_sherd","item.minecraft.shelter_pottery_sherd","item.minecraft.skull_pottery_sherd","item.minecraft.snort_pottery_sherd","block.minecraft.copper_grate","block.minecraft.exposed_copper_grate","block.minecraft.weathered_copper_grate","block.minecraft.oxidized_copper_grate","block.minecraft.waxed_copper_grate","block.minecraft.waxed_exposed_copper_grate","block.minecraft.waxed_weathered_copper_grate","block.minecraft.waxed_oxidized_copper_grate","block.minecraft.copper_bulb","block.minecraft.exposed_copper_bulb","block.minecraft.weathered_copper_bulb","block.minecraft.oxidized_copper_bulb","block.minecraft.waxed_copper_bulb","block.minecraft.waxed_exposed_copper_bulb","block.minecraft.waxed_weathered_copper_bulb","block.minecraft.waxed_oxidized_copper_bulb","block.minecraft.copper_chest","block.minecraft.exposed_copper_chest","block.minecraft.weathered_copper_chest","block.minecraft.oxidized_copper_chest","block.minecraft.waxed_copper_chest","block.minecraft.waxed_exposed_copper_chest","block.minecraft.waxed_weathered_copper_chest","block.minecraft.waxed_oxidized_copper_chest","block.minecraft.copper_golem_statue","block.minecraft.exposed_copper_golem_statue","block.minecraft.weathered_copper_golem_statue","block.minecraft.oxidized_copper_golem_statue","block.minecraft.waxed_copper_golem_statue","block.minecraft.waxed_exposed_copper_golem_statue","block.minecraft.waxed_weathered_copper_golem_statue","block.minecraft.waxed_oxidized_copper_golem_statue","block.minecraft.trial_spawner","item.minecraft.trial_key","item.minecraft.ominous_trial_key","block.minecraft.vault","item.minecraft.ominous_bottle"]; impl DefaultableComponent for ItemName { fn default_for_item(item: ItemKind) -> Option<Self> { let value = ITEM_NAME_VALUES[item as usize]; @@ -2081,7 +2133,7 @@ impl DefaultableComponent for Lore { } } #[rustfmt::skip] -static MAX_STACK_SIZE_VALUES: [i32; 1505] = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,1,64,64,1,1,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,1,1,1,16,64,1,1,1,1,1,1,1,64,64,64,64,64,64,16,16,16,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,1,64,64,64,64,64,64,64,64,64,16,64,64,64,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,16,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,64,64,64,64,64,64,1,64,64,16,1,1,1,1,1,1,64,64,1,64,64,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,64,64,64,64,64,64,64,1,64,1,64,64,1,1,1,1,1,1,1,1,1,1,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,1,1,1,1,1,64,1,1,64,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,16,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]; +static MAX_STACK_SIZE_VALUES: [i32; 1506] = [64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,1,64,64,1,1,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,1,1,1,16,64,1,1,1,1,1,1,1,64,64,64,64,64,64,16,16,16,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,64,64,1,64,64,64,64,64,64,64,64,64,16,64,64,64,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,16,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,64,64,64,64,64,64,1,64,64,16,1,1,1,1,1,1,64,64,1,64,64,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,64,64,64,64,64,64,64,1,64,1,64,64,1,1,1,1,1,1,1,1,1,1,64,64,64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,64,1,64,1,1,1,1,1,64,1,1,64,1,1,1,1,1,1,1,1,1,1,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,16,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,1,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64,64]; impl DefaultableComponent for MaxStackSize { fn default_for_item(item: ItemKind) -> Option<Self> { let value = MAX_STACK_SIZE_VALUES[item as usize]; @@ -2299,795 +2351,6 @@ impl DefaultableComponent for UseEffects { Some(value) } } -impl DefaultableComponent for Container { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::AcaciaShelf => vec![], - ItemKind::BambooShelf => vec![], - ItemKind::Barrel => vec![], - ItemKind::BirchShelf => vec![], - ItemKind::BlackShulkerBox => vec![], - ItemKind::BlastFurnace => vec![], - ItemKind::BlueShulkerBox => vec![], - ItemKind::BrewingStand => vec![], - ItemKind::BrownShulkerBox => vec![], - ItemKind::Campfire => vec![], - ItemKind::CherryShelf => vec![], - ItemKind::Chest => vec![], - ItemKind::ChiseledBookshelf => vec![], - ItemKind::Crafter => vec![], - ItemKind::CrimsonShelf => vec![], - ItemKind::CyanShulkerBox => vec![], - ItemKind::DarkOakShelf => vec![], - ItemKind::DecoratedPot => vec![], - ItemKind::Dispenser => vec![], - ItemKind::Dropper => vec![], - ItemKind::Furnace => vec![], - ItemKind::GrayShulkerBox => vec![], - ItemKind::GreenShulkerBox => vec![], - ItemKind::Hopper => vec![], - ItemKind::JungleShelf => vec![], - ItemKind::LightBlueShulkerBox => vec![], - ItemKind::LightGrayShulkerBox => vec![], - ItemKind::LimeShulkerBox => vec![], - ItemKind::MagentaShulkerBox => vec![], - ItemKind::MangroveShelf => vec![], - ItemKind::OakShelf => vec![], - ItemKind::OrangeShulkerBox => vec![], - ItemKind::PaleOakShelf => vec![], - ItemKind::PinkShulkerBox => vec![], - ItemKind::PurpleShulkerBox => vec![], - ItemKind::RedShulkerBox => vec![], - ItemKind::ShulkerBox => vec![], - ItemKind::Smoker => vec![], - ItemKind::SoulCampfire => vec![], - ItemKind::SpruceShelf => vec![], - ItemKind::TrappedChest => vec![], - ItemKind::WarpedShelf => vec![], - ItemKind::WhiteShulkerBox => vec![], - ItemKind::YellowShulkerBox => vec![], - _ => return None, - }; - Some(Container { items: value }) - } -} -impl DefaultableComponent for EntityData { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::AllaySpawnEgg => EntityKind::Allay, - ItemKind::ArmadilloSpawnEgg => EntityKind::Armadillo, - ItemKind::AxolotlSpawnEgg => EntityKind::Axolotl, - ItemKind::BatSpawnEgg => EntityKind::Bat, - ItemKind::BeeSpawnEgg => EntityKind::Bee, - ItemKind::BlazeSpawnEgg => EntityKind::Blaze, - ItemKind::BoggedSpawnEgg => EntityKind::Bogged, - ItemKind::BreezeSpawnEgg => EntityKind::Breeze, - ItemKind::CamelHuskSpawnEgg => EntityKind::CamelHusk, - ItemKind::CamelSpawnEgg => EntityKind::Camel, - ItemKind::CatSpawnEgg => EntityKind::Cat, - ItemKind::CaveSpiderSpawnEgg => EntityKind::CaveSpider, - ItemKind::ChickenSpawnEgg => EntityKind::Chicken, - ItemKind::CodSpawnEgg => EntityKind::Cod, - ItemKind::CopperGolemSpawnEgg => EntityKind::CopperGolem, - ItemKind::CowSpawnEgg => EntityKind::Cow, - ItemKind::CreakingSpawnEgg => EntityKind::Creaking, - ItemKind::CreeperSpawnEgg => EntityKind::Creeper, - ItemKind::DolphinSpawnEgg => EntityKind::Dolphin, - ItemKind::DonkeySpawnEgg => EntityKind::Donkey, - ItemKind::DrownedSpawnEgg => EntityKind::Drowned, - ItemKind::ElderGuardianSpawnEgg => EntityKind::ElderGuardian, - ItemKind::EnderDragonSpawnEgg => EntityKind::EnderDragon, - ItemKind::EndermanSpawnEgg => EntityKind::Enderman, - ItemKind::EndermiteSpawnEgg => EntityKind::Endermite, - ItemKind::EvokerSpawnEgg => EntityKind::Evoker, - ItemKind::FoxSpawnEgg => EntityKind::Fox, - ItemKind::FrogSpawnEgg => EntityKind::Frog, - ItemKind::GhastSpawnEgg => EntityKind::Ghast, - ItemKind::GlowSquidSpawnEgg => EntityKind::GlowSquid, - ItemKind::GoatSpawnEgg => EntityKind::Goat, - ItemKind::GuardianSpawnEgg => EntityKind::Guardian, - ItemKind::HappyGhastSpawnEgg => EntityKind::HappyGhast, - ItemKind::HoglinSpawnEgg => EntityKind::Hoglin, - ItemKind::HorseSpawnEgg => EntityKind::Horse, - ItemKind::HuskSpawnEgg => EntityKind::Husk, - ItemKind::IronGolemSpawnEgg => EntityKind::IronGolem, - ItemKind::LlamaSpawnEgg => EntityKind::Llama, - ItemKind::MagmaCubeSpawnEgg => EntityKind::MagmaCube, - ItemKind::MooshroomSpawnEgg => EntityKind::Mooshroom, - ItemKind::MuleSpawnEgg => EntityKind::Mule, - ItemKind::NautilusSpawnEgg => EntityKind::Nautilus, - ItemKind::OcelotSpawnEgg => EntityKind::Ocelot, - ItemKind::PandaSpawnEgg => EntityKind::Panda, - ItemKind::ParchedSpawnEgg => EntityKind::Parched, - ItemKind::ParrotSpawnEgg => EntityKind::Parrot, - ItemKind::PhantomSpawnEgg => EntityKind::Phantom, - ItemKind::PigSpawnEgg => EntityKind::Pig, - ItemKind::PiglinBruteSpawnEgg => EntityKind::PiglinBrute, - ItemKind::PiglinSpawnEgg => EntityKind::Piglin, - ItemKind::PillagerSpawnEgg => EntityKind::Pillager, - ItemKind::PolarBearSpawnEgg => EntityKind::PolarBear, - ItemKind::PufferfishSpawnEgg => EntityKind::Pufferfish, - ItemKind::RabbitSpawnEgg => EntityKind::Rabbit, - ItemKind::RavagerSpawnEgg => EntityKind::Ravager, - ItemKind::SalmonSpawnEgg => EntityKind::Salmon, - ItemKind::SheepSpawnEgg => EntityKind::Sheep, - ItemKind::ShulkerSpawnEgg => EntityKind::Shulker, - ItemKind::SilverfishSpawnEgg => EntityKind::Silverfish, - ItemKind::SkeletonHorseSpawnEgg => EntityKind::SkeletonHorse, - ItemKind::SkeletonSpawnEgg => EntityKind::Skeleton, - ItemKind::SlimeSpawnEgg => EntityKind::Slime, - ItemKind::SnifferSpawnEgg => EntityKind::Sniffer, - ItemKind::SnowGolemSpawnEgg => EntityKind::SnowGolem, - ItemKind::SpiderSpawnEgg => EntityKind::Spider, - ItemKind::SquidSpawnEgg => EntityKind::Squid, - ItemKind::StraySpawnEgg => EntityKind::Stray, - ItemKind::StriderSpawnEgg => EntityKind::Strider, - ItemKind::TadpoleSpawnEgg => EntityKind::Tadpole, - ItemKind::TraderLlamaSpawnEgg => EntityKind::TraderLlama, - ItemKind::TropicalFishSpawnEgg => EntityKind::TropicalFish, - ItemKind::TurtleSpawnEgg => EntityKind::Turtle, - ItemKind::VexSpawnEgg => EntityKind::Vex, - ItemKind::VillagerSpawnEgg => EntityKind::Villager, - ItemKind::VindicatorSpawnEgg => EntityKind::Vindicator, - ItemKind::WanderingTraderSpawnEgg => EntityKind::WanderingTrader, - ItemKind::WardenSpawnEgg => EntityKind::Warden, - ItemKind::WitchSpawnEgg => EntityKind::Witch, - ItemKind::WitherSkeletonSpawnEgg => EntityKind::WitherSkeleton, - ItemKind::WitherSpawnEgg => EntityKind::Wither, - ItemKind::WolfSpawnEgg => EntityKind::Wolf, - ItemKind::ZoglinSpawnEgg => EntityKind::Zoglin, - ItemKind::ZombieHorseSpawnEgg => EntityKind::ZombieHorse, - ItemKind::ZombieNautilusSpawnEgg => EntityKind::ZombieNautilus, - ItemKind::ZombieSpawnEgg => EntityKind::Zombie, - ItemKind::ZombieVillagerSpawnEgg => EntityKind::ZombieVillager, - ItemKind::ZombifiedPiglinSpawnEgg => EntityKind::ZombifiedPiglin, - _ => return None, - }; - Some(EntityData { - kind: value, - data: NbtCompound::new(), - }) - } -} -impl DefaultableComponent for ProvidesTrimMaterial { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::AmethystShard => { - ProvidesTrimMaterial::Referenced("minecraft:amethyst".into()) - } - ItemKind::CopperIngot => ProvidesTrimMaterial::Referenced("minecraft:copper".into()), - ItemKind::Diamond => ProvidesTrimMaterial::Referenced("minecraft:diamond".into()), - ItemKind::Emerald => ProvidesTrimMaterial::Referenced("minecraft:emerald".into()), - ItemKind::GoldIngot => ProvidesTrimMaterial::Referenced("minecraft:gold".into()), - ItemKind::IronIngot => ProvidesTrimMaterial::Referenced("minecraft:iron".into()), - ItemKind::LapisLazuli => ProvidesTrimMaterial::Referenced("minecraft:lapis".into()), - ItemKind::NetheriteIngot => { - ProvidesTrimMaterial::Referenced("minecraft:netherite".into()) - } - ItemKind::Quartz => ProvidesTrimMaterial::Referenced("minecraft:quartz".into()), - ItemKind::Redstone => ProvidesTrimMaterial::Referenced("minecraft:redstone".into()), - ItemKind::ResinBrick => ProvidesTrimMaterial::Referenced("minecraft:resin".into()), - _ => return None, - }; - Some(value) - } -} -impl DefaultableComponent for DamageResistant { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::AncientDebris => "#minecraft:is_fire".into(), - ItemKind::NetherStar => "#minecraft:is_explosion".into(), - ItemKind::NetheriteAxe => "#minecraft:is_fire".into(), - ItemKind::NetheriteBlock => "#minecraft:is_fire".into(), - ItemKind::NetheriteBoots => "#minecraft:is_fire".into(), - ItemKind::NetheriteChestplate => "#minecraft:is_fire".into(), - ItemKind::NetheriteHelmet => "#minecraft:is_fire".into(), - ItemKind::NetheriteHoe => "#minecraft:is_fire".into(), - ItemKind::NetheriteHorseArmor => "#minecraft:is_fire".into(), - ItemKind::NetheriteIngot => "#minecraft:is_fire".into(), - ItemKind::NetheriteLeggings => "#minecraft:is_fire".into(), - ItemKind::NetheriteNautilusArmor => "#minecraft:is_fire".into(), - ItemKind::NetheritePickaxe => "#minecraft:is_fire".into(), - ItemKind::NetheriteScrap => "#minecraft:is_fire".into(), - ItemKind::NetheriteShovel => "#minecraft:is_fire".into(), - ItemKind::NetheriteSpear => "#minecraft:is_fire".into(), - ItemKind::NetheriteSword => "#minecraft:is_fire".into(), - _ => return None, - }; - Some(DamageResistant { types: value }) - } -} -impl DefaultableComponent for Consumable { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::Apple => Consumable::new(), - ItemKind::BakedPotato => Consumable::new(), - ItemKind::Beef => Consumable::new(), - ItemKind::Beetroot => Consumable::new(), - ItemKind::BeetrootSoup => Consumable::new(), - ItemKind::Bread => Consumable::new(), - ItemKind::Carrot => Consumable::new(), - ItemKind::Chicken => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![MobEffectInstance { - id: MobEffect::Hunger, - details: MobEffectDetails { - duration: 600, - show_icon: true, - ..MobEffectDetails::new() - }, - }], - probability: 0.3, - }], - ..Consumable::new() - }, - ItemKind::ChorusFruit => Consumable { - on_consume_effects: vec![ConsumeEffect::TeleportRandomly { diameter: 16.0 }], - ..Consumable::new() - }, - ItemKind::Cod => Consumable::new(), - ItemKind::CookedBeef => Consumable::new(), - ItemKind::CookedChicken => Consumable::new(), - ItemKind::CookedCod => Consumable::new(), - ItemKind::CookedMutton => Consumable::new(), - ItemKind::CookedPorkchop => Consumable::new(), - ItemKind::CookedRabbit => Consumable::new(), - ItemKind::CookedSalmon => Consumable::new(), - ItemKind::Cookie => Consumable::new(), - ItemKind::DriedKelp => Consumable { - consume_seconds: 0.8, - ..Consumable::new() - }, - ItemKind::EnchantedGoldenApple => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![ - MobEffectInstance { - id: MobEffect::Regeneration, - details: MobEffectDetails { - amplifier: 1, - duration: 400, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Resistance, - details: MobEffectDetails { - duration: 6000, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::FireResistance, - details: MobEffectDetails { - duration: 6000, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Absorption, - details: MobEffectDetails { - amplifier: 3, - duration: 2400, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - ], - probability: 1.0, - }], - ..Consumable::new() - }, - ItemKind::GlowBerries => Consumable::new(), - ItemKind::GoldenApple => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![ - MobEffectInstance { - id: MobEffect::Regeneration, - details: MobEffectDetails { - amplifier: 1, - duration: 100, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Absorption, - details: MobEffectDetails { - duration: 2400, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - ], - probability: 1.0, - }], - ..Consumable::new() - }, - ItemKind::GoldenCarrot => Consumable::new(), - ItemKind::HoneyBottle => Consumable { - animation: ItemUseAnimation::Drink, - consume_seconds: 2.0, - has_consume_particles: false, - on_consume_effects: vec![ConsumeEffect::RemoveEffects { - effects: HolderSet::Direct { - contents: vec![MobEffect::Poison], - }, - }], - sound: azalea_registry::Holder::Reference(SoundEvent::ItemHoneyBottleDrink), - }, - ItemKind::MelonSlice => Consumable::new(), - ItemKind::MilkBucket => Consumable { - animation: ItemUseAnimation::Drink, - has_consume_particles: false, - on_consume_effects: vec![ConsumeEffect::ClearAllEffects {}], - sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), - ..Consumable::new() - }, - ItemKind::MushroomStew => Consumable::new(), - ItemKind::Mutton => Consumable::new(), - ItemKind::OminousBottle => Consumable { - animation: ItemUseAnimation::Drink, - has_consume_particles: false, - on_consume_effects: vec![ConsumeEffect::PlaySound { - sound: SoundEvent::ItemOminousBottleDispose, - }], - sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), - ..Consumable::new() - }, - ItemKind::PoisonousPotato => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![MobEffectInstance { - id: MobEffect::Poison, - details: MobEffectDetails { - duration: 100, - show_icon: true, - ..MobEffectDetails::new() - }, - }], - probability: 0.6, - }], - ..Consumable::new() - }, - ItemKind::Porkchop => Consumable::new(), - ItemKind::Potato => Consumable::new(), - ItemKind::Potion => Consumable { - animation: ItemUseAnimation::Drink, - has_consume_particles: false, - sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), - ..Consumable::new() - }, - ItemKind::Pufferfish => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![ - MobEffectInstance { - id: MobEffect::Poison, - details: MobEffectDetails { - amplifier: 1, - duration: 1200, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Hunger, - details: MobEffectDetails { - amplifier: 2, - duration: 300, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Nausea, - details: MobEffectDetails { - duration: 300, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - ], - probability: 1.0, - }], - ..Consumable::new() - }, - ItemKind::PumpkinPie => Consumable::new(), - ItemKind::Rabbit => Consumable::new(), - ItemKind::RabbitStew => Consumable::new(), - ItemKind::RottenFlesh => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![MobEffectInstance { - id: MobEffect::Hunger, - details: MobEffectDetails { - duration: 600, - show_icon: true, - ..MobEffectDetails::new() - }, - }], - probability: 0.8, - }], - ..Consumable::new() - }, - ItemKind::Salmon => Consumable::new(), - ItemKind::SpiderEye => Consumable { - on_consume_effects: vec![ConsumeEffect::ApplyEffects { - effects: vec![MobEffectInstance { - id: MobEffect::Poison, - details: MobEffectDetails { - duration: 100, - show_icon: true, - ..MobEffectDetails::new() - }, - }], - probability: 1.0, - }], - ..Consumable::new() - }, - ItemKind::SuspiciousStew => Consumable::new(), - ItemKind::SweetBerries => Consumable::new(), - ItemKind::TropicalFish => Consumable::new(), - _ => return None, - }; - Some(value) - } -} -impl DefaultableComponent for Food { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::Apple => Food { - nutrition: 4, - saturation: 2.4, - ..Food::new() - }, - ItemKind::BakedPotato => Food { - nutrition: 5, - saturation: 6.0, - ..Food::new() - }, - ItemKind::Beef => Food { - nutrition: 3, - saturation: 1.8000001, - ..Food::new() - }, - ItemKind::Beetroot => Food { - nutrition: 1, - saturation: 1.2, - ..Food::new() - }, - ItemKind::BeetrootSoup => Food { - nutrition: 6, - saturation: 7.2000003, - ..Food::new() - }, - ItemKind::Bread => Food { - nutrition: 5, - saturation: 6.0, - ..Food::new() - }, - ItemKind::Carrot => Food { - nutrition: 3, - saturation: 3.6000001, - ..Food::new() - }, - ItemKind::Chicken => Food { - nutrition: 2, - saturation: 1.2, - ..Food::new() - }, - ItemKind::ChorusFruit => Food { - can_always_eat: true, - nutrition: 4, - saturation: 2.4, - }, - ItemKind::Cod => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::CodBucket => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::CookedBeef => Food { - nutrition: 8, - saturation: 12.8, - ..Food::new() - }, - ItemKind::CookedChicken => Food { - nutrition: 6, - saturation: 7.2000003, - ..Food::new() - }, - ItemKind::CookedCod => Food { - nutrition: 5, - saturation: 6.0, - ..Food::new() - }, - ItemKind::CookedMutton => Food { - nutrition: 6, - saturation: 9.6, - ..Food::new() - }, - ItemKind::CookedPorkchop => Food { - nutrition: 8, - saturation: 12.8, - ..Food::new() - }, - ItemKind::CookedRabbit => Food { - nutrition: 5, - saturation: 6.0, - ..Food::new() - }, - ItemKind::CookedSalmon => Food { - nutrition: 6, - saturation: 9.6, - ..Food::new() - }, - ItemKind::Cookie => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::DriedKelp => Food { - nutrition: 1, - saturation: 0.6, - ..Food::new() - }, - ItemKind::EnchantedGoldenApple => Food { - can_always_eat: true, - nutrition: 4, - saturation: 9.6, - }, - ItemKind::GlowBerries => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::GoldenApple => Food { - can_always_eat: true, - nutrition: 4, - saturation: 9.6, - }, - ItemKind::GoldenCarrot => Food { - nutrition: 6, - saturation: 14.400001, - ..Food::new() - }, - ItemKind::HoneyBottle => Food { - can_always_eat: true, - nutrition: 6, - saturation: 1.2, - }, - ItemKind::MelonSlice => Food { - nutrition: 2, - saturation: 1.2, - ..Food::new() - }, - ItemKind::MushroomStew => Food { - nutrition: 6, - saturation: 7.2000003, - ..Food::new() - }, - ItemKind::Mutton => Food { - nutrition: 2, - saturation: 1.2, - ..Food::new() - }, - ItemKind::PoisonousPotato => Food { - nutrition: 2, - saturation: 1.2, - ..Food::new() - }, - ItemKind::Porkchop => Food { - nutrition: 3, - saturation: 1.8000001, - ..Food::new() - }, - ItemKind::Potato => Food { - nutrition: 1, - saturation: 0.6, - ..Food::new() - }, - ItemKind::Pufferfish => Food { - nutrition: 1, - saturation: 0.2, - ..Food::new() - }, - ItemKind::PufferfishBucket => Food { - nutrition: 1, - saturation: 0.2, - ..Food::new() - }, - ItemKind::PumpkinPie => Food { - nutrition: 8, - saturation: 4.8, - ..Food::new() - }, - ItemKind::Rabbit => Food { - nutrition: 3, - saturation: 1.8000001, - ..Food::new() - }, - ItemKind::RabbitStew => Food { - nutrition: 10, - saturation: 12.0, - ..Food::new() - }, - ItemKind::RottenFlesh => Food { - nutrition: 4, - saturation: 0.8, - ..Food::new() - }, - ItemKind::Salmon => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::SalmonBucket => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::SpiderEye => Food { - nutrition: 2, - saturation: 3.2, - ..Food::new() - }, - ItemKind::SuspiciousStew => Food { - can_always_eat: true, - nutrition: 6, - saturation: 7.2000003, - }, - ItemKind::SweetBerries => Food { - nutrition: 2, - saturation: 0.4, - ..Food::new() - }, - ItemKind::TropicalFish => Food { - nutrition: 1, - saturation: 0.2, - ..Food::new() - }, - ItemKind::TropicalFishBucket => Food { - nutrition: 1, - saturation: 0.2, - ..Food::new() - }, - _ => return None, - }; - Some(value) - } -} -impl DefaultableComponent for BucketEntityData { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::AxolotlBucket => NbtCompound::from_values(vec![]), - ItemKind::CodBucket => NbtCompound::from_values(vec![]), - ItemKind::PufferfishBucket => NbtCompound::from_values(vec![]), - ItemKind::SalmonBucket => NbtCompound::from_values(vec![]), - ItemKind::TadpoleBucket => NbtCompound::from_values(vec![]), - ItemKind::TropicalFishBucket => NbtCompound::from_values(vec![]), - _ => return None, - }; - Some(BucketEntityData { entity: value }) - } -} -impl DefaultableComponent for Bees { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BeeNest => vec![], - ItemKind::Beehive => vec![], - _ => return None, - }; - Some(Bees { occupants: value }) - } -} -impl DefaultableComponent for BlockState { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BeeNest => HashMap::from_iter([("honey_level".to_owned(), "0".to_owned())]), - ItemKind::Beehive => HashMap::from_iter([("honey_level".to_owned(), "0".to_owned())]), - ItemKind::CopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::ExposedCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::Light => HashMap::from_iter([("level".to_owned(), "15".to_owned())]), - ItemKind::OxidizedCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::TestBlock => HashMap::from_iter([("mode".to_owned(), "start".to_owned())]), - ItemKind::WaxedCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::WaxedExposedCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::WaxedOxidizedCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::WaxedWeatheredCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - ItemKind::WeatheredCopperGolemStatue => { - HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) - } - _ => return None, - }; - Some(BlockState { properties: value }) - } -} -impl DefaultableComponent for UseRemainder { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BeetrootSoup => ItemStack::from(ItemKind::Bowl), - ItemKind::HoneyBottle => ItemStack::from(ItemKind::GlassBottle), - ItemKind::MilkBucket => ItemStack::from(ItemKind::Bucket), - ItemKind::MushroomStew => ItemStack::from(ItemKind::Bowl), - ItemKind::Potion => ItemStack::from(ItemKind::GlassBottle), - ItemKind::RabbitStew => ItemStack::from(ItemKind::Bowl), - ItemKind::SuspiciousStew => ItemStack::from(ItemKind::Bowl), - _ => return None, - }; - Some(UseRemainder { - convert_into: value, - }) - } -} -impl DefaultableComponent for BannerPatterns { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BlackBanner => vec![], - ItemKind::BlueBanner => vec![], - ItemKind::BrownBanner => vec![], - ItemKind::CyanBanner => vec![], - ItemKind::GrayBanner => vec![], - ItemKind::GreenBanner => vec![], - ItemKind::LightBlueBanner => vec![], - ItemKind::LightGrayBanner => vec![], - ItemKind::LimeBanner => vec![], - ItemKind::MagentaBanner => vec![], - ItemKind::OrangeBanner => vec![], - ItemKind::PinkBanner => vec![], - ItemKind::PurpleBanner => vec![], - ItemKind::RedBanner => vec![], - ItemKind::Shield => vec![], - ItemKind::WhiteBanner => vec![], - ItemKind::YellowBanner => vec![], - _ => return None, - }; - Some(BannerPatterns { patterns: value }) - } -} -impl DefaultableComponent for BundleContents { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BlackBundle => vec![], - ItemKind::BlueBundle => vec![], - ItemKind::BrownBundle => vec![], - ItemKind::Bundle => vec![], - ItemKind::CyanBundle => vec![], - ItemKind::GrayBundle => vec![], - ItemKind::GreenBundle => vec![], - ItemKind::LightBlueBundle => vec![], - ItemKind::LightGrayBundle => vec![], - ItemKind::LimeBundle => vec![], - ItemKind::MagentaBundle => vec![], - ItemKind::OrangeBundle => vec![], - ItemKind::PinkBundle => vec![], - ItemKind::PurpleBundle => vec![], - ItemKind::RedBundle => vec![], - ItemKind::WhiteBundle => vec![], - ItemKind::YellowBundle => vec![], - _ => return None, - }; - Some(BundleContents { items: value }) - } -} impl DefaultableComponent for Equippable { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { @@ -3935,122 +3198,6 @@ impl DefaultableComponent for Equippable { Some(value) } } -impl DefaultableComponent for ChickenVariant { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BlueEgg => ChickenVariant::Referenced("minecraft:cold".into()), - ItemKind::BrownEgg => ChickenVariant::Referenced("minecraft:warm".into()), - ItemKind::Egg => ChickenVariant::Referenced("minecraft:temperate".into()), - _ => return None, - }; - Some(value) - } -} -impl DefaultableComponent for Enchantable { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::Book => 1, - ItemKind::Bow => 1, - ItemKind::ChainmailBoots => 12, - ItemKind::ChainmailChestplate => 12, - ItemKind::ChainmailHelmet => 12, - ItemKind::ChainmailLeggings => 12, - ItemKind::CopperAxe => 13, - ItemKind::CopperBoots => 8, - ItemKind::CopperChestplate => 8, - ItemKind::CopperHelmet => 8, - ItemKind::CopperHoe => 13, - ItemKind::CopperLeggings => 8, - ItemKind::CopperPickaxe => 13, - ItemKind::CopperShovel => 13, - ItemKind::CopperSpear => 13, - ItemKind::CopperSword => 13, - ItemKind::Crossbow => 1, - ItemKind::DiamondAxe => 10, - ItemKind::DiamondBoots => 10, - ItemKind::DiamondChestplate => 10, - ItemKind::DiamondHelmet => 10, - ItemKind::DiamondHoe => 10, - ItemKind::DiamondLeggings => 10, - ItemKind::DiamondPickaxe => 10, - ItemKind::DiamondShovel => 10, - ItemKind::DiamondSpear => 10, - ItemKind::DiamondSword => 10, - ItemKind::FishingRod => 1, - ItemKind::GoldenAxe => 22, - ItemKind::GoldenBoots => 25, - ItemKind::GoldenChestplate => 25, - ItemKind::GoldenHelmet => 25, - ItemKind::GoldenHoe => 22, - ItemKind::GoldenLeggings => 25, - ItemKind::GoldenPickaxe => 22, - ItemKind::GoldenShovel => 22, - ItemKind::GoldenSpear => 22, - ItemKind::GoldenSword => 22, - ItemKind::IronAxe => 14, - ItemKind::IronBoots => 9, - ItemKind::IronChestplate => 9, - ItemKind::IronHelmet => 9, - ItemKind::IronHoe => 14, - ItemKind::IronLeggings => 9, - ItemKind::IronPickaxe => 14, - ItemKind::IronShovel => 14, - ItemKind::IronSpear => 14, - ItemKind::IronSword => 14, - ItemKind::LeatherBoots => 15, - ItemKind::LeatherChestplate => 15, - ItemKind::LeatherHelmet => 15, - ItemKind::LeatherLeggings => 15, - ItemKind::Mace => 15, - ItemKind::NetheriteAxe => 15, - ItemKind::NetheriteBoots => 15, - ItemKind::NetheriteChestplate => 15, - ItemKind::NetheriteHelmet => 15, - ItemKind::NetheriteHoe => 15, - ItemKind::NetheriteLeggings => 15, - ItemKind::NetheritePickaxe => 15, - ItemKind::NetheriteShovel => 15, - ItemKind::NetheriteSpear => 15, - ItemKind::NetheriteSword => 15, - ItemKind::StoneAxe => 5, - ItemKind::StoneHoe => 5, - ItemKind::StonePickaxe => 5, - ItemKind::StoneShovel => 5, - ItemKind::StoneSpear => 5, - ItemKind::StoneSword => 5, - ItemKind::Trident => 1, - ItemKind::TurtleHelmet => 9, - ItemKind::WoodenAxe => 15, - ItemKind::WoodenHoe => 15, - ItemKind::WoodenPickaxe => 15, - ItemKind::WoodenShovel => 15, - ItemKind::WoodenSpear => 15, - ItemKind::WoodenSword => 15, - _ => return None, - }; - Some(Enchantable { value: value }) - } -} -impl DefaultableComponent for ProvidesBannerPatterns { - fn default_for_item(item: ItemKind) -> Option<Self> { - let value = match item { - ItemKind::BordureIndentedBannerPattern => { - "#minecraft:pattern_item/bordure_indented".into() - } - ItemKind::CreeperBannerPattern => "#minecraft:pattern_item/creeper".into(), - ItemKind::FieldMasonedBannerPattern => "#minecraft:pattern_item/field_masoned".into(), - ItemKind::FlowBannerPattern => "#minecraft:pattern_item/flow".into(), - ItemKind::FlowerBannerPattern => "#minecraft:pattern_item/flower".into(), - ItemKind::GlobeBannerPattern => "#minecraft:pattern_item/globe".into(), - ItemKind::GusterBannerPattern => "#minecraft:pattern_item/guster".into(), - ItemKind::MojangBannerPattern => "#minecraft:pattern_item/mojang".into(), - ItemKind::PiglinBannerPattern => "#minecraft:pattern_item/piglin".into(), - ItemKind::SkullBannerPattern => "#minecraft:pattern_item/skull".into(), - _ => return None, - }; - Some(ProvidesBannerPatterns { key: value }) - } -} impl DefaultableComponent for Damage { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { @@ -4143,6 +3290,91 @@ impl DefaultableComponent for Damage { Some(Damage { amount: value }) } } +impl DefaultableComponent for Enchantable { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::Book => 1, + ItemKind::Bow => 1, + ItemKind::ChainmailBoots => 12, + ItemKind::ChainmailChestplate => 12, + ItemKind::ChainmailHelmet => 12, + ItemKind::ChainmailLeggings => 12, + ItemKind::CopperAxe => 13, + ItemKind::CopperBoots => 8, + ItemKind::CopperChestplate => 8, + ItemKind::CopperHelmet => 8, + ItemKind::CopperHoe => 13, + ItemKind::CopperLeggings => 8, + ItemKind::CopperPickaxe => 13, + ItemKind::CopperShovel => 13, + ItemKind::CopperSpear => 13, + ItemKind::CopperSword => 13, + ItemKind::Crossbow => 1, + ItemKind::DiamondAxe => 10, + ItemKind::DiamondBoots => 10, + ItemKind::DiamondChestplate => 10, + ItemKind::DiamondHelmet => 10, + ItemKind::DiamondHoe => 10, + ItemKind::DiamondLeggings => 10, + ItemKind::DiamondPickaxe => 10, + ItemKind::DiamondShovel => 10, + ItemKind::DiamondSpear => 10, + ItemKind::DiamondSword => 10, + ItemKind::FishingRod => 1, + ItemKind::GoldenAxe => 22, + ItemKind::GoldenBoots => 25, + ItemKind::GoldenChestplate => 25, + ItemKind::GoldenHelmet => 25, + ItemKind::GoldenHoe => 22, + ItemKind::GoldenLeggings => 25, + ItemKind::GoldenPickaxe => 22, + ItemKind::GoldenShovel => 22, + ItemKind::GoldenSpear => 22, + ItemKind::GoldenSword => 22, + ItemKind::IronAxe => 14, + ItemKind::IronBoots => 9, + ItemKind::IronChestplate => 9, + ItemKind::IronHelmet => 9, + ItemKind::IronHoe => 14, + ItemKind::IronLeggings => 9, + ItemKind::IronPickaxe => 14, + ItemKind::IronShovel => 14, + ItemKind::IronSpear => 14, + ItemKind::IronSword => 14, + ItemKind::LeatherBoots => 15, + ItemKind::LeatherChestplate => 15, + ItemKind::LeatherHelmet => 15, + ItemKind::LeatherLeggings => 15, + ItemKind::Mace => 15, + ItemKind::NetheriteAxe => 15, + ItemKind::NetheriteBoots => 15, + ItemKind::NetheriteChestplate => 15, + ItemKind::NetheriteHelmet => 15, + ItemKind::NetheriteHoe => 15, + ItemKind::NetheriteLeggings => 15, + ItemKind::NetheritePickaxe => 15, + ItemKind::NetheriteShovel => 15, + ItemKind::NetheriteSpear => 15, + ItemKind::NetheriteSword => 15, + ItemKind::StoneAxe => 5, + ItemKind::StoneHoe => 5, + ItemKind::StonePickaxe => 5, + ItemKind::StoneShovel => 5, + ItemKind::StoneSpear => 5, + ItemKind::StoneSword => 5, + ItemKind::Trident => 1, + ItemKind::TurtleHelmet => 9, + ItemKind::WoodenAxe => 15, + ItemKind::WoodenHoe => 15, + ItemKind::WoodenPickaxe => 15, + ItemKind::WoodenShovel => 15, + ItemKind::WoodenSpear => 15, + ItemKind::WoodenSword => 15, + _ => return None, + }; + Some(Enchantable { value: value }) + } +} impl DefaultableComponent for MaxDamage { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { @@ -4687,20 +3919,278 @@ impl DefaultableComponent for Repairable { Some(Repairable { items: value }) } } -impl DefaultableComponent for UseCooldown { +impl DefaultableComponent for BlockState { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::ChorusFruit => UseCooldown { - seconds: 1.0, - ..UseCooldown::new() + ItemKind::BeeNest => HashMap::from_iter([("honey_level".to_owned(), "0".to_owned())]), + ItemKind::Beehive => HashMap::from_iter([("honey_level".to_owned(), "0".to_owned())]), + ItemKind::CopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::ExposedCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::Light => HashMap::from_iter([("level".to_owned(), "15".to_owned())]), + ItemKind::OxidizedCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::TestBlock => HashMap::from_iter([("mode".to_owned(), "start".to_owned())]), + ItemKind::WaxedCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::WaxedExposedCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::WaxedOxidizedCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::WaxedWeatheredCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + ItemKind::WeatheredCopperGolemStatue => { + HashMap::from_iter([("copper_golem_pose".to_owned(), "standing".to_owned())]) + } + _ => return None, + }; + Some(BlockState { properties: value }) + } +} +impl DefaultableComponent for BucketEntityData { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::AxolotlBucket => NbtCompound::from_values(vec![]), + ItemKind::CodBucket => NbtCompound::from_values(vec![]), + ItemKind::PufferfishBucket => NbtCompound::from_values(vec![]), + ItemKind::SalmonBucket => NbtCompound::from_values(vec![]), + ItemKind::TadpoleBucket => NbtCompound::from_values(vec![]), + ItemKind::TropicalFishBucket => NbtCompound::from_values(vec![]), + _ => return None, + }; + Some(BucketEntityData { entity: value }) + } +} +impl DefaultableComponent for Food { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::Apple => Food { + nutrition: 4, + saturation: 2.4, + ..Food::new() }, - ItemKind::EnderPearl => UseCooldown { - seconds: 1.0, - ..UseCooldown::new() + ItemKind::BakedPotato => Food { + nutrition: 5, + saturation: 6.0, + ..Food::new() }, - ItemKind::WindCharge => UseCooldown { - seconds: 0.5, - ..UseCooldown::new() + ItemKind::Beef => Food { + nutrition: 3, + saturation: 1.8000001, + ..Food::new() + }, + ItemKind::Beetroot => Food { + nutrition: 1, + saturation: 1.2, + ..Food::new() + }, + ItemKind::BeetrootSoup => Food { + nutrition: 6, + saturation: 7.2000003, + ..Food::new() + }, + ItemKind::Bread => Food { + nutrition: 5, + saturation: 6.0, + ..Food::new() + }, + ItemKind::Carrot => Food { + nutrition: 3, + saturation: 3.6000001, + ..Food::new() + }, + ItemKind::Chicken => Food { + nutrition: 2, + saturation: 1.2, + ..Food::new() + }, + ItemKind::ChorusFruit => Food { + can_always_eat: true, + nutrition: 4, + saturation: 2.4, + }, + ItemKind::Cod => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::CodBucket => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::CookedBeef => Food { + nutrition: 8, + saturation: 12.8, + ..Food::new() + }, + ItemKind::CookedChicken => Food { + nutrition: 6, + saturation: 7.2000003, + ..Food::new() + }, + ItemKind::CookedCod => Food { + nutrition: 5, + saturation: 6.0, + ..Food::new() + }, + ItemKind::CookedMutton => Food { + nutrition: 6, + saturation: 9.6, + ..Food::new() + }, + ItemKind::CookedPorkchop => Food { + nutrition: 8, + saturation: 12.8, + ..Food::new() + }, + ItemKind::CookedRabbit => Food { + nutrition: 5, + saturation: 6.0, + ..Food::new() + }, + ItemKind::CookedSalmon => Food { + nutrition: 6, + saturation: 9.6, + ..Food::new() + }, + ItemKind::Cookie => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::DriedKelp => Food { + nutrition: 1, + saturation: 0.6, + ..Food::new() + }, + ItemKind::EnchantedGoldenApple => Food { + can_always_eat: true, + nutrition: 4, + saturation: 9.6, + }, + ItemKind::GlowBerries => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::GoldenApple => Food { + can_always_eat: true, + nutrition: 4, + saturation: 9.6, + }, + ItemKind::GoldenCarrot => Food { + nutrition: 6, + saturation: 14.400001, + ..Food::new() + }, + ItemKind::HoneyBottle => Food { + can_always_eat: true, + nutrition: 6, + saturation: 1.2, + }, + ItemKind::MelonSlice => Food { + nutrition: 2, + saturation: 1.2, + ..Food::new() + }, + ItemKind::MushroomStew => Food { + nutrition: 6, + saturation: 7.2000003, + ..Food::new() + }, + ItemKind::Mutton => Food { + nutrition: 2, + saturation: 1.2, + ..Food::new() + }, + ItemKind::PoisonousPotato => Food { + nutrition: 2, + saturation: 1.2, + ..Food::new() + }, + ItemKind::Porkchop => Food { + nutrition: 3, + saturation: 1.8000001, + ..Food::new() + }, + ItemKind::Potato => Food { + nutrition: 1, + saturation: 0.6, + ..Food::new() + }, + ItemKind::Pufferfish => Food { + nutrition: 1, + saturation: 0.2, + ..Food::new() + }, + ItemKind::PufferfishBucket => Food { + nutrition: 1, + saturation: 0.2, + ..Food::new() + }, + ItemKind::PumpkinPie => Food { + nutrition: 8, + saturation: 4.8, + ..Food::new() + }, + ItemKind::Rabbit => Food { + nutrition: 3, + saturation: 1.8000001, + ..Food::new() + }, + ItemKind::RabbitStew => Food { + nutrition: 10, + saturation: 12.0, + ..Food::new() + }, + ItemKind::RottenFlesh => Food { + nutrition: 4, + saturation: 0.8, + ..Food::new() + }, + ItemKind::Salmon => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::SalmonBucket => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::SpiderEye => Food { + nutrition: 2, + saturation: 3.2, + ..Food::new() + }, + ItemKind::SuspiciousStew => Food { + can_always_eat: true, + nutrition: 6, + saturation: 7.2000003, + }, + ItemKind::SweetBerries => Food { + nutrition: 2, + saturation: 0.4, + ..Food::new() + }, + ItemKind::TropicalFish => Food { + nutrition: 1, + saturation: 0.2, + ..Food::new() + }, + ItemKind::TropicalFishBucket => Food { + nutrition: 1, + saturation: 0.2, + ..Food::new() }, _ => return None, }; @@ -5704,140 +5194,222 @@ impl DefaultableComponent for Tool { Some(value) } } -impl DefaultableComponent for Weapon { +impl DefaultableComponent for Dye { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::CopperAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::CopperHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::CopperPickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::CopperShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::CopperSpear => Weapon::new(), - ItemKind::CopperSword => Weapon::new(), - ItemKind::DiamondAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::DiamondHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::DiamondPickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::DiamondShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::DiamondSpear => Weapon::new(), - ItemKind::DiamondSword => Weapon::new(), - ItemKind::GoldenAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::GoldenHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::GoldenPickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::GoldenShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::GoldenSpear => Weapon::new(), - ItemKind::GoldenSword => Weapon::new(), - ItemKind::IronAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::IronHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::IronPickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::IronShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::IronSpear => Weapon::new(), - ItemKind::IronSword => Weapon::new(), - ItemKind::Mace => Weapon::new(), - ItemKind::NetheriteAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::NetheriteHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::NetheritePickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::NetheriteShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::NetheriteSpear => Weapon::new(), - ItemKind::NetheriteSword => Weapon::new(), - ItemKind::StoneAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::StoneHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::StonePickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::StoneShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::StoneSpear => Weapon::new(), - ItemKind::StoneSword => Weapon::new(), - ItemKind::Trident => Weapon::new(), - ItemKind::WoodenAxe => Weapon { - disable_blocking_for_seconds: 5.0, - item_damage_per_attack: 2, - }, - ItemKind::WoodenHoe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::WoodenPickaxe => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::WoodenShovel => Weapon { - item_damage_per_attack: 2, - ..Weapon::new() - }, - ItemKind::WoodenSpear => Weapon::new(), - ItemKind::WoodenSword => Weapon::new(), + ItemKind::BlackDye => DyeColor::Black, + ItemKind::BlueDye => DyeColor::Blue, + ItemKind::BrownDye => DyeColor::Brown, + ItemKind::CyanDye => DyeColor::Cyan, + ItemKind::GrayDye => DyeColor::Gray, + ItemKind::GreenDye => DyeColor::Green, + ItemKind::LightBlueDye => DyeColor::LightBlue, + ItemKind::LightGrayDye => DyeColor::LightGray, + ItemKind::LimeDye => DyeColor::Lime, + ItemKind::MagentaDye => DyeColor::Magenta, + ItemKind::OrangeDye => DyeColor::Orange, + ItemKind::PinkDye => DyeColor::Pink, + ItemKind::PurpleDye => DyeColor::Purple, + ItemKind::RedDye => DyeColor::Red, + ItemKind::WhiteDye => DyeColor::White, + ItemKind::YellowDye => DyeColor::Yellow, _ => return None, }; - Some(value) + Some(Dye { color: value }) + } +} +impl DefaultableComponent for DamageResistant { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::AncientDebris => HolderSet::Direct { contents: vec![] }, + ItemKind::NetherStar => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteAxe => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteBlock => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteBoots => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteChestplate => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteHelmet => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteHoe => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteHorseArmor => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteIngot => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteLeggings => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteNautilusArmor => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheritePickaxe => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteScrap => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteShovel => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteSpear => HolderSet::Direct { contents: vec![] }, + ItemKind::NetheriteSword => HolderSet::Direct { contents: vec![] }, + _ => return None, + }; + Some(DamageResistant { types: value }) + } +} +impl DefaultableComponent for EntityData { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::AllaySpawnEgg => EntityKind::Allay, + ItemKind::ArmadilloSpawnEgg => EntityKind::Armadillo, + ItemKind::AxolotlSpawnEgg => EntityKind::Axolotl, + ItemKind::BatSpawnEgg => EntityKind::Bat, + ItemKind::BeeSpawnEgg => EntityKind::Bee, + ItemKind::BlazeSpawnEgg => EntityKind::Blaze, + ItemKind::BoggedSpawnEgg => EntityKind::Bogged, + ItemKind::BreezeSpawnEgg => EntityKind::Breeze, + ItemKind::CamelHuskSpawnEgg => EntityKind::CamelHusk, + ItemKind::CamelSpawnEgg => EntityKind::Camel, + ItemKind::CatSpawnEgg => EntityKind::Cat, + ItemKind::CaveSpiderSpawnEgg => EntityKind::CaveSpider, + ItemKind::ChickenSpawnEgg => EntityKind::Chicken, + ItemKind::CodSpawnEgg => EntityKind::Cod, + ItemKind::CopperGolemSpawnEgg => EntityKind::CopperGolem, + ItemKind::CowSpawnEgg => EntityKind::Cow, + ItemKind::CreakingSpawnEgg => EntityKind::Creaking, + ItemKind::CreeperSpawnEgg => EntityKind::Creeper, + ItemKind::DolphinSpawnEgg => EntityKind::Dolphin, + ItemKind::DonkeySpawnEgg => EntityKind::Donkey, + ItemKind::DrownedSpawnEgg => EntityKind::Drowned, + ItemKind::ElderGuardianSpawnEgg => EntityKind::ElderGuardian, + ItemKind::EnderDragonSpawnEgg => EntityKind::EnderDragon, + ItemKind::EndermanSpawnEgg => EntityKind::Enderman, + ItemKind::EndermiteSpawnEgg => EntityKind::Endermite, + ItemKind::EvokerSpawnEgg => EntityKind::Evoker, + ItemKind::FoxSpawnEgg => EntityKind::Fox, + ItemKind::FrogSpawnEgg => EntityKind::Frog, + ItemKind::GhastSpawnEgg => EntityKind::Ghast, + ItemKind::GlowSquidSpawnEgg => EntityKind::GlowSquid, + ItemKind::GoatSpawnEgg => EntityKind::Goat, + ItemKind::GuardianSpawnEgg => EntityKind::Guardian, + ItemKind::HappyGhastSpawnEgg => EntityKind::HappyGhast, + ItemKind::HoglinSpawnEgg => EntityKind::Hoglin, + ItemKind::HorseSpawnEgg => EntityKind::Horse, + ItemKind::HuskSpawnEgg => EntityKind::Husk, + ItemKind::IronGolemSpawnEgg => EntityKind::IronGolem, + ItemKind::LlamaSpawnEgg => EntityKind::Llama, + ItemKind::MagmaCubeSpawnEgg => EntityKind::MagmaCube, + ItemKind::MooshroomSpawnEgg => EntityKind::Mooshroom, + ItemKind::MuleSpawnEgg => EntityKind::Mule, + ItemKind::NautilusSpawnEgg => EntityKind::Nautilus, + ItemKind::OcelotSpawnEgg => EntityKind::Ocelot, + ItemKind::PandaSpawnEgg => EntityKind::Panda, + ItemKind::ParchedSpawnEgg => EntityKind::Parched, + ItemKind::ParrotSpawnEgg => EntityKind::Parrot, + ItemKind::PhantomSpawnEgg => EntityKind::Phantom, + ItemKind::PigSpawnEgg => EntityKind::Pig, + ItemKind::PiglinBruteSpawnEgg => EntityKind::PiglinBrute, + ItemKind::PiglinSpawnEgg => EntityKind::Piglin, + ItemKind::PillagerSpawnEgg => EntityKind::Pillager, + ItemKind::PolarBearSpawnEgg => EntityKind::PolarBear, + ItemKind::PufferfishSpawnEgg => EntityKind::Pufferfish, + ItemKind::RabbitSpawnEgg => EntityKind::Rabbit, + ItemKind::RavagerSpawnEgg => EntityKind::Ravager, + ItemKind::SalmonSpawnEgg => EntityKind::Salmon, + ItemKind::SheepSpawnEgg => EntityKind::Sheep, + ItemKind::ShulkerSpawnEgg => EntityKind::Shulker, + ItemKind::SilverfishSpawnEgg => EntityKind::Silverfish, + ItemKind::SkeletonHorseSpawnEgg => EntityKind::SkeletonHorse, + ItemKind::SkeletonSpawnEgg => EntityKind::Skeleton, + ItemKind::SlimeSpawnEgg => EntityKind::Slime, + ItemKind::SnifferSpawnEgg => EntityKind::Sniffer, + ItemKind::SnowGolemSpawnEgg => EntityKind::SnowGolem, + ItemKind::SpiderSpawnEgg => EntityKind::Spider, + ItemKind::SquidSpawnEgg => EntityKind::Squid, + ItemKind::StraySpawnEgg => EntityKind::Stray, + ItemKind::StriderSpawnEgg => EntityKind::Strider, + ItemKind::TadpoleSpawnEgg => EntityKind::Tadpole, + ItemKind::TraderLlamaSpawnEgg => EntityKind::TraderLlama, + ItemKind::TropicalFishSpawnEgg => EntityKind::TropicalFish, + ItemKind::TurtleSpawnEgg => EntityKind::Turtle, + ItemKind::VexSpawnEgg => EntityKind::Vex, + ItemKind::VillagerSpawnEgg => EntityKind::Villager, + ItemKind::VindicatorSpawnEgg => EntityKind::Vindicator, + ItemKind::WanderingTraderSpawnEgg => EntityKind::WanderingTrader, + ItemKind::WardenSpawnEgg => EntityKind::Warden, + ItemKind::WitchSpawnEgg => EntityKind::Witch, + ItemKind::WitherSkeletonSpawnEgg => EntityKind::WitherSkeleton, + ItemKind::WitherSpawnEgg => EntityKind::Wither, + ItemKind::WolfSpawnEgg => EntityKind::Wolf, + ItemKind::ZoglinSpawnEgg => EntityKind::Zoglin, + ItemKind::ZombieHorseSpawnEgg => EntityKind::ZombieHorse, + ItemKind::ZombieNautilusSpawnEgg => EntityKind::ZombieNautilus, + ItemKind::ZombieSpawnEgg => EntityKind::Zombie, + ItemKind::ZombieVillagerSpawnEgg => EntityKind::ZombieVillager, + ItemKind::ZombifiedPiglinSpawnEgg => EntityKind::ZombifiedPiglin, + _ => return None, + }; + Some(EntityData { + kind: value, + data: NbtCompound::new(), + }) + } +} +impl DefaultableComponent for JukeboxPlayable { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::MusicDisc11 => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDisc13 => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDisc5 => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscBlocks => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscCat => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscChirp => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscCreator => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscCreatorMusicBox => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscFar => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscLavaChicken => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscMall => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscMellohi => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscOtherside => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscPigstep => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscPrecipice => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscRelic => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscStal => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscStrad => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscTears => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscWait => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + ItemKind::MusicDiscWard => { + azalea_registry::Holder::Reference(azalea_registry::data::JukeboxSong::new_raw(0)) + } + _ => return None, + }; + Some(JukeboxPlayable { value: value }) } } impl DefaultableComponent for AttackRange { @@ -5908,29 +5480,29 @@ impl DefaultableComponent for DamageType { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { ItemKind::CopperSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::DiamondSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::GoldenSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::IronSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::NetheriteSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::StoneSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } ItemKind::WoodenSpear => { - DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0)) + azalea_registry::Holder::Reference(azalea_registry::data::DamageKind::new_raw(0)) } _ => return None, }; - Some(value) + Some(DamageType { value: value }) } } impl DefaultableComponent for KineticWeapon { @@ -5946,7 +5518,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 13, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 80, - min_speed: 9.0, + min_speed: 12.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -5969,7 +5541,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 10, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 60, - min_speed: 7.5, + min_speed: 10.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -5992,7 +5564,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 14, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 70, - min_speed: 10.0, + min_speed: 13.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -6015,7 +5587,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 12, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 50, - min_speed: 8.0, + min_speed: 11.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -6038,7 +5610,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 8, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 50, - min_speed: 7.0, + min_speed: 9.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -6061,7 +5633,7 @@ impl DefaultableComponent for KineticWeapon { delay_ticks: 14, dismount_conditions: Some(KineticWeaponCondition { max_duration_ticks: 90, - min_speed: 10.0, + min_speed: 13.0, ..KineticWeaponCondition::new() }), forward_movement: 0.38, @@ -6180,22 +5752,426 @@ impl DefaultableComponent for PiercingWeapon { Some(value) } } -impl DefaultableComponent for ChargedProjectiles { +impl DefaultableComponent for Weapon { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::Crossbow => vec![], + ItemKind::CopperAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::CopperHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::CopperPickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::CopperShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::CopperSpear => Weapon::new(), + ItemKind::CopperSword => Weapon::new(), + ItemKind::DiamondAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::DiamondHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::DiamondPickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::DiamondShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::DiamondSpear => Weapon::new(), + ItemKind::DiamondSword => Weapon::new(), + ItemKind::GoldenAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::GoldenHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::GoldenPickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::GoldenShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::GoldenSpear => Weapon::new(), + ItemKind::GoldenSword => Weapon::new(), + ItemKind::IronAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::IronHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::IronPickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::IronShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::IronSpear => Weapon::new(), + ItemKind::IronSword => Weapon::new(), + ItemKind::Mace => Weapon::new(), + ItemKind::NetheriteAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::NetheriteHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::NetheritePickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::NetheriteShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::NetheriteSpear => Weapon::new(), + ItemKind::NetheriteSword => Weapon::new(), + ItemKind::StoneAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::StoneHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::StonePickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::StoneShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::StoneSpear => Weapon::new(), + ItemKind::StoneSword => Weapon::new(), + ItemKind::Trident => Weapon::new(), + ItemKind::WoodenAxe => Weapon { + disable_blocking_for_seconds: 5.0, + item_damage_per_attack: 2, + }, + ItemKind::WoodenHoe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::WoodenPickaxe => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::WoodenShovel => Weapon { + item_damage_per_attack: 2, + ..Weapon::new() + }, + ItemKind::WoodenSpear => Weapon::new(), + ItemKind::WoodenSword => Weapon::new(), _ => return None, }; - Some(ChargedProjectiles { items: value }) + Some(value) } } -impl DefaultableComponent for DebugStickState { +impl DefaultableComponent for Consumable { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::DebugStick => NbtCompound::from_values(vec![]), + ItemKind::Apple => Consumable::new(), + ItemKind::BakedPotato => Consumable::new(), + ItemKind::Beef => Consumable::new(), + ItemKind::Beetroot => Consumable::new(), + ItemKind::BeetrootSoup => Consumable::new(), + ItemKind::Bread => Consumable::new(), + ItemKind::Carrot => Consumable::new(), + ItemKind::Chicken => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![MobEffectInstance { + id: MobEffect::Hunger, + details: MobEffectDetails { + duration: 600, + show_icon: true, + ..MobEffectDetails::new() + }, + }], + probability: 0.3, + }], + ..Consumable::new() + }, + ItemKind::ChorusFruit => Consumable { + on_consume_effects: vec![ConsumeEffect::TeleportRandomly { diameter: 16.0 }], + ..Consumable::new() + }, + ItemKind::Cod => Consumable::new(), + ItemKind::CookedBeef => Consumable::new(), + ItemKind::CookedChicken => Consumable::new(), + ItemKind::CookedCod => Consumable::new(), + ItemKind::CookedMutton => Consumable::new(), + ItemKind::CookedPorkchop => Consumable::new(), + ItemKind::CookedRabbit => Consumable::new(), + ItemKind::CookedSalmon => Consumable::new(), + ItemKind::Cookie => Consumable::new(), + ItemKind::DriedKelp => Consumable { + consume_seconds: 0.8, + ..Consumable::new() + }, + ItemKind::EnchantedGoldenApple => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![ + MobEffectInstance { + id: MobEffect::Regeneration, + details: MobEffectDetails { + amplifier: 1, + duration: 400, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Resistance, + details: MobEffectDetails { + duration: 6000, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::FireResistance, + details: MobEffectDetails { + duration: 6000, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Absorption, + details: MobEffectDetails { + amplifier: 3, + duration: 2400, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + ], + probability: 1.0, + }], + ..Consumable::new() + }, + ItemKind::GlowBerries => Consumable::new(), + ItemKind::GoldenApple => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![ + MobEffectInstance { + id: MobEffect::Regeneration, + details: MobEffectDetails { + amplifier: 1, + duration: 100, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Absorption, + details: MobEffectDetails { + duration: 2400, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + ], + probability: 1.0, + }], + ..Consumable::new() + }, + ItemKind::GoldenCarrot => Consumable::new(), + ItemKind::HoneyBottle => Consumable { + animation: ItemUseAnimation::Drink, + consume_seconds: 2.0, + has_consume_particles: false, + on_consume_effects: vec![ConsumeEffect::RemoveEffects { + effects: HolderSet::Direct { + contents: vec![MobEffect::Poison], + }, + }], + sound: azalea_registry::Holder::Reference(SoundEvent::ItemHoneyBottleDrink), + }, + ItemKind::MelonSlice => Consumable::new(), + ItemKind::MilkBucket => Consumable { + animation: ItemUseAnimation::Drink, + has_consume_particles: false, + on_consume_effects: vec![ConsumeEffect::ClearAllEffects {}], + sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), + ..Consumable::new() + }, + ItemKind::MushroomStew => Consumable::new(), + ItemKind::Mutton => Consumable::new(), + ItemKind::OminousBottle => Consumable { + animation: ItemUseAnimation::Drink, + has_consume_particles: false, + on_consume_effects: vec![ConsumeEffect::PlaySound { + sound: SoundEvent::ItemOminousBottleDispose, + }], + sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), + ..Consumable::new() + }, + ItemKind::PoisonousPotato => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![MobEffectInstance { + id: MobEffect::Poison, + details: MobEffectDetails { + duration: 100, + show_icon: true, + ..MobEffectDetails::new() + }, + }], + probability: 0.6, + }], + ..Consumable::new() + }, + ItemKind::Porkchop => Consumable::new(), + ItemKind::Potato => Consumable::new(), + ItemKind::Potion => Consumable { + animation: ItemUseAnimation::Drink, + has_consume_particles: false, + sound: azalea_registry::Holder::Reference(SoundEvent::EntityGenericDrink), + ..Consumable::new() + }, + ItemKind::Pufferfish => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![ + MobEffectInstance { + id: MobEffect::Poison, + details: MobEffectDetails { + amplifier: 1, + duration: 1200, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Hunger, + details: MobEffectDetails { + amplifier: 2, + duration: 300, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Nausea, + details: MobEffectDetails { + duration: 300, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + ], + probability: 1.0, + }], + ..Consumable::new() + }, + ItemKind::PumpkinPie => Consumable::new(), + ItemKind::Rabbit => Consumable::new(), + ItemKind::RabbitStew => Consumable::new(), + ItemKind::RottenFlesh => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![MobEffectInstance { + id: MobEffect::Hunger, + details: MobEffectDetails { + duration: 600, + show_icon: true, + ..MobEffectDetails::new() + }, + }], + probability: 0.8, + }], + ..Consumable::new() + }, + ItemKind::Salmon => Consumable::new(), + ItemKind::SpiderEye => Consumable { + on_consume_effects: vec![ConsumeEffect::ApplyEffects { + effects: vec![MobEffectInstance { + id: MobEffect::Poison, + details: MobEffectDetails { + duration: 100, + show_icon: true, + ..MobEffectDetails::new() + }, + }], + probability: 1.0, + }], + ..Consumable::new() + }, + ItemKind::SuspiciousStew => Consumable::new(), + ItemKind::SweetBerries => Consumable::new(), + ItemKind::TropicalFish => Consumable::new(), _ => return None, }; - Some(DebugStickState { properties: value }) + Some(value) + } +} +impl DefaultableComponent for BannerPatterns { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::BlackBanner => vec![], + ItemKind::BlueBanner => vec![], + ItemKind::BrownBanner => vec![], + ItemKind::CyanBanner => vec![], + ItemKind::GrayBanner => vec![], + ItemKind::GreenBanner => vec![], + ItemKind::LightBlueBanner => vec![], + ItemKind::LightGrayBanner => vec![], + ItemKind::LimeBanner => vec![], + ItemKind::MagentaBanner => vec![], + ItemKind::OrangeBanner => vec![], + ItemKind::PinkBanner => vec![], + ItemKind::PurpleBanner => vec![], + ItemKind::RedBanner => vec![], + ItemKind::Shield => vec![], + ItemKind::WhiteBanner => vec![], + ItemKind::YellowBanner => vec![], + _ => return None, + }; + Some(BannerPatterns { patterns: value }) + } +} +impl DefaultableComponent for BundleContents { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::BlackBundle => vec![], + ItemKind::BlueBundle => vec![], + ItemKind::BrownBundle => vec![], + ItemKind::Bundle => vec![], + ItemKind::CyanBundle => vec![], + ItemKind::GrayBundle => vec![], + ItemKind::GreenBundle => vec![], + ItemKind::LightBlueBundle => vec![], + ItemKind::LightGrayBundle => vec![], + ItemKind::LimeBundle => vec![], + ItemKind::MagentaBundle => vec![], + ItemKind::OrangeBundle => vec![], + ItemKind::PinkBundle => vec![], + ItemKind::PurpleBundle => vec![], + ItemKind::RedBundle => vec![], + ItemKind::WhiteBundle => vec![], + ItemKind::YellowBundle => vec![], + _ => return None, + }; + Some(BundleContents { items: value }) } } impl DefaultableComponent for EnchantmentGlintOverride { @@ -6213,156 +6189,235 @@ impl DefaultableComponent for EnchantmentGlintOverride { Some(EnchantmentGlintOverride { show_glint: value }) } } -impl DefaultableComponent for PotDecorations { +impl DefaultableComponent for ProvidesTrimMaterial { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::DecoratedPot => vec![ - ItemKind::Brick, - ItemKind::Brick, - ItemKind::Brick, - ItemKind::Brick, - ], + ItemKind::AmethystShard => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::CopperIngot => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::Diamond => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::Emerald => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::GoldIngot => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::IronIngot => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::LapisLazuli => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::NetheriteIngot => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::Quartz => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::Redstone => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } + ItemKind::ResinBrick => { + azalea_registry::Holder::Reference(azalea_registry::data::TrimMaterial::new_raw(0)) + } _ => return None, }; - Some(PotDecorations { items: value }) + Some(ProvidesTrimMaterial { value: value }) } } -impl DefaultableComponent for Glider { +impl DefaultableComponent for PotionContents { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::Elytra => Glider, + ItemKind::LingeringPotion => PotionContents::new(), + ItemKind::Potion => PotionContents::new(), + ItemKind::SplashPotion => PotionContents::new(), + ItemKind::TippedArrow => PotionContents::new(), _ => return None, }; Some(value) } } -impl DefaultableComponent for StoredEnchantments { +impl DefaultableComponent for UseRemainder { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::EnchantedBook => HashMap::from_iter([]), + ItemKind::BeetrootSoup => ItemStack::from(ItemKind::Bowl), + ItemKind::HoneyBottle => ItemStack::from(ItemKind::GlassBottle), + ItemKind::MilkBucket => ItemStack::from(ItemKind::Bucket), + ItemKind::MushroomStew => ItemStack::from(ItemKind::Bowl), + ItemKind::Potion => ItemStack::from(ItemKind::GlassBottle), + ItemKind::RabbitStew => ItemStack::from(ItemKind::Bowl), + ItemKind::SuspiciousStew => ItemStack::from(ItemKind::Bowl), _ => return None, }; - Some(StoredEnchantments { - enchantments: value, + Some(UseRemainder { + convert_into: value, }) } } -impl DefaultableComponent for MapColor { +impl DefaultableComponent for PotionDurationScale { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::FilledMap => 4603950, + ItemKind::LingeringPotion => 0.25, + ItemKind::TippedArrow => 0.125, _ => return None, }; - Some(MapColor { color: value }) + Some(PotionDurationScale { value: value }) } } -impl DefaultableComponent for MapDecorations { +impl DefaultableComponent for ChargedProjectiles { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::FilledMap => NbtCompound::from_values(vec![]), + ItemKind::Crossbow => vec![], _ => return None, }; - Some(MapDecorations { decorations: value }) + Some(ChargedProjectiles { items: value }) } } -impl DefaultableComponent for Fireworks { +impl DefaultableComponent for DeathProtection { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::FireworkRocket => Fireworks { - flight_duration: 1, - ..Fireworks::new() - }, + ItemKind::TotemOfUndying => vec![ + ConsumeEffect::ClearAllEffects {}, + ConsumeEffect::ApplyEffects { + effects: vec![ + MobEffectInstance { + id: MobEffect::Regeneration, + details: MobEffectDetails { + amplifier: 1, + duration: 900, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::Absorption, + details: MobEffectDetails { + amplifier: 1, + duration: 100, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + MobEffectInstance { + id: MobEffect::FireResistance, + details: MobEffectDetails { + duration: 800, + show_icon: true, + ..MobEffectDetails::new() + }, + }, + ], + probability: 1.0, + }, + ], _ => return None, }; - Some(value) + Some(DeathProtection { + death_effects: value, + }) } } -impl DefaultableComponent for Instrument { +impl DefaultableComponent for OminousBottleAmplifier { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::GoatHorn => { - Instrument::Registry(azalea_registry::data::Instrument::new_raw(0)) - } + ItemKind::OminousBottle => 0, _ => return None, }; - Some(value) + Some(OminousBottleAmplifier { amplifier: value }) } } -impl DefaultableComponent for Recipes { +impl DefaultableComponent for ProvidesBannerPatterns { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::KnowledgeBook => vec![], + ItemKind::BordureIndentedBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::CreeperBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::FieldMasonedBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::FlowBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::FlowerBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::GlobeBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::GusterBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::MojangBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::PiglinBannerPattern => HolderSet::Direct { contents: vec![] }, + ItemKind::SkullBannerPattern => HolderSet::Direct { contents: vec![] }, _ => return None, }; - Some(Recipes { recipes: value }) + Some(ProvidesBannerPatterns { key: value }) } } -impl DefaultableComponent for PotionContents { +impl DefaultableComponent for Bees { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::LingeringPotion => PotionContents::new(), - ItemKind::Potion => PotionContents::new(), - ItemKind::SplashPotion => PotionContents::new(), - ItemKind::TippedArrow => PotionContents::new(), + ItemKind::BeeNest => vec![], + ItemKind::Beehive => vec![], _ => return None, }; - Some(value) + Some(Bees { occupants: value }) } } -impl DefaultableComponent for PotionDurationScale { +impl DefaultableComponent for UseCooldown { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::LingeringPotion => 0.25, - ItemKind::TippedArrow => 0.125, + ItemKind::ChorusFruit => UseCooldown { + seconds: 1.0, + ..UseCooldown::new() + }, + ItemKind::EnderPearl => UseCooldown { + seconds: 1.0, + ..UseCooldown::new() + }, + ItemKind::WindCharge => UseCooldown { + seconds: 0.5, + ..UseCooldown::new() + }, _ => return None, }; - Some(PotionDurationScale { value: value }) + Some(value) } } -impl DefaultableComponent for JukeboxPlayable { +impl DefaultableComponent for Fireworks { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::MusicDisc11 => JukeboxPlayable::Referenced("minecraft:11".into()), - ItemKind::MusicDisc13 => JukeboxPlayable::Referenced("minecraft:13".into()), - ItemKind::MusicDisc5 => JukeboxPlayable::Referenced("minecraft:5".into()), - ItemKind::MusicDiscBlocks => JukeboxPlayable::Referenced("minecraft:blocks".into()), - ItemKind::MusicDiscCat => JukeboxPlayable::Referenced("minecraft:cat".into()), - ItemKind::MusicDiscChirp => JukeboxPlayable::Referenced("minecraft:chirp".into()), - ItemKind::MusicDiscCreator => JukeboxPlayable::Referenced("minecraft:creator".into()), - ItemKind::MusicDiscCreatorMusicBox => { - JukeboxPlayable::Referenced("minecraft:creator_music_box".into()) - } - ItemKind::MusicDiscFar => JukeboxPlayable::Referenced("minecraft:far".into()), - ItemKind::MusicDiscLavaChicken => { - JukeboxPlayable::Referenced("minecraft:lava_chicken".into()) - } - ItemKind::MusicDiscMall => JukeboxPlayable::Referenced("minecraft:mall".into()), - ItemKind::MusicDiscMellohi => JukeboxPlayable::Referenced("minecraft:mellohi".into()), - ItemKind::MusicDiscOtherside => { - JukeboxPlayable::Referenced("minecraft:otherside".into()) - } - ItemKind::MusicDiscPigstep => JukeboxPlayable::Referenced("minecraft:pigstep".into()), - ItemKind::MusicDiscPrecipice => { - JukeboxPlayable::Referenced("minecraft:precipice".into()) - } - ItemKind::MusicDiscRelic => JukeboxPlayable::Referenced("minecraft:relic".into()), - ItemKind::MusicDiscStal => JukeboxPlayable::Referenced("minecraft:stal".into()), - ItemKind::MusicDiscStrad => JukeboxPlayable::Referenced("minecraft:strad".into()), - ItemKind::MusicDiscTears => JukeboxPlayable::Referenced("minecraft:tears".into()), - ItemKind::MusicDiscWait => JukeboxPlayable::Referenced("minecraft:wait".into()), - ItemKind::MusicDiscWard => JukeboxPlayable::Referenced("minecraft:ward".into()), + ItemKind::FireworkRocket => Fireworks { + flight_duration: 1, + ..Fireworks::new() + }, _ => return None, }; Some(value) } } -impl DefaultableComponent for OminousBottleAmplifier { +impl DefaultableComponent for WritableBookContent { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::OminousBottle => 0, + ItemKind::WritableBook => Vec::new(), _ => return None, }; - Some(OminousBottleAmplifier { amplifier: value }) + Some(WritableBookContent { pages: value }) + } +} +impl DefaultableComponent for SuspiciousStewEffects { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::SuspiciousStew => vec![], + _ => return None, + }; + Some(SuspiciousStewEffects { effects: value }) + } +} +impl DefaultableComponent for ChickenVariant { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::BlueEgg => azalea_registry::data::ChickenVariant::new_raw(0), + ItemKind::BrownEgg => azalea_registry::data::ChickenVariant::new_raw(0), + ItemKind::Egg => azalea_registry::data::ChickenVariant::new_raw(0), + _ => return None, + }; + Some(ChickenVariant { data: value }) } } impl DefaultableComponent for BlocksAttacks { @@ -6373,7 +6428,7 @@ impl DefaultableComponent for BlocksAttacks { block_sound: Some(azalea_registry::Holder::Reference( SoundEvent::ItemShieldBlock, )), - bypassed_by: Some("#minecraft:bypasses_shield".into()), + bypassed_by: Some(HolderSet::Direct { contents: vec![] }), disabled_sound: Some(azalea_registry::Holder::Reference( SoundEvent::ItemShieldBreak, )), @@ -6389,65 +6444,84 @@ impl DefaultableComponent for BlocksAttacks { Some(value) } } -impl DefaultableComponent for SuspiciousStewEffects { +impl DefaultableComponent for DebugStickState { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::SuspiciousStew => vec![], + ItemKind::DebugStick => NbtCompound::from_values(vec![]), _ => return None, }; - Some(SuspiciousStewEffects { effects: value }) + Some(DebugStickState { properties: value }) } } -impl DefaultableComponent for DeathProtection { +impl DefaultableComponent for PotDecorations { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::TotemOfUndying => vec![ - ConsumeEffect::ClearAllEffects {}, - ConsumeEffect::ApplyEffects { - effects: vec![ - MobEffectInstance { - id: MobEffect::Regeneration, - details: MobEffectDetails { - amplifier: 1, - duration: 900, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::Absorption, - details: MobEffectDetails { - amplifier: 1, - duration: 100, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - MobEffectInstance { - id: MobEffect::FireResistance, - details: MobEffectDetails { - duration: 800, - show_icon: true, - ..MobEffectDetails::new() - }, - }, - ], - probability: 1.0, - }, + ItemKind::DecoratedPot => vec![ + ItemKind::Brick, + ItemKind::Brick, + ItemKind::Brick, + ItemKind::Brick, ], _ => return None, }; - Some(DeathProtection { - death_effects: value, + Some(PotDecorations { items: value }) + } +} +impl DefaultableComponent for StoredEnchantments { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::EnchantedBook => HashMap::from_iter([]), + _ => return None, + }; + Some(StoredEnchantments { + enchantments: value, }) } } -impl DefaultableComponent for WritableBookContent { +impl DefaultableComponent for MapColor { fn default_for_item(item: ItemKind) -> Option<Self> { let value = match item { - ItemKind::WritableBook => Vec::new(), + ItemKind::FilledMap => 4603950, _ => return None, }; - Some(WritableBookContent { pages: value }) + Some(MapColor { color: value }) + } +} +impl DefaultableComponent for MapDecorations { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::FilledMap => NbtCompound::from_values(vec![]), + _ => return None, + }; + Some(MapDecorations { decorations: value }) + } +} +impl DefaultableComponent for Glider { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::Elytra => Glider, + _ => return None, + }; + Some(value) + } +} +impl DefaultableComponent for Recipes { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::KnowledgeBook => vec![], + _ => return None, + }; + Some(Recipes { recipes: value }) + } +} +impl DefaultableComponent for Instrument { + fn default_for_item(item: ItemKind) -> Option<Self> { + let value = match item { + ItemKind::GoatHorn => { + azalea_registry::Holder::Reference(azalea_registry::data::Instrument::new_raw(0)) + } + _ => return None, + }; + Some(Instrument { value: value }) } } diff --git a/azalea-inventory/src/slot.rs b/azalea-inventory/src/slot.rs index c06ac71a..d0d41d75 100644 --- a/azalea-inventory/src/slot.rs +++ b/azalea-inventory/src/slot.rs @@ -3,6 +3,7 @@ use std::{ borrow::Cow, fmt::{self, Debug}, io::{self, Cursor, Write}, + sync::LazyLock, }; use azalea_buf::{AzBuf, AzBufVar, BufReadError}; @@ -111,6 +112,11 @@ impl ItemStack { } } + pub fn component_patch(&self) -> &DataComponentPatch { + self.as_present() + .map_or_else(|| &*EMPTY_DATA_COMPONENT_PATCH, |i| &i.component_patch) + } + /// Get the value of a data component for this item. /// /// This is used for things like getting the damage of an item, or seeing @@ -283,6 +289,9 @@ pub struct DataComponentPatch { components: Box<IndexMap<DataComponentKind, Option<DataComponentUnion>>>, } +static EMPTY_DATA_COMPONENT_PATCH: LazyLock<DataComponentPatch> = + LazyLock::new(DataComponentPatch::default); + impl DataComponentPatch { /// Returns the value of the component in the generic argument for this /// item. diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json index 04b3fc47..5a89301e 100644 --- a/azalea-language/src/en_us.json +++ b/azalea-language/src/en_us.json @@ -1673,6 +1673,7 @@ "block.minecraft.glowstone": "Glowstone", "block.minecraft.gold_block": "Block of Gold", "block.minecraft.gold_ore": "Gold Ore", + "block.minecraft.golden_dandelion": "Golden Dandelion", "block.minecraft.granite": "Granite", "block.minecraft.granite_slab": "Granite Slab", "block.minecraft.granite_stairs": "Granite Stairs", @@ -2036,6 +2037,7 @@ "block.minecraft.potted_dead_bush": "Potted Dead Bush", "block.minecraft.potted_fern": "Potted Fern", "block.minecraft.potted_flowering_azalea_bush": "Potted Flowering Azalea", + "block.minecraft.potted_golden_dandelion": "Potted Golden Dandelion", "block.minecraft.potted_jungle_sapling": "Potted Jungle Sapling", "block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley", "block.minecraft.potted_mangrove_propagule": "Potted Mangrove Propagule", @@ -2436,8 +2438,20 @@ "book.sign.titlebox": "Title", "book.signButton": "Sign", "book.view.title": "Book View Screen", + "build.spawn_protection": "%s is under spawn protection", "build.tooHigh": "Height limit for building is %s", + "build.tooLow": "Minimum height for building is %s", + "chat_restriction.chat_and_commands_disabled_by_options": "Chat is restricted in client settings.", + "chat_restriction.chat_disabled_by_options": "Player chat is restricted in client settings.", + "chat_restriction.chat_disabled_by_options.action": "Go to the Chat Settings screen", + "chat_restriction.disabled_by_launcher": "Chat is restricted by the launcher", + "chat_restriction.disabled_by_profile": "Chat is restricted by profile settings.", + "chat_restriction.disabled_by_profile.action": "Go to your profile settings", + "chat_screen.commands_not_allowed": "Sending commands is not allowed", "chat_screen.message": "Message to send: %s", + "chat_screen.messages_not_allowed": "Sending chat messages is not allowed", + "chat_screen.restricted": "Chat is restricted. Click this message for details.", + "chat_screen.restricted.narration": "Chat is restricted. Go to the Restrictions screen in World Options.", "chat_screen.title": "Chat screen", "chat_screen.usage": "Input message and press Enter to send", "chat.cannotSend": "Cannot send chat message", @@ -2512,6 +2526,7 @@ "command.expected.separator": "Expected whitespace to end one argument, but found trailing data", "command.failed": "An unexpected error occurred trying to execute that command", "command.forkLimit": "Maximum number of contexts (%s) reached", + "command.trailing_data": "Trailing data found: %s", "command.unknown.argument": "Incorrect argument for command", "command.unknown.command": "Unknown or incomplete command. See below for error", "commands.advancement.criterionNotFound": "The advancement %1$s does not contain the criterion '%2$s'", @@ -2697,12 +2712,14 @@ "commands.experience.set.points.success.single": "Set %s experience points on %s", "commands.fetchprofile.copy_component": "Copy Component", "commands.fetchprofile.copy_text": "Copy %s", + "commands.fetchprofile.entity.success": "Resolved profile for entity %s: %s", "commands.fetchprofile.failed_to_serialize": "Failed to serialize profile: %s", "commands.fetchprofile.give_item": "Give Item", "commands.fetchprofile.id.failure": "Failed to resolve profile for ID %s", "commands.fetchprofile.id.success": "Resolved profile for ID %s: %s", "commands.fetchprofile.name.failure": "Failed to resolve profile for name %s", "commands.fetchprofile.name.success": "Resolved profile for name %s: %s", + "commands.fetchprofile.no_profile": "Entity %s has no profile", "commands.fetchprofile.summon_mannequin": "Summon Mannequin", "commands.fill.failed": "No blocks were filled", "commands.fill.success": "Successfully filled %s block(s)", @@ -2934,6 +2951,9 @@ "commands.summon.failed.uuid": "Unable to summon entity due to duplicate UUIDs", "commands.summon.invalidPosition": "Invalid position for summon", "commands.summon.success": "Summoned new %s", + "commands.swing.failed.notliving": "No living entities were found to swing", + "commands.swing.success.multiple": "Made %s entities swing their arms", + "commands.swing.success.single": "Made %s swing an arm", "commands.tag.add.failed": "Target either already has the tag or has too many tags", "commands.tag.add.success.multiple": "Added tag '%s' to %s entities", "commands.tag.add.success.single": "Added tag '%s' to %s", @@ -3024,8 +3044,20 @@ "commands.tick.step.stop.fail": "No tick step in progress", "commands.tick.step.stop.success": "Interrupted the current tick step", "commands.tick.step.success": "Stepping %s tick(s)", + "commands.time.no_default_clock": "There is no default clock in dimension %s", + "commands.time.no_time_marker_found": "Time marker %s does not exist for clock %s", + "commands.time.pause": "Paused clock %s", "commands.time.query": "The time is %s", + "commands.time.query.absolute": "Clock %s is at %s tick(s)", + "commands.time.query.gametime": "The game time is %s tick(s)", + "commands.time.query.timeline": "Timeline %s is at %s tick(s)", + "commands.time.query.timeline.repetitions": "Timeline %s has passed %s repetition(s)", + "commands.time.rate": "Clock %s will now advance at %sx normal rate", + "commands.time.resume": "Resumed clock %s", "commands.time.set": "Set the time to %s", + "commands.time.set.absolute": "Set %s to %s tick(s)", + "commands.time.set.time_marker": "Set %s to time marker %s", + "commands.time.wrong_timeline_for_clock": "Timeline %s is not valid for clock %s", "commands.title.cleared.multiple": "Cleared titles for %s players", "commands.title.cleared.single": "Cleared titles for %s", "commands.title.reset.multiple": "Reset title options for %s players", @@ -3420,6 +3452,11 @@ "download.pack.progress.percent": "Progress: %s%%", "download.pack.title": "Downloading resource pack %s/%s", "editGamerule.default": "Default: %s", + "editGamerule.inGame.button": "Edit Game Rules...", + "editGamerule.inGame.disabled.tooltip": "Updating game rules requires operator permissions.", + "editGamerule.inGame.discardChanges.message": "Are you sure you want to discard your pending game rule changes?", + "editGamerule.inGame.discardChanges.title": "Game rule Changes", + "editGamerule.inGame.downloadingGamerules": "Retrieving game rules...", "editGamerule.title": "Edit Game Rules", "effect.duration.infinite": "\u221e", "effect.minecraft.absorption": "Absorption", @@ -3841,6 +3878,7 @@ "gamerule.minecraft.fire_spread_radius_around_player.description": "The radius in blocks around a player in which fire can spread", "gamerule.minecraft.player_movement_check": "Do player movement check", "gamerule.minecraft.raids": "Do raids", + "gamerule.minecraft.universal_anger.description": "Angered neutral mobs attack any nearby player, not just the player that angered them. Works best if forgive_dead_players is disabled.", "gamerule.mobExplosionDropDecay": "In mob explosions, some blocks won't drop their loot", "gamerule.mobExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by mobs are lost in the explosion.", "gamerule.mobGriefing": "Allow destructive mob actions", @@ -4028,6 +4066,7 @@ "gui.experience.level": "%s", "gui.fileDropFailure.detail": "Rejected %s files", "gui.fileDropFailure.title": "Failed to add files", + "gui.game_rule.search": "Search...", "gui.hours": "%s hour(s)", "gui.language.search": "Search...", "gui.loadingMinecraft": "Loading Minecraft", @@ -4081,6 +4120,7 @@ "gui.socialInteractions.title": "Social Interactions", "gui.socialInteractions.tooltip.hide": "Hide messages", "gui.socialInteractions.tooltip.report": "Report player", + "gui.socialInteractions.tooltip.report.chat_disabled_or_blocked": "This player can't be reported because chat is disabled or blocked", "gui.socialInteractions.tooltip.report.disabled": "The reporting service is unavailable", "gui.socialInteractions.tooltip.report.no_messages": "No reportable messages from player %s", "gui.socialInteractions.tooltip.report.not_reportable": "This player can't be reported, because their chat messages can't be verified on this server", @@ -4971,6 +5011,7 @@ "key.debug.dumpVersion": "Dump Version Info", "key.debug.focusPause": "Toggle Lost Focus Pause", "key.debug.fpsCharts": "FPS Charts", + "key.debug.lightmapTexture": "Lightmap Texture", "key.debug.modifier": "Debug Modifier Key", "key.debug.networkCharts": "Network Charts", "key.debug.overlay": "Toggle Overlay", @@ -5866,6 +5907,8 @@ "options.discrete_mouse_scroll": "Discrete Scrolling", "options.entityDistanceScaling": "Entity Distance", "options.entityShadows": "Entity Shadows", + "options.exclusiveFullscreen": "Exclusive Fullscreen", + "options.exclusiveFullscreen.warningTooltip": "This option might prevent some input methods from working.", "options.font": "Font Settings...", "options.font.title": "Font Settings", "options.forceUnicodeFont": "Force Unicode Font", @@ -5971,6 +6014,7 @@ "options.narrator.notavailable": "Not Available", "options.narrator.off": "OFF", "options.narrator.system": "Narrates System", + "options.needsRestart": "Option will be applied after restart.", "options.notifications.display_time": "Notification Time", "options.notifications.display_time.tooltip": "Affects the length of time that all notifications stay visible on the screen.", "options.off": "OFF", @@ -6052,6 +6096,8 @@ "options.vsync": "VSync", "options.weatherRadius": "Weather Effect Radius", "options.weatherRadius.tooltip": "Radius of the area where rain and snow effects are visible. Very low performance impact.", + "options.worldOptions.button": "World Options...", + "options.worldOptions.title": "World Options", "outOfMemory.message": "Minecraft has run out of memory.\n\nThis could be caused by a bug in the game or by the Java Virtual Machine not being allocated enough memory.\n\nTo prevent world corruption, the current game has quit. We've tried to free up enough memory to let you go back to the main menu and back to playing, but this may not have worked.\n\nPlease restart the game if you see this message again.", "outOfMemory.title": "Out of memory!", "pack.available.title": "Available", @@ -6270,8 +6316,19 @@ "resourcePack.title": "Select Resource Packs", "resourcePack.vanilla.description": "The default look and feel of Minecraft", "resourcePack.vanilla.name": "Default", + "restrictions_screen.button": "Restrictions...", + "restrictions_screen.permission.receive_player_messages.allowed": "You can receive messages from players", + "restrictions_screen.permission.receive_player_messages.denied": "You can't receive messages from players", + "restrictions_screen.permission.receive_system_messages.allowed": "You can receive system messages from the server", + "restrictions_screen.permission.receive_system_messages.denied": "You can't receive system messages from the server", + "restrictions_screen.permission.send_commands.allowed": "You can send commands", + "restrictions_screen.permission.send_commands.denied": "You can't send commands", + "restrictions_screen.permission.send_messages.allowed": "You can send chat messages", + "restrictions_screen.permission.send_messages.denied": "You can't send chat messages", + "restrictions_screen.title": "Restrictions", "screenshot.failure": "Couldn't save screenshot: %s", "screenshot.success": "Saved screenshot as %s", + "selecteWorld.backupRequiredTooltip": "Loading the world requires taking a backup first", "selectServer.add": "Add Server", "selectServer.defaultName": "Minecraft Server", "selectServer.delete": "Delete", @@ -6293,11 +6350,13 @@ "selectWorld.backupQuestion.customized": "Customized worlds are no longer supported", "selectWorld.backupQuestion.downgrade": "Downgrading a world is not supported", "selectWorld.backupQuestion.experimental": "Worlds using Experimental Settings are not supported", + "selectWorld.backupQuestion.file_fixing_required": "Create a backup before upgrading this world?", "selectWorld.backupQuestion.snapshot": "Do you really want to load this world?", "selectWorld.backupWarning.customized": "Unfortunately, we do not support customized worlds in this version of Minecraft. We can still load this world and keep everything the way it was, but any newly generated terrain will no longer be customized. We're sorry for the inconvenience!", "selectWorld.backupWarning.downgrade": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work. If you still want to continue, please make a backup.", "selectWorld.backupWarning.experimental": "This world uses experimental settings that could stop working at any time. We cannot guarantee it will load or work. Here be dragons!", - "selectWorld.backupWarning.snapshot": "This world was last played in version %s; you are on version %s. Please make a backup in case you experience world corruptions.", + "selectWorld.backupWarning.file_fixing_required": "This world needs to be upgraded before you can play it. We strongly suggest creating a backup before continuing in case you experience world corruption.", + "selectWorld.backupWarning.snapshot": "This world was last played in version %s; you are on version %s. Please make a backup in case you experience world corruption.", "selectWorld.bonusItems": "Bonus Chest", "selectWorld.cheats": "Cheats", "selectWorld.commands": "Commands", @@ -6382,6 +6441,9 @@ "selectWorld.recreate.customized.title": "Customized worlds are no longer supported", "selectWorld.recreate.error.text": "Something went wrong while trying to recreate a world.", "selectWorld.recreate.error.title": "An error occurred!", + "selectWorld.requiresFileFixingTooltip.edit": "This world needs to be upgraded to the latest version before you can edit it due to underlying changes to the world format.", + "selectWorld.requiresFileFixingTooltip.play": "This world needs to be upgraded to the latest version before you can play it due to underlying changes to the world format.", + "selectWorld.requiresFileFixingTooltip.recreate": "This world needs to be upgraded to the latest version before you can recreate it due to underlying changes to the world format.", "selectWorld.resource_load": "Preparing Resources...", "selectWorld.resultFolder": "Will be saved in:", "selectWorld.search": "search for worlds", @@ -6394,11 +6456,14 @@ "selectWorld.tooltip.snapshot1": "Don't forget to back up this world", "selectWorld.tooltip.snapshot2": "before you load it in this snapshot.", "selectWorld.unable_to_load": "Unable to load worlds", + "selectWorld.upgrade_and_play": "Upgrade and Play", "selectWorld.version": "Version:", "selectWorld.versionJoinButton": "Load Anyway", "selectWorld.versionQuestion": "Do you really want to load this world?", "selectWorld.versionUnknown": "unknown", "selectWorld.versionWarning": "This world was last played in version %s and loading it in this version could cause corruption!", + "selectWorld.waitingForBackup.message": "Depending on the size of your world, this may take a while. Please do not close the game or shut off your device.", + "selectWorld.waitingForBackup.title": "Creating Backup", "selectWorld.warning.deprecated.question": "Some features used are deprecated and will stop working in the future. Do you wish to proceed?", "selectWorld.warning.deprecated.title": "Warning! These settings are using deprecated features", "selectWorld.warning.experimental.question": "These settings are experimental and could one day stop working. Do you wish to proceed?", @@ -6406,6 +6471,7 @@ "selectWorld.warning.lowDiskSpace.description": "There is not much space left on your device.\nRunning out of disk space while in game can lead to your world being damaged.", "selectWorld.warning.lowDiskSpace.title": "Warning! Low disk space!", "selectWorld.world": "World", + "selectWorld.world_gen_settings_access": "Unable to read or access the world gen settings file! %s", "sign.edit": "Edit Sign Message", "sleep.not_possible": "No amount of rest can pass this night", "sleep.players_sleeping": "%s/%s players sleeping", @@ -6787,6 +6853,23 @@ "subtitles.entity.axolotl.idle_water": "Axolotl chirps", "subtitles.entity.axolotl.splash": "Axolotl splashes", "subtitles.entity.axolotl.swim": "Axolotl swims", + "subtitles.entity.baby_cat.ambient": "Kitten meows", + "subtitles.entity.baby_cat.beg_for_food": "Kitten begs", + "subtitles.entity.baby_cat.death": "Kitten dies", + "subtitles.entity.baby_cat.eat": "Kitten eats", + "subtitles.entity.baby_cat.hiss": "Kitten hisses", + "subtitles.entity.baby_cat.hurt": "Kitten hurts", + "subtitles.entity.baby_cat.purr": "Kitten purrs", + "subtitles.entity.baby_chicken.ambient": "Chick peeps", + "subtitles.entity.baby_chicken.death": "Chick dies", + "subtitles.entity.baby_chicken.hurts": "Chick hurts", + "subtitles.entity.baby_horse.ambient": "Foal neighs", + "subtitles.entity.baby_horse.angry": "Foal neighs", + "subtitles.entity.baby_horse.breathe": "Foal breathes", + "subtitles.entity.baby_horse.death": "Foal dies", + "subtitles.entity.baby_horse.eat": "Foal eats", + "subtitles.entity.baby_horse.hurt": "Foal hurts", + "subtitles.entity.baby_horse.land": "Foal lands", "subtitles.entity.baby_nautilus.ambient": "Baby Nautilus chitters", "subtitles.entity.baby_nautilus.ambient_land": "Baby Nautilus chitters", "subtitles.entity.baby_nautilus.death": "Baby Nautilus dies", @@ -6795,6 +6878,16 @@ "subtitles.entity.baby_nautilus.hurt": "Baby Nautilus hurts", "subtitles.entity.baby_nautilus.hurt_land": "Baby Nautilus hurts", "subtitles.entity.baby_nautilus.swim": "Baby Nautilus swims", + "subtitles.entity.baby_pig.ambient": "Baby Pig oinks", + "subtitles.entity.baby_pig.death": "Baby Pig dies", + "subtitles.entity.baby_pig.eat": "Baby Pig eats", + "subtitles.entity.baby_pig.hurt": "Baby Pig hurts", + "subtitles.entity.baby_wolf.ambient": "Puppy yips", + "subtitles.entity.baby_wolf.death": "Puppy dies", + "subtitles.entity.baby_wolf.growl": "Puppy growls", + "subtitles.entity.baby_wolf.hurt": "Puppy hurts", + "subtitles.entity.baby_wolf.pant": "Puppy pants", + "subtitles.entity.baby_wolf.whine": "Puppy whines", "subtitles.entity.bat.ambient": "Bat screeches", "subtitles.entity.bat.death": "Bat dies", "subtitles.entity.bat.hurt": "Bat hurts", @@ -7183,6 +7276,7 @@ "subtitles.entity.phantom.swoop": "Phantom swoops", "subtitles.entity.pig.ambient": "Pig oinks", "subtitles.entity.pig.death": "Pig dies", + "subtitles.entity.pig.eat": "Pig eats", "subtitles.entity.pig.hurt": "Pig hurts", "subtitles.entity.pig.saddle": "Saddle equips", "subtitles.entity.piglin_brute.ambient": "Piglin Brute snorts", @@ -7503,6 +7597,8 @@ "subtitles.item.flintandsteel.use": "Flint and Steel click", "subtitles.item.glow_ink_sac.use": "Glow Ink Sac splotches", "subtitles.item.goat_horn.play": "Goat Horn plays", + "subtitles.item.golden_dandelion.unuse": "Golden Dandelion starts aging", + "subtitles.item.golden_dandelion.use": "Golden Dandelion halts aging", "subtitles.item.hoe.till": "Hoe tills", "subtitles.item.honey_bottle.drink": "Gulping", "subtitles.item.honeycomb.wax_on": "Wax on", @@ -7660,6 +7756,7 @@ "test.error.entity_property": "Entity %s failed test: %s", "test.error.entity_property_details": "Entity %s failed test: %s. Expected %s: was %s", "test.error.expected_block": "Expected block %s: got %s", + "test.error.expected_block_present": "Expected block %s to be present", "test.error.expected_block_tag": "Expected block in #%s: got %s", "test.error.expected_container_contents": "Container should contain: %s", "test.error.expected_container_contents_single": "Container should contain a single: %s", @@ -7680,10 +7777,12 @@ "test.error.fail": "Fail conditions met", "test.error.invalid_block_type": "Unexpected block type found: %s", "test.error.missing_block_entity": "Missing block entity", + "test.error.not_a_block_item": "Given block is not a block item", "test.error.position": "%s at %s, %s, %s (relative: %s, %s, %s) on tick %s", "test.error.sequence.condition_already_triggered": "Condition already triggered at %s", "test.error.sequence.condition_not_triggered": "Condition not triggered", "test.error.sequence.invalid_tick": "Succeeded in invalid tick: expected %s", + "test.error.sequence.minimum_tick": "Succeeded before expected tick: expected to wait %s", "test.error.sequence.not_completed": "Test timed out before sequence completed", "test.error.set_biome": "Failed to set biome for test", "test.error.spawn_failure": "Failed to create entity %s", @@ -7765,5 +7864,25 @@ "tutorial.punch_tree.title": "Destroy the tree", "tutorial.socialInteractions.description": "Press %s to open", "tutorial.socialInteractions.title": "Social Interactions", - "upgrade.minecraft.netherite_upgrade": "Netherite Upgrade" + "upgrade.minecraft.netherite_upgrade": "Netherite Upgrade", + "upgradeWorld.aborted.message": "This may happen if another program accessed the world during the upgrade.\nIt may help to restart your computer and try again. If the issue persists, please consider reporting a bug.", + "upgradeWorld.aborted.reportBug": "Report a Bug", + "upgradeWorld.aborted.title": "Failed to upgrade the world", + "upgradeWorld.canceled.message": "Your world remains as it was before.", + "upgradeWorld.canceled.title": "World upgrade canceled", + "upgradeWorld.done": "Upgrading World Completed", + "upgradeWorld.failed_cleanup.message": "The world was successfully upgraded to the current version and is now available in the world list.\nWe encountered issues when cleaning up outdated data, therefore the name of the world folder has changed to %s.", + "upgradeWorld.failed_cleanup.title": "Successfully upgraded the world", + "upgradeWorld.info.converted": "Upgraded: %s", + "upgradeWorld.info.file_fix_stage": "Stage: %s/%s", + "upgradeWorld.info.scanning": "Scanning files...", + "upgradeWorld.info.total": "Total: %s", + "upgradeWorld.joinNow": "Do you want to join the world now?", + "upgradeWorld.progress.percentage": "%s%%", + "upgradeWorld.progress.type.files": "Moving files", + "upgradeWorld.progress.type.legacy_structures": "Upgrading legacy structures", + "upgradeWorld.progress.type.region": "Upgrading regions", + "upgradeWorld.symlink.message": "The selected world contains symbolic links.\nThe required steps to upgrade the world to the current version do not support the use of symbolic links. To upgrade the world, the links need to be resolved first.", + "upgradeWorld.symlink.title": "Can't upgrade the world", + "upgradeWorld.title": "Upgrading World Files" }
\ No newline at end of file diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs index a22d77b0..f06e591f 100644 --- a/azalea-physics/src/collision/blocks.rs +++ b/azalea-physics/src/collision/blocks.rs @@ -5986,7 +5986,7 @@ impl BlockWithShape for BlockState { } } -static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ +static BASIC_COLLISION_SHAPES_MAP: &[u8; 29873] = &[ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6041,7 +6041,13 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6049,11 +6055,12 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, - 0, 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, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -6061,7 +6068,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6085,8 +6092,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6102,11 +6108,11 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6146,8 +6152,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 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, 1, 1, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6157,13 +6163,13 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6189,21 +6195,21 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6223,13 +6229,13 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6241,7 +6247,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6250,19 +6256,20 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, + 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6271,20 +6278,19 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, - 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 2, + 2, 2, 2, 2, 2, 1, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6292,7 +6298,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6302,8 +6309,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6313,7 +6319,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6321,8 +6328,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6331,15 +6337,15 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 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, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6372,10 +6378,10 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6383,8 +6389,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -6394,24 +6400,24 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 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, + 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, - 1, 1, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, + 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, + 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, + 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6440,25 +6446,26 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 2, + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6493,10 +6500,9 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, + 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6506,7 +6512,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6516,7 +6522,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6526,8 +6532,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6536,8 +6542,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6546,9 +6552,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, - 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6557,8 +6562,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6567,8 +6572,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6577,8 +6582,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6587,8 +6592,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6597,8 +6602,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6607,9 +6612,9 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6617,9 +6622,9 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6628,45 +6633,46 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 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, 1, - 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, - 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, - 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 0, 0, + 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, + 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 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, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, + 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6675,12 +6681,11 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6688,12 +6693,12 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6702,8 +6707,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6712,11 +6717,12 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, + 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6726,10 +6732,10 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6739,10 +6745,10 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6752,7 +6758,7 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 1, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6767,12 +6773,12 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6782,8 +6788,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, + 1, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6793,7 +6799,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 1, + 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6825,9 +6832,8 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6848,15 +6854,15 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, - 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 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, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 0, 0, 0, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 2, 2, 2, 2, 2, 2, 0, 0, 2, + 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 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, 2, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6866,10 +6872,10 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, - 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6879,11 +6885,10 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, - 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6891,10 +6896,12 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, + 2, 2, 2, 2, 0, 2, 2, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -6904,20 +6911,19 @@ static BASIC_COLLISION_SHAPES_MAP: &[u8; 29671] = &[ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, + 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 1, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 2, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, ]; -static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ +static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29873] = [ &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, @@ -7091,6 +7097,26 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE11, &SHAPE11, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE11, @@ -7133,6 +7159,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &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, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -7158,15 +7185,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, - &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, - &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, - &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, - &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, - &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE41, @@ -7244,7 +7263,14 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, + &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, + &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, + &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &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, @@ -7296,18 +7322,18 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &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, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, - &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, - &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, - &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, - &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, - &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, - &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, - &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, - &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, - &SHAPE98, &SHAPE98, &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, + &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, + &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, + &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, + &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, + &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, &SHAPE104, &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, &SHAPE107, &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, &SHAPE107, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -8043,7 +8069,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, - &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE38, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -8068,50 +8094,50 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, - &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE566, &SHAPE566, &SHAPE566, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, + &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, - &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE567, &SHAPE567, &SHAPE568, - &SHAPE568, &SHAPE569, &SHAPE569, &SHAPE570, &SHAPE570, &SHAPE571, &SHAPE571, &SHAPE572, - &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, - &SHAPE572, &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, - &SHAPE104, &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, - &SHAPE107, &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, - &SHAPE107, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE567, &SHAPE567, + &SHAPE568, &SHAPE568, &SHAPE569, &SHAPE569, &SHAPE570, &SHAPE570, &SHAPE571, &SHAPE571, + &SHAPE572, &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, &SHAPE571, &SHAPE571, + &SHAPE572, &SHAPE572, &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, + &SHAPE104, &SHAPE104, &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, + &SHAPE107, &SHAPE107, &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, + &SHAPE107, &SHAPE107, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, @@ -10317,7 +10343,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE38, &SHAPE38, &SHAPE0, ]; -static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ +static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29873] = [ &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, &SHAPE2, @@ -10491,6 +10517,26 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE11, &SHAPE11, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE9, &SHAPE8, &SHAPE9, &SHAPE8, &SHAPE10, &SHAPE11, &SHAPE10, &SHAPE11, @@ -10533,7 +10579,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, - &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE1, + &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -10560,14 +10606,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, - &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE40, - &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, - &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, &SHAPE41, - &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, - &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE1, &SHAPE1, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE41, &SHAPE41, @@ -10645,15 +10684,15 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, - &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE1, &SHAPE1, &SHAPE43, &SHAPE44, &SHAPE45, - &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, - &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, - &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, - &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE48, &SHAPE49, - &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, - &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, - &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, - &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, &SHAPE39, + &SHAPE39, &SHAPE39, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, + &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, &SHAPE40, + &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, + &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE41, &SHAPE42, &SHAPE42, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, + &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE42, &SHAPE1, &SHAPE1, &SHAPE43, &SHAPE44, + &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE48, @@ -10703,22 +10742,28 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, - &SHAPE79, &SHAPE79, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, + &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, + &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, + &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE50, + &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, + &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, + &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, + &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, - &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, - &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, - &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, - &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, - &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, - &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, &SHAPE104, - &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, &SHAPE107, - &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, &SHAPE107, - &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, - &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, + &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, + &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, + &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, + &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, + &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, + &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, + &SHAPE98, &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, + &SHAPE104, &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, + &SHAPE107, &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, + &SHAPE107, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, @@ -10735,8 +10780,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, &SHAPE117, - &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, - &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, + &SHAPE109, &SHAPE110, &SHAPE111, &SHAPE112, &SHAPE113, &SHAPE114, &SHAPE115, &SHAPE116, + &SHAPE117, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, @@ -10753,8 +10798,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, &SHAPE126, - &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, - &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, + &SHAPE118, &SHAPE119, &SHAPE120, &SHAPE121, &SHAPE122, &SHAPE123, &SHAPE124, &SHAPE125, + &SHAPE126, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, @@ -10771,8 +10816,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, &SHAPE135, - &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, - &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, + &SHAPE127, &SHAPE128, &SHAPE129, &SHAPE130, &SHAPE131, &SHAPE132, &SHAPE133, &SHAPE134, + &SHAPE135, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, @@ -10789,8 +10834,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, &SHAPE144, - &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, - &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, + &SHAPE136, &SHAPE137, &SHAPE138, &SHAPE139, &SHAPE140, &SHAPE141, &SHAPE142, &SHAPE143, + &SHAPE144, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, @@ -10807,8 +10852,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, &SHAPE153, - &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, - &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, + &SHAPE145, &SHAPE146, &SHAPE147, &SHAPE148, &SHAPE149, &SHAPE150, &SHAPE151, &SHAPE152, + &SHAPE153, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, @@ -10825,8 +10870,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, &SHAPE162, - &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, - &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, + &SHAPE154, &SHAPE155, &SHAPE156, &SHAPE157, &SHAPE158, &SHAPE159, &SHAPE160, &SHAPE161, + &SHAPE162, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, @@ -10843,8 +10888,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, &SHAPE171, - &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, - &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, + &SHAPE163, &SHAPE164, &SHAPE165, &SHAPE166, &SHAPE167, &SHAPE168, &SHAPE169, &SHAPE170, + &SHAPE171, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, @@ -10861,8 +10906,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, &SHAPE180, - &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, - &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, + &SHAPE172, &SHAPE173, &SHAPE174, &SHAPE175, &SHAPE176, &SHAPE177, &SHAPE178, &SHAPE179, + &SHAPE180, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, @@ -10879,10 +10924,11 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, &SHAPE189, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE190, &SHAPE191, &SHAPE13, &SHAPE192, - &SHAPE18, &SHAPE193, &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE194, - &SHAPE194, &SHAPE194, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, + &SHAPE181, &SHAPE182, &SHAPE183, &SHAPE184, &SHAPE185, &SHAPE186, &SHAPE187, &SHAPE188, + &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE190, &SHAPE191, &SHAPE13, + &SHAPE192, &SHAPE18, &SHAPE193, &SHAPE1, &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE194, + &SHAPE194, &SHAPE194, &SHAPE194, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, @@ -10922,264 +10968,264 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE196, &SHAPE196, - &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, - &SHAPE12, &SHAPE12, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, - &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, - &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, - &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, - &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, - &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, - &SHAPE98, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, - &SHAPE203, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, - &SHAPE205, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, &SHAPE210, - &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212, &SHAPE212, &SHAPE212, - &SHAPE212, &SHAPE213, &SHAPE213, &SHAPE214, &SHAPE214, &SHAPE215, &SHAPE215, &SHAPE216, - &SHAPE216, &SHAPE217, &SHAPE217, &SHAPE217, &SHAPE217, &SHAPE218, &SHAPE218, &SHAPE218, - &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, - &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, - &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, &SHAPE46, - &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, - &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, - &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, - &SHAPE235, &SHAPE236, &SHAPE12, &SHAPE190, &SHAPE191, &SHAPE13, &SHAPE192, &SHAPE18, &SHAPE193, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, + &SHAPE195, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, + &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, + &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, + &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, + &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE196, + &SHAPE196, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, + &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, + &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, + &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, + &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, + &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, + &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, + &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, + &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, + &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, + &SHAPE98, &SHAPE98, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE204, &SHAPE204, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE206, &SHAPE206, &SHAPE205, &SHAPE205, &SHAPE205, &SHAPE205, + &SHAPE205, &SHAPE205, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE208, &SHAPE210, &SHAPE210, + &SHAPE210, &SHAPE210, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE211, &SHAPE212, &SHAPE212, + &SHAPE212, &SHAPE212, &SHAPE213, &SHAPE213, &SHAPE214, &SHAPE214, &SHAPE215, &SHAPE215, + &SHAPE216, &SHAPE216, &SHAPE217, &SHAPE217, &SHAPE217, &SHAPE217, &SHAPE218, &SHAPE218, + &SHAPE218, &SHAPE218, &SHAPE219, &SHAPE220, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, + &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, + &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE43, &SHAPE43, &SHAPE44, &SHAPE44, &SHAPE45, &SHAPE45, + &SHAPE46, &SHAPE46, &SHAPE47, &SHAPE47, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, + &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, + &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, + &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE12, &SHAPE190, &SHAPE191, &SHAPE13, &SHAPE192, &SHAPE18, + &SHAPE193, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, - &SHAPE23, &SHAPE238, &SHAPE1, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, + &SHAPE23, &SHAPE23, &SHAPE238, &SHAPE1, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, &SHAPE24, - &SHAPE24, &SHAPE1, &SHAPE1, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, - &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, - &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, - &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, - &SHAPE268, &SHAPE270, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE43, &SHAPE44, &SHAPE45, - &SHAPE46, &SHAPE47, &SHAPE1, &SHAPE252, &SHAPE258, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE271, &SHAPE272, &SHAPE273, &SHAPE274, &SHAPE275, &SHAPE276, - &SHAPE277, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, + &SHAPE24, &SHAPE24, &SHAPE1, &SHAPE1, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE43, &SHAPE44, &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE43, &SHAPE44, + &SHAPE45, &SHAPE46, &SHAPE47, &SHAPE1, &SHAPE252, &SHAPE258, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE271, &SHAPE272, &SHAPE273, &SHAPE274, + &SHAPE275, &SHAPE276, &SHAPE277, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, - &SHAPE12, &SHAPE12, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -11200,94 +11246,112 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, - &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, - &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, - &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, - &SHAPE295, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, + &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, + &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, + &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, + &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, + &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, - &SHAPE298, &SHAPE296, &SHAPE296, &SHAPE297, &SHAPE297, &SHAPE298, &SHAPE298, &SHAPE280, - &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, - &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, - &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, - &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE1, &SHAPE1, - &SHAPE299, &SHAPE300, &SHAPE301, &SHAPE302, &SHAPE299, &SHAPE300, &SHAPE301, &SHAPE302, - &SHAPE303, &SHAPE304, &SHAPE305, &SHAPE306, &SHAPE307, &SHAPE308, &SHAPE309, &SHAPE295, - &SHAPE303, &SHAPE304, &SHAPE305, &SHAPE306, &SHAPE307, &SHAPE308, &SHAPE309, &SHAPE295, - &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, &SHAPE56, - &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, - &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, &SHAPE74, - &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE310, &SHAPE311, &SHAPE310, &SHAPE311, - &SHAPE312, &SHAPE313, &SHAPE312, &SHAPE313, &SHAPE314, &SHAPE315, &SHAPE314, &SHAPE315, - &SHAPE316, &SHAPE317, &SHAPE316, &SHAPE317, &SHAPE318, &SHAPE319, &SHAPE318, &SHAPE319, - &SHAPE320, &SHAPE321, &SHAPE320, &SHAPE321, &SHAPE322, &SHAPE323, &SHAPE322, &SHAPE323, - &SHAPE324, &SHAPE325, &SHAPE324, &SHAPE325, &SHAPE326, &SHAPE327, &SHAPE326, &SHAPE327, - &SHAPE328, &SHAPE329, &SHAPE328, &SHAPE329, &SHAPE330, &SHAPE331, &SHAPE330, &SHAPE331, - &SHAPE332, &SHAPE333, &SHAPE332, &SHAPE333, &SHAPE334, &SHAPE335, &SHAPE334, &SHAPE335, - &SHAPE336, &SHAPE337, &SHAPE336, &SHAPE337, &SHAPE338, &SHAPE339, &SHAPE338, &SHAPE339, - &SHAPE340, &SHAPE79, &SHAPE340, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE48, &SHAPE49, &SHAPE50, - &SHAPE51, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, - &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE58, - &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE62, &SHAPE63, - &SHAPE64, &SHAPE65, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE66, &SHAPE67, &SHAPE68, - &SHAPE69, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, - &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE76, - &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE78, &SHAPE1, &SHAPE310, &SHAPE311, &SHAPE310, &SHAPE311, - &SHAPE312, &SHAPE313, &SHAPE312, &SHAPE313, &SHAPE314, &SHAPE315, &SHAPE314, &SHAPE315, - &SHAPE316, &SHAPE317, &SHAPE316, &SHAPE317, &SHAPE318, &SHAPE319, &SHAPE318, &SHAPE319, - &SHAPE320, &SHAPE321, &SHAPE320, &SHAPE321, &SHAPE322, &SHAPE323, &SHAPE322, &SHAPE323, - &SHAPE324, &SHAPE325, &SHAPE324, &SHAPE325, &SHAPE326, &SHAPE327, &SHAPE326, &SHAPE327, - &SHAPE328, &SHAPE329, &SHAPE328, &SHAPE329, &SHAPE330, &SHAPE331, &SHAPE330, &SHAPE331, - &SHAPE332, &SHAPE333, &SHAPE332, &SHAPE333, &SHAPE334, &SHAPE335, &SHAPE334, &SHAPE335, - &SHAPE336, &SHAPE337, &SHAPE336, &SHAPE337, &SHAPE338, &SHAPE339, &SHAPE338, &SHAPE339, - &SHAPE340, &SHAPE79, &SHAPE340, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE48, &SHAPE49, &SHAPE50, - &SHAPE51, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE52, &SHAPE53, &SHAPE54, &SHAPE55, - &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE58, - &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, &SHAPE62, &SHAPE63, - &SHAPE64, &SHAPE65, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE66, &SHAPE67, &SHAPE68, - &SHAPE69, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE70, &SHAPE71, &SHAPE72, &SHAPE73, - &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE76, - &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE78, &SHAPE1, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, - &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, - &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, - &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, - &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE298, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, + &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, + &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, + &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, + &SHAPE295, &SHAPE1, &SHAPE1, &SHAPE299, &SHAPE300, &SHAPE301, &SHAPE302, &SHAPE299, &SHAPE300, + &SHAPE301, &SHAPE302, &SHAPE303, &SHAPE304, &SHAPE305, &SHAPE306, &SHAPE307, &SHAPE308, + &SHAPE309, &SHAPE295, &SHAPE303, &SHAPE304, &SHAPE305, &SHAPE306, &SHAPE307, &SHAPE308, + &SHAPE309, &SHAPE295, &SHAPE48, &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE54, + &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, + &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE72, + &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE310, &SHAPE311, + &SHAPE310, &SHAPE311, &SHAPE312, &SHAPE313, &SHAPE312, &SHAPE313, &SHAPE314, &SHAPE315, + &SHAPE314, &SHAPE315, &SHAPE316, &SHAPE317, &SHAPE316, &SHAPE317, &SHAPE318, &SHAPE319, + &SHAPE318, &SHAPE319, &SHAPE320, &SHAPE321, &SHAPE320, &SHAPE321, &SHAPE322, &SHAPE323, + &SHAPE322, &SHAPE323, &SHAPE324, &SHAPE325, &SHAPE324, &SHAPE325, &SHAPE326, &SHAPE327, + &SHAPE326, &SHAPE327, &SHAPE328, &SHAPE329, &SHAPE328, &SHAPE329, &SHAPE330, &SHAPE331, + &SHAPE330, &SHAPE331, &SHAPE332, &SHAPE333, &SHAPE332, &SHAPE333, &SHAPE334, &SHAPE335, + &SHAPE334, &SHAPE335, &SHAPE336, &SHAPE337, &SHAPE336, &SHAPE337, &SHAPE338, &SHAPE339, + &SHAPE338, &SHAPE339, &SHAPE340, &SHAPE79, &SHAPE340, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE48, + &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE52, &SHAPE53, + &SHAPE54, &SHAPE55, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE56, &SHAPE57, &SHAPE58, + &SHAPE59, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, + &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE66, + &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE70, &SHAPE71, + &SHAPE72, &SHAPE73, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, + &SHAPE77, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE78, &SHAPE1, &SHAPE310, &SHAPE311, + &SHAPE310, &SHAPE311, &SHAPE312, &SHAPE313, &SHAPE312, &SHAPE313, &SHAPE314, &SHAPE315, + &SHAPE314, &SHAPE315, &SHAPE316, &SHAPE317, &SHAPE316, &SHAPE317, &SHAPE318, &SHAPE319, + &SHAPE318, &SHAPE319, &SHAPE320, &SHAPE321, &SHAPE320, &SHAPE321, &SHAPE322, &SHAPE323, + &SHAPE322, &SHAPE323, &SHAPE324, &SHAPE325, &SHAPE324, &SHAPE325, &SHAPE326, &SHAPE327, + &SHAPE326, &SHAPE327, &SHAPE328, &SHAPE329, &SHAPE328, &SHAPE329, &SHAPE330, &SHAPE331, + &SHAPE330, &SHAPE331, &SHAPE332, &SHAPE333, &SHAPE332, &SHAPE333, &SHAPE334, &SHAPE335, + &SHAPE334, &SHAPE335, &SHAPE336, &SHAPE337, &SHAPE336, &SHAPE337, &SHAPE338, &SHAPE339, + &SHAPE338, &SHAPE339, &SHAPE340, &SHAPE79, &SHAPE340, &SHAPE79, &SHAPE48, &SHAPE49, &SHAPE48, + &SHAPE49, &SHAPE50, &SHAPE51, &SHAPE50, &SHAPE51, &SHAPE52, &SHAPE53, &SHAPE52, &SHAPE53, + &SHAPE54, &SHAPE55, &SHAPE54, &SHAPE55, &SHAPE56, &SHAPE57, &SHAPE56, &SHAPE57, &SHAPE58, + &SHAPE59, &SHAPE58, &SHAPE59, &SHAPE60, &SHAPE61, &SHAPE60, &SHAPE61, &SHAPE62, &SHAPE63, + &SHAPE62, &SHAPE63, &SHAPE64, &SHAPE65, &SHAPE64, &SHAPE65, &SHAPE66, &SHAPE67, &SHAPE66, + &SHAPE67, &SHAPE68, &SHAPE69, &SHAPE68, &SHAPE69, &SHAPE70, &SHAPE71, &SHAPE70, &SHAPE71, + &SHAPE72, &SHAPE73, &SHAPE72, &SHAPE73, &SHAPE74, &SHAPE75, &SHAPE74, &SHAPE75, &SHAPE76, + &SHAPE77, &SHAPE76, &SHAPE77, &SHAPE78, &SHAPE1, &SHAPE78, &SHAPE1, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE80, &SHAPE80, &SHAPE81, + &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, + &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, + &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, + &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, + &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, + &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, + &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, + &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, + &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, + &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, + &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, + &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, + &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, + &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, + &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, @@ -11296,7 +11360,76 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, - &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE1, &SHAPE1, &SHAPE343, &SHAPE1, &SHAPE1, &SHAPE80, + &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, + &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, + &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, + &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, + &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, + &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, + &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, + &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, + &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, + &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, + &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, + &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, + &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, + &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, + &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, + &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, + &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, + &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, + &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, + &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, + &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, + &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, + &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, + &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, + &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, + &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, + &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, + &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, + &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, + &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, + &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, + &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, + &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, + &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, + &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, + &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, + &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, + &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, + &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, + &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, + &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, + &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, + &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, + &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, + &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, + &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, + &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, + &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, + &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, + &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE1, &SHAPE240, + &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, + &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, + &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, + &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE80, + &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, + &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, + &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, + &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, + &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, + &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, + &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, + &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, + &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE536, &SHAPE13, + &SHAPE537, &SHAPE193, &SHAPE18, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, + &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, + &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE541, &SHAPE541, &SHAPE541, + &SHAPE21, &SHAPE21, &SHAPE21, &SHAPE21, &SHAPE1, &SHAPE23, &SHAPE1, &SHAPE1, &SHAPE542, + &SHAPE543, &SHAPE544, &SHAPE545, &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, + &SHAPE551, &SHAPE552, &SHAPE553, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, @@ -11305,97 +11438,10 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, - &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, - &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, - &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, - &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, - &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, - &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, - &SHAPE98, &SHAPE1, &SHAPE1, &SHAPE343, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, - &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, - &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, - &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, - &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, - &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, - &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, - &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE384, - &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, &SHAPE390, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE397, - &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, &SHAPE402, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, &SHAPE416, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE428, - &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, &SHAPE434, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE444, - &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, &SHAPE452, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE461, - &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, &SHAPE466, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE473, - &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE1, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, - &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, - &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, - &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, - &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, - &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE536, &SHAPE13, &SHAPE537, &SHAPE193, - &SHAPE18, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, &SHAPE538, - &SHAPE538, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, &SHAPE539, - &SHAPE539, &SHAPE540, &SHAPE541, &SHAPE541, &SHAPE541, &SHAPE541, &SHAPE21, &SHAPE21, &SHAPE21, - &SHAPE21, &SHAPE1, &SHAPE23, &SHAPE1, &SHAPE1, &SHAPE542, &SHAPE543, &SHAPE544, &SHAPE545, - &SHAPE546, &SHAPE547, &SHAPE548, &SHAPE549, &SHAPE550, &SHAPE551, &SHAPE552, &SHAPE553, - &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, - &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, - &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, - &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, - &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, - &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, - &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, - &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, - &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE1, - &SHAPE1, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, - &SHAPE104, &SHAPE554, &SHAPE554, &SHAPE555, &SHAPE555, &SHAPE556, &SHAPE556, &SHAPE557, - &SHAPE557, &SHAPE554, &SHAPE554, &SHAPE555, &SHAPE555, &SHAPE556, &SHAPE556, &SHAPE557, - &SHAPE557, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, + &SHAPE98, &SHAPE98, &SHAPE1, &SHAPE1, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE104, + &SHAPE104, &SHAPE104, &SHAPE104, &SHAPE554, &SHAPE554, &SHAPE555, &SHAPE555, &SHAPE556, + &SHAPE556, &SHAPE557, &SHAPE557, &SHAPE554, &SHAPE554, &SHAPE555, &SHAPE555, &SHAPE556, + &SHAPE556, &SHAPE557, &SHAPE557, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, @@ -11403,14 +11449,32 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE558, - &SHAPE558, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, + &SHAPE558, &SHAPE558, &SHAPE558, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, + &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, + &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, + &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, + &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, + &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, + &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, + &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, + &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, + &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, + &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, + &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, @@ -11419,306 +11483,253 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, - &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, - &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, - &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, - &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, - &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, - &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, - &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, - &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, - &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, - &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, - &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, - &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, - &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE384, - &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, &SHAPE390, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE397, - &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, &SHAPE402, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, - &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, &SHAPE416, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE428, - &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, &SHAPE434, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE444, - &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, &SHAPE452, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE461, - &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, &SHAPE466, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE473, - &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, - &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, - &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, - &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, - &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, - &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, - &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, - &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, - &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, - &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, - &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, - &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, - &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, - &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, - &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, - &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, - &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, - &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, - &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, + &SHAPE98, &SHAPE98, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, + &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, + &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, + &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, + &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, + &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, + &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, + &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, + &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, + &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, + &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, + &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, + &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, + &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, + &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, + &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, + &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, + &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, + &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, + &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, + &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, + &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, + &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, + &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, + &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, + &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, + &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, + &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, + &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, + &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, + &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, + &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, + &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, + &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, + &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, + &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, + &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, + &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, + &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, + &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, + &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE195, + &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, + &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, + &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, + &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, + &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, + &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, + &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, + &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, + &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, + &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, + &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, + &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, + &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, + &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, + &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, + &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, + &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, + &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, + &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, + &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, + &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, + &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, + &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, + &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, + &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, + &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, + &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, + &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, + &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, + &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, + &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, + &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, + &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, + &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, + &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, + &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, + &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, + &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, + &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, + &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, + &SHAPE534, &SHAPE535, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, - &SHAPE38, &SHAPE38, &SHAPE12, &SHAPE279, &SHAPE190, &SHAPE536, &SHAPE191, &SHAPE559, &SHAPE13, - &SHAPE560, &SHAPE12, &SHAPE279, &SHAPE190, &SHAPE536, &SHAPE191, &SHAPE559, &SHAPE13, - &SHAPE560, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, - &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, - &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, - &SHAPE236, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE12, &SHAPE279, &SHAPE190, &SHAPE536, + &SHAPE191, &SHAPE559, &SHAPE13, &SHAPE560, &SHAPE12, &SHAPE279, &SHAPE190, &SHAPE536, + &SHAPE191, &SHAPE559, &SHAPE13, &SHAPE560, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, + &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, + &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, + &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, - &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, &SHAPE564, &SHAPE564, &SHAPE565, - &SHAPE565, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, + &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE561, &SHAPE562, &SHAPE562, &SHAPE563, &SHAPE563, + &SHAPE564, &SHAPE564, &SHAPE565, &SHAPE565, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, - &SHAPE566, &SHAPE567, &SHAPE567, &SHAPE568, &SHAPE568, &SHAPE569, &SHAPE569, &SHAPE570, - &SHAPE570, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, - &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, &SHAPE104, &SHAPE104, &SHAPE105, - &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, &SHAPE104, &SHAPE106, &SHAPE106, &SHAPE105, - &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, &SHAPE107, &SHAPE108, &SHAPE108, &SHAPE104, - &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, &SHAPE107, &SHAPE220, &SHAPE219, &SHAPE219, + &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE566, &SHAPE567, &SHAPE567, &SHAPE568, &SHAPE568, + &SHAPE569, &SHAPE569, &SHAPE570, &SHAPE570, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, + &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, &SHAPE571, &SHAPE571, &SHAPE572, &SHAPE572, + &SHAPE104, &SHAPE104, &SHAPE105, &SHAPE105, &SHAPE106, &SHAPE106, &SHAPE104, &SHAPE104, + &SHAPE106, &SHAPE106, &SHAPE105, &SHAPE105, &SHAPE104, &SHAPE104, &SHAPE107, &SHAPE107, + &SHAPE108, &SHAPE108, &SHAPE104, &SHAPE104, &SHAPE108, &SHAPE108, &SHAPE107, &SHAPE107, + &SHAPE220, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, - &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE219, + &SHAPE220, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, - &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE219, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, - &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, + &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, - &SHAPE191, &SHAPE191, &SHAPE1, &SHAPE1, &SHAPE573, &SHAPE574, &SHAPE575, &SHAPE576, &SHAPE577, - &SHAPE573, &SHAPE574, &SHAPE575, &SHAPE576, &SHAPE577, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, - &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, - &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, - &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, - &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, - &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, - &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, - &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE191, &SHAPE1, &SHAPE1, &SHAPE573, + &SHAPE574, &SHAPE575, &SHAPE576, &SHAPE577, &SHAPE573, &SHAPE574, &SHAPE575, &SHAPE576, + &SHAPE577, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, + &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, + &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, + &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, + &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, + &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, + &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE12, &SHAPE13, + &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE12, &SHAPE12, + &SHAPE12, &SHAPE12, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, - &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, - &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, - &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, - &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, - &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, - &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, - &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, - &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, - &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, - &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, - &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, - &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, - &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, - &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, - &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, - &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, - &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, - &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, - &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, - &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, - &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, - &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, - &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, - &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, - &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, - &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, - &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, - &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, - &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, - &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, - &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, - &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, - &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, - &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, - &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, - &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE280, + &SHAPE281, &SHAPE280, &SHAPE281, &SHAPE282, &SHAPE283, &SHAPE282, &SHAPE283, &SHAPE284, + &SHAPE285, &SHAPE284, &SHAPE285, &SHAPE286, &SHAPE287, &SHAPE286, &SHAPE287, &SHAPE288, + &SHAPE289, &SHAPE288, &SHAPE289, &SHAPE290, &SHAPE291, &SHAPE290, &SHAPE291, &SHAPE292, + &SHAPE293, &SHAPE292, &SHAPE293, &SHAPE294, &SHAPE295, &SHAPE294, &SHAPE295, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, @@ -11745,19 +11756,25 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, - &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &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, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, + &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, + &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, + &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, + &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, + &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, + &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, + &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, + &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, + &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, + &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, + &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, @@ -11775,21 +11792,51 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, - &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, - &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, - &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, - &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, - &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, - &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, - &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, - &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, - &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, - &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, + &SHAPE98, &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, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, + &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, + &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, + &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, + &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, + &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, + &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, + &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, + &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, + &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, + &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, + &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, + &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, + &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, + &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, + &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, + &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, + &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, + &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, + &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, + &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, + &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, + &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, + &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, + &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, + &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, + &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, + &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, + &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, - &SHAPE79, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE195, &SHAPE195, + &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE79, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, @@ -11821,7 +11868,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, - &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE578, &SHAPE579, &SHAPE580, + &SHAPE195, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, @@ -11829,187 +11876,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, - &SHAPE581, &SHAPE578, &SHAPE579, &SHAPE580, &SHAPE581, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, - &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, - &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, - &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, - &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, - &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, - &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, - &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, - &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, - &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, - &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, - &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, - &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, - &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE582, &SHAPE583, - &SHAPE582, &SHAPE583, &SHAPE270, &SHAPE270, &SHAPE584, &SHAPE585, &SHAPE586, &SHAPE587, - &SHAPE588, &SHAPE589, &SHAPE590, &SHAPE591, &SHAPE592, &SHAPE593, &SHAPE594, &SHAPE595, - &SHAPE596, &SHAPE597, &SHAPE598, &SHAPE599, &SHAPE600, &SHAPE601, &SHAPE602, &SHAPE603, - &SHAPE604, &SHAPE605, &SHAPE606, &SHAPE607, &SHAPE608, &SHAPE609, &SHAPE610, &SHAPE611, - &SHAPE612, &SHAPE205, &SHAPE613, &SHAPE614, &SHAPE615, &SHAPE616, &SHAPE617, &SHAPE618, - &SHAPE619, &SHAPE620, &SHAPE621, &SHAPE622, &SHAPE623, &SHAPE624, &SHAPE625, &SHAPE626, - &SHAPE627, &SHAPE628, &SHAPE629, &SHAPE630, &SHAPE631, &SHAPE632, &SHAPE633, &SHAPE634, - &SHAPE635, &SHAPE636, &SHAPE637, &SHAPE638, &SHAPE639, &SHAPE640, &SHAPE641, &SHAPE642, - &SHAPE643, &SHAPE644, &SHAPE645, &SHAPE646, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE581, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, @@ -12018,13 +11885,192 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, - &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE1, &SHAPE38, &SHAPE647, &SHAPE0, &SHAPE648, &SHAPE0, - &SHAPE650, &SHAPE0, &SHAPE651, &SHAPE652, &SHAPE651, &SHAPE653, &SHAPE651, &SHAPE1, &SHAPE1, - &SHAPE12, &SHAPE190, &SHAPE191, &SHAPE13, &SHAPE194, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, + &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, + &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, + &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, + &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, + &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, + &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, + &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, + &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, + &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, + &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE582, &SHAPE583, &SHAPE582, &SHAPE583, &SHAPE270, + &SHAPE270, &SHAPE584, &SHAPE585, &SHAPE586, &SHAPE587, &SHAPE588, &SHAPE589, &SHAPE590, + &SHAPE591, &SHAPE592, &SHAPE593, &SHAPE594, &SHAPE595, &SHAPE596, &SHAPE597, &SHAPE598, + &SHAPE599, &SHAPE600, &SHAPE601, &SHAPE602, &SHAPE603, &SHAPE604, &SHAPE605, &SHAPE606, + &SHAPE607, &SHAPE608, &SHAPE609, &SHAPE610, &SHAPE611, &SHAPE612, &SHAPE205, &SHAPE613, + &SHAPE614, &SHAPE615, &SHAPE616, &SHAPE617, &SHAPE618, &SHAPE619, &SHAPE620, &SHAPE621, + &SHAPE622, &SHAPE623, &SHAPE624, &SHAPE625, &SHAPE626, &SHAPE627, &SHAPE628, &SHAPE629, + &SHAPE630, &SHAPE631, &SHAPE632, &SHAPE633, &SHAPE634, &SHAPE635, &SHAPE636, &SHAPE637, + &SHAPE638, &SHAPE639, &SHAPE640, &SHAPE641, &SHAPE642, &SHAPE643, &SHAPE644, &SHAPE645, + &SHAPE646, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, + &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, + &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, + &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, + &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, + &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, + &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, + &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, + &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, + &SHAPE1, &SHAPE38, &SHAPE647, &SHAPE0, &SHAPE648, &SHAPE0, &SHAPE650, &SHAPE0, &SHAPE651, + &SHAPE652, &SHAPE651, &SHAPE653, &SHAPE651, &SHAPE1, &SHAPE1, &SHAPE12, &SHAPE190, &SHAPE191, + &SHAPE13, &SHAPE194, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE654, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE654, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -12045,62 +12091,36 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE560, &SHAPE560, + &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, - &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE1, &SHAPE1, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE656, - &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, - &SHAPE657, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, + &SHAPE1, &SHAPE1, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, + &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, - &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, + &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, &SHAPE658, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, - &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE660, &SHAPE660, + &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE659, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, &SHAPE660, - &SHAPE660, &SHAPE660, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, - &SHAPE664, &SHAPE664, &SHAPE665, &SHAPE665, &SHAPE666, &SHAPE666, &SHAPE667, &SHAPE667, - &SHAPE668, &SHAPE668, &SHAPE1, &SHAPE654, &SHAPE654, &SHAPE669, &SHAPE671, &SHAPE671, - &SHAPE671, &SHAPE671, &SHAPE672, &SHAPE672, &SHAPE671, &SHAPE671, &SHAPE671, &SHAPE671, - &SHAPE672, &SHAPE672, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, - &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, - &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, - &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, - &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, - &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, - &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, - &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, - &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, - &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, - &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, - &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, - &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, - &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, - &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, - &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, - &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, - &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, - &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, - &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, - &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, - &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, - &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, - &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, + &SHAPE665, &SHAPE665, &SHAPE666, &SHAPE666, &SHAPE667, &SHAPE667, &SHAPE668, &SHAPE668, + &SHAPE1, &SHAPE654, &SHAPE654, &SHAPE669, &SHAPE671, &SHAPE671, &SHAPE671, &SHAPE671, + &SHAPE672, &SHAPE672, &SHAPE671, &SHAPE671, &SHAPE671, &SHAPE671, &SHAPE672, &SHAPE672, + &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, @@ -12198,7 +12218,33 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, - &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, + &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, + &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, + &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, + &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, + &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, + &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, + &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, + &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, + &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, + &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, + &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, + &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, + &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, + &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, + &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, + &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, + &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, + &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, + &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, + &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, + &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, + &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, + &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, + &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, @@ -12206,7 +12252,48 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, - &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE195, + &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, + &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, + &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, + &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, + &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, + &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, + &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, + &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, + &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, + &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, + &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, + &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, + &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, + &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, + &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, + &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, + &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, + &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, + &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, + &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, + &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, + &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, + &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, + &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, + &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, + &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, + &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, + &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, + &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, + &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, + &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, + &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, + &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, + &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, + &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, + &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, + &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, + &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, + &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, + &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, + &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, + &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, @@ -12691,68 +12778,28 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, - &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, - &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, - &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, - &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, - &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, - &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, - &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, - &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, - &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, - &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, - &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, - &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, - &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, + &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, - &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, - &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, + &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE674, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, + &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE673, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE675, &SHAPE675, &SHAPE676, &SHAPE676, &SHAPE677, - &SHAPE678, &SHAPE679, &SHAPE680, &SHAPE681, &SHAPE681, &SHAPE682, &SHAPE682, &SHAPE684, - &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, - &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE687, &SHAPE687, &SHAPE687, &SHAPE687, &SHAPE1, - &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE560, &SHAPE688, &SHAPE688, &SHAPE688, &SHAPE688, - &SHAPE689, &SHAPE689, &SHAPE689, &SHAPE689, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, - &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE691, &SHAPE691, &SHAPE692, &SHAPE692, - &SHAPE693, &SHAPE693, &SHAPE694, &SHAPE694, &SHAPE695, &SHAPE695, &SHAPE695, &SHAPE695, - &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, - &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, - &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, - &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, - &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, - &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, + &SHAPE675, &SHAPE675, &SHAPE676, &SHAPE676, &SHAPE677, &SHAPE678, &SHAPE679, &SHAPE680, + &SHAPE681, &SHAPE681, &SHAPE682, &SHAPE682, &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE684, + &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, + &SHAPE687, &SHAPE687, &SHAPE687, &SHAPE687, &SHAPE1, &SHAPE560, &SHAPE560, &SHAPE560, + &SHAPE560, &SHAPE688, &SHAPE688, &SHAPE688, &SHAPE688, &SHAPE689, &SHAPE689, &SHAPE689, + &SHAPE689, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, + &SHAPE690, &SHAPE691, &SHAPE691, &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, &SHAPE694, + &SHAPE694, &SHAPE695, &SHAPE695, &SHAPE695, &SHAPE695, &SHAPE696, &SHAPE696, &SHAPE696, + &SHAPE696, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, + &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, + &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, + &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, + &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, &SHAPE698, &SHAPE697, &SHAPE697, &SHAPE698, + &SHAPE698, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, @@ -12760,91 +12807,91 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, - &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE559, &SHAPE566, &SHAPE23, &SHAPE23, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE699, &SHAPE1, &SHAPE20, &SHAPE700, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE699, - &SHAPE1, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, + &SHAPE559, &SHAPE566, &SHAPE23, &SHAPE23, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE699, &SHAPE1, + &SHAPE20, &SHAPE700, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE699, &SHAPE1, &SHAPE701, &SHAPE701, + &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE701, - &SHAPE701, &SHAPE701, &SHAPE701, &SHAPE23, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, + &SHAPE23, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, - &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE195, &SHAPE20, &SHAPE1, - &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE240, - &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, - &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, - &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, - &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, - &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, - &SHAPE250, &SHAPE248, &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, - &SHAPE258, &SHAPE256, &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, - &SHAPE266, &SHAPE264, &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, - &SHAPE197, &SHAPE197, &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, - &SHAPE199, &SHAPE199, &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, - &SHAPE198, &SHAPE198, &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, - &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, - &SHAPE341, &SHAPE341, &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, - &SHAPE342, &SHAPE342, &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, - &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, - &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, - &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, - &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, - &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, - &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, - &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, - &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, - &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, - &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, - &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, - &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, - &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, - &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE221, &SHAPE222, &SHAPE221, - &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, - &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, - &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, - &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, - &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, - &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, - &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, - &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, - &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, - &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE195, &SHAPE195, &SHAPE195, + &SHAPE702, &SHAPE702, &SHAPE702, &SHAPE195, &SHAPE20, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, + &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, + &SHAPE1, &SHAPE219, &SHAPE220, &SHAPE219, &SHAPE220, &SHAPE240, &SHAPE242, &SHAPE240, + &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, + &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, + &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, + &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE240, &SHAPE242, &SHAPE240, + &SHAPE242, &SHAPE244, &SHAPE246, &SHAPE244, &SHAPE246, &SHAPE248, &SHAPE250, &SHAPE248, + &SHAPE250, &SHAPE252, &SHAPE254, &SHAPE252, &SHAPE254, &SHAPE256, &SHAPE258, &SHAPE256, + &SHAPE258, &SHAPE260, &SHAPE262, &SHAPE260, &SHAPE262, &SHAPE264, &SHAPE266, &SHAPE264, + &SHAPE266, &SHAPE268, &SHAPE270, &SHAPE268, &SHAPE270, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE197, &SHAPE197, &SHAPE197, + &SHAPE197, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE199, &SHAPE199, &SHAPE199, + &SHAPE199, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE198, &SHAPE198, &SHAPE198, + &SHAPE198, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE278, &SHAPE196, &SHAPE196, &SHAPE196, + &SHAPE196, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE279, &SHAPE341, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE341, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE341, &SHAPE341, &SHAPE341, + &SHAPE341, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE252, &SHAPE342, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE342, &SHAPE342, &SHAPE342, + &SHAPE342, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE258, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, + &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, + &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, + &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, + &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, + &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, + &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, + &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, + &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, + &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, + &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, + &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, + &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, + &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, + &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, + &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, + &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, + &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, + &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, + &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, + &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, + &SHAPE235, &SHAPE236, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, &SHAPE224, + &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, &SHAPE230, + &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, &SHAPE236, + &SHAPE235, &SHAPE236, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE197, &SHAPE197, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, + &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE199, &SHAPE199, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, + &SHAPE199, &SHAPE199, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE198, &SHAPE198, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, + &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE196, &SHAPE196, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, + &SHAPE196, &SHAPE196, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, @@ -12852,219 +12899,20 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, - &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE195, &SHAPE200, &SHAPE200, &SHAPE201, - &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, - &SHAPE201, &SHAPE202, &SHAPE202, &SHAPE203, &SHAPE203, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE703, &SHAPE704, &SHAPE705, - &SHAPE706, &SHAPE707, &SHAPE708, &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE195, &SHAPE195, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE200, &SHAPE200, &SHAPE201, &SHAPE201, &SHAPE202, &SHAPE202, + &SHAPE203, &SHAPE203, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE703, &SHAPE704, &SHAPE705, &SHAPE706, &SHAPE707, &SHAPE708, + &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE38, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, - &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, - &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, - &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, - &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, - &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, - &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, - &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, - &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, - &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, - &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, - &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, - &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, - &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, - &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, - &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, - &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, - &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, - &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, - &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, - &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, - &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, - &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, - &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, - &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, - &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, - &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, - &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, - &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, - &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, - &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, - &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, - &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, - &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, - &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, - &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, - &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, - &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, - &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, - &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, - &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, - &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, - &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, - &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, - &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, - &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, - &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, - &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, - &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, - &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, - &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, - &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, - &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, - &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, - &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, - &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, - &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, - &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, - &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, - &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, - &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, - &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, - &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, - &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, - &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, - &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, - &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, - &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, - &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, - &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, - &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, - &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, - &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE80, - &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, - &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, - &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, - &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, - &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, - &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, - &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, - &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, - &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE221, - &SHAPE222, &SHAPE223, &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, - &SHAPE228, &SHAPE229, &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, - &SHAPE234, &SHAPE235, &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, - &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, - &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, - &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, - &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, - &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, - &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, - &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, - &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, - &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, - &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, - &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, - &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, - &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, - &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, - &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, - &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, - &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, - &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, - &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, - &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, - &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, - &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, - &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, - &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, - &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, - &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, - &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, - &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, - &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, - &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, - &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, - &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, - &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, - &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, - &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, - &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, - &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, - &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, - &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, - &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, - &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, - &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, - &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, - &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE1, &SHAPE1, &SHAPE715, &SHAPE715, &SHAPE716, - &SHAPE716, &SHAPE717, &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, - &SHAPE720, &SHAPE721, &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, - &SHAPE724, &SHAPE725, &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE728, - &SHAPE728, &SHAPE729, &SHAPE729, &SHAPE730, &SHAPE730, &SHAPE731, &SHAPE731, &SHAPE732, - &SHAPE732, &SHAPE733, &SHAPE733, &SHAPE734, &SHAPE734, &SHAPE735, &SHAPE735, &SHAPE736, - &SHAPE736, &SHAPE737, &SHAPE737, &SHAPE738, &SHAPE738, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, - &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE38, &SHAPE38, &SHAPE38, + &SHAPE38, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, @@ -13113,7 +12961,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, @@ -13163,18 +13012,216 @@ static OUTLINE_SHAPES_MAP: [&LazyLock<VoxelShape>; 29671] = [ &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, - &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, - &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, - &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, - &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, - &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, - &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, - &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, - &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, - &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, - &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, - &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, - &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, + &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, + &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, + &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, + &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, + &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, + &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, + &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, + &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, + &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, + &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE219, &SHAPE220, &SHAPE221, &SHAPE222, &SHAPE221, &SHAPE222, &SHAPE223, + &SHAPE224, &SHAPE223, &SHAPE224, &SHAPE225, &SHAPE226, &SHAPE227, &SHAPE228, &SHAPE229, + &SHAPE230, &SHAPE231, &SHAPE232, &SHAPE233, &SHAPE234, &SHAPE233, &SHAPE234, &SHAPE235, + &SHAPE236, &SHAPE235, &SHAPE236, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, + &SHAPE348, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, + &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, + &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, + &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, + &SHAPE372, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, + &SHAPE376, &SHAPE377, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, + &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, + &SHAPE390, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, + &SHAPE392, &SHAPE393, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, + &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, + &SHAPE402, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, + &SHAPE404, &SHAPE405, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, + &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, + &SHAPE416, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, + &SHAPE420, &SHAPE421, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, + &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, + &SHAPE434, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, + &SHAPE436, &SHAPE437, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, + &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, + &SHAPE452, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, + &SHAPE456, &SHAPE457, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, + &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, + &SHAPE466, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, + &SHAPE468, &SHAPE469, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, + &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, + &SHAPE478, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, + &SHAPE480, &SHAPE481, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, + &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, + &SHAPE490, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, + &SHAPE492, &SHAPE493, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, + &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, + &SHAPE502, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, + &SHAPE504, &SHAPE505, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, + &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, + &SHAPE514, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, + &SHAPE516, &SHAPE517, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, + &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, + &SHAPE526, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, + &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, + &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE305, &SHAPE711, &SHAPE711, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE713, &SHAPE713, + &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, + &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, + &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, + &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, &SHAPE714, + &SHAPE714, &SHAPE714, &SHAPE1, &SHAPE1, &SHAPE715, &SHAPE715, &SHAPE716, &SHAPE716, &SHAPE717, + &SHAPE717, &SHAPE718, &SHAPE718, &SHAPE719, &SHAPE719, &SHAPE720, &SHAPE720, &SHAPE721, + &SHAPE721, &SHAPE722, &SHAPE722, &SHAPE723, &SHAPE723, &SHAPE724, &SHAPE724, &SHAPE725, + &SHAPE725, &SHAPE726, &SHAPE726, &SHAPE727, &SHAPE727, &SHAPE728, &SHAPE728, &SHAPE729, + &SHAPE729, &SHAPE730, &SHAPE730, &SHAPE731, &SHAPE731, &SHAPE732, &SHAPE732, &SHAPE733, + &SHAPE733, &SHAPE734, &SHAPE734, &SHAPE735, &SHAPE735, &SHAPE736, &SHAPE736, &SHAPE737, + &SHAPE737, &SHAPE738, &SHAPE738, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, &SHAPE1, + &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, + &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, + &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, &SHAPE92, + &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, &SHAPE97, + &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, &SHAPE92, + &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, &SHAPE97, + &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, &SHAPE102, + &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, &SHAPE103, + &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, &SHAPE98, + &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, + &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, + &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, + &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, + &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, + &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, + &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, + &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, + &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, + &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, + &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, + &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, + &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, + &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, + &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, + &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, + &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, + &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, + &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, + &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, + &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, + &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, + &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, + &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, + &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, + &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, + &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, + &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, + &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, + &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, + &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, + &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, + &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, + &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, + &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, + &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, + &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, + &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, + &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, + &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, + &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, + &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, + &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, &SHAPE92, + &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, &SHAPE96, + &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, &SHAPE92, + &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, &SHAPE101, + &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, &SHAPE102, + &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, &SHAPE93, + &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, &SHAPE98, + &SHAPE98, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, &SHAPE350, + &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, + &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, + &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, + &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, &SHAPE369, + &SHAPE371, &SHAPE372, &SHAPE374, &SHAPE376, &SHAPE377, &SHAPE374, &SHAPE376, &SHAPE377, + &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE379, &SHAPE381, &SHAPE382, &SHAPE384, &SHAPE386, + &SHAPE387, &SHAPE384, &SHAPE386, &SHAPE387, &SHAPE388, &SHAPE389, &SHAPE390, &SHAPE388, + &SHAPE389, &SHAPE390, &SHAPE391, &SHAPE392, &SHAPE393, &SHAPE391, &SHAPE392, &SHAPE393, + &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE394, &SHAPE395, &SHAPE396, &SHAPE397, &SHAPE398, + &SHAPE399, &SHAPE397, &SHAPE398, &SHAPE399, &SHAPE400, &SHAPE401, &SHAPE402, &SHAPE400, + &SHAPE401, &SHAPE402, &SHAPE403, &SHAPE404, &SHAPE405, &SHAPE403, &SHAPE404, &SHAPE405, + &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE406, &SHAPE407, &SHAPE408, &SHAPE409, &SHAPE410, + &SHAPE411, &SHAPE409, &SHAPE410, &SHAPE411, &SHAPE413, &SHAPE415, &SHAPE416, &SHAPE413, + &SHAPE415, &SHAPE416, &SHAPE418, &SHAPE420, &SHAPE421, &SHAPE418, &SHAPE420, &SHAPE421, + &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE423, &SHAPE425, &SHAPE426, &SHAPE428, &SHAPE430, + &SHAPE431, &SHAPE428, &SHAPE430, &SHAPE431, &SHAPE432, &SHAPE433, &SHAPE434, &SHAPE432, + &SHAPE433, &SHAPE434, &SHAPE435, &SHAPE436, &SHAPE437, &SHAPE435, &SHAPE436, &SHAPE437, + &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE439, &SHAPE441, &SHAPE442, &SHAPE444, &SHAPE446, + &SHAPE447, &SHAPE444, &SHAPE446, &SHAPE447, &SHAPE449, &SHAPE451, &SHAPE452, &SHAPE449, + &SHAPE451, &SHAPE452, &SHAPE454, &SHAPE456, &SHAPE457, &SHAPE454, &SHAPE456, &SHAPE457, + &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE458, &SHAPE459, &SHAPE460, &SHAPE461, &SHAPE462, + &SHAPE463, &SHAPE461, &SHAPE462, &SHAPE463, &SHAPE464, &SHAPE465, &SHAPE466, &SHAPE464, + &SHAPE465, &SHAPE466, &SHAPE467, &SHAPE468, &SHAPE469, &SHAPE467, &SHAPE468, &SHAPE469, + &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE470, &SHAPE471, &SHAPE472, &SHAPE473, &SHAPE474, + &SHAPE475, &SHAPE473, &SHAPE474, &SHAPE475, &SHAPE476, &SHAPE477, &SHAPE478, &SHAPE476, + &SHAPE477, &SHAPE478, &SHAPE479, &SHAPE480, &SHAPE481, &SHAPE479, &SHAPE480, &SHAPE481, + &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE482, &SHAPE483, &SHAPE484, &SHAPE485, &SHAPE486, + &SHAPE487, &SHAPE485, &SHAPE486, &SHAPE487, &SHAPE488, &SHAPE489, &SHAPE490, &SHAPE488, + &SHAPE489, &SHAPE490, &SHAPE491, &SHAPE492, &SHAPE493, &SHAPE491, &SHAPE492, &SHAPE493, + &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE494, &SHAPE495, &SHAPE496, &SHAPE497, &SHAPE498, + &SHAPE499, &SHAPE497, &SHAPE498, &SHAPE499, &SHAPE500, &SHAPE501, &SHAPE502, &SHAPE500, + &SHAPE501, &SHAPE502, &SHAPE503, &SHAPE504, &SHAPE505, &SHAPE503, &SHAPE504, &SHAPE505, + &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE506, &SHAPE507, &SHAPE508, &SHAPE509, &SHAPE510, + &SHAPE511, &SHAPE509, &SHAPE510, &SHAPE511, &SHAPE512, &SHAPE513, &SHAPE514, &SHAPE512, + &SHAPE513, &SHAPE514, &SHAPE515, &SHAPE516, &SHAPE517, &SHAPE515, &SHAPE516, &SHAPE517, + &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE518, &SHAPE519, &SHAPE520, &SHAPE521, &SHAPE522, + &SHAPE523, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE524, + &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE527, &SHAPE528, &SHAPE529, + &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE530, &SHAPE531, &SHAPE532, &SHAPE533, &SHAPE534, + &SHAPE535, &SHAPE533, &SHAPE534, &SHAPE535, &SHAPE1, &SHAPE1, &SHAPE344, &SHAPE344, &SHAPE13, + &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, + &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, + &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, &SHAPE91, &SHAPE91, + &SHAPE92, &SHAPE92, &SHAPE93, &SHAPE93, &SHAPE94, &SHAPE94, &SHAPE95, &SHAPE95, &SHAPE96, + &SHAPE96, &SHAPE97, &SHAPE97, &SHAPE98, &SHAPE98, &SHAPE99, &SHAPE99, &SHAPE100, &SHAPE100, + &SHAPE92, &SHAPE92, &SHAPE81, &SHAPE81, &SHAPE94, &SHAPE94, &SHAPE83, &SHAPE83, &SHAPE101, + &SHAPE101, &SHAPE97, &SHAPE97, &SHAPE86, &SHAPE86, &SHAPE99, &SHAPE99, &SHAPE88, &SHAPE88, + &SHAPE102, &SHAPE102, &SHAPE82, &SHAPE82, &SHAPE91, &SHAPE91, &SHAPE84, &SHAPE84, &SHAPE93, + &SHAPE93, &SHAPE103, &SHAPE103, &SHAPE87, &SHAPE87, &SHAPE96, &SHAPE96, &SHAPE89, &SHAPE89, + &SHAPE98, &SHAPE98, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE195, &SHAPE347, &SHAPE348, &SHAPE0, + &SHAPE350, &SHAPE351, &SHAPE0, &SHAPE350, &SHAPE351, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE353, &SHAPE355, &SHAPE356, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE358, &SHAPE360, &SHAPE361, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE362, &SHAPE363, &SHAPE364, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE365, &SHAPE366, &SHAPE367, &SHAPE369, &SHAPE371, &SHAPE372, diff --git a/azalea-protocol/src/common/recipe.rs b/azalea-protocol/src/common/recipe.rs index e0e10ecc..5e1f93c9 100644 --- a/azalea-protocol/src/common/recipe.rs +++ b/azalea-protocol/src/common/recipe.rs @@ -1,6 +1,11 @@ use azalea_buf::AzBuf; use azalea_inventory::ItemStack; -use azalea_registry::{HolderSet, builtin::ItemKind, data::TrimPattern, identifier::Identifier}; +use azalea_registry::{ + HolderSet, + builtin::{DataComponentKind, ItemKind}, + data::TrimPattern, + identifier::Identifier, +}; /// [`azalea_registry::builtin::RecipeDisplay`] #[derive(AzBuf, Clone, Debug, PartialEq)] @@ -63,15 +68,28 @@ pub struct Ingredient { pub enum SlotDisplayData { Empty, AnyFuel, + WithAnyPotion(Box<WithAnyPotionSlotDisplay>), + OnlyWithComponent(Box<OnlyWithComponentSlotDisplay>), Item(ItemSlotDisplay), ItemStack(ItemStackSlotDisplay), Tag(TagSlotDisplay), + Dyed(Box<DyedSlotDemo>), SmithingTrim(Box<SmithingTrimDemoSlotDisplay>), WithRemainder(Box<WithRemainderSlotDisplay>), Composite(CompositeSlotDisplay), } #[derive(AzBuf, Clone, Debug, PartialEq)] +pub struct WithAnyPotionSlotDisplay { + pub contents: SlotDisplayData, +} +#[derive(AzBuf, Clone, Debug, PartialEq)] +pub struct OnlyWithComponentSlotDisplay { + pub contents: SlotDisplayData, + pub component: DataComponentKind, +} + +#[derive(AzBuf, Clone, Debug, PartialEq)] pub struct ItemSlotDisplay { pub item: ItemKind, } @@ -80,6 +98,11 @@ pub struct ItemStackSlotDisplay { pub stack: ItemStack, } #[derive(AzBuf, Clone, Debug, PartialEq)] +pub struct DyedSlotDemo { + pub dye: SlotDisplayData, + pub target: SlotDisplayData, +} +#[derive(AzBuf, Clone, Debug, PartialEq)] pub struct TagSlotDisplay { pub tag: Identifier, } diff --git a/azalea-protocol/src/packets/game/c_game_rule_values.rs b/azalea-protocol/src/packets/game/c_game_rule_values.rs new file mode 100644 index 00000000..3fc2b619 --- /dev/null +++ b/azalea-protocol/src/packets/game/c_game_rule_values.rs @@ -0,0 +1,9 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundGamePacket; +use azalea_registry::builtin::GameRule; +use indexmap::IndexMap; + +#[derive(Clone, Debug, AzBuf, PartialEq, ClientboundGamePacket)] +pub struct ClientboundGameRuleValues { + pub values: IndexMap<GameRule, String>, +} diff --git a/azalea-protocol/src/packets/game/c_low_disk_space_warning.rs b/azalea-protocol/src/packets/game/c_low_disk_space_warning.rs new file mode 100644 index 00000000..e3b3e72a --- /dev/null +++ b/azalea-protocol/src/packets/game/c_low_disk_space_warning.rs @@ -0,0 +1,5 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, AzBuf, PartialEq, ClientboundGamePacket)] +pub struct ClientboundLowDiskSpaceWarning; diff --git a/azalea-protocol/src/packets/game/c_set_entity_data.rs b/azalea-protocol/src/packets/game/c_set_entity_data.rs index 1b4b46cd..d3fce384 100644 --- a/azalea-protocol/src/packets/game/c_set_entity_data.rs +++ b/azalea-protocol/src/packets/game/c_set_entity_data.rs @@ -9,25 +9,3 @@ pub struct ClientboundSetEntityData { pub id: MinecraftEntityId, pub packed_items: EntityMetadataItems, } - -#[cfg(test)] -mod tests { - use std::io::Cursor; - - use azalea_buf::AzBuf; - - use super::*; - - #[test] - fn test_read_6b6t_entity_data() { - let contents = [ - 254, 180, 160, 8, 11, 33, 190, 230, 102, 102, 0, 0, 0, 0, 191, 0, 0, 0, 12, 33, 63, - 102, 102, 102, 63, 25, 153, 154, 63, 102, 102, 102, 23, 14, 234, 64, 255, - ]; - let mut buf = Cursor::new(contents.as_slice()); - let packet = ClientboundSetEntityData::azalea_read(&mut buf).unwrap(); - println!("{packet:?}"); - - assert_eq!(buf.position(), contents.len() as u64); - } -} diff --git a/azalea-protocol/src/packets/game/c_set_time.rs b/azalea-protocol/src/packets/game/c_set_time.rs index ff795e87..efc95e0d 100644 --- a/azalea-protocol/src/packets/game/c_set_time.rs +++ b/azalea-protocol/src/packets/game/c_set_time.rs @@ -1,9 +1,18 @@ use azalea_buf::AzBuf; use azalea_protocol_macros::ClientboundGamePacket; +use azalea_registry::data::WorldClock; +use indexmap::IndexMap; #[derive(AzBuf, ClientboundGamePacket, Clone, Debug, PartialEq)] pub struct ClientboundSetTime { pub game_time: u64, - pub day_time: u64, - pub tick_day_time: bool, + pub clock_updates: IndexMap<WorldClock, ClockState>, +} + +#[derive(AzBuf, Clone, Debug, PartialEq)] +pub struct ClockState { + #[var] + pub total_ticks: u64, + pub partial_tick: f32, + pub rate: f32, } diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index 3235231c..d42d46eb 100644 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -44,6 +44,7 @@ declare_state_packets!(GamePacket, explode, forget_level_chunk, game_event, + game_rule_values, game_test_highlight_pos, mount_screen_open, hurt_animation, @@ -54,6 +55,7 @@ declare_state_packets!(GamePacket, level_particles, light_update, login, + low_disk_space_warning, map_item_data, merchant_offers, move_entity_pos, @@ -147,6 +149,7 @@ declare_state_packets!(GamePacket, ], Serverbound => [ accept_teleportation, + attack, block_entity_tag_query, bundle_item_selected, change_difficulty, @@ -202,10 +205,12 @@ declare_state_packets!(GamePacket, set_command_block, set_command_minecart, set_creative_mode_slot, + set_game_rule, set_jigsaw_block, set_structure_block, set_test_block, sign_update, + spectate_entity, swing, teleport_to_entity, test_instance_block_action, diff --git a/azalea-protocol/src/packets/game/s_attack.rs b/azalea-protocol/src/packets/game/s_attack.rs new file mode 100644 index 00000000..0edc2395 --- /dev/null +++ b/azalea-protocol/src/packets/game/s_attack.rs @@ -0,0 +1,8 @@ +use azalea_buf::AzBuf; +use azalea_core::entity_id::MinecraftEntityId; +use azalea_protocol_macros::ServerboundGamePacket; + +#[derive(Clone, Debug, AzBuf, PartialEq, ServerboundGamePacket)] +pub struct ServerboundAttack { + pub entity_id: MinecraftEntityId, +} diff --git a/azalea-protocol/src/packets/game/s_client_command.rs b/azalea-protocol/src/packets/game/s_client_command.rs index 04fe8936..5212b5ee 100644 --- a/azalea-protocol/src/packets/game/s_client_command.rs +++ b/azalea-protocol/src/packets/game/s_client_command.rs @@ -10,4 +10,5 @@ pub struct ServerboundClientCommand { pub enum Action { PerformRespawn = 0, RequestStats = 1, + RequestGameruleValues = 2, } diff --git a/azalea-protocol/src/packets/game/s_interact.rs b/azalea-protocol/src/packets/game/s_interact.rs index bd04e09d..2f0494ae 100644 --- a/azalea-protocol/src/packets/game/s_interact.rs +++ b/azalea-protocol/src/packets/game/s_interact.rs @@ -1,78 +1,17 @@ -use std::io::{self, Cursor, Write}; - -use azalea_buf::{AzBuf, AzBufVar}; -use azalea_core::{ - entity_id::MinecraftEntityId, - position::{Vec3, Vec3f32}, -}; +use azalea_buf::AzBuf; +use azalea_core::{delta::LpVec3, entity_id::MinecraftEntityId}; use azalea_protocol_macros::ServerboundGamePacket; -use crate::packets::BufReadError; - #[derive(AzBuf, Clone, Debug, PartialEq, ServerboundGamePacket)] pub struct ServerboundInteract { #[var] pub entity_id: MinecraftEntityId, - pub action: ActionType, - /// Whether the player is sneaking + pub hand: InteractionHand, + pub location: LpVec3, + /// Whether the player is sneaking. pub using_secondary_action: bool, } -#[derive(Clone, Copy, Debug, PartialEq)] -pub enum ActionType { - Interact { - hand: InteractionHand, - }, - Attack, - InteractAt { - location: Vec3, - hand: InteractionHand, - }, -} - -impl AzBuf for ActionType { - fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { - let action_type = u32::azalea_read_var(buf)?; - match action_type { - 0 => { - let hand = InteractionHand::azalea_read(buf)?; - Ok(ActionType::Interact { hand }) - } - 1 => Ok(ActionType::Attack), - 2 => { - let pos = Vec3f32::azalea_read(buf)?; - let hand = InteractionHand::azalea_read(buf)?; - Ok(ActionType::InteractAt { - location: Vec3::from(pos), - hand, - }) - } - _ => Err(BufReadError::UnexpectedEnumVariant { - id: action_type as i32, - }), - } - } - fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> { - match self { - ActionType::Interact { hand } => { - 0u32.azalea_write_var(buf)?; - hand.azalea_write(buf)?; - } - ActionType::Attack => { - 1u32.azalea_write_var(buf)?; - } - ActionType::InteractAt { location, hand } => { - 2u32.azalea_write_var(buf)?; - (location.x as f32).azalea_write(buf)?; - (location.y as f32).azalea_write(buf)?; - (location.z as f32).azalea_write(buf)?; - hand.azalea_write(buf)?; - } - } - Ok(()) - } -} - #[derive(AzBuf, Clone, Copy, Debug, Default, PartialEq)] pub enum InteractionHand { #[default] diff --git a/azalea-protocol/src/packets/game/s_set_game_rule.rs b/azalea-protocol/src/packets/game/s_set_game_rule.rs new file mode 100644 index 00000000..c49d97b9 --- /dev/null +++ b/azalea-protocol/src/packets/game/s_set_game_rule.rs @@ -0,0 +1,15 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ServerboundGamePacket; +use azalea_registry::identifier::Identifier; + +#[derive(Clone, Debug, AzBuf, PartialEq, ServerboundGamePacket)] +pub struct ServerboundSetGameRule { + pub entries: Vec<GameRuleEntry>, +} + +#[derive(Clone, Debug, AzBuf, PartialEq)] +pub struct GameRuleEntry { + /// An identifier for a [`GameRule`](azalea_registry::builtin::GameRule). + pub key: Identifier, + pub value: String, +} diff --git a/azalea-protocol/src/packets/game/s_spectate_entity.rs b/azalea-protocol/src/packets/game/s_spectate_entity.rs new file mode 100644 index 00000000..c9e5a985 --- /dev/null +++ b/azalea-protocol/src/packets/game/s_spectate_entity.rs @@ -0,0 +1,8 @@ +use azalea_buf::AzBuf; +use azalea_core::entity_id::MinecraftEntityId; +use azalea_protocol_macros::ServerboundGamePacket; + +#[derive(Clone, Debug, AzBuf, PartialEq, ServerboundGamePacket)] +pub struct ServerboundSpectateEntity { + pub entity_id: MinecraftEntityId, +} diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 202bc4ee..10a7dcd1 100644 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -11,8 +11,8 @@ use azalea_buf::{AzBuf, AzBufVar, BufReadError}; use crate::read::ReadPacketError; -pub const PROTOCOL_VERSION: i32 = 774; -pub const VERSION_NAME: &str = "1.21.11"; +pub const PROTOCOL_VERSION: i32 = 775; +pub const VERSION_NAME: &str = "26.1"; #[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)] pub enum ConnectionProtocol { diff --git a/azalea-registry/src/builtin.rs b/azalea-registry/src/builtin.rs index fad65f96..34324fe2 100644 --- a/azalea-registry/src/builtin.rs +++ b/azalea-registry/src/builtin.rs @@ -580,6 +580,7 @@ enum IntProviderKind { Clamped => "clamped", WeightedList => "weighted_list", ClampedNormal => "clamped_normal", + Trapezoid => "trapezoid", } } @@ -604,6 +605,7 @@ enum LootConditionKind { TimeCheck => "time_check", ValueCheck => "value_check", EnchantmentActiveCheck => "enchantment_active_check", + EnvironmentAttributeCheck => "environment_attribute_check", } } @@ -637,6 +639,8 @@ enum LootFunctionKind { CopyState => "copy_state", SetBannerPattern => "set_banner_pattern", SetPotion => "set_potion", + SetRandomDyes => "set_random_dyes", + SetRandomPotion => "set_random_potion", SetInstrument => "set_instrument", Reference => "reference", Sequence => "sequence", @@ -667,7 +671,9 @@ enum LootNumberProviderKind { Binomial => "binomial", Score => "score", Storage => "storage", + Sum => "sum", EnchantmentLevel => "enchantment_level", + EnvironmentAttribute => "environment_attribute", } } @@ -715,7 +721,6 @@ enum MemoryModuleKind { BreedTarget => "breed_target", RideTarget => "ride_target", Path => "path", - InteractableDoors => "interactable_doors", DoorsToClose => "doors_to_close", NearestBed => "nearest_bed", HurtBy => "hurt_by", @@ -911,6 +916,8 @@ enum ParticleKind { Item => "item", Vibration => "vibration", Trail => "trail", + PauseMobGrowth => "pause_mob_growth", + ResetMobGrowth => "reset_mob_growth", ItemSlime => "item_slime", ItemCobweb => "item_cobweb", ItemSnowball => "item_snowball", @@ -1075,17 +1082,17 @@ registry! { enum RecipeSerializer { CraftingShaped => "crafting_shaped", CraftingShapeless => "crafting_shapeless", - CraftingSpecialArmordye => "crafting_special_armordye", + CraftingDye => "crafting_dye", + CraftingImbue => "crafting_imbue", + CraftingTransmute => "crafting_transmute", + CraftingDecoratedPot => "crafting_decorated_pot", CraftingSpecialBookcloning => "crafting_special_bookcloning", - CraftingSpecialMapcloning => "crafting_special_mapcloning", CraftingSpecialMapextending => "crafting_special_mapextending", CraftingSpecialFireworkRocket => "crafting_special_firework_rocket", CraftingSpecialFireworkStar => "crafting_special_firework_star", CraftingSpecialFireworkStarFade => "crafting_special_firework_star_fade", - CraftingSpecialTippedarrow => "crafting_special_tippedarrow", CraftingSpecialBannerduplicate => "crafting_special_bannerduplicate", CraftingSpecialShielddecoration => "crafting_special_shielddecoration", - CraftingTransmute => "crafting_transmute", CraftingSpecialRepairitem => "crafting_special_repairitem", Smelting => "smelting", Blasting => "blasting", @@ -1094,7 +1101,6 @@ enum RecipeSerializer { Stonecutting => "stonecutting", SmithingTransform => "smithing_transform", SmithingTrim => "smithing_trim", - CraftingDecoratedPot => "crafting_decorated_pot", } } @@ -1433,15 +1439,33 @@ enum SoundEvent { BlockCandleHit => "block.candle.hit", BlockCandlePlace => "block.candle.place", BlockCandleStep => "block.candle.step", + EntityBabyCatAmbient => "entity.baby_cat.ambient", + EntityBabyCatStrayAmbient => "entity.baby_cat.stray_ambient", + EntityBabyCatDeath => "entity.baby_cat.death", + EntityBabyCatEat => "entity.baby_cat.eat", + EntityBabyCatHiss => "entity.baby_cat.hiss", + EntityBabyCatBegForFood => "entity.baby_cat.beg_for_food", + EntityBabyCatHurt => "entity.baby_cat.hurt", + EntityBabyCatPurr => "entity.baby_cat.purr", + EntityBabyCatPurreow => "entity.baby_cat.purreow", EntityCatAmbient => "entity.cat.ambient", EntityCatStrayAmbient => "entity.cat.stray_ambient", + EntityCatHiss => "entity.cat.hiss", + EntityCatHurt => "entity.cat.hurt", EntityCatDeath => "entity.cat.death", EntityCatEat => "entity.cat.eat", - EntityCatHiss => "entity.cat.hiss", EntityCatBegForFood => "entity.cat.beg_for_food", - EntityCatHurt => "entity.cat.hurt", EntityCatPurr => "entity.cat.purr", EntityCatPurreow => "entity.cat.purreow", + EntityCatRoyalAmbient => "entity.cat_royal.ambient", + EntityCatRoyalStrayAmbient => "entity.cat_royal.stray_ambient", + EntityCatRoyalHiss => "entity.cat_royal.hiss", + EntityCatRoyalHurt => "entity.cat_royal.hurt", + EntityCatRoyalDeath => "entity.cat_royal.death", + EntityCatRoyalEat => "entity.cat_royal.eat", + EntityCatRoyalBegForFood => "entity.cat_royal.beg_for_food", + EntityCatRoyalPurr => "entity.cat_royal.purr", + EntityCatRoyalPurreow => "entity.cat_royal.purreow", BlockCaveVinesBreak => "block.cave_vines.break", BlockCaveVinesFall => "block.cave_vines.fall", BlockCaveVinesHit => "block.cave_vines.hit", @@ -1486,11 +1510,18 @@ enum SoundEvent { BlockChestClose => "block.chest.close", BlockChestLocked => "block.chest.locked", BlockChestOpen => "block.chest.open", - EntityChickenAmbient => "entity.chicken.ambient", - EntityChickenDeath => "entity.chicken.death", + EntityBabyChickenAmbient => "entity.baby_chicken.ambient", + EntityBabyChickenDeath => "entity.baby_chicken.death", EntityChickenEgg => "entity.chicken.egg", - EntityChickenHurt => "entity.chicken.hurt", + EntityBabyChickenHurt => "entity.baby_chicken.hurt", EntityChickenStep => "entity.chicken.step", + EntityBabyChickenStep => "entity.baby_chicken.step", + EntityChickenAmbient => "entity.chicken.ambient", + EntityChickenHurt => "entity.chicken.hurt", + EntityChickenDeath => "entity.chicken.death", + EntityChickenPickyAmbient => "entity.chicken_picky.ambient", + EntityChickenPickyHurt => "entity.chicken_picky.hurt", + EntityChickenPickyDeath => "entity.chicken_picky.death", BlockChiseledBookshelfBreak => "block.chiseled_bookshelf.break", BlockChiseledBookshelfFall => "block.chiseled_bookshelf.fall", BlockChiseledBookshelfHit => "block.chiseled_bookshelf.hit", @@ -1578,11 +1609,15 @@ enum SoundEvent { BlockCoralBlockHit => "block.coral_block.hit", BlockCoralBlockPlace => "block.coral_block.place", BlockCoralBlockStep => "block.coral_block.step", + EntityCowMilk => "entity.cow.milk", EntityCowAmbient => "entity.cow.ambient", - EntityCowDeath => "entity.cow.death", EntityCowHurt => "entity.cow.hurt", - EntityCowMilk => "entity.cow.milk", + EntityCowDeath => "entity.cow.death", EntityCowStep => "entity.cow.step", + EntityCowMoodyAmbient => "entity.cow_moody.ambient", + EntityCowMoodyHurt => "entity.cow_moody.hurt", + EntityCowMoodyDeath => "entity.cow_moody.death", + EntityCowMoodyStep => "entity.cow_moody.step", BlockCrafterCraft => "block.crafter.craft", BlockCrafterFail => "block.crafter.fail", EntityCreakingAmbient => "entity.creaking.ambient", @@ -1878,6 +1913,8 @@ enum SoundEvent { EntityGoatScreamingPrepareRam => "entity.goat.screaming.prepare_ram", EntityGoatScreamingRamImpact => "entity.goat.screaming.ram_impact", EntityGoatStep => "entity.goat.step", + ItemGoldenDandelionUse => "item.golden_dandelion.use", + ItemGoldenDandelionUnuse => "item.golden_dandelion.unuse", BlockGrassBreak => "block.grass.break", BlockGrassFall => "block.grass.fall", BlockGrassHit => "block.grass.hit", @@ -1973,18 +2010,26 @@ enum SoundEvent { ItemGoatHornSound6 => "item.goat_horn.sound.6", ItemGoatHornSound7 => "item.goat_horn.sound.7", EntityHorseAmbient => "entity.horse.ambient", + EntityBabyHorseAmbient => "entity.baby_horse.ambient", EntityHorseAngry => "entity.horse.angry", + EntityBabyHorseAngry => "entity.baby_horse.angry", EntityHorseArmor => "entity.horse.armor", ItemHorseArmorUnequip => "item.horse_armor.unequip", EntityHorseBreathe => "entity.horse.breathe", + EntityBabyHorseBreathe => "entity.baby_horse.breathe", EntityHorseDeath => "entity.horse.death", + EntityBabyHorseDeath => "entity.baby_horse.death", EntityHorseEat => "entity.horse.eat", + EntityBabyHorseEat => "entity.baby_horse.eat", EntityHorseGallop => "entity.horse.gallop", EntityHorseHurt => "entity.horse.hurt", + EntityBabyHorseHurt => "entity.baby_horse.hurt", EntityHorseJump => "entity.horse.jump", EntityHorseLand => "entity.horse.land", + EntityBabyHorseLand => "entity.baby_horse.land", EntityHorseSaddle => "entity.horse.saddle", EntityHorseStep => "entity.horse.step", + EntityBabyHorseStep => "entity.baby_horse.step", EntityHorseStepWood => "entity.horse.step_wood", EntityHostileBigFall => "entity.hostile.big_fall", EntityHostileDeath => "entity.hostile.death", @@ -2284,6 +2329,10 @@ enum SoundEvent { BlockNoteBlockHat => "block.note_block.hat", BlockNoteBlockPling => "block.note_block.pling", BlockNoteBlockSnare => "block.note_block.snare", + BlockNoteBlockTrumpet => "block.note_block.trumpet", + BlockNoteBlockTrumpetExposed => "block.note_block.trumpet_exposed", + BlockNoteBlockTrumpetOxidized => "block.note_block.trumpet_oxidized", + BlockNoteBlockTrumpetWeathered => "block.note_block.trumpet_weathered", BlockNoteBlockXylophone => "block.note_block.xylophone", BlockNoteBlockIronXylophone => "block.note_block.iron_xylophone", BlockNoteBlockCowBell => "block.note_block.cow_bell", @@ -2370,11 +2419,25 @@ enum SoundEvent { EntityPhantomFlap => "entity.phantom.flap", EntityPhantomHurt => "entity.phantom.hurt", EntityPhantomSwoop => "entity.phantom.swoop", - EntityPigAmbient => "entity.pig.ambient", - EntityPigDeath => "entity.pig.death", - EntityPigHurt => "entity.pig.hurt", EntityPigSaddle => "entity.pig.saddle", EntityPigStep => "entity.pig.step", + EntityBabyPigStep => "entity.baby_pig.step", + EntityBabyPigAmbient => "entity.baby_pig.ambient", + EntityBabyPigEat => "entity.baby_pig.eat", + EntityBabyPigHurt => "entity.baby_pig.hurt", + EntityBabyPigDeath => "entity.baby_pig.death", + EntityPigAmbient => "entity.pig.ambient", + EntityPigHurt => "entity.pig.hurt", + EntityPigDeath => "entity.pig.death", + EntityPigEat => "entity.pig.eat", + EntityPigMiniAmbient => "entity.pig_mini.ambient", + EntityPigMiniHurt => "entity.pig_mini.hurt", + EntityPigMiniDeath => "entity.pig_mini.death", + EntityPigMiniEat => "entity.pig_mini.eat", + EntityPigBigAmbient => "entity.pig_big.ambient", + EntityPigBigHurt => "entity.pig_big.hurt", + EntityPigBigDeath => "entity.pig_big.death", + EntityPigBigEat => "entity.pig_big.eat", EntityPiglinAdmiringItem => "entity.piglin.admiring_item", EntityPiglinAmbient => "entity.piglin.ambient", EntityPiglinAngry => "entity.piglin.angry", @@ -2880,11 +2943,18 @@ enum SoundEvent { EntityWitherSkeletonStep => "entity.wither_skeleton.step", EntityWitherSpawn => "entity.wither.spawn", ItemWolfArmorBreak => "item.wolf_armor.break", + EntityBabyWolfAmbient => "entity.baby_wolf.ambient", ItemWolfArmorCrack => "item.wolf_armor.crack", ItemWolfArmorDamage => "item.wolf_armor.damage", ItemWolfArmorRepair => "item.wolf_armor.repair", + EntityBabyWolfDeath => "entity.baby_wolf.death", + EntityBabyWolfGrowl => "entity.baby_wolf.growl", + EntityBabyWolfHurt => "entity.baby_wolf.hurt", + EntityBabyWolfPant => "entity.baby_wolf.pant", EntityWolfShake => "entity.wolf.shake", EntityWolfStep => "entity.wolf.step", + EntityBabyWolfStep => "entity.baby_wolf.step", + EntityBabyWolfWhine => "entity.baby_wolf.whine", EntityWolfAmbient => "entity.wolf.ambient", EntityWolfDeath => "entity.wolf.death", EntityWolfGrowl => "entity.wolf.growl", @@ -3061,6 +3131,7 @@ enum WorldgenBlockStateProviderKind { DualNoiseProvider => "dual_noise_provider", RotatedBlockProvider => "rotated_block_provider", RandomizedIntStateProvider => "randomized_int_state_provider", + RuleBasedStateProvider => "rule_based_state_provider", } } @@ -3124,9 +3195,6 @@ enum WorldgenFeature { NoOp => "no_op", Tree => "tree", FallenTree => "fallen_tree", - Flower => "flower", - NoBonemealFlower => "no_bonemeal_flower", - RandomPatch => "random_patch", BlockPile => "block_pile", SpringFeature => "spring_feature", ChorusPlant => "chorus_plant", @@ -3136,7 +3204,7 @@ enum WorldgenFeature { Fossil => "fossil", HugeRedMushroom => "huge_red_mushroom", HugeBrownMushroom => "huge_brown_mushroom", - IceSpike => "ice_spike", + Spike => "spike", GlowstoneBlob => "glowstone_blob", FreezeTopLayer => "freeze_top_layer", Vines => "vines", @@ -3149,7 +3217,7 @@ enum WorldgenFeature { MonsterRoom => "monster_room", BlueIce => "blue_ice", Iceberg => "iceberg", - ForestRock => "forest_rock", + BlockBlob => "block_blob", Disk => "disk", Lake => "lake", Ore => "ore", @@ -3630,6 +3698,7 @@ enum BlockKind { BlackWool => "black_wool", MovingPiston => "moving_piston", Dandelion => "dandelion", + GoldenDandelion => "golden_dandelion", Torchflower => "torchflower", Poppy => "poppy", BlueOrchid => "blue_orchid", @@ -3895,6 +3964,7 @@ enum BlockKind { PottedMangrovePropagule => "potted_mangrove_propagule", PottedFern => "potted_fern", PottedDandelion => "potted_dandelion", + PottedGoldenDandelion => "potted_golden_dandelion", PottedPoppy => "potted_poppy", PottedBlueOrchid => "potted_blue_orchid", PottedAllium => "potted_allium", @@ -4763,7 +4833,9 @@ enum DataComponentKind { PiercingWeapon => "piercing_weapon", KineticWeapon => "kinetic_weapon", SwingAnimation => "swing_animation", + AdditionalTradeCost => "additional_trade_cost", StoredEnchantments => "stored_enchantments", + Dye => "dye", DyedColor => "dyed_color", MapColor => "map_color", MapId => "map_id", @@ -4814,8 +4886,11 @@ enum DataComponentKind { MooshroomVariant => "mooshroom/variant", RabbitVariant => "rabbit/variant", PigVariant => "pig/variant", + PigSoundVariant => "pig/sound_variant", CowVariant => "cow/variant", + CowSoundVariant => "cow/sound_variant", ChickenVariant => "chicken/variant", + ChickenSoundVariant => "chicken/sound_variant", ZombieNautilusVariant => "zombie_nautilus/variant", FrogVariant => "frog/variant", HorseVariant => "horse/variant", @@ -4823,6 +4898,7 @@ enum DataComponentKind { LlamaVariant => "llama/variant", AxolotlVariant => "axolotl/variant", CatVariant => "cat/variant", + CatSoundVariant => "cat/sound_variant", CatCollar => "cat/collar", SheepColor => "sheep/color", ShulkerColor => "shulker/color", @@ -4892,7 +4968,6 @@ enum EnchantmentEffectComponentKind { PostPiercingAttack => "post_piercing_attack", HitBlock => "hit_block", ItemDamage => "item_damage", - Attributes => "attributes", EquipmentDrops => "equipment_drops", LocationChanged => "location_changed", Tick => "tick", @@ -4907,6 +4982,7 @@ enum EnchantmentEffectComponentKind { BlockExperience => "block_experience", MobExperience => "mob_experience", RepairWithXp => "repair_with_xp", + Attributes => "attributes", CrossbowChargeTime => "crossbow_charge_time", CrossbowChargingSounds => "crossbow_charging_sounds", TridentSound => "trident_sound", @@ -5058,9 +5134,12 @@ registry! { enum SlotDisplay { Empty => "empty", AnyFuel => "any_fuel", + WithAnyPotion => "with_any_potion", + OnlyWithComponent => "only_with_component", Item => "item", ItemStack => "item_stack", Tag => "tag", + Dyed => "dyed", SmithingTrim => "smithing_trim", WithRemainder => "with_remainder", Composite => "composite", @@ -5085,7 +5164,8 @@ registry! { enum TestEnvironmentDefinitionKind { AllOf => "all_of", GameRules => "game_rules", - TimeOfDay => "time_of_day", + ClockTime => "clock_time", + TimelineAttributes => "timeline_attributes", Weather => "weather", Function => "function", } @@ -5120,6 +5200,7 @@ enum DataComponentPredicateKind { AttributeModifiers => "attribute_modifiers", Trim => "trim", JukeboxPlayable => "jukebox_playable", + VillagerVariant => "villager/variant", } } @@ -5296,6 +5377,7 @@ enum AttributeKind { AngleDegrees => "angle_degrees", RgbColor => "rgb_color", ArgbColor => "argb_color", + Integer => "integer", MoonPhase => "moon_phase", Activity => "activity", BedRule => "bed_rule", @@ -5325,8 +5407,11 @@ enum EnvironmentAttribute { VisualStarAngle => "visual/star_angle", VisualMoonPhase => "visual/moon_phase", VisualStarBrightness => "visual/star_brightness", + VisualBlockLightTint => "visual/block_light_tint", VisualSkyLightColor => "visual/sky_light_color", VisualSkyLightFactor => "visual/sky_light_factor", + VisualNightVisionColor => "visual/night_vision_color", + VisualAmbientLightColor => "visual/ambient_light_color", VisualDefaultDripstoneParticle => "visual/default_dripstone_particle", VisualAmbientParticles => "visual/ambient_particles", AudioBackgroundMusic => "audio/background_music", @@ -5532,7 +5617,7 @@ enum AbstractBlockKind { EndPortalFrame => "end_portal_frame", EndRod => "end_rod", Eyeblossom => "eyeblossom", - Farm => "farm", + Farmland => "farmland", BonemealableFeaturePlacer => "bonemealable_feature_placer", Fence => "fence", FenceGate => "fence_gate", @@ -5542,7 +5627,7 @@ enum AbstractBlockKind { FlowerPot => "flower_pot", Frogspawn => "frogspawn", FrostedIce => "frosted_ice", - Fungus => "fungus", + NetherFungus => "nether_fungus", Furnace => "furnace", GlazedTerracotta => "glazed_terracotta", GlowLichen => "glow_lichen", @@ -5616,7 +5701,7 @@ enum AbstractBlockKind { Repeater => "repeater", RespawnAnchor => "respawn_anchor", RootedDirt => "rooted_dirt", - Roots => "roots", + NetherRoots => "nether_roots", RotatedPillar => "rotated_pillar", Sapling => "sapling", Sand => "sand", @@ -5686,7 +5771,7 @@ enum AbstractBlockKind { WallSkull => "wall_skull", WallTorch => "wall_torch", Wall => "wall", - Waterlily => "waterlily", + LilyPad => "lily_pad", WaterloggedTransparent => "waterlogged_transparent", WeatheringCopperBar => "weathering_copper_bar", WeatheringCopperBulb => "weathering_copper_bulb", @@ -5954,6 +6039,7 @@ enum ItemKind { RedWool => "red_wool", BlackWool => "black_wool", Dandelion => "dandelion", + GoldenDandelion => "golden_dandelion", OpenEyeblossom => "open_eyeblossom", ClosedEyeblossom => "closed_eyeblossom", Poppy => "poppy", diff --git a/azalea-registry/src/data.rs b/azalea-registry/src/data.rs index a8e2d304..9ed87d3b 100644 --- a/azalea-registry/src/data.rs +++ b/azalea-registry/src/data.rs @@ -479,55 +479,6 @@ enum DamageKindKey { } data_registry! { -BannerPattern => "banner_pattern", -enum BannerPatternKey { - Base => "base", - Border => "border", - Bricks => "bricks", - Circle => "circle", - Creeper => "creeper", - Cross => "cross", - CurlyBorder => "curly_border", - DiagonalLeft => "diagonal_left", - DiagonalRight => "diagonal_right", - DiagonalUpLeft => "diagonal_up_left", - DiagonalUpRight => "diagonal_up_right", - Flow => "flow", - Flower => "flower", - Globe => "globe", - Gradient => "gradient", - GradientUp => "gradient_up", - Guster => "guster", - HalfHorizontal => "half_horizontal", - HalfHorizontalBottom => "half_horizontal_bottom", - HalfVertical => "half_vertical", - HalfVerticalRight => "half_vertical_right", - Mojang => "mojang", - Piglin => "piglin", - Rhombus => "rhombus", - Skull => "skull", - SmallStripes => "small_stripes", - SquareBottomLeft => "square_bottom_left", - SquareBottomRight => "square_bottom_right", - SquareTopLeft => "square_top_left", - SquareTopRight => "square_top_right", - StraightCross => "straight_cross", - StripeBottom => "stripe_bottom", - StripeCenter => "stripe_center", - StripeDownleft => "stripe_downleft", - StripeDownright => "stripe_downright", - StripeLeft => "stripe_left", - StripeMiddle => "stripe_middle", - StripeRight => "stripe_right", - StripeTop => "stripe_top", - TriangleBottom => "triangle_bottom", - TriangleTop => "triangle_top", - TrianglesBottom => "triangles_bottom", - TrianglesTop => "triangles_top", -} -} - -data_registry! { EnchantmentProvider => "enchantment_provider", enum EnchantmentProviderKey { EndermanLootDrop => "enderman_loot_drop", @@ -638,7 +589,6 @@ enum RecipeKey { AndesiteWall => "andesite_wall", AndesiteWallFromAndesiteStonecutting => "andesite_wall_from_andesite_stonecutting", Anvil => "anvil", - ArmorDye => "armor_dye", ArmorStand => "armor_stand", Arrow => "arrow", BakedPotato => "baked_potato", @@ -662,7 +612,6 @@ enum RecipeKey { BambooSlab => "bamboo_slab", BambooStairs => "bamboo_stairs", BambooTrapdoor => "bamboo_trapdoor", - BannerDuplicate => "banner_duplicate", Barrel => "barrel", Beacon => "beacon", Beehive => "beehive", @@ -683,6 +632,7 @@ enum RecipeKey { BirchTrapdoor => "birch_trapdoor", BirchWood => "birch_wood", BlackBanner => "black_banner", + BlackBannerDuplicate => "black_banner_duplicate", BlackBed => "black_bed", BlackBundle => "black_bundle", BlackCandle => "black_candle", @@ -706,6 +656,7 @@ enum RecipeKey { BlastFurnace => "blast_furnace", BlazePowder => "blaze_powder", BlueBanner => "blue_banner", + BlueBannerDuplicate => "blue_banner_duplicate", BlueBed => "blue_bed", BlueBundle => "blue_bundle", BlueCandle => "blue_candle", @@ -743,6 +694,7 @@ enum RecipeKey { BrickWallFromBricksStonecutting => "brick_wall_from_bricks_stonecutting", Bricks => "bricks", BrownBanner => "brown_banner", + BrownBannerDuplicate => "brown_banner_duplicate", BrownBed => "brown_bed", BrownBundle => "brown_bundle", BrownCandle => "brown_candle", @@ -790,6 +742,7 @@ enum RecipeKey { ChiseledCopperFromCutCopperStonecutting => "chiseled_copper_from_cut_copper_stonecutting", ChiseledDeepslate => "chiseled_deepslate", ChiseledDeepslateFromCobbledDeepslateStonecutting => "chiseled_deepslate_from_cobbled_deepslate_stonecutting", + ChiseledDeepslateFromDeepslateStonecutting => "chiseled_deepslate_from_deepslate_stonecutting", ChiseledNetherBricks => "chiseled_nether_bricks", ChiseledNetherBricksFromNetherBricksStonecutting => "chiseled_nether_bricks_from_nether_bricks_stonecutting", ChiseledPolishedBlackstone => "chiseled_polished_blackstone", @@ -805,7 +758,7 @@ enum RecipeKey { ChiseledSandstoneFromSandstoneStonecutting => "chiseled_sandstone_from_sandstone_stonecutting", ChiseledStoneBricks => "chiseled_stone_bricks", ChiseledStoneBricksFromStoneBricksStonecutting => "chiseled_stone_bricks_from_stone_bricks_stonecutting", - ChiseledStoneBricksStoneFromStonecutting => "chiseled_stone_bricks_stone_from_stonecutting", + ChiseledStoneBricksFromStoneStonecutting => "chiseled_stone_bricks_from_stone_stonecutting", ChiseledTuff => "chiseled_tuff", ChiseledTuffBricks => "chiseled_tuff_bricks", ChiseledTuffBricksFromPolishedTuffStonecutting => "chiseled_tuff_bricks_from_polished_tuff_stonecutting", @@ -823,18 +776,26 @@ enum RecipeKey { CoarseDirt => "coarse_dirt", CoastArmorTrimSmithingTemplate => "coast_armor_trim_smithing_template", CoastArmorTrimSmithingTemplateSmithingTrim => "coast_armor_trim_smithing_template_smithing_trim", + CobbledDeepslateFromDeepslateStonecutting => "cobbled_deepslate_from_deepslate_stonecutting", CobbledDeepslateSlab => "cobbled_deepslate_slab", CobbledDeepslateSlabFromCobbledDeepslateStonecutting => "cobbled_deepslate_slab_from_cobbled_deepslate_stonecutting", + CobbledDeepslateSlabFromDeepslateStonecutting => "cobbled_deepslate_slab_from_deepslate_stonecutting", CobbledDeepslateStairs => "cobbled_deepslate_stairs", CobbledDeepslateStairsFromCobbledDeepslateStonecutting => "cobbled_deepslate_stairs_from_cobbled_deepslate_stonecutting", + CobbledDeepslateStairsFromDeepslateStonecutting => "cobbled_deepslate_stairs_from_deepslate_stonecutting", CobbledDeepslateWall => "cobbled_deepslate_wall", CobbledDeepslateWallFromCobbledDeepslateStonecutting => "cobbled_deepslate_wall_from_cobbled_deepslate_stonecutting", + CobbledDeepslateWallFromDeepslateStonecutting => "cobbled_deepslate_wall_from_deepslate_stonecutting", + CobblestoneFromStoneStonecutting => "cobblestone_from_stone_stonecutting", CobblestoneSlab => "cobblestone_slab", CobblestoneSlabFromCobblestoneStonecutting => "cobblestone_slab_from_cobblestone_stonecutting", + CobblestoneSlabFromStoneStonecutting => "cobblestone_slab_from_stone_stonecutting", CobblestoneStairs => "cobblestone_stairs", CobblestoneStairsFromCobblestoneStonecutting => "cobblestone_stairs_from_cobblestone_stonecutting", + CobblestoneStairsFromStoneStonecutting => "cobblestone_stairs_from_stone_stonecutting", CobblestoneWall => "cobblestone_wall", CobblestoneWallFromCobblestoneStonecutting => "cobblestone_wall_from_cobblestone_stonecutting", + CobblestoneWallFromStoneStonecutting => "cobblestone_wall_from_stone_stonecutting", Comparator => "comparator", Compass => "compass", Composter => "composter", @@ -936,6 +897,7 @@ enum RecipeKey { CutSandstoneSlabFromCutSandstoneStonecutting => "cut_sandstone_slab_from_cut_sandstone_stonecutting", CutSandstoneSlabFromSandstoneStonecutting => "cut_sandstone_slab_from_sandstone_stonecutting", CyanBanner => "cyan_banner", + CyanBannerDuplicate => "cyan_banner_duplicate", CyanBed => "cyan_bed", CyanBundle => "cyan_bundle", CyanCandle => "cyan_candle", @@ -977,36 +939,44 @@ enum RecipeKey { DeepslateBrickSlab => "deepslate_brick_slab", DeepslateBrickSlabFromCobbledDeepslateStonecutting => "deepslate_brick_slab_from_cobbled_deepslate_stonecutting", DeepslateBrickSlabFromDeepslateBricksStonecutting => "deepslate_brick_slab_from_deepslate_bricks_stonecutting", + DeepslateBrickSlabFromDeepslateStonecutting => "deepslate_brick_slab_from_deepslate_stonecutting", DeepslateBrickSlabFromPolishedDeepslateStonecutting => "deepslate_brick_slab_from_polished_deepslate_stonecutting", DeepslateBrickStairs => "deepslate_brick_stairs", DeepslateBrickStairsFromCobbledDeepslateStonecutting => "deepslate_brick_stairs_from_cobbled_deepslate_stonecutting", DeepslateBrickStairsFromDeepslateBricksStonecutting => "deepslate_brick_stairs_from_deepslate_bricks_stonecutting", + DeepslateBrickStairsFromDeepslateStonecutting => "deepslate_brick_stairs_from_deepslate_stonecutting", DeepslateBrickStairsFromPolishedDeepslateStonecutting => "deepslate_brick_stairs_from_polished_deepslate_stonecutting", DeepslateBrickWall => "deepslate_brick_wall", DeepslateBrickWallFromCobbledDeepslateStonecutting => "deepslate_brick_wall_from_cobbled_deepslate_stonecutting", DeepslateBrickWallFromDeepslateBricksStonecutting => "deepslate_brick_wall_from_deepslate_bricks_stonecutting", + DeepslateBrickWallFromDeepslateStonecutting => "deepslate_brick_wall_from_deepslate_stonecutting", DeepslateBrickWallFromPolishedDeepslateStonecutting => "deepslate_brick_wall_from_polished_deepslate_stonecutting", DeepslateBricks => "deepslate_bricks", DeepslateBricksFromCobbledDeepslateStonecutting => "deepslate_bricks_from_cobbled_deepslate_stonecutting", + DeepslateBricksFromDeepslateStonecutting => "deepslate_bricks_from_deepslate_stonecutting", DeepslateBricksFromPolishedDeepslateStonecutting => "deepslate_bricks_from_polished_deepslate_stonecutting", DeepslateTileSlab => "deepslate_tile_slab", DeepslateTileSlabFromCobbledDeepslateStonecutting => "deepslate_tile_slab_from_cobbled_deepslate_stonecutting", DeepslateTileSlabFromDeepslateBricksStonecutting => "deepslate_tile_slab_from_deepslate_bricks_stonecutting", + DeepslateTileSlabFromDeepslateStonecutting => "deepslate_tile_slab_from_deepslate_stonecutting", DeepslateTileSlabFromDeepslateTilesStonecutting => "deepslate_tile_slab_from_deepslate_tiles_stonecutting", DeepslateTileSlabFromPolishedDeepslateStonecutting => "deepslate_tile_slab_from_polished_deepslate_stonecutting", DeepslateTileStairs => "deepslate_tile_stairs", DeepslateTileStairsFromCobbledDeepslateStonecutting => "deepslate_tile_stairs_from_cobbled_deepslate_stonecutting", DeepslateTileStairsFromDeepslateBricksStonecutting => "deepslate_tile_stairs_from_deepslate_bricks_stonecutting", + DeepslateTileStairsFromDeepslateStonecutting => "deepslate_tile_stairs_from_deepslate_stonecutting", DeepslateTileStairsFromDeepslateTilesStonecutting => "deepslate_tile_stairs_from_deepslate_tiles_stonecutting", DeepslateTileStairsFromPolishedDeepslateStonecutting => "deepslate_tile_stairs_from_polished_deepslate_stonecutting", DeepslateTileWall => "deepslate_tile_wall", DeepslateTileWallFromCobbledDeepslateStonecutting => "deepslate_tile_wall_from_cobbled_deepslate_stonecutting", DeepslateTileWallFromDeepslateBricksStonecutting => "deepslate_tile_wall_from_deepslate_bricks_stonecutting", + DeepslateTileWallFromDeepslateStonecutting => "deepslate_tile_wall_from_deepslate_stonecutting", DeepslateTileWallFromDeepslateTilesStonecutting => "deepslate_tile_wall_from_deepslate_tiles_stonecutting", DeepslateTileWallFromPolishedDeepslateStonecutting => "deepslate_tile_wall_from_polished_deepslate_stonecutting", DeepslateTiles => "deepslate_tiles", DeepslateTilesFromCobbledDeepslateStonecutting => "deepslate_tiles_from_cobbled_deepslate_stonecutting", DeepslateTilesFromDeepslateBricksStonecutting => "deepslate_tiles_from_deepslate_bricks_stonecutting", + DeepslateTilesFromDeepslateStonecutting => "deepslate_tiles_from_deepslate_stonecutting", DeepslateTilesFromPolishedDeepslateStonecutting => "deepslate_tiles_from_polished_deepslate_stonecutting", DetectorRail => "detector_rail", Diamond => "diamond", @@ -1117,13 +1087,13 @@ enum RecipeKey { EndCrystal => "end_crystal", EndRod => "end_rod", EndStoneBrickSlab => "end_stone_brick_slab", - EndStoneBrickSlabFromEndStoneBrickStonecutting => "end_stone_brick_slab_from_end_stone_brick_stonecutting", + EndStoneBrickSlabFromEndStoneBricksStonecutting => "end_stone_brick_slab_from_end_stone_bricks_stonecutting", EndStoneBrickSlabFromEndStoneStonecutting => "end_stone_brick_slab_from_end_stone_stonecutting", EndStoneBrickStairs => "end_stone_brick_stairs", - EndStoneBrickStairsFromEndStoneBrickStonecutting => "end_stone_brick_stairs_from_end_stone_brick_stonecutting", + EndStoneBrickStairsFromEndStoneBricksStonecutting => "end_stone_brick_stairs_from_end_stone_bricks_stonecutting", EndStoneBrickStairsFromEndStoneStonecutting => "end_stone_brick_stairs_from_end_stone_stonecutting", EndStoneBrickWall => "end_stone_brick_wall", - EndStoneBrickWallFromEndStoneBrickStonecutting => "end_stone_brick_wall_from_end_stone_brick_stonecutting", + EndStoneBrickWallFromEndStoneBricksStonecutting => "end_stone_brick_wall_from_end_stone_bricks_stonecutting", EndStoneBrickWallFromEndStoneStonecutting => "end_stone_brick_wall_from_end_stone_stonecutting", EndStoneBricks => "end_stone_bricks", EndStoneBricksFromEndStoneStonecutting => "end_stone_bricks_from_end_stone_stonecutting", @@ -1186,6 +1156,7 @@ enum RecipeKey { GoldenBoots => "golden_boots", GoldenCarrot => "golden_carrot", GoldenChestplate => "golden_chestplate", + GoldenDandelion => "golden_dandelion", GoldenHelmet => "golden_helmet", GoldenHoe => "golden_hoe", GoldenLeggings => "golden_leggings", @@ -1201,6 +1172,7 @@ enum RecipeKey { GraniteWall => "granite_wall", GraniteWallFromGraniteStonecutting => "granite_wall_from_granite_stonecutting", GrayBanner => "gray_banner", + GrayBannerDuplicate => "gray_banner_duplicate", GrayBed => "gray_bed", GrayBundle => "gray_bundle", GrayCandle => "gray_candle", @@ -1216,6 +1188,7 @@ enum RecipeKey { GrayStainedGlassPaneFromGlassPane => "gray_stained_glass_pane_from_glass_pane", GrayTerracotta => "gray_terracotta", GreenBanner => "green_banner", + GreenBannerDuplicate => "green_banner_duplicate", GreenBed => "green_bed", GreenBundle => "green_bundle", GreenCandle => "green_candle", @@ -1295,13 +1268,19 @@ enum RecipeKey { LeafLitter => "leaf_litter", Leather => "leather", LeatherBoots => "leather_boots", + LeatherBootsDyed => "leather_boots_dyed", LeatherChestplate => "leather_chestplate", + LeatherChestplateDyed => "leather_chestplate_dyed", LeatherHelmet => "leather_helmet", + LeatherHelmetDyed => "leather_helmet_dyed", LeatherHorseArmor => "leather_horse_armor", + LeatherHorseArmorDyed => "leather_horse_armor_dyed", LeatherLeggings => "leather_leggings", + LeatherLeggingsDyed => "leather_leggings_dyed", Lectern => "lectern", Lever => "lever", LightBlueBanner => "light_blue_banner", + LightBlueBannerDuplicate => "light_blue_banner_duplicate", LightBlueBed => "light_blue_bed", LightBlueBundle => "light_blue_bundle", LightBlueCandle => "light_blue_candle", @@ -1317,6 +1296,7 @@ enum RecipeKey { LightBlueStainedGlassPaneFromGlassPane => "light_blue_stained_glass_pane_from_glass_pane", LightBlueTerracotta => "light_blue_terracotta", LightGrayBanner => "light_gray_banner", + LightGrayBannerDuplicate => "light_gray_banner_duplicate", LightGrayBed => "light_gray_bed", LightGrayBundle => "light_gray_bundle", LightGrayCandle => "light_gray_candle", @@ -1337,6 +1317,7 @@ enum RecipeKey { LightWeightedPressurePlate => "light_weighted_pressure_plate", LightningRod => "lightning_rod", LimeBanner => "lime_banner", + LimeBannerDuplicate => "lime_banner_duplicate", LimeBed => "lime_bed", LimeBundle => "lime_bundle", LimeCandle => "lime_candle", @@ -1355,6 +1336,7 @@ enum RecipeKey { Loom => "loom", Mace => "mace", MagentaBanner => "magenta_banner", + MagentaBannerDuplicate => "magenta_banner_duplicate", MagentaBed => "magenta_bed", MagentaBundle => "magenta_bundle", MagentaCandle => "magenta_candle", @@ -1406,11 +1388,11 @@ enum RecipeKey { MossyCobblestoneWall => "mossy_cobblestone_wall", MossyCobblestoneWallFromMossyCobblestoneStonecutting => "mossy_cobblestone_wall_from_mossy_cobblestone_stonecutting", MossyStoneBrickSlab => "mossy_stone_brick_slab", - MossyStoneBrickSlabFromMossyStoneBrickStonecutting => "mossy_stone_brick_slab_from_mossy_stone_brick_stonecutting", + MossyStoneBrickSlabFromMossyStoneBricksStonecutting => "mossy_stone_brick_slab_from_mossy_stone_bricks_stonecutting", MossyStoneBrickStairs => "mossy_stone_brick_stairs", - MossyStoneBrickStairsFromMossyStoneBrickStonecutting => "mossy_stone_brick_stairs_from_mossy_stone_brick_stonecutting", + MossyStoneBrickStairsFromMossyStoneBricksStonecutting => "mossy_stone_brick_stairs_from_mossy_stone_bricks_stonecutting", MossyStoneBrickWall => "mossy_stone_brick_wall", - MossyStoneBrickWallFromMossyStoneBrickStonecutting => "mossy_stone_brick_wall_from_mossy_stone_brick_stonecutting", + MossyStoneBrickWallFromMossyStoneBricksStonecutting => "mossy_stone_brick_wall_from_mossy_stone_bricks_stonecutting", MossyStoneBricksFromMossBlock => "mossy_stone_bricks_from_moss_block", MossyStoneBricksFromVine => "mossy_stone_bricks_from_vine", MudBrickSlab => "mud_brick_slab", @@ -1423,6 +1405,7 @@ enum RecipeKey { MuddyMangroveRoots => "muddy_mangrove_roots", MushroomStew => "mushroom_stew", MusicDisc5 => "music_disc_5", + NameTag => "name_tag", NetherBrick => "nether_brick", NetherBrickFence => "nether_brick_fence", NetherBrickSlab => "nether_brick_slab", @@ -1469,6 +1452,7 @@ enum RecipeKey { OakWood => "oak_wood", Observer => "observer", OrangeBanner => "orange_banner", + OrangeBannerDuplicate => "orange_banner_duplicate", OrangeBed => "orange_bed", OrangeBundle => "orange_bundle", OrangeCandle => "orange_candle", @@ -1520,6 +1504,7 @@ enum RecipeKey { PaleOakWood => "pale_oak_wood", Paper => "paper", PinkBanner => "pink_banner", + PinkBannerDuplicate => "pink_banner_duplicate", PinkBed => "pink_bed", PinkBundle => "pink_bundle", PinkCandle => "pink_candle", @@ -1578,14 +1563,18 @@ enum RecipeKey { PolishedBlackstoneWallFromPolishedBlackstoneStonecutting => "polished_blackstone_wall_from_polished_blackstone_stonecutting", PolishedDeepslate => "polished_deepslate", PolishedDeepslateFromCobbledDeepslateStonecutting => "polished_deepslate_from_cobbled_deepslate_stonecutting", + PolishedDeepslateFromDeepslateStonecutting => "polished_deepslate_from_deepslate_stonecutting", PolishedDeepslateSlab => "polished_deepslate_slab", PolishedDeepslateSlabFromCobbledDeepslateStonecutting => "polished_deepslate_slab_from_cobbled_deepslate_stonecutting", + PolishedDeepslateSlabFromDeepslateStonecutting => "polished_deepslate_slab_from_deepslate_stonecutting", PolishedDeepslateSlabFromPolishedDeepslateStonecutting => "polished_deepslate_slab_from_polished_deepslate_stonecutting", PolishedDeepslateStairs => "polished_deepslate_stairs", PolishedDeepslateStairsFromCobbledDeepslateStonecutting => "polished_deepslate_stairs_from_cobbled_deepslate_stonecutting", + PolishedDeepslateStairsFromDeepslateStonecutting => "polished_deepslate_stairs_from_deepslate_stonecutting", PolishedDeepslateStairsFromPolishedDeepslateStonecutting => "polished_deepslate_stairs_from_polished_deepslate_stonecutting", PolishedDeepslateWall => "polished_deepslate_wall", PolishedDeepslateWallFromCobbledDeepslateStonecutting => "polished_deepslate_wall_from_cobbled_deepslate_stonecutting", + PolishedDeepslateWallFromDeepslateStonecutting => "polished_deepslate_wall_from_deepslate_stonecutting", PolishedDeepslateWallFromPolishedDeepslateStonecutting => "polished_deepslate_wall_from_polished_deepslate_stonecutting", PolishedDiorite => "polished_diorite", PolishedDioriteFromDioriteStonecutting => "polished_diorite_from_diorite_stonecutting", @@ -1618,9 +1607,9 @@ enum RecipeKey { PoweredRail => "powered_rail", Prismarine => "prismarine", PrismarineBrickSlab => "prismarine_brick_slab", - PrismarineBrickSlabFromPrismarineStonecutting => "prismarine_brick_slab_from_prismarine_stonecutting", + PrismarineBrickSlabFromPrismarineBricksStonecutting => "prismarine_brick_slab_from_prismarine_bricks_stonecutting", PrismarineBrickStairs => "prismarine_brick_stairs", - PrismarineBrickStairsFromPrismarineStonecutting => "prismarine_brick_stairs_from_prismarine_stonecutting", + PrismarineBrickStairsFromPrismarineBricksStonecutting => "prismarine_brick_stairs_from_prismarine_bricks_stonecutting", PrismarineBricks => "prismarine_bricks", PrismarineSlab => "prismarine_slab", PrismarineSlabFromPrismarineStonecutting => "prismarine_slab_from_prismarine_stonecutting", @@ -1631,6 +1620,7 @@ enum RecipeKey { PumpkinPie => "pumpkin_pie", PumpkinSeeds => "pumpkin_seeds", PurpleBanner => "purple_banner", + PurpleBannerDuplicate => "purple_banner_duplicate", PurpleBed => "purple_bed", PurpleBundle => "purple_bundle", PurpleCandle => "purple_candle", @@ -1659,7 +1649,7 @@ enum RecipeKey { QuartzPillar => "quartz_pillar", QuartzPillarFromQuartzBlockStonecutting => "quartz_pillar_from_quartz_block_stonecutting", QuartzSlab => "quartz_slab", - QuartzSlabFromStonecutting => "quartz_slab_from_stonecutting", + QuartzSlabFromQuartzBlockStonecutting => "quartz_slab_from_quartz_block_stonecutting", QuartzStairs => "quartz_stairs", QuartzStairsFromQuartzBlockStonecutting => "quartz_stairs_from_quartz_block_stonecutting", RabbitStewFromBrownMushroom => "rabbit_stew_from_brown_mushroom", @@ -1675,6 +1665,7 @@ enum RecipeKey { RawIronBlock => "raw_iron_block", RecoveryCompass => "recovery_compass", RedBanner => "red_banner", + RedBannerDuplicate => "red_banner_duplicate", RedBed => "red_bed", RedBundle => "red_bundle", RedCandle => "red_candle", @@ -1812,7 +1803,7 @@ enum RecipeKey { StoneBrickStairsFromStoneStonecutting => "stone_brick_stairs_from_stone_stonecutting", StoneBrickWall => "stone_brick_wall", StoneBrickWallFromStoneBricksStonecutting => "stone_brick_wall_from_stone_bricks_stonecutting", - StoneBrickWallsFromStoneStonecutting => "stone_brick_walls_from_stone_stonecutting", + StoneBrickWallFromStoneStonecutting => "stone_brick_wall_from_stone_stonecutting", StoneBricks => "stone_bricks", StoneBricksFromStoneStonecutting => "stone_bricks_from_stone_stonecutting", StoneButton => "stone_button", @@ -1846,6 +1837,7 @@ enum RecipeKey { SuspiciousStewFromClosedEyeblossom => "suspicious_stew_from_closed_eyeblossom", SuspiciousStewFromCornflower => "suspicious_stew_from_cornflower", SuspiciousStewFromDandelion => "suspicious_stew_from_dandelion", + SuspiciousStewFromGoldenDandelion => "suspicious_stew_from_golden_dandelion", SuspiciousStewFromLilyOfTheValley => "suspicious_stew_from_lily_of_the_valley", SuspiciousStewFromOpenEyeblossom => "suspicious_stew_from_open_eyeblossom", SuspiciousStewFromOrangeTulip => "suspicious_stew_from_orange_tulip", @@ -2041,6 +2033,7 @@ enum RecipeKey { WeatheredCutCopperStairsFromWeatheredCutCopperStonecutting => "weathered_cut_copper_stairs_from_weathered_cut_copper_stonecutting", Wheat => "wheat", WhiteBanner => "white_banner", + WhiteBannerDuplicate => "white_banner_duplicate", WhiteBed => "white_bed", WhiteBundle => "white_bundle", WhiteCandle => "white_candle", @@ -2060,6 +2053,7 @@ enum RecipeKey { WildArmorTrimSmithingTemplateSmithingTrim => "wild_armor_trim_smithing_template_smithing_trim", WindCharge => "wind_charge", WolfArmor => "wolf_armor", + WolfArmorDyed => "wolf_armor_dyed", WoodenAxe => "wooden_axe", WoodenHoe => "wooden_hoe", WoodenPickaxe => "wooden_pickaxe", @@ -2068,12 +2062,14 @@ enum RecipeKey { WoodenSword => "wooden_sword", WritableBook => "writable_book", YellowBanner => "yellow_banner", + YellowBannerDuplicate => "yellow_banner_duplicate", YellowBed => "yellow_bed", YellowBundle => "yellow_bundle", YellowCandle => "yellow_candle", YellowCarpet => "yellow_carpet", YellowConcretePowder => "yellow_concrete_powder", YellowDyeFromDandelion => "yellow_dye_from_dandelion", + YellowDyeFromGoldenDandelion => "yellow_dye_from_golden_dandelion", YellowDyeFromSunflower => "yellow_dye_from_sunflower", YellowDyeFromWildflowers => "yellow_dye_from_wildflowers", YellowGlazedTerracotta => "yellow_glazed_terracotta", @@ -2160,3 +2156,93 @@ enum BiomeKey { WoodedBadlands => "wooded_badlands", } } + +data_registry! { +WorldClock => "world_clock", +enum WorldClockKey { + Overworld => "overworld", + TheEnd => "the_end", +} +} + +data_registry! { +PigSoundVariant => "pig_sound_variant", +enum PigSoundVariantKey { + Big => "big", + Classic => "classic", + Mini => "mini", +} +} + +data_registry! { +CatSoundVariant => "cat_sound_variant", +enum CatSoundVariantKey { + Classic => "classic", + Royal => "royal", +} +} + +data_registry! { +CowSoundVariant => "cow_sound_variant", +enum CowSoundVariantKey { + Classic => "classic", + Moody => "moody", +} +} + +data_registry! { +ChickenSoundVariant => "chicken_sound_variant", +enum ChickenSoundVariantKey { + Classic => "classic", + Picky => "picky", +} +} + +data_registry! { +BannerPatternKind => "banner_pattern", +enum BannerPatternKindKey { + Base => "base", + Border => "border", + Bricks => "bricks", + Circle => "circle", + Creeper => "creeper", + Cross => "cross", + CurlyBorder => "curly_border", + DiagonalLeft => "diagonal_left", + DiagonalRight => "diagonal_right", + DiagonalUpLeft => "diagonal_up_left", + DiagonalUpRight => "diagonal_up_right", + Flow => "flow", + Flower => "flower", + Globe => "globe", + Gradient => "gradient", + GradientUp => "gradient_up", + Guster => "guster", + HalfHorizontal => "half_horizontal", + HalfHorizontalBottom => "half_horizontal_bottom", + HalfVertical => "half_vertical", + HalfVerticalRight => "half_vertical_right", + Mojang => "mojang", + Piglin => "piglin", + Rhombus => "rhombus", + Skull => "skull", + SmallStripes => "small_stripes", + SquareBottomLeft => "square_bottom_left", + SquareBottomRight => "square_bottom_right", + SquareTopLeft => "square_top_left", + SquareTopRight => "square_top_right", + StraightCross => "straight_cross", + StripeBottom => "stripe_bottom", + StripeCenter => "stripe_center", + StripeDownleft => "stripe_downleft", + StripeDownright => "stripe_downright", + StripeLeft => "stripe_left", + StripeMiddle => "stripe_middle", + StripeRight => "stripe_right", + StripeTop => "stripe_top", + TriangleBottom => "triangle_bottom", + TriangleTop => "triangle_top", + TrianglesBottom => "triangles_bottom", + TrianglesTop => "triangles_top", +} +} diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs index 6ef95597..b2a0c2f0 100644 --- a/azalea-registry/src/tags/blocks.rs +++ b/azalea-registry/src/tags/blocks.rs @@ -229,27 +229,6 @@ pub static BADLANDS_TERRACOTTA: LazyLock<RegistryTag<BlockKind>> = LazyLock::new pub static BAMBOO_BLOCKS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![BlockKind::BambooBlock, BlockKind::StrippedBambooBlock]) }); -pub static BAMBOO_PLANTABLE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::GrassBlock, - BlockKind::Dirt, - BlockKind::CoarseDirt, - BlockKind::Podzol, - BlockKind::Sand, - BlockKind::SuspiciousSand, - BlockKind::RedSand, - BlockKind::Gravel, - BlockKind::SuspiciousGravel, - BlockKind::MuddyMangroveRoots, - BlockKind::Mycelium, - BlockKind::BambooSapling, - BlockKind::Bamboo, - BlockKind::MossBlock, - BlockKind::RootedDirt, - BlockKind::Mud, - BlockKind::PaleMossBlock, - ]) -}); pub static BANNERS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::WhiteBanner, @@ -405,22 +384,36 @@ pub static BEE_GROWABLES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { }); pub static BEEHIVES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::BeeNest, BlockKind::Beehive])); -pub static BIG_DRIPLEAF_PLACEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::GrassBlock, - BlockKind::Dirt, - BlockKind::CoarseDirt, - BlockKind::Podzol, - BlockKind::MuddyMangroveRoots, - BlockKind::Farmland, - BlockKind::Clay, - BlockKind::Mycelium, - BlockKind::MossBlock, - BlockKind::MossBlock, - BlockKind::RootedDirt, - BlockKind::Mud, - ]) -}); +pub static BENEATH_BAMBOO_PODZOL_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) + }); +pub static BENEATH_TREE_PODZOL_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) + }); pub static BIRCH_LOGS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::BirchLog, @@ -534,6 +527,30 @@ pub static CANDLES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::BlackCandle, ]) }); +pub static CANNOT_REPLACE_BELOW_TREE_TRUNK: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) + }); +pub static CANNOT_SUPPORT_KELP: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MagmaBlock])); +pub static CANNOT_SUPPORT_SEAGRASS: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MagmaBlock])); +pub static CANNOT_SUPPORT_SNOW_LAYER: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::Ice, + BlockKind::Barrier, + BlockKind::PackedIce, + ]) +}); pub static CAULDRONS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Cauldron, @@ -853,16 +870,9 @@ pub static DIAMOND_ORES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::DiamondOre, BlockKind::DeepslateDiamondOre])); pub static DIRT: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ - BlockKind::GrassBlock, BlockKind::Dirt, BlockKind::CoarseDirt, - BlockKind::Podzol, - BlockKind::MuddyMangroveRoots, - BlockKind::Mycelium, - BlockKind::MossBlock, BlockKind::RootedDirt, - BlockKind::Mud, - BlockKind::PaleMossBlock, ]) }); pub static DOES_NOT_BLOCK_HOPPERS: LazyLock<RegistryTag<BlockKind>> = @@ -928,41 +938,6 @@ pub static DRIPSTONE_REPLACEABLE_BLOCKS: LazyLock<RegistryTag<BlockKind>> = Lazy BlockKind::Deepslate, ]) }); -pub static DRY_VEGETATION_MAY_PLACE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::GrassBlock, - BlockKind::Dirt, - BlockKind::CoarseDirt, - BlockKind::Podzol, - BlockKind::Sand, - BlockKind::SuspiciousSand, - BlockKind::RedSand, - BlockKind::MuddyMangroveRoots, - BlockKind::Farmland, - BlockKind::Mycelium, - BlockKind::WhiteTerracotta, - BlockKind::OrangeTerracotta, - BlockKind::MagentaTerracotta, - BlockKind::LightBlueTerracotta, - BlockKind::YellowTerracotta, - BlockKind::LimeTerracotta, - BlockKind::PinkTerracotta, - BlockKind::GrayTerracotta, - BlockKind::LightGrayTerracotta, - BlockKind::CyanTerracotta, - BlockKind::PurpleTerracotta, - BlockKind::BlueTerracotta, - BlockKind::BrownTerracotta, - BlockKind::GreenTerracotta, - BlockKind::RedTerracotta, - BlockKind::BlackTerracotta, - BlockKind::Terracotta, - BlockKind::MossBlock, - BlockKind::RootedDirt, - BlockKind::Mud, - BlockKind::PaleMossBlock, - ]) -}); pub static EDIBLE_FOR_SHEEP: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::ShortGrass, @@ -973,6 +948,10 @@ pub static EDIBLE_FOR_SHEEP: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| }); pub static EMERALD_ORES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::EmeraldOre, BlockKind::DeepslateEmeraldOre])); +pub static ENABLES_BUBBLE_COLUMN_DRAG_DOWN: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MagmaBlock])); +pub static ENABLES_BUBBLE_COLUMN_PUSH_UP: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::SoulSand])); pub static ENCHANTMENT_POWER_PROVIDER: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::Bookshelf])); pub static ENCHANTMENT_POWER_TRANSMITTER: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { @@ -1019,6 +998,7 @@ pub static ENDERMAN_HOLDABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(| BlockKind::Gravel, BlockKind::MuddyMangroveRoots, BlockKind::Dandelion, + BlockKind::GoldenDandelion, BlockKind::Torchflower, BlockKind::Poppy, BlockKind::BlueOrchid, @@ -1132,6 +1112,7 @@ pub static FLOWER_POTS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::PottedMangrovePropagule, BlockKind::PottedFern, BlockKind::PottedDandelion, + BlockKind::PottedGoldenDandelion, BlockKind::PottedPoppy, BlockKind::PottedBlueOrchid, BlockKind::PottedAllium, @@ -1165,6 +1146,7 @@ pub static FLOWERS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::CherryLeaves, BlockKind::FloweringAzaleaLeaves, BlockKind::Dandelion, + BlockKind::GoldenDandelion, BlockKind::Torchflower, BlockKind::Poppy, BlockKind::BlueOrchid, @@ -1193,6 +1175,26 @@ pub static FLOWERS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::ClosedEyeblossom, ]) }); +pub static FOREST_ROCK_CAN_PLACE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::Stone, + BlockKind::Granite, + BlockKind::Diorite, + BlockKind::Andesite, + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::Tuff, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::Deepslate, + BlockKind::PaleMossBlock, + ]) +}); pub static FOXES_SPAWNABLE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::GrassBlock, @@ -1239,6 +1241,15 @@ pub static GOLD_ORES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::NetherGoldOre, ]) }); +pub static GRASS_BLOCKS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Podzol, + BlockKind::Mycelium, + ]) +}); +pub static GROWS_CROPS: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland])); pub static GUARDED_BY_PIGLINS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::GoldOre, @@ -1296,6 +1307,43 @@ pub static HOGLIN_REPELLENTS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(| BlockKind::PottedWarpedFungus, ]) }); +pub static HUGE_BROWN_MUSHROOM_CAN_PLACE_ON: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) + }); +pub static HUGE_RED_MUSHROOM_CAN_PLACE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); pub static ICE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Ice, @@ -1304,6 +1352,22 @@ pub static ICE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::BlueIce, ]) }); +pub static ICE_SPIKE_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Ice, + BlockKind::SnowBlock, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); pub static IMPERMEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Glass, @@ -1865,17 +1929,30 @@ pub static LUSH_GROUND_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock: }); pub static MAINTAINS_FARMLAND: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ + BlockKind::MovingPiston, BlockKind::Torchflower, BlockKind::Wheat, BlockKind::AttachedPumpkinStem, BlockKind::AttachedMelonStem, BlockKind::PumpkinStem, BlockKind::MelonStem, + BlockKind::OakFenceGate, BlockKind::Carrots, BlockKind::Potatoes, + BlockKind::SpruceFenceGate, + BlockKind::BirchFenceGate, + BlockKind::JungleFenceGate, + BlockKind::AcaciaFenceGate, + BlockKind::CherryFenceGate, + BlockKind::DarkOakFenceGate, + BlockKind::PaleOakFenceGate, + BlockKind::MangroveFenceGate, + BlockKind::BambooFenceGate, BlockKind::TorchflowerCrop, BlockKind::PitcherCrop, BlockKind::Beetroots, + BlockKind::CrimsonFenceGate, + BlockKind::WarpedFenceGate, ]) }); pub static MANGROVE_LOGS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { @@ -2789,6 +2866,8 @@ pub static MOB_INTERACTABLE_DOORS: LazyLock<RegistryTag<BlockKind>> = LazyLock:: }); pub static MOOSHROOMS_SPAWNABLE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::Mycelium])); +pub static MOSS_BLOCKS: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MossBlock, BlockKind::PaleMossBlock])); pub static MOSS_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Stone, @@ -2811,14 +2890,8 @@ pub static MOSS_REPLACEABLE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| BlockKind::PaleMossBlock, ]) }); -pub static MUSHROOM_GROW_BLOCK: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::Podzol, - BlockKind::Mycelium, - BlockKind::WarpedNylium, - BlockKind::CrimsonNylium, - ]) -}); +pub static MUD: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MuddyMangroveRoots, BlockKind::Mud])); pub static NEEDS_DIAMOND_TOOL: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Obsidian, @@ -2998,6 +3071,15 @@ pub static OCCLUDES_VIBRATION_SIGNALS: LazyLock<RegistryTag<BlockKind>> = LazyLo BlockKind::BlackWool, ]) }); +pub static OVERRIDES_MUSHROOM_LIGHT_REQUIREMENT: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::Podzol, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + ]) + }); pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Stone, @@ -3198,6 +3280,54 @@ pub static PREVENT_MOB_SPAWNING_INSIDE: LazyLock<RegistryTag<BlockKind>> = LazyL BlockKind::ActivatorRail, ]) }); +pub static PREVENTS_NEARBY_LEAF_DECAY: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::PaleOakWood, + BlockKind::OakLog, + BlockKind::SpruceLog, + BlockKind::BirchLog, + BlockKind::JungleLog, + BlockKind::AcaciaLog, + BlockKind::CherryLog, + BlockKind::DarkOakLog, + BlockKind::PaleOakLog, + BlockKind::MangroveLog, + BlockKind::StrippedSpruceLog, + BlockKind::StrippedBirchLog, + BlockKind::StrippedJungleLog, + BlockKind::StrippedAcaciaLog, + BlockKind::StrippedCherryLog, + BlockKind::StrippedDarkOakLog, + BlockKind::StrippedPaleOakLog, + BlockKind::StrippedOakLog, + BlockKind::StrippedMangroveLog, + BlockKind::OakWood, + BlockKind::SpruceWood, + BlockKind::BirchWood, + BlockKind::JungleWood, + BlockKind::AcaciaWood, + BlockKind::CherryWood, + BlockKind::DarkOakWood, + BlockKind::MangroveWood, + BlockKind::StrippedOakWood, + BlockKind::StrippedSpruceWood, + BlockKind::StrippedBirchWood, + BlockKind::StrippedJungleWood, + BlockKind::StrippedAcaciaWood, + BlockKind::StrippedCherryWood, + BlockKind::StrippedDarkOakWood, + BlockKind::StrippedPaleOakWood, + BlockKind::StrippedMangroveWood, + BlockKind::WarpedStem, + BlockKind::StrippedWarpedStem, + BlockKind::WarpedHyphae, + BlockKind::StrippedWarpedHyphae, + BlockKind::CrimsonStem, + BlockKind::StrippedCrimsonStem, + BlockKind::CrimsonHyphae, + BlockKind::StrippedCrimsonHyphae, + ]) +}); pub static RABBITS_SPAWNABLE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::GrassBlock, @@ -3276,6 +3406,7 @@ pub static REPLACEABLE_BY_MUSHROOMS: LazyLock<RegistryTag<BlockKind>> = LazyLock BlockKind::Seagrass, BlockKind::TallSeagrass, BlockKind::Dandelion, + BlockKind::GoldenDandelion, BlockKind::Torchflower, BlockKind::Poppy, BlockKind::BlueOrchid, @@ -3336,6 +3467,7 @@ pub static REPLACEABLE_BY_TREES: LazyLock<RegistryTag<BlockKind>> = LazyLock::ne BlockKind::Seagrass, BlockKind::TallSeagrass, BlockKind::Dandelion, + BlockKind::GoldenDandelion, BlockKind::Torchflower, BlockKind::Poppy, BlockKind::BlueOrchid, @@ -3620,11 +3752,10 @@ pub static SLABS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::DeepslateBrickSlab, ]) }); -pub static SMALL_DRIPLEAF_PLACEABLE: LazyLock<RegistryTag<BlockKind>> = - LazyLock::new(|| RegistryTag::new(vec![BlockKind::Clay, BlockKind::MossBlock])); pub static SMALL_FLOWERS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::Dandelion, + BlockKind::GoldenDandelion, BlockKind::Torchflower, BlockKind::Poppy, BlockKind::BlueOrchid, @@ -3685,20 +3816,6 @@ pub static SNOW: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { BlockKind::PowderSnow, ]) }); -pub static SNOW_LAYER_CAN_SURVIVE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::SoulSand, - BlockKind::HoneyBlock, - BlockKind::Mud, - ]) -}); -pub static SNOW_LAYER_CANNOT_SURVIVE_ON: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - BlockKind::Ice, - BlockKind::Barrier, - BlockKind::PackedIce, - ]) -}); pub static SOUL_FIRE_BASE_BLOCKS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::SoulSand, BlockKind::SoulSoil])); pub static SOUL_SPEED_BLOCKS: LazyLock<RegistryTag<BlockKind>> = @@ -3819,6 +3936,359 @@ pub static STONE_PRESSURE_PLATES: LazyLock<RegistryTag<BlockKind>> = LazyLock::n }); pub static STRIDER_WARM_BLOCKS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| RegistryTag::new(vec![BlockKind::Lava])); +pub static SUBSTRATE_OVERWORLD: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORT_OVERRIDE_CACTUS_FLOWER: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland, BlockKind::Cactus])); +pub static SUPPORT_OVERRIDE_SNOW_LAYER: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::SoulSand, + BlockKind::HoneyBlock, + BlockKind::Mud, + ]) +}); +pub static SUPPORTS_AZALEA: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Clay, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_BAMBOO: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::Sand, + BlockKind::SuspiciousSand, + BlockKind::RedSand, + BlockKind::Gravel, + BlockKind::SuspiciousGravel, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::BambooSapling, + BlockKind::Bamboo, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_BIG_DRIPLEAF: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Clay, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + ]) +}); +pub static SUPPORTS_CACTUS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::Sand, + BlockKind::SuspiciousSand, + BlockKind::RedSand, + ]) +}); +pub static SUPPORTS_CHORUS_FLOWER: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::EndStone])); +pub static SUPPORTS_CHORUS_PLANT: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::EndStone])); +pub static SUPPORTS_COCOA: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::JungleLog, + BlockKind::StrippedJungleLog, + BlockKind::JungleWood, + BlockKind::StrippedJungleWood, + ]) +}); +pub static SUPPORTS_CRIMSON_FUNGUS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_CRIMSON_ROOTS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_CROPS: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland])); +pub static SUPPORTS_DRY_VEGETATION: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::Sand, + BlockKind::SuspiciousSand, + BlockKind::RedSand, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Mycelium, + BlockKind::WhiteTerracotta, + BlockKind::OrangeTerracotta, + BlockKind::MagentaTerracotta, + BlockKind::LightBlueTerracotta, + BlockKind::YellowTerracotta, + BlockKind::LimeTerracotta, + BlockKind::PinkTerracotta, + BlockKind::GrayTerracotta, + BlockKind::LightGrayTerracotta, + BlockKind::CyanTerracotta, + BlockKind::PurpleTerracotta, + BlockKind::BlueTerracotta, + BlockKind::BrownTerracotta, + BlockKind::GreenTerracotta, + BlockKind::RedTerracotta, + BlockKind::BlackTerracotta, + BlockKind::Terracotta, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_FROGSPAWN: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![])); +pub static SUPPORTS_HANGING_MANGROVE_PROPAGULE: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::MangroveLeaves])); +pub static SUPPORTS_LILY_PAD: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Ice, BlockKind::FrostedIce])); +pub static SUPPORTS_MANGROVE_PROPAGULE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Clay, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_MELON_STEM: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland])); +pub static SUPPORTS_MELON_STEM_FRUIT: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_NETHER_SPROUTS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_NETHER_WART: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::SoulSand])); +pub static SUPPORTS_PUMPKIN_STEM: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland])); +pub static SUPPORTS_PUMPKIN_STEM_FRUIT: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_SMALL_DRIPLEAF: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Clay, BlockKind::MossBlock])); +pub static SUPPORTS_STEM_CROPS: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::Farmland])); +pub static SUPPORTS_STEM_FRUIT: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_SUGAR_CANE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::Sand, + BlockKind::SuspiciousSand, + BlockKind::RedSand, + BlockKind::MuddyMangroveRoots, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_SUGAR_CANE_ADJACENTLY: LazyLock<RegistryTag<BlockKind>> = + LazyLock::new(|| RegistryTag::new(vec![BlockKind::FrostedIce])); +pub static SUPPORTS_VEGETATION: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_WARPED_FUNGUS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_WARPED_ROOTS: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::WarpedNylium, + BlockKind::CrimsonNylium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); +pub static SUPPORTS_WITHER_ROSE: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + BlockKind::GrassBlock, + BlockKind::Dirt, + BlockKind::CoarseDirt, + BlockKind::Podzol, + BlockKind::MuddyMangroveRoots, + BlockKind::Farmland, + BlockKind::Netherrack, + BlockKind::SoulSand, + BlockKind::SoulSoil, + BlockKind::Mycelium, + BlockKind::MossBlock, + BlockKind::RootedDirt, + BlockKind::Mud, + BlockKind::PaleMossBlock, + ]) +}); pub static SWORD_EFFICIENT: LazyLock<RegistryTag<BlockKind>> = LazyLock::new(|| { RegistryTag::new(vec![ BlockKind::OakLeaves, diff --git a/azalea-registry/src/tags/entities.rs b/azalea-registry/src/tags/entities.rs index 3680d35a..a8a7c961 100644 --- a/azalea-registry/src/tags/entities.rs +++ b/azalea-registry/src/tags/entities.rs @@ -154,6 +154,13 @@ pub static CAN_WEAR_NAUTILUS_ARMOR: LazyLock<RegistryTag<EntityKind>> = LazyLock::new(|| RegistryTag::new(vec![EntityKind::Nautilus, EntityKind::ZombieNautilus])); pub static CANDIDATE_FOR_IRON_GOLEM_GIFT: LazyLock<RegistryTag<EntityKind>> = LazyLock::new(|| RegistryTag::new(vec![EntityKind::CopperGolem, EntityKind::Villager])); +pub static CANNOT_BE_AGE_LOCKED: LazyLock<RegistryTag<EntityKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + EntityKind::SkeletonHorse, + EntityKind::Villager, + EntityKind::ZombieHorse, + ]) +}); pub static CANNOT_BE_PUSHED_ONTO_BOATS: LazyLock<RegistryTag<EntityKind>> = LazyLock::new(|| { RegistryTag::new(vec![ EntityKind::Cod, diff --git a/azalea-registry/src/tags/fluids.rs b/azalea-registry/src/tags/fluids.rs index 3e8d5062..6928f342 100644 --- a/azalea-registry/src/tags/fluids.rs +++ b/azalea-registry/src/tags/fluids.rs @@ -4,7 +4,15 @@ use std::sync::LazyLock; use crate::{builtin::Fluid, tags::RegistryTag}; +pub static BUBBLE_COLUMN_CAN_OCCUPY: LazyLock<RegistryTag<Fluid>> = + LazyLock::new(|| RegistryTag::new(vec![Fluid::Water])); pub static LAVA: LazyLock<RegistryTag<Fluid>> = LazyLock::new(|| RegistryTag::new(vec![Fluid::FlowingLava, Fluid::Lava])); +pub static SUPPORTS_FROGSPAWN: LazyLock<RegistryTag<Fluid>> = + LazyLock::new(|| RegistryTag::new(vec![Fluid::Water])); +pub static SUPPORTS_LILY_PAD: LazyLock<RegistryTag<Fluid>> = + LazyLock::new(|| RegistryTag::new(vec![Fluid::Water])); +pub static SUPPORTS_SUGAR_CANE_ADJACENTLY: LazyLock<RegistryTag<Fluid>> = + LazyLock::new(|| RegistryTag::new(vec![Fluid::FlowingWater, Fluid::Water])); pub static WATER: LazyLock<RegistryTag<Fluid>> = LazyLock::new(|| RegistryTag::new(vec![Fluid::FlowingWater, Fluid::Water])); diff --git a/azalea-registry/src/tags/items.rs b/azalea-registry/src/tags/items.rs index d76efbd2..f798f57f 100644 --- a/azalea-registry/src/tags/items.rs +++ b/azalea-registry/src/tags/items.rs @@ -288,8 +288,38 @@ pub static CANDLES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { ItemKind::BlackCandle, ]) }); +pub static CAT_COLLAR_DYES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::WhiteDye, + ItemKind::OrangeDye, + ItemKind::MagentaDye, + ItemKind::LightBlueDye, + ItemKind::YellowDye, + ItemKind::LimeDye, + ItemKind::PinkDye, + ItemKind::GrayDye, + ItemKind::LightGrayDye, + ItemKind::CyanDye, + ItemKind::PurpleDye, + ItemKind::BlueDye, + ItemKind::BrownDye, + ItemKind::GreenDye, + ItemKind::RedDye, + ItemKind::BlackDye, + ]) +}); pub static CAT_FOOD: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::Cod, ItemKind::Salmon])); +pub static CAULDRON_CAN_REMOVE_DYE: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::WolfArmor, + ItemKind::LeatherHelmet, + ItemKind::LeatherChestplate, + ItemKind::LeatherLeggings, + ItemKind::LeatherBoots, + ItemKind::LeatherHorseArmor, + ]) +}); pub static CHAINS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::IronChain, @@ -597,16 +627,9 @@ pub static DIAMOND_TOOL_MATERIALS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::Diamond])); pub static DIRT: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ - ItemKind::GrassBlock, ItemKind::Dirt, ItemKind::CoarseDirt, - ItemKind::Podzol, ItemKind::RootedDirt, - ItemKind::Mud, - ItemKind::MuddyMangroveRoots, - ItemKind::MossBlock, - ItemKind::PaleMossBlock, - ItemKind::Mycelium, ]) }); pub static DOORS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { @@ -638,14 +661,24 @@ pub static DROWNED_PREFERRED_WEAPONS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::Trident])); pub static DUPLICATES_ALLAYS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::AmethystShard])); -pub static DYEABLE: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { - RegistryTag::new(vec![ - ItemKind::WolfArmor, - ItemKind::LeatherHelmet, - ItemKind::LeatherChestplate, - ItemKind::LeatherLeggings, - ItemKind::LeatherBoots, - ItemKind::LeatherHorseArmor, +pub static DYES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::WhiteDye, + ItemKind::OrangeDye, + ItemKind::MagentaDye, + ItemKind::LightBlueDye, + ItemKind::YellowDye, + ItemKind::LimeDye, + ItemKind::PinkDye, + ItemKind::GrayDye, + ItemKind::LightGrayDye, + ItemKind::CyanDye, + ItemKind::PurpleDye, + ItemKind::BlueDye, + ItemKind::BrownDye, + ItemKind::GreenDye, + ItemKind::RedDye, + ItemKind::BlackDye, ]) }); pub static EGGS: LazyLock<RegistryTag<ItemKind>> = @@ -1190,6 +1223,7 @@ pub static FLOWERS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { ItemKind::FloweringAzaleaLeaves, ItemKind::FloweringAzalea, ItemKind::Dandelion, + ItemKind::GoldenDandelion, ItemKind::OpenEyeblossom, ItemKind::ClosedEyeblossom, ItemKind::Poppy, @@ -1256,6 +1290,13 @@ pub static GOLD_ORES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { }); pub static GOLD_TOOL_MATERIALS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::GoldIngot])); +pub static GRASS_BLOCKS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::GrassBlock, + ItemKind::Podzol, + ItemKind::Mycelium, + ]) +}); pub static HANGING_SIGNS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::OakHangingSign, @@ -1521,6 +1562,40 @@ pub static LOGS_THAT_BURN: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { ItemKind::MangroveWood, ]) }); +pub static LOOM_DYES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::WhiteDye, + ItemKind::OrangeDye, + ItemKind::MagentaDye, + ItemKind::LightBlueDye, + ItemKind::YellowDye, + ItemKind::LimeDye, + ItemKind::PinkDye, + ItemKind::GrayDye, + ItemKind::LightGrayDye, + ItemKind::CyanDye, + ItemKind::PurpleDye, + ItemKind::BlueDye, + ItemKind::BrownDye, + ItemKind::GreenDye, + ItemKind::RedDye, + ItemKind::BlackDye, + ]) +}); +pub static LOOM_PATTERNS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::FlowerBannerPattern, + ItemKind::CreeperBannerPattern, + ItemKind::SkullBannerPattern, + ItemKind::MojangBannerPattern, + ItemKind::GlobeBannerPattern, + ItemKind::PiglinBannerPattern, + ItemKind::FlowBannerPattern, + ItemKind::GusterBannerPattern, + ItemKind::FieldMasonedBannerPattern, + ItemKind::BordureIndentedBannerPattern, + ]) +}); pub static MANGROVE_LOGS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::MangroveLog, @@ -1546,6 +1621,17 @@ pub static MEAT: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { ItemKind::CookedMutton, ]) }); +pub static METAL_NUGGETS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::GoldNugget, + ItemKind::IronNugget, + ItemKind::CopperNugget, + ]) +}); +pub static MOSS_BLOCKS: LazyLock<RegistryTag<ItemKind>> = + LazyLock::new(|| RegistryTag::new(vec![ItemKind::MossBlock, ItemKind::PaleMossBlock])); +pub static MUD: LazyLock<RegistryTag<ItemKind>> = + LazyLock::new(|| RegistryTag::new(vec![ItemKind::Mud, ItemKind::MuddyMangroveRoots])); pub static NAUTILUS_BUCKET_FOOD: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::PufferfishBucket, @@ -1676,6 +1762,7 @@ pub static PIGLIN_LOVED: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { ItemKind::NetherGoldOre, ItemKind::RawGoldBlock, ItemKind::GoldBlock, + ItemKind::GoldenDandelion, ItemKind::LightWeightedPressurePlate, ItemKind::RawGold, ItemKind::GoldIngot, @@ -1926,6 +2013,7 @@ pub static SLABS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { pub static SMALL_FLOWERS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::Dandelion, + ItemKind::GoldenDandelion, ItemKind::OpenEyeblossom, ItemKind::ClosedEyeblossom, ItemKind::Poppy, @@ -2235,6 +2323,26 @@ pub static WART_BLOCKS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::NetherWartBlock, ItemKind::WarpedWartBlock])); pub static WITHER_SKELETON_DISLIKED_WEAPONS: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| RegistryTag::new(vec![ItemKind::Bow, ItemKind::Crossbow])); +pub static WOLF_COLLAR_DYES: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { + RegistryTag::new(vec![ + ItemKind::WhiteDye, + ItemKind::OrangeDye, + ItemKind::MagentaDye, + ItemKind::LightBlueDye, + ItemKind::YellowDye, + ItemKind::LimeDye, + ItemKind::PinkDye, + ItemKind::GrayDye, + ItemKind::LightGrayDye, + ItemKind::CyanDye, + ItemKind::PurpleDye, + ItemKind::BlueDye, + ItemKind::BrownDye, + ItemKind::GreenDye, + ItemKind::RedDye, + ItemKind::BlackDye, + ]) +}); pub static WOLF_FOOD: LazyLock<RegistryTag<ItemKind>> = LazyLock::new(|| { RegistryTag::new(vec![ ItemKind::Porkchop, diff --git a/azalea-world/src/chunk/mod.rs b/azalea-world/src/chunk/mod.rs index cd52026a..48cb202c 100644 --- a/azalea-world/src/chunk/mod.rs +++ b/azalea-world/src/chunk/mod.rs @@ -44,6 +44,10 @@ pub struct Section { /// This may be updated every time [`Self::get_and_set_block_state`] is /// called. pub block_count: u16, + /// Similar to [`Self::block_count`], but for fluids. + /// + /// Unlike [`Self::block_count`], this is currently not updated by Azalea. + pub fluid_count: u16, pub states: PalettedContainer<BlockState>, pub biomes: PalettedContainer<Biome>, } @@ -178,6 +182,7 @@ pub fn get_block_state_from_sections( impl AzBuf for Section { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result<Self, BufReadError> { let block_count = u16::azalea_read(buf)?; + let fluid_count = u16::azalea_read(buf)?; // this is commented out because the vanilla server is wrong // TODO: ^ this comment was written ages ago. needs more investigation. @@ -200,12 +205,14 @@ impl AzBuf for Section { let biomes = PalettedContainer::<Biome>::read(buf)?; Ok(Section { block_count, + fluid_count, states, biomes, }) } fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> { self.block_count.azalea_write(buf)?; + self.fluid_count.azalea_write(buf)?; self.states.write(buf)?; self.biomes.write(buf)?; Ok(()) @@ -289,6 +296,7 @@ mod tests { let biomes = PalettedContainer::new(); let section = Section { block_count: 2, + fluid_count: 0, states, biomes, }; diff --git a/azalea/examples/testbot/commands/debug.rs b/azalea/examples/testbot/commands/debug.rs index 62baef1d..55b41403 100644 --- a/azalea/examples/testbot/commands/debug.rs +++ b/azalea/examples/testbot/commands/debug.rs @@ -168,6 +168,22 @@ pub fn register(commands: &mut CommandDispatcher<Mutex<CommandSource>>) { })), ))); + commands.register(literal("inventory").executes(|ctx: &Ctx| { + let source = ctx.source.lock(); + for item in source.bot.menu().slots() { + if item.is_empty() { + continue; + } + println!("{item:?}"); + for (kind, data) in item.component_patch().iter() { + if let Some(data) = data { + println!("- {kind} {data:?}"); + } + } + } + 1 + })); + commands.register(literal("pathfinderstate").executes(|ctx: &Ctx| { let source = ctx.source.lock(); let pathfinder = source.bot.get_component::<Pathfinder>(); diff --git a/codegen/README.md b/codegen/README.md index 3e259349..90149dcc 100644 --- a/codegen/README.md +++ b/codegen/README.md @@ -41,7 +41,7 @@ If it all works, make a pull request. If the version you updated to is a snapsho At the time of writing, the following data generators are used: - [Vanilla data generator](https://minecraft.wiki/w/Minecraft_Wiki:Projects/wiki.vg_merge/Data_Generators) -- [Burger](https://github.com/mat-1/Burger) +- [Azalea Burger](https://github.com/azalea-rs/azalea-burger) - [Pumpkin Extractor](https://github.com/Pumpkin-MC/Extractor) Some things can be obtained from multiple generators. You should prefer them by the order above (the vanilla generator is the most reliable). diff --git a/codegen/genentities.py b/codegen/genentities.py index 944a1a4e..d7ac5dc3 100644 --- a/codegen/genentities.py +++ b/codegen/genentities.py @@ -6,14 +6,13 @@ import lib.extract version_id = lib.code.version.get_version_id() -mappings = lib.download.get_mappings_for_version(version_id) burger_data = lib.extract.get_burger_data_for_version(version_id) -burger_entities_data = burger_data[0]['entities'] +burger_entities_data = burger_data[0]["entities"] -lib.code.entity.generate_entity_metadata(burger_entities_data, mappings) +lib.code.entity.generate_entity_metadata(burger_entities_data) lib.code.entity.generate_entity_dimensions(burger_entities_data) lib.code.utils.fmt() -print('Done!') +print("Done!") diff --git a/codegen/lib/code/data_components.py b/codegen/lib/code/data_components.py index e6de6201..992ba83f 100644 --- a/codegen/lib/code/data_components.py +++ b/codegen/lib/code/data_components.py @@ -360,7 +360,7 @@ use crate::{ ) elif target_rust_type == "ItemStack": item_rust_value = python_to_rust_value(python_value["id"], "ItemKind") - count = python_value["count"] + count = python_value.get("count", 1) if count == 1: return f"ItemStack::from({item_rust_value})" else: @@ -411,9 +411,6 @@ use crate::{ fields_for_rust_type = enum_and_struct_fields.get(target_rust_type, []) if "Referenced(Identifier)" in fields_for_rust_type: return f"{target_rust_type}::Referenced({python_to_rust_value(python_value, 'Identifier')})" - elif "Registry(data::Instrument)" in fields_for_rust_type: - # TODO - return f"{target_rust_type}::Registry(azalea_registry::data::Instrument::new_raw(0))" elif target_rust_type.startswith("HolderSet<"): holderset_type = target_rust_type.split("<", 1)[1].split(",", 1)[0] main_vec = python_to_rust_value( @@ -429,10 +426,10 @@ use crate::{ elif target_rust_type == "Identifier": # convert minecraft:air into Identifier::from_static("minecraft:air") return f'"{python_value}".into()' - elif target_rust_type == "DamageType": + elif target_rust_type.startswith("azalea_registry::data::"): # TODO: this is intentionally incorrect, see the comment in # azalea-registry/src/data.rs to see how to fix this properly - return "DamageType::Registry(azalea_registry::data::DamageKind::new_raw(0))" + return f"{target_rust_type}::new_raw(0)" else: # enum variant return f"{target_rust_type}::{to_camel_case(identifier_to_path(python_value))}" @@ -472,9 +469,17 @@ use crate::{ tag_module = "blocks" else: tag_module = "FIXME_UNKNOWN_MODULE" - vectors.append( - f"azalea_registry::tags::{tag_module}::{tag_name}.clone().into_iter().collect()" - ) + + # TODO: it's not currently possible to have a holderset for data registry items + # (because registries would need to be translated during packet parsing/writing), + # so we leave this empty for now. + if inner_type in {"BannerPatternKind", "DamageKind"}: + pass + else: + vectors.append( + f"azalea_registry::tags::{tag_module}::{tag_name}.clone().into_iter().collect()" + ) + continue main_vec += python_to_rust_value(v, inner_type) + "," main_vec = main_vec.rstrip(",") + "]" @@ -533,11 +538,11 @@ use crate::{ item_defaults_original = item_defaults item_defaults = {} - for k, v in item_defaults_original.items(): + for k, v in sorted(item_defaults_original.items(), key=lambda i: i[0]): item_defaults[k] = python_to_rust_value(v, field_type) default_values_frequency = {} - for value in item_defaults.values(): + for value in sorted(item_defaults.values()): if value not in default_values_frequency: default_values_frequency[value] = 0 default_values_frequency[value] += 1 diff --git a/codegen/lib/code/entity.py b/codegen/lib/code/entity.py index d10a159f..992d9b19 100644 --- a/codegen/lib/code/entity.py +++ b/codegen/lib/code/entity.py @@ -1,5 +1,4 @@ from lib.utils import to_camel_case, to_snake_case, get_dir_location, upper_first_letter -from lib.mappings import Mappings from typing import Optional import re @@ -8,18 +7,19 @@ DATA_RS_DIR = get_dir_location("../azalea-entity/src/data.rs") DIMENSIONS_RS_DIR = get_dir_location("../azalea-entity/src/dimensions.rs") -def generate_metadata_names(burger_dataserializers: dict, mappings: Mappings): +def generate_metadata_names(burger_dataserializers: dict): serializer_names: list[Optional[str]] = [None] * len(burger_dataserializers) for burger_serializer in burger_dataserializers.values(): print(burger_serializer) + # TODO: remove these comments # burger gives us the wrong class, so we do this instead - data_serializers_class = mappings.get_class_from_deobfuscated_name( - "net.minecraft.network.syncher.EntityDataSerializers" - ) - mojmap_name = mappings.get_field( - data_serializers_class, burger_serializer["field"] - ).lower() + # data_serializers_class = "net/minecraft/network/syncher/EntityDataSerializers" + # mojmap_name = mappings.get_field( + # data_serializers_class, burger_serializer["field"] + # ).lower() + + mojmap_name = burger_serializer["field"].lower() if mojmap_name == "component": mojmap_name = "formatted_text" @@ -58,11 +58,11 @@ def parse_metadata_types_from_code(): return data -def generate_entity_metadata(burger_entities_data: dict, mappings: Mappings): +def generate_entity_metadata(burger_entities_data: dict): burger_entity_metadata = burger_entities_data["entity"] new_metadata_names = generate_metadata_names( - burger_entities_data["dataserializers"], mappings + burger_entities_data["dataserializers"] ) parsed_metadata_types = parse_metadata_types_from_code() @@ -173,7 +173,7 @@ impl From<EntityDataValue> for UpdateMetadataError { for entity_id in burger_entity_metadata.keys(): field_name_map[entity_id] = {} for field_name_or_bitfield in get_entity_metadata_names( - entity_id, burger_entity_metadata, mappings + entity_id, burger_entity_metadata ).values(): if isinstance(field_name_or_bitfield, str): if field_name_or_bitfield in previous_field_names: @@ -204,7 +204,7 @@ impl From<EntityDataValue> for UpdateMetadataError { # and now figure out what to rename them to for entity_id in burger_entity_metadata.keys(): for index, field_name_or_bitfield in get_entity_metadata_names( - entity_id, burger_entity_metadata, mappings + entity_id, burger_entity_metadata ).items(): if isinstance(field_name_or_bitfield, str): new_field_name = field_name_or_bitfield @@ -245,7 +245,7 @@ impl From<EntityDataValue> for UpdateMetadataError { parents = get_entity_parents(entity_id, burger_entity_metadata) for parent_id in list(reversed(parents)): for index, name_or_bitfield in get_entity_metadata_names( - parent_id, burger_entity_metadata, mappings + parent_id, burger_entity_metadata ).items(): assert index == len(all_field_names_or_bitfields) all_field_names_or_bitfields.append(name_or_bitfield) @@ -462,7 +462,7 @@ impl From<EntityDataValue> for UpdateMetadataError { if parent_struct_name: code.append(f" parent: {parent_struct_name}MetadataBundle,") for index, name_or_bitfield in get_entity_metadata_names( - entity_id, burger_entity_metadata, mappings + entity_id, burger_entity_metadata ).items(): if isinstance(name_or_bitfield, str): name_or_bitfield = maybe_rename_field(name_or_bitfield, index) @@ -514,7 +514,7 @@ impl From<EntityDataValue> for UpdateMetadataError { code.append(" parent: Default::default(),") for index, name_or_bitfield in get_entity_metadata_names( - this_entity_id, burger_entity_metadata, mappings + this_entity_id, burger_entity_metadata ).items(): default = next( filter(lambda i: i["index"] == index, entity_metadatas) @@ -792,22 +792,19 @@ def get_entity_metadata(entity_id: str, burger_entity_metadata: dict): # returns a dict of {index: (name or bitfield)} -def get_entity_metadata_names( - entity_id: str, burger_entity_metadata: dict, mappings: Mappings -): +def get_entity_metadata_names(entity_id: str, burger_entity_metadata: dict): entity_metadata = burger_entity_metadata[entity_id]["metadata"] mapped_metadata_names = {} for metadata_item in entity_metadata: if "data" in metadata_item: - obfuscated_class = metadata_item["class"] + # obfuscated_class = metadata_item["class"] # mojang_class = mappings.get_class(obfuscated_class) first_byte_index = None for metadata_attribute in metadata_item["data"]: - obfuscated_field = metadata_attribute["field"] - mojang_field = mappings.get_field(obfuscated_class, obfuscated_field) + mojang_field = metadata_attribute["field"] pretty_mojang_name = prettify_mojang_field(mojang_field) mapped_metadata_names[metadata_attribute["index"]] = pretty_mojang_name @@ -820,12 +817,10 @@ def get_entity_metadata_names( if metadata_item["bitfields"] and first_byte_index is not None: clean_bitfield = {} for bitfield_item in metadata_item["bitfields"]: - bitfield_item_obfuscated_class = bitfield_item.get( - "class", obfuscated_class - ) - mojang_bitfield_item_name = mappings.get_method( - bitfield_item_obfuscated_class, bitfield_item["method"], "" - ) + # bitfield_item_obfuscated_class = bitfield_item.get( + # "class", obfuscated_class + # ) + mojang_bitfield_item_name = bitfield_item["method"] bitfield_item_name = prettify_mojang_method( mojang_bitfield_item_name ) diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 9ce5c137..1131cb49 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -1,6 +1,5 @@ from lib.utils import identifier_to_path, to_snake_case, to_camel_case, get_dir_location from lib.code.utils import burger_type_to_rust_type, write_packet_file -from lib.mappings import Mappings from typing import Optional import os import re @@ -175,7 +174,6 @@ def burger_instruction_to_code( instructions: list[dict], index: int, generated_packet_code: list[str], - mappings: Mappings, obfuscated_class_name: str, uses: set, extra_code: list[str], @@ -208,8 +206,7 @@ def burger_instruction_to_code( and next_next_instruction and next_next_instruction["operation"] == "loop" ): - obfuscated_field_name = instruction["field"].split(".")[0] - field_name = mappings.get_field(obfuscated_class_name, obfuscated_field_name) + field_name = instruction["field"].split("/")[0] # figure out what kind of iterator it is loop_instructions = next_next_instruction["instructions"] @@ -218,7 +215,6 @@ def burger_instruction_to_code( loop_instructions[1]["type"], None, loop_instructions[1], - mappings, obfuscated_class_name, ) field_type_rs = f"Vec<{entry_type_rs}>" @@ -235,7 +231,6 @@ def burger_instruction_to_code( loop_instructions[1]["type"], None, loop_instructions[1], - mappings, obfuscated_class_name, ) ) @@ -248,7 +243,6 @@ def burger_instruction_to_code( loop_instructions[2]["type"], None, loop_instructions[2], - mappings, obfuscated_class_name, ) ) @@ -277,16 +271,14 @@ def burger_instruction_to_code( ) ): print("ok is option") - obfuscated_field_name = instruction["field"].split(".")[0].split(" ")[0] + field_name = instruction["field"].split(".")[0].split(" ")[0] - if obfuscated_field_name in known_variable_types: - # just use the known name since it's not gonna be in the mappings - obfuscated_field_name = known_variable_types[obfuscated_field_name] - - field_name = mappings.get_field(obfuscated_class_name, obfuscated_field_name) + # if obfuscated_field_name in known_variable_types: + # just use the known name since it's not gonna be in the mappings + # obfuscated_field_name = known_variable_types[obfuscated_field_name] if field_name is None: - field_name = obfuscated_field_name.split("/")[-1] + field_name = field_name.split("/")[-1] if "<" in field_name: field_name = "value" @@ -306,7 +298,6 @@ def burger_instruction_to_code( condition_instruction["type"], None, condition_instruction, - mappings, obfuscated_class_name, ) ) @@ -321,54 +312,35 @@ def burger_instruction_to_code( skip = 1 else: field_type = instruction["type"] - obfuscated_field_name = instruction["field"] + field_name = instruction["field"] - if obfuscated_field_name.startswith("(float)"): - obfuscated_field_name = obfuscated_field_name[len("(float)") :] - - field_name = mappings.get_field( - obfuscated_class_name, obfuscated_field_name - ) or mappings.get_field( - obfuscated_class_name.split("$")[0], obfuscated_field_name - ) + if field_name.startswith("(float)"): + field_name = field_name[len("(float)") :] field_type_rs, is_var, instruction_uses, instruction_extra_code = ( burger_type_to_rust_type( - field_type, field_name, instruction, mappings, obfuscated_class_name + field_type, field_name, instruction, obfuscated_class_name ) ) - if obfuscated_field_name in known_variable_types: + if field_name in known_variable_types: # just use the known name since it's not gonna be in the mappings - field_name = obfuscated_field_name + pass - elif ( - "." in obfuscated_field_name - or " " in obfuscated_field_name - or "(" in obfuscated_field_name - ): - field_type_rs2, obfuscated_field_name, field_comment = burger_field_to_type( - obfuscated_field_name, - mappings, + elif "." in field_name or " " in field_name or "(" in field_name: + field_type_rs2, field_name, field_comment = burger_field_to_type( + field_name, obfuscated_class_name, known_variable_types, ) if not field_type_rs2: generated_packet_code.append(f"// TODO: {instruction}") return - if obfuscated_field_name in known_variable_types: + if field_name in known_variable_types: # just use the known name since it's not gonna be in the mappings - obfuscated_field_name = known_variable_types[obfuscated_field_name] - print("got obfuscated_field_name", obfuscated_field_name) - - # try to get the field name again with the new stuff we know - field_name = mappings.get_field( - obfuscated_class_name, obfuscated_field_name - ) or mappings.get_field( - obfuscated_class_name.split("$")[0], obfuscated_field_name - ) - if field_name is None: - field_name = obfuscated_field_name.split("/")[-1] + field_name = known_variable_types[field_name] + print("got obfuscated_field_name", field_name) + uses.update(instruction_uses) extra_code.extend(instruction_extra_code) @@ -387,7 +359,7 @@ def burger_instruction_to_code( def burger_field_to_type( - field, mappings: Mappings, obfuscated_class_name: str, known_variable_types={} + field, obfuscated_class_name: str, known_variable_types={} ) -> tuple[Optional[str], str, Optional[str]]: """ Returns field_type_rs, obfuscated_field_name, field_comment @@ -399,38 +371,18 @@ def burger_field_to_type( match = re.match(r"^\w+\.\w+\(\)$", field) if match: print("field", field) - obfuscated_first = field.split(".")[0] - obfuscated_second = field.split(".")[1].split("(")[0] + first_type = field.split(".")[0] + second_type = field.split(".")[1].split("(")[0] # first = mappings.get_field(obfuscated_class_name, obfuscated_first) - if obfuscated_first in known_variable_types: - first_type = known_variable_types[obfuscated_first] - else: - try: - first_type = mappings.get_field_type( - obfuscated_class_name, obfuscated_first - ) - except Exception: - first_type = "TODO" - first_obfuscated_class_name: Optional[str] = ( - mappings.get_class_from_deobfuscated_name(first_type) - ) - if first_obfuscated_class_name: - try: - second = mappings.get_method( - first_obfuscated_class_name, obfuscated_second, "" - ) - except Exception: - # if this happens then the field is probably from a super class - second = obfuscated_second - else: - second = obfuscated_second - first_type_short = first_type.split(".")[-1] - if second in {"byteValue"}: - return (first_type_short, obfuscated_first, None) + if first_type in known_variable_types: + first_type = known_variable_types[first_type] + first_type_short = first_type.split("/")[-1] + if second_type in {"byteValue"}: + return (first_type_short, first_type, None) return ( first_type_short, - obfuscated_first, - f"TODO: Does {first_type_short}::{second}, may not be implemented", + first_type, + f"TODO: Does {first_type_short}::{second_type}, may not be implemented", ) return None, field, None diff --git a/codegen/lib/code/registry.py b/codegen/lib/code/registry.py index 01462e1f..9c30a273 100644 --- a/codegen/lib/code/registry.py +++ b/codegen/lib/code/registry.py @@ -154,7 +154,7 @@ def registry_name_to_enum_name(registry_name: str) -> str: # change _type to _kind because that's Rustier (and because _type # is a reserved keyword) registry_name = registry_name[:-5] + "_kind" - elif registry_name in {"menu", "block", "item"}: + elif registry_name in {"menu", "block", "item", "banner_pattern"}: registry_name += "_kind" return to_camel_case(registry_name) diff --git a/codegen/lib/code/tags.py b/codegen/lib/code/tags.py index b6e225ac..2a44d35c 100644 --- a/codegen/lib/code/tags.py +++ b/codegen/lib/code/tags.py @@ -1,25 +1,45 @@ from lib.code.registry import registry_name_to_enum_name -from lib.utils import identifier_to_namespace, identifier_to_path, to_snake_case, upper_first_letter, get_dir_location, to_camel_case +from lib.utils import ( + identifier_to_namespace, + identifier_to_path, + to_snake_case, + upper_first_letter, + get_dir_location, + to_camel_case, +) TAGS_DIR = get_dir_location("../azalea-registry/src/tags") -def generate_tags(registries: dict, tags: dict, file_name: str, registry_name: str): +def generate_tags( + registries: dict, + tags: dict, + file_name: str, + registry_name: str, + is_data_registry: bool = False, +): struct_name = registry_name_to_enum_name(registry_name) tags_dir = f"{TAGS_DIR}/{file_name}.rs" + registry_module = "data" if is_data_registry else "builtin" + if is_data_registry: + struct_name += "Key" + generated = f"""// This file was @generated by codegen/lib/code/tags.py, don't edit it manually! use std::sync::LazyLock; -use crate::{{builtin::{struct_name}, tags::RegistryTag}}; +use crate::{{{registry_module}::{struct_name}, tags::RegistryTag}}; """ - protocol_ids = {} - for k, v in registries["minecraft:" + registry_name]["entries"].items(): - protocol_ids[identifier_to_path(k)] = v["protocol_id"] + if is_data_registry: + protocol_ids = None + else: + protocol_ids = {} + for k, v in registries[f"minecraft:{registry_name}"]["entries"].items(): + protocol_ids[identifier_to_path(k)] = v["protocol_id"] for tag_name, tag in sorted(tags.items(), key=lambda x: x[0]): entries = [] @@ -41,9 +61,10 @@ use crate::{{builtin::{struct_name}, tags::RegistryTag}}; generated += f"pub static {static_set_name}: LazyLock<RegistryTag<{struct_name}>> = LazyLock::new(|| RegistryTag::new(vec![" - # this is important because we binary search registries in some cases - # and they need to be sorted by their rust Ord order - entries.sort(key=lambda e: protocol_ids[e]) + if not is_data_registry: + # this is important because we binary search registries in some cases + # and they need to be sorted by their rust Ord order + entries.sort(key=lambda e: protocol_ids[e]) for entry_name in entries: generated += ( diff --git a/codegen/lib/code/utils.py b/codegen/lib/code/utils.py index 62b4627b..9bfb3504 100644 --- a/codegen/lib/code/utils.py +++ b/codegen/lib/code/utils.py @@ -1,7 +1,6 @@ # utilities specifically for codegen from lib.utils import to_camel_case, to_snake_case, get_dir_location -from lib.mappings import Mappings from typing import Optional import os @@ -10,8 +9,7 @@ def burger_type_to_rust_type( burger_type, field_name: Optional[str] = None, instruction=None, - mappings: Optional[Mappings] = None, - obfuscated_class_name: Optional[str] = None, + class_name: Optional[str] = None, ): is_var = False uses = set() @@ -90,7 +88,7 @@ def burger_type_to_rust_type( # depends on context field_type_rs = "todo!()" elif burger_type == "enum": - if not instruction or not mappings or not obfuscated_class_name: + if not instruction or not class_name: field_type_rs = 'todo!("enum")' else: # generate the whole enum :) @@ -98,57 +96,20 @@ def burger_type_to_rust_type( enum_field = instruction["field"] # enums with a.b() as the field if "." in enum_field: - enum_first_part_name = mappings.get_field_type( - obfuscated_class_name, enum_field.split(".")[0] - ) - enum_first_part_obfuscated_name = ( - mappings.get_class_from_deobfuscated_name(enum_first_part_name) - ) - print( - "enum_first_part_obfuscated_name", enum_first_part_obfuscated_name - ) + enum_first_part_name = enum_field.split("/")[0] + print("enum_first_part_name", enum_first_part_name) print("enum field", enum_field.split(".")[1].split("(")[0]) - try: - enum_name = mappings.get_method_type( - enum_first_part_obfuscated_name, - enum_field.split(".")[1].split("(")[0], - "", - ) - except KeyError: - # sometimes enums are fields instead of methods - enum_name = mappings.get_field_type( - enum_first_part_obfuscated_name, - enum_field.split(".")[1].split("(")[0], - ) + enum_name = enum_field.split("$")[1].split("(")[0] print("hm", enum_name) else: - try: - enum_name = mappings.get_field_type( - obfuscated_class_name, enum_field - ) - except Exception: - enum_name = mappings.get_class(obfuscated_class_name) - print( - f"failed getting {obfuscated_class_name}.{enum_field} but continuing with {enum_name} anyways" - ) + enum_name = enum_field or class_name print("enum_name", enum_name) - enum_obfuscated_name = mappings.get_class_from_deobfuscated_name(enum_name) + enum_obfuscated_name = enum_name print("enum_obfuscated_name", enum_obfuscated_name) enum_variants = [] - for obfuscated_field_name in mappings.fields[enum_obfuscated_name]: - field_name = mappings.get_field( - enum_obfuscated_name, obfuscated_field_name - ) - - # get the type just to make sure it's actually a variant and not something else - field_type = mappings.get_field_type( - enum_obfuscated_name, obfuscated_field_name - ) - if field_type != enum_name: - continue - - enum_variants.append(field_name) + raise RuntimeError("TODO: extracting enum variants") + enum_variants.append(field_name) field_type_rs = to_camel_case(enum_name.split(".")[-1].split("$")[-1]) extra_code.append("") @@ -165,28 +126,19 @@ def burger_type_to_rust_type( field_type_rs = f"Vec<{field_type_rs}>" # sometimes burger gives us a slightly incorrect type - if mappings and instruction: + if instruction: if field_type_rs == "Vec<u8>": field = instruction["field"] if field.endswith(".copy()"): field = field[:-7] - try: - array_type = mappings.get_field_type(obfuscated_class_name, field) - except KeyError: - print("Error getting array type", field) - return field_type_rs, is_var, uses, extra_code + array_type = field if array_type == "net.minecraft.network.FriendlyByteBuf": field_type_rs = "UnsizedByteArray" uses.add("azalea_buf::UnsizedByteArray") else: print("instruction that we errored on:", instruction) - deobfuscated_class_name = ( - mappings.get_class(obfuscated_class_name) if obfuscated_class_name else None - ) - raise Exception( - f"Unknown field type: {burger_type} ({deobfuscated_class_name or obfuscated_class_name})" - ) + raise Exception(f"Unknown field type: {burger_type} ({class_name})") return field_type_rs, is_var, uses, extra_code diff --git a/codegen/lib/download.py b/codegen/lib/download.py index 8819cf61..43b42aa5 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -1,12 +1,11 @@ -from lib.utils import get_dir_location +from .utils import get_dir_location import xml.etree.ElementTree as ET -from .mappings import Mappings import requests import json import os -PUMPKIN_EXTRACTOR_COMMIT = "82926545925baf5f50414cc9374f1cc340b7de0f" -BURGER_COMMIT = "366d6e4bed0e9e6505d9c40c83628ab80a5fe001" +PUMPKIN_EXTRACTOR_COMMIT = "f3019d598c06f0d6fd4f3568fbf2d5bebae71173q" +BURGER_COMMIT = "bb84700e43bf7090877d9a4eb5d87c3125a8d22e" # make sure the cache directory exists print("Making __cache__") @@ -16,26 +15,26 @@ if not os.path.exists(get_dir_location("__cache__")): def get_burger(): - if not os.path.exists(get_dir_location("__cache__/Burger")): - print("\033[92mDownloading Burger...\033[m") + if not os.path.exists(get_dir_location("__cache__/azalea-burger")): + print("\033[92mDownloading azalea-burger...\033[m") os.system( - f"cd {get_dir_location('__cache__')} && git clone https://github.com/mat-1/Burger && cd Burger && git pull && git reset --hard {BURGER_COMMIT}" + f"cd {get_dir_location('__cache__')} && git clone https://github.com/azalea-rs/azalea-burger && cd azalea-burger && git pull && git reset --hard {BURGER_COMMIT}" ) print("\033[92mInstalling dependencies...\033[m") os.system( - f"cd {get_dir_location('__cache__')}/Burger && python -m venv venv && venv/bin/pip install six jawa" + f"cd {get_dir_location('__cache__')}/azalea-burger && python -m venv venv && venv/bin/pip install six jawa" ) def get_pumpkin_extractor(): - if not os.path.exists(get_dir_location("__cache__/pumpkin-extractor")): - print("\033[92mDownloading Pumpkin-MC/Extractor...\033[m") + if not os.path.exists(get_dir_location("__cache__/azalea-pumpkin-extractor")): + print("\033[92mDownloading mat-1/azalea-pumpkin-extractor...\033[m") os.system( - f"cd {get_dir_location('__cache__')} && git clone https://github.com/Pumpkin-MC/Extractor pumpkin-extractor && cd pumpkin-extractor && git pull && git reset --hard {PUMPKIN_EXTRACTOR_COMMIT}" + f"cd {get_dir_location('__cache__')} && git clone https://github.com/azalea-rs/azalea-pumpkin-extractor && cd azalea-pumpkin-extractor && git pull && git reset --hard {PUMPKIN_EXTRACTOR_COMMIT}" ) - return get_dir_location("__cache__/pumpkin-extractor") + return get_dir_location("__cache__/azalea-pumpkin-extractor") def get_version_manifest(): @@ -94,29 +93,13 @@ def get_server_jar(version_id: str): f.write(requests.get(server_jar_url).content) -def get_mappings_for_version(version_id: str): - if not os.path.exists(get_dir_location(f"__cache__/mappings-{version_id}.txt")): - package_data = get_version_data(version_id) - - client_mappings_url = package_data["downloads"]["client_mappings"]["url"] - - mappings_text = requests.get(client_mappings_url).text - - with open(get_dir_location(f"__cache__/mappings-{version_id}.txt"), "w") as f: - f.write(mappings_text) - else: - with open(get_dir_location(f"__cache__/mappings-{version_id}.txt"), "r") as f: - mappings_text = f.read() - return Mappings.parse(mappings_text) - - def get_fabric_data(version_id: str): # https://meta.fabricmc.net/v2/versions/yarn path = get_dir_location(f"__cache__/fabric-{version_id}.json") if not os.path.exists(path): print(f"\033[92mDownloading Fabric metadata for {version_id}...\033[m") - url = f"https://meta.fabricmc.net/v1/versions/loader/{version_id}" + url = f"https://meta.fabricmc.net/v2/versions/loader/{version_id}" yarn_versions_data = requests.get(url).json() with open(path, "w") as f: json.dump(yarn_versions_data, f) @@ -247,10 +230,10 @@ def clear_version_cache(): if os.path.exists(get_dir_location(f"__cache__/{file}")): os.remove(get_dir_location(f"__cache__/{file}")) - burger_path = get_dir_location("__cache__/Burger") + burger_path = get_dir_location("__cache__/azalea-burger") if os.path.exists(burger_path): os.system(f"cd {burger_path} && git pull && git reset --hard {BURGER_COMMIT}") - pumpkin_path = get_dir_location("__cache__/pumpkin-extractor") + pumpkin_path = get_dir_location("__cache__/azalea-pumpkin-extractor") if os.path.exists(pumpkin_path): os.system( f"cd {pumpkin_path} && git add . && git stash && git checkout master && git pull && git stash pop && git reset --hard {PUMPKIN_EXTRACTOR_COMMIT}" diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index f2f7f4a2..9faa2e22 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -1,18 +1,16 @@ # Extracting data from the Minecraft jars import shutil -from lib.download import ( +from .download import ( get_fabric_api_version, get_latest_fabric_kotlin_version, - get_latest_fabric_loom_version, - get_mappings_for_version, get_pumpkin_extractor, get_server_jar, get_burger, get_client_jar, get_fabric_data, ) -from lib.utils import get_dir_location, to_camel_case, upper_first_letter +from .utils import get_dir_location from zipfile import ZipFile import subprocess import json @@ -43,7 +41,23 @@ def get_packets_report(version_id: str): def get_items_report(version_id: str): - return get_report(version_id, "items") + generate_data_from_server_jar(version_id) + items_dir = get_dir_location( + f"__cache__/generated-{version_id}/reports/minecraft/components/item" + ) + if not os.path.exists(items_dir): + return {} + items = {} + for root, dirs, files in os.walk(items_dir, topdown=False): + for name in files: + file = os.path.join(root, name) + relative_path = file.replace(items_dir, "")[1:] + if not file.endswith(".json"): + continue + with open(file, "r") as f: + items[relative_path[:-5]] = json.load(f) + + return items def get_report(version_id: str, name: str): @@ -143,14 +157,12 @@ def get_burger_data_for_version(version_id: str): if not os.path.exists(get_dir_location(f"__cache__/burger-{version_id}.json")): get_burger() get_client_jar(version_id) - get_mappings_for_version(version_id) - print("\033[92mRunning Burger...\033[m") + print("\033[92mRunning azalea-burger...\033[m") run_python_command_and_download_deps( - f"cd {get_dir_location('__cache__/Burger')} && " + f"cd {get_dir_location('__cache__/azalea-burger')} && " f"venv/bin/python munch.py {get_dir_location('__cache__')}/client-{version_id}.jar " f"--output {get_dir_location('__cache__')}/burger-{version_id}.json " - f"--mappings {get_dir_location('__cache__')}/mappings-{version_id}.txt" ) with open(get_dir_location(f"__cache__/burger-{version_id}.json"), "r") as f: return json.load(f) @@ -183,12 +195,11 @@ def get_pumpkin_data(version_id: str, category: str): fabric_kotlin_version = get_latest_fabric_kotlin_version() gradle_properties = f"""# Done to increase the memory available to gradle. -org.gradle.jvmargs=-Xmx1G +org.gradle.jvmargs=-Xmx2G org.gradle.parallel=true # Fabric Properties -# check these on https://modmuss50.me/fabric.html +# check these on https://fabricmc.net/develop/ minecraft_version={version_id} -yarn_mappings={fabric_data["mappings"]["version"]} loader_version={fabric_data["loader"]["version"]} kotlin_loader_version={fabric_kotlin_version} # Mod Properties @@ -200,24 +211,9 @@ fabric_version={fabric_api_version} with open(f"{pumpkin_dir}/gradle.properties", "w") as f: f.write(gradle_properties) - # update the minecraft version dependency in src/main/resources/fabric.mod.json - fabric_mod_json_path = f"{pumpkin_dir}/src/main/resources/fabric.mod.json" - with open(fabric_mod_json_path, "r") as f: - fabric_mod_json = f.read() - with open(f"{pumpkin_dir}/build.gradle.kts", "r") as f: - build_gradle_kts = f.read() - with open(f"{pumpkin_dir}/build.gradle.kts", "w") as f: - # build_gradle_kts = re.sub( - # r'(id\("fabric-loom"\) version )"[^"]+"', - # rf'\1"{fabric_loom_version}"', - # build_gradle_kts, - # ) - f.write(build_gradle_kts) - # run ./gradlew runServer until it logs "(pumpkin_extractor) Done" p = subprocess.Popen( - # the gradle wrapper (./gradlew) is sometimes on the wrong version so just prefer the system's gradle installation - f"cd {pumpkin_dir} && gradle clean && gradle runServer", + f"cd {pumpkin_dir} && ./gradlew clean && ./gradlew runServer", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, @@ -253,34 +249,3 @@ def get_file_from_jar(version_id: str, file_dir: str): def get_en_us_lang(version_id: str): return json.loads(get_file_from_jar(version_id, "assets/minecraft/lang/en_us.json")) - - -# burger packet id extraction is broken since 1.20.5 (always returns -1, so we have to determine packet id ourselves from the mappings). -# this is very much not ideal. - - -def get_packet_list(version_id: str): - if version_id != "1.21": - return [] - - generate_data_from_server_jar(version_id) - with open( - get_dir_location(f"__cache__/generated-{version_id}/reports/packets.json"), "r" - ) as f: - packets_report = json.load(f) - packet_list = [] - for state, state_value in packets_report.items(): - for direction, direction_value in state_value.items(): - for packet_identifier, packet_value in direction_value.items(): - assert packet_identifier.startswith("minecraft:") - packet_identifier = upper_first_letter( - to_camel_case(packet_identifier[len("minecraft:") :]) - ) - packet_list.append( - { - "state": state, - "direction": direction, - "name": packet_identifier, - "id": packet_value["protocol_id"], - } - ) diff --git a/codegen/lib/mappings.py b/codegen/lib/mappings.py deleted file mode 100644 index 9c39fc2b..00000000 --- a/codegen/lib/mappings.py +++ /dev/null @@ -1,93 +0,0 @@ -from typing import Optional - - -class Mappings: - __slots__ = ('classes', 'fields', 'methods', 'field_types', 'method_types') - - def __init__(self, classes, fields, methods, field_types, method_types): - self.classes = classes - self.fields = fields - self.methods = methods - self.field_types = field_types - self.method_types = method_types - - @staticmethod - def parse(mappings_txt): - classes = {} - fields = {} - methods = {} - field_types = {} - method_types = {} - - current_obfuscated_class_name = None - - for line in mappings_txt.splitlines(): - if line.startswith('#') or line == '': - continue - - if line.startswith(' '): - # if a line starts with 4 spaces, that means it's a method or a field - if '(' in line: - # if it has an opening parenthesis, it's a method - real_name_with_parameters_and_line, obfuscated_name = line.strip().split(' -> ') - real_name_with_parameters = real_name_with_parameters_and_line.split( - ':')[-1] - - real_type, real_name = real_name_with_parameters.split('(')[ - 0].split(' ') - parameters = real_name_with_parameters.split('(')[1].split(')')[ - 0] - - if current_obfuscated_class_name not in methods: - methods[current_obfuscated_class_name] = {} - method_types[current_obfuscated_class_name] = {} - methods[current_obfuscated_class_name][ - f'{obfuscated_name}({parameters})'] = real_name - method_types[current_obfuscated_class_name][ - f'{obfuscated_name}({parameters})'] = real_type - else: - # otherwise, it's a field - real_name_with_type, obfuscated_name = line.strip().split(' -> ') - real_type, real_name = real_name_with_type.split(' ') - - if current_obfuscated_class_name not in fields: - fields[current_obfuscated_class_name] = {} - field_types[current_obfuscated_class_name] = {} - fields[current_obfuscated_class_name][obfuscated_name] = real_name - field_types[current_obfuscated_class_name][obfuscated_name] = real_type - else: - # otherwise it's a class - real_name, obfuscated_name = line.strip(':').split(' -> ') - current_obfuscated_class_name = obfuscated_name - - classes[obfuscated_name] = real_name - - return Mappings(classes, fields, methods, field_types, method_types) - - def get_field(self, obfuscated_class_name, obfuscated_field_name): - return self.fields.get(obfuscated_class_name, {}).get(obfuscated_field_name) - - def get_class(self, obfuscated_class_name): - if '<' in obfuscated_class_name: - first_part, args = obfuscated_class_name.split('<') - args = args.rstrip('>').strip(';').split(';') - print(args) - assert len(args) == 1 - arg = self.get_class(args[0][1:]) - return f'{first_part}<{arg}>' - return self.classes[obfuscated_class_name] - - def get_method(self, obfuscated_class_name, obfuscated_method_name, obfuscated_signature): - return self.methods[obfuscated_class_name][f'{obfuscated_method_name}({obfuscated_signature})'] - - def get_field_type(self, obfuscated_class_name, obfuscated_field_name) -> str: - return self.field_types[obfuscated_class_name][obfuscated_field_name] - - def get_method_type(self, obfuscated_class_name, obfuscated_method_name, obfuscated_signature) -> str: - return self.method_types[obfuscated_class_name][f'{obfuscated_method_name}({obfuscated_signature})'] - - def get_class_from_deobfuscated_name(self, deobfuscated_name) -> Optional[str]: - for obfuscated_name, real_name in self.classes.items(): - if real_name == deobfuscated_name: - return obfuscated_name - return None diff --git a/codegen/migrate.py b/codegen/migrate.py index bf7dde5a..100eaf17 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -24,11 +24,9 @@ if len(sys.argv) == 1: old_version_id = lib.code.version.get_version_id() -old_mappings = lib.download.get_mappings_for_version(old_version_id) old_burger_data = lib.extract.get_burger_data_for_version(old_version_id) new_version_id = sys.argv[1] -new_mappings = lib.download.get_mappings_for_version(new_version_id) new_burger_data = lib.extract.get_burger_data_for_version(new_version_id) new_packets_report = lib.extract.get_packets_report(new_version_id) @@ -63,7 +61,7 @@ genregistries.generate(new_version_id) print("Generating entity data...") burger_entities_data = new_burger_data[0]["entities"] -lib.code.entity.generate_entity_metadata(burger_entities_data, new_mappings) +lib.code.entity.generate_entity_metadata(burger_entities_data) lib.code.entity.generate_entity_dimensions(burger_entities_data) print("Generating item components...") |
