From ffbe7a3e426e66c21c7156780728f96f8277c68a Mon Sep 17 00:00:00 2001 From: mat Date: Tue, 17 Jun 2025 06:49:07 -1200 Subject: [PATCH] 1.21.6 (#215) --- CHANGELOG.md | 3 +- Cargo.lock | 62 +- Cargo.toml | 2 +- README.md | 2 +- azalea-block/src/generated.rs | 13 +- .../src/plugins/packet/config/mod.rs | 9 + azalea-client/src/plugins/packet/game/mod.rs | 11 + azalea-entity/src/dimensions.rs | 1 + azalea-entity/src/metadata.rs | 123 +- azalea-entity/src/mining.rs | 2 +- azalea-language/src/en_us.json | 240 +++- azalea-physics/src/collision/blocks.rs | 1134 +++++++++-------- .../src/packets/config/c_clear_dialog.rs | 5 + .../src/packets/config/c_show_dialog.rs | 9 + azalea-protocol/src/packets/config/mod.rs | 53 +- .../packets/config/s_custom_click_action.rs | 9 + .../src/packets/game/c_clear_dialog.rs | 5 + .../src/packets/game/c_commands.rs | 40 +- .../src/packets/game/c_show_dialog.rs | 9 + .../src/packets/game/c_waypoint.rs | 90 ++ azalea-protocol/src/packets/game/mod.rs | 395 +++--- .../src/packets/game/s_change_game_mode.rs | 8 + .../src/packets/game/s_custom_click_action.rs | 9 + .../src/packets/game/s_player_command.rs | 16 +- azalea-protocol/src/packets/handshake/mod.rs | 2 +- azalea-protocol/src/packets/login/mod.rs | 22 +- azalea-protocol/src/packets/mod.rs | 6 +- azalea-protocol/src/packets/status/mod.rs | 8 +- azalea-registry/src/data.rs | 3 + azalea-registry/src/lib.rs | 106 +- azalea-registry/src/tags/blocks.rs | 86 +- azalea-registry/src/tags/items.rs | 54 +- azalea/benches/pathfinder.rs | 2 +- azalea/examples/testbot/killaura.rs | 6 +- azalea/src/pathfinder/tests.rs | 1 - codegen/lib/code/packet.py | 6 +- codegen/lib/download.py | 37 +- codegen/lib/extract.py | 49 +- codegen/migrate.py | 3 +- 39 files changed, 1684 insertions(+), 957 deletions(-) create mode 100644 azalea-protocol/src/packets/config/c_clear_dialog.rs create mode 100644 azalea-protocol/src/packets/config/c_show_dialog.rs create mode 100644 azalea-protocol/src/packets/config/s_custom_click_action.rs create mode 100644 azalea-protocol/src/packets/game/c_clear_dialog.rs create mode 100644 azalea-protocol/src/packets/game/c_show_dialog.rs create mode 100644 azalea-protocol/src/packets/game/c_waypoint.rs create mode 100644 azalea-protocol/src/packets/game/s_change_game_mode.rs create mode 100644 azalea-protocol/src/packets/game/s_custom_click_action.rs diff --git a/CHANGELOG.md b/CHANGELOG.md index 52a6457d..b0547f05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ is breaking anyways, semantic versioning is not followed. ### Added +- Update to Minecraft 1.21.6. - `HitResult` now contains the entity that's being looked at. ### Changed @@ -20,7 +21,7 @@ is breaking anyways, semantic versioning is not followed. ### Fixed -## [0.13.0] - 2025-06-15 +## [0.13.0+mc1.21.5] - 2025-06-15 ### Added diff --git a/Cargo.lock b/Cargo.lock index 4139c9de..fdaaac3b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,7 +209,7 @@ checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "azalea" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "anyhow", "azalea-auth", @@ -249,7 +249,7 @@ dependencies = [ [[package]] name = "azalea-auth" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-crypto", @@ -269,7 +269,7 @@ dependencies = [ [[package]] name = "azalea-block" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-block-macros", "azalea-buf", @@ -278,7 +278,7 @@ dependencies = [ [[package]] name = "azalea-block-macros" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "proc-macro2", "quote", @@ -287,7 +287,7 @@ dependencies = [ [[package]] name = "azalea-brigadier" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-chat", @@ -298,7 +298,7 @@ dependencies = [ [[package]] name = "azalea-buf" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf-macros", "byteorder", @@ -311,7 +311,7 @@ dependencies = [ [[package]] name = "azalea-buf-macros" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "proc-macro2", "quote", @@ -320,7 +320,7 @@ dependencies = [ [[package]] name = "azalea-chat" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-language", @@ -333,7 +333,7 @@ dependencies = [ [[package]] name = "azalea-client" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "anyhow", "async-compat", @@ -370,7 +370,7 @@ dependencies = [ [[package]] name = "azalea-core" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-chat", @@ -386,7 +386,7 @@ dependencies = [ [[package]] name = "azalea-crypto" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "aes", "azalea-buf", @@ -403,7 +403,7 @@ dependencies = [ [[package]] name = "azalea-entity" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-block", "azalea-buf", @@ -426,7 +426,7 @@ dependencies = [ [[package]] name = "azalea-inventory" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-chat", @@ -441,7 +441,7 @@ dependencies = [ [[package]] name = "azalea-inventory-macros" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "proc-macro2", "quote", @@ -450,7 +450,7 @@ dependencies = [ [[package]] name = "azalea-language" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "compact_str", "serde", @@ -459,7 +459,7 @@ dependencies = [ [[package]] name = "azalea-physics" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-block", "azalea-core", @@ -477,7 +477,7 @@ dependencies = [ [[package]] name = "azalea-protocol" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "anyhow", "async-recursion", @@ -513,7 +513,7 @@ dependencies = [ [[package]] name = "azalea-protocol-macros" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "proc-macro2", "quote", @@ -522,7 +522,7 @@ dependencies = [ [[package]] name = "azalea-registry" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-buf", "azalea-registry-macros", @@ -532,7 +532,7 @@ dependencies = [ [[package]] name = "azalea-registry-macros" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "quote", "syn", @@ -540,7 +540,7 @@ dependencies = [ [[package]] name = "azalea-world" -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" dependencies = [ "azalea-block", "azalea-buf", @@ -1163,9 +1163,9 @@ checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" [[package]] name = "crypto-bigint" -version = "0.7.0-pre.4" +version = "0.7.0-pre.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "edaae5fb9dac79a07260e0b2006799ff4f1d342ab243fd7d0892215113b27904" +checksum = "a06a5e703b883b3744ddac8b7c5eade2d800d6559ef99760566f8103e3ad39bf" dependencies = [ "num-traits", "rand_core 0.9.3", @@ -2045,9 +2045,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.173" +version = "0.2.174" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8cfeafaffdbc32176b64fb251369d52ea9f0a8fbc6f8759edffef7b525d64bb" +checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776" [[package]] name = "libloading" @@ -2617,9 +2617,9 @@ dependencies = [ [[package]] name = "r-efi" -version = "5.2.0" +version = "5.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "74765f6d916ee2faa39bc8e68e4f3ed8949b48cccdac59983d287a7cb71ce9c5" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" [[package]] name = "rand" @@ -2871,9 +2871,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.23.27" +version = "0.23.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "730944ca083c1c233a75c09f199e973ca499344a2b7ba9e755c457e86fb4a321" +checksum = "7160e3e10bf4535308537f3c4e1641468cd0e485175d6163087c0393c7d46643" dependencies = [ "once_cell", "ring", @@ -3444,9 +3444,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.29" +version = "0.1.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b1ffbcf9c6f6b99d386e7444eb608ba646ae452a36b39737deb9663b610f662" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 1fe81420..ea5da33e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,7 +22,7 @@ resolver = "2" # --- Workspace Settings --- [workspace.package] -version = "0.13.0+mc1.21.5" +version = "0.13.0+mc1.21.6" edition = "2024" license = "MIT" repository = "https://github.com/azalea-rs/azalea" diff --git a/README.md b/README.md index 252a8d80..5ac72b45 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A collection of Rust crates for making Minecraft bots, clients, and tools. -_Currently supported Minecraft version: `1.21.5`._ +_Currently supported Minecraft version: `1.21.6`._ > [!WARNING] > Azalea is still unfinished, though most crates are in a useable state. diff --git a/azalea-block/src/generated.rs b/azalea-block/src/generated.rs index 7c26291f..c3ef7510 100644 --- a/azalea-block/src/generated.rs +++ b/azalea-block/src/generated.rs @@ -2,7 +2,7 @@ use std::fmt::Debug; use azalea_block_macros::make_block_states; -use crate::{BlockTrait, BlockBehavior, BlockState, BlockStates, Property}; +use crate::{BlockBehavior, BlockState, BlockStates, BlockTrait, Property}; make_block_states! { Properties => { @@ -1561,6 +1561,12 @@ make_block_states! { _1, _2, }, + "hydration" => DriedGhastHydration { + _0, + _1, + _2, + _3, + }, "pickles" => SeaPicklePickles { _1, _2, @@ -4214,6 +4220,11 @@ make_block_states! { sniffer_egg => BlockBehavior::new().strength(0.5, 0.5), { "hatch": SnifferEggHatch::_0, }, + dried_ghast => BlockBehavior::new().force_solid(true), { + "facing": FacingCardinal::North, + "hydration": DriedGhastHydration::_0, + "waterlogged": Waterlogged(false), + }, dead_tube_coral_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0).force_solid(true), {}, dead_brain_coral_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0).force_solid(true), {}, dead_bubble_coral_block => BlockBehavior::new().requires_correct_tool_for_drops().strength(1.5, 6.0).force_solid(true), {}, diff --git a/azalea-client/src/plugins/packet/config/mod.rs b/azalea-client/src/plugins/packet/config/mod.rs index afe02159..3116e245 100644 --- a/azalea-client/src/plugins/packet/config/mod.rs +++ b/azalea-client/src/plugins/packet/config/mod.rs @@ -56,6 +56,8 @@ pub fn process_packet(ecs: &mut World, player: Entity, packet: &ClientboundConfi select_known_packs, custom_report_details, server_links, + clear_dialog, + show_dialog, ] ); } @@ -220,4 +222,11 @@ impl ConfigPacketHandler<'_> { pub fn custom_report_details(&mut self, p: &ClientboundCustomReportDetails) { debug!("Got custom report details packet {p:?}"); } + + pub fn clear_dialog(&mut self, p: &ClientboundClearDialog) { + debug!("Got clear dialog packet {p:?}"); + } + pub fn show_dialog(&mut self, p: &ClientboundShowDialog) { + debug!("Got show dialog packet {p:?}"); + } } diff --git a/azalea-client/src/plugins/packet/game/mod.rs b/azalea-client/src/plugins/packet/game/mod.rs index de226e49..1ea4db10 100644 --- a/azalea-client/src/plugins/packet/game/mod.rs +++ b/azalea-client/src/plugins/packet/game/mod.rs @@ -176,6 +176,9 @@ pub fn process_packet(ecs: &mut World, player: Entity, packet: &ClientboundGameP recipe_book_remove, recipe_book_settings, test_instance_block_status, + waypoint, + clear_dialog, + show_dialog, ] ); } @@ -1584,4 +1587,12 @@ impl GamePacketHandler<'_> { pub fn recipe_book_remove(&mut self, _p: &ClientboundRecipeBookRemove) {} pub fn recipe_book_settings(&mut self, _p: &ClientboundRecipeBookSettings) {} pub fn test_instance_block_status(&mut self, _p: &ClientboundTestInstanceBlockStatus) {} + pub fn waypoint(&mut self, _p: &ClientboundWaypoint) {} + + pub fn clear_dialog(&mut self, p: &ClientboundClearDialog) { + debug!("Got clear dialog packet {p:?}"); + } + pub fn show_dialog(&mut self, p: &ClientboundShowDialog) { + debug!("Got show dialog packet {p:?}"); + } } diff --git a/azalea-entity/src/dimensions.rs b/azalea-entity/src/dimensions.rs index 8770fa94..68e9903d 100644 --- a/azalea-entity/src/dimensions.rs +++ b/azalea-entity/src/dimensions.rs @@ -89,6 +89,7 @@ impl From for EntityDimensions { EntityKind::GlowSquid => EntityDimensions::new(0.8, 0.8), EntityKind::Goat => EntityDimensions::new(0.9, 1.3), EntityKind::Guardian => EntityDimensions::new(0.85, 0.85), + EntityKind::HappyGhast => EntityDimensions::new(4.0, 4.0), EntityKind::Hoglin => EntityDimensions::new(1.39648, 1.4), EntityKind::HopperMinecart => EntityDimensions::new(0.98, 0.7), EntityKind::Horse => EntityDimensions::new(1.39648, 1.6), diff --git a/azalea-entity/src/metadata.rs b/azalea-entity/src/metadata.rs index 1397e624..c20233cc 100644 --- a/azalea-entity/src/metadata.rs +++ b/azalea-entity/src/metadata.rs @@ -4235,6 +4235,8 @@ impl Default for GiantMetadataBundle { } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct ItemFrameDirection(pub Direction); #[derive(Component, Deref, DerefMut, Clone)] pub struct ItemFrameItem(pub ItemStack); #[derive(Component, Deref, DerefMut, Clone)] @@ -4247,7 +4249,7 @@ impl GlowItemFrame { d: EntityDataItem, ) -> Result<(), UpdateMetadataError> { match d.index { - 0..=9 => ItemFrame::apply_metadata(entity, d)?, + 0..=10 => ItemFrame::apply_metadata(entity, d)?, _ => {} } Ok(()) @@ -4282,7 +4284,8 @@ impl Default for GlowItemFrameMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, - item_frame_item: ItemFrameItem(ItemStack::Empty), + item_frame_direction: ItemFrameDirection(Default::default()), + item_frame_item: ItemFrameItem(Default::default()), rotation: Rotation(0), }, } @@ -4539,6 +4542,92 @@ impl Default for GuardianMetadataBundle { } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct IsLeashHolder(pub bool); +#[derive(Component, Deref, DerefMut, Clone)] +pub struct StaysStill(pub bool); +#[derive(Component)] +pub struct HappyGhast; +impl HappyGhast { + pub fn apply_metadata( + entity: &mut bevy_ecs::system::EntityCommands, + d: EntityDataItem, + ) -> Result<(), UpdateMetadataError> { + match d.index { + 0..=16 => AbstractAnimal::apply_metadata(entity, d)?, + 17 => { + entity.insert(IsLeashHolder(d.value.into_boolean()?)); + } + 18 => { + entity.insert(StaysStill(d.value.into_boolean()?)); + } + _ => {} + } + Ok(()) + } +} + +#[derive(Bundle)] +pub struct HappyGhastMetadataBundle { + _marker: HappyGhast, + parent: AbstractAnimalMetadataBundle, + is_leash_holder: IsLeashHolder, + stays_still: StaysStill, +} +impl Default for HappyGhastMetadataBundle { + fn default() -> Self { + Self { + _marker: HappyGhast, + parent: AbstractAnimalMetadataBundle { + _marker: AbstractAnimal, + parent: AbstractAgeableMetadataBundle { + _marker: AbstractAgeable, + parent: AbstractCreatureMetadataBundle { + _marker: AbstractCreature, + parent: AbstractInsentientMetadataBundle { + _marker: AbstractInsentient, + parent: AbstractLivingMetadataBundle { + _marker: AbstractLiving, + parent: AbstractEntityMetadataBundle { + _marker: AbstractEntity, + on_fire: OnFire(false), + shift_key_down: ShiftKeyDown(false), + sprinting: Sprinting(false), + swimming: Swimming(false), + currently_glowing: CurrentlyGlowing(false), + invisible: Invisible(false), + fall_flying: FallFlying(false), + air_supply: AirSupply(Default::default()), + custom_name: CustomName(Default::default()), + custom_name_visible: CustomNameVisible(Default::default()), + silent: Silent(Default::default()), + no_gravity: NoGravity(Default::default()), + pose: Pose::default(), + ticks_frozen: TicksFrozen(Default::default()), + }, + auto_spin_attack: AutoSpinAttack(false), + abstract_living_using_item: AbstractLivingUsingItem(false), + health: Health(1.0), + effect_particles: EffectParticles(Default::default()), + effect_ambience: EffectAmbience(false), + arrow_count: ArrowCount(0), + stinger_count: StingerCount(0), + sleeping_pos: SleepingPos(None), + }, + no_ai: NoAi(false), + left_handed: LeftHanded(false), + aggressive: Aggressive(false), + }, + }, + abstract_ageable_baby: AbstractAgeableBaby(false), + }, + }, + is_leash_holder: IsLeashHolder(false), + stays_still: StaysStill(false), + } + } +} + #[derive(Component, Deref, DerefMut, Clone)] pub struct HoglinImmuneToZombification(pub bool); #[derive(Component)] @@ -5096,7 +5185,7 @@ impl Default for ItemMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, - item_item: ItemItem(ItemStack::Empty), + item_item: ItemItem(Default::default()), } } } @@ -5191,7 +5280,7 @@ impl Default for ItemDisplayMetadataBundle { abstract_display_height: AbstractDisplayHeight(0.0), glow_color_override: GlowColorOverride(-1), }, - item_display_item_stack: ItemDisplayItemStack(ItemStack::Empty), + item_display_item_stack: ItemDisplayItemStack(Default::default()), item_display_item_display: ItemDisplayItemDisplay(Default::default()), } } @@ -5207,9 +5296,12 @@ impl ItemFrame { match d.index { 0..=7 => AbstractEntity::apply_metadata(entity, d)?, 8 => { - entity.insert(ItemFrameItem(d.value.into_item_stack()?)); + entity.insert(ItemFrameDirection(d.value.into_direction()?)); } 9 => { + entity.insert(ItemFrameItem(d.value.into_item_stack()?)); + } + 10 => { entity.insert(Rotation(d.value.into_int()?)); } _ => {} @@ -5222,6 +5314,7 @@ impl ItemFrame { pub struct ItemFrameMetadataBundle { _marker: ItemFrame, parent: AbstractEntityMetadataBundle, + item_frame_direction: ItemFrameDirection, item_frame_item: ItemFrameItem, rotation: Rotation, } @@ -5246,7 +5339,8 @@ impl Default for ItemFrameMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, - item_frame_item: ItemFrameItem(ItemStack::Empty), + item_frame_direction: ItemFrameDirection(Default::default()), + item_frame_item: ItemFrameItem(Default::default()), rotation: Rotation(0), } } @@ -6338,11 +6432,13 @@ impl Default for OminousItemSpawnerMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, - ominous_item_spawner_item: OminousItemSpawnerItem(ItemStack::Empty), + ominous_item_spawner_item: OminousItemSpawnerItem(Default::default()), } } } +#[derive(Component, Deref, DerefMut, Clone)] +pub struct PaintingDirection(pub Direction); #[derive(Component, Deref, DerefMut, Clone)] pub struct PaintingVariant(pub azalea_registry::PaintingVariant); #[derive(Component)] @@ -6355,6 +6451,9 @@ impl Painting { match d.index { 0..=7 => AbstractEntity::apply_metadata(entity, d)?, 8 => { + entity.insert(PaintingDirection(d.value.into_direction()?)); + } + 9 => { entity.insert(PaintingVariant(d.value.into_painting_variant()?)); } _ => {} @@ -6367,6 +6466,7 @@ impl Painting { pub struct PaintingMetadataBundle { _marker: Painting, parent: AbstractEntityMetadataBundle, + painting_direction: PaintingDirection, painting_variant: PaintingVariant, } impl Default for PaintingMetadataBundle { @@ -6390,6 +6490,7 @@ impl Default for PaintingMetadataBundle { pose: Pose::default(), ticks_frozen: TicksFrozen(Default::default()), }, + painting_direction: PaintingDirection(Default::default()), painting_variant: PaintingVariant(azalea_registry::PaintingVariant::new_raw(0)), } } @@ -12690,6 +12791,11 @@ pub fn apply_metadata( Guardian::apply_metadata(entity, d)?; } } + azalea_registry::EntityKind::HappyGhast => { + for d in items { + HappyGhast::apply_metadata(entity, d)?; + } + } azalea_registry::EntityKind::Hoglin => { for d in items { Hoglin::apply_metadata(entity, d)?; @@ -13325,6 +13431,9 @@ pub fn apply_default_metadata( azalea_registry::EntityKind::Guardian => { entity.insert(GuardianMetadataBundle::default()); } + azalea_registry::EntityKind::HappyGhast => { + entity.insert(HappyGhastMetadataBundle::default()); + } azalea_registry::EntityKind::Hoglin => { entity.insert(HoglinMetadataBundle::default()); } diff --git a/azalea-entity/src/mining.rs b/azalea-entity/src/mining.rs index fbe7f525..8b572935 100644 --- a/azalea-entity/src/mining.rs +++ b/azalea-entity/src/mining.rs @@ -1,4 +1,4 @@ -use azalea_block::{BlockTrait, BlockBehavior}; +use azalea_block::{BlockBehavior, BlockTrait}; use azalea_core::tier::get_item_tier; use azalea_registry as registry; diff --git a/azalea-language/src/en_us.json b/azalea-language/src/en_us.json index f79b3c7f..32f997bf 100644 --- a/azalea-language/src/en_us.json +++ b/azalea-language/src/en_us.json @@ -29,6 +29,8 @@ "advancements.adventure.crafters_crafting_crafters.title": "Crafters Crafting Crafters", "advancements.adventure.fall_from_world_height.description": "Free fall from the top of the world (build limit) to the bottom of the world and survive", "advancements.adventure.fall_from_world_height.title": "Caves & Cliffs", + "advancements.adventure.heart_transplanter.description": "Place a Creaking Heart with the correct alignment between two Pale Oak Log blocks", + "advancements.adventure.heart_transplanter.title": "Heart Transplanter", "advancements.adventure.hero_of_the_village.description": "Successfully defend a village from a raid", "advancements.adventure.hero_of_the_village.title": "Hero of the Village", "advancements.adventure.honey_block_slide.description": "Jump into a Honey Block to break your fall", @@ -150,6 +152,8 @@ "advancements.husbandry.netherite_hoe.title": "Serious Dedication", "advancements.husbandry.obtain_sniffer_egg.description": "Obtain a Sniffer Egg", "advancements.husbandry.obtain_sniffer_egg.title": "Smells Interesting", + "advancements.husbandry.place_dried_ghast_in_water.description": "Place a Dried Ghast block into water", + "advancements.husbandry.place_dried_ghast_in_water.title": "Stay Hydrated!", "advancements.husbandry.plant_any_sniffer_seed.description": "Plant any Sniffer seed", "advancements.husbandry.plant_any_sniffer_seed.title": "Planting the Past", "advancements.husbandry.plant_seed.description": "Plant a seed and watch it grow", @@ -344,6 +348,7 @@ "argument.float.big": "Float must not be more than %s, found %s", "argument.float.low": "Float must not be less than %s, found %s", "argument.gamemode.invalid": "Unknown game mode: %s", + "argument.hexcolor.invalid": "Invalid hex color code '%s'", "argument.id.invalid": "Invalid ID", "argument.id.unknown": "Unknown ID: %s", "argument.integer.big": "Integer must not be more than %s, found %s", @@ -377,6 +382,7 @@ "argument.range.swapped": "Min cannot be bigger than max", "argument.resource_or_id.failed_to_parse": "Failed to parse structure: %s", "argument.resource_or_id.invalid": "Invalid id or tag", + "argument.resource_or_id.no_such_element": "Can't find element '%s' in registry '%s'", "argument.resource_selector.not_found": "No matches for selector '%s' of type '%s'", "argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')", "argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'", @@ -390,6 +396,7 @@ "argument.time.invalid_unit": "Invalid unit", "argument.time.tick_count_too_low": "The tick count must not be less than %s, found %s", "argument.uuid.invalid": "Invalid UUID", + "argument.waypoint.invalid": "Selected entity is not a waypoint", "arguments.block.tag.unknown": "Unknown block tag '%s'", "arguments.function.tag.unknown": "Unknown function tag '%s'", "arguments.function.unknown": "Unknown function %s", @@ -428,6 +435,7 @@ "attribute.name.block_break_speed": "Block Break Speed", "attribute.name.block_interaction_range": "Block Interaction Range", "attribute.name.burning_time": "Burning Time", + "attribute.name.camera_distance": "Camera Distance", "attribute.name.entity_interaction_range": "Entity Interaction Range", "attribute.name.explosion_knockback_resistance": "Explosion Knockback Resistance", "attribute.name.fall_damage_multiplier": "Fall Damage Multiplier", @@ -485,6 +493,8 @@ "attribute.name.sweeping_damage_ratio": "Sweeping Damage Ratio", "attribute.name.tempt_range": "Mob Tempt Range", "attribute.name.water_movement_efficiency": "Water Movement Efficiency", + "attribute.name.waypoint_receive_range": "Waypoint Receive Range", + "attribute.name.waypoint_transmit_range": "Waypoint Transmit Range", "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", "biome.minecraft.badlands": "Badlands", "biome.minecraft.bamboo_jungle": "Bamboo Jungle", @@ -1592,6 +1602,7 @@ "block.minecraft.dragon_egg": "Dragon Egg", "block.minecraft.dragon_head": "Dragon Head", "block.minecraft.dragon_wall_head": "Dragon Wall Head", + "block.minecraft.dried_ghast": "Dried Ghast", "block.minecraft.dried_kelp_block": "Dried Kelp Block", "block.minecraft.dripstone_block": "Dripstone Block", "block.minecraft.dropper": "Dropper", @@ -2343,6 +2354,7 @@ "block.minecraft.zombie_head": "Zombie Head", "block.minecraft.zombie_wall_head": "Zombie Wall Head", "book.byAuthor": "by %1$s", + "book.edit.title": "Book Edit Screen", "book.editTitle": "Enter Book Title:", "book.finalizeButton": "Sign and Close", "book.finalizeWarning": "Note! When you sign the book, it will no longer be editable.", @@ -2351,8 +2363,13 @@ "book.generation.2": "Copy of a copy", "book.generation.3": "Tattered", "book.invalid.tag": "* Invalid book tag *", + "book.page_button.next": "Next Page", + "book.page_button.previous": "Previous Page", "book.pageIndicator": "Page %1$s of %2$s", + "book.sign.title": "Book Sign Screen", + "book.sign.titlebox": "Title", "book.signButton": "Sign", + "book.view.title": "Book View Screen", "build.tooHigh": "Height limit for building is %s", "chat_screen.message": "Message to send: %s", "chat_screen.title": "Chat screen", @@ -2535,6 +2552,12 @@ "commands.data.storage.get": "%s in storage %s after scale factor of %s is %s", "commands.data.storage.modified": "Modified storage %s", "commands.data.storage.query": "Storage %s has the following contents: %s", + "commands.datapack.create.already_exists": "Pack with name '%s' already exists", + "commands.datapack.create.invalid_full_name": "Invalid new pack name '%s'", + "commands.datapack.create.invalid_name": "Invalid characters in new pack name '%s'", + "commands.datapack.create.io_failure": "Can't create pack with name '%s', check logs", + "commands.datapack.create.metadata_encode_failure": "Failed to encode metadata for pack with name '%s': %s", + "commands.datapack.create.success": "Created new empty pack with name '%s'", "commands.datapack.disable.failed": "Pack '%s' is not enabled!", "commands.datapack.disable.failed.feature": "Pack '%s' cannot be disabled, since it is part of an enabled flag!", "commands.datapack.enable.failed": "Pack '%s' is already enabled!", @@ -2558,6 +2581,10 @@ "commands.defaultgamemode.success": "The default game mode is now %s", "commands.deop.failed": "Nothing changed. The player is not an operator", "commands.deop.success": "Made %s no longer a server operator", + "commands.dialog.clear.multiple": "Cleared dialog for %s players", + "commands.dialog.clear.single": "Cleared dialog for %s", + "commands.dialog.show.multiple": "Displayed dialog to %s players", + "commands.dialog.show.single": "Displayed dialog to %s", "commands.difficulty.failure": "The difficulty did not change; it is already set to %s", "commands.difficulty.query": "The difficulty is %s", "commands.difficulty.success": "The difficulty has been set to %s", @@ -2925,6 +2952,22 @@ "commands.trigger.failed.unprimed": "You cannot trigger this objective yet", "commands.trigger.set.success": "Triggered %s (set value to %s)", "commands.trigger.simple.success": "Triggered %s", + "commands.version.build_time": "build_time = %s", + "commands.version.data": "data = %s", + "commands.version.header": "Server version info:", + "commands.version.id": "id = %s", + "commands.version.name": "name = %s", + "commands.version.pack.data": "pack_data = %s", + "commands.version.pack.resource": "pack_resource = %s", + "commands.version.protocol": "protocol = %s (%s)", + "commands.version.series": "series = %s", + "commands.version.stable.no": "stable = no", + "commands.version.stable.yes": "stable = yes", + "commands.waypoint.list.empty": "No waypoints in %s", + "commands.waypoint.list.success": "%s waypoint(s) in %s: %s", + "commands.waypoint.modify.color": "Waypoint color is now %s", + "commands.waypoint.modify.color.reset": "Reset waypoint color", + "commands.waypoint.modify.style": "Waypoint style changed", "commands.weather.set.clear": "Set the weather to clear", "commands.weather.set.rain": "Set the weather to rain", "commands.weather.set.thunder": "Set the weather to rain & thunder", @@ -3043,6 +3086,8 @@ "credits_and_attribution.screen.title": "Credits and Attribution", "dataPack.bundle.description": "Enables experimental Bundle item", "dataPack.bundle.name": "Bundles", + "dataPack.locator_bar.description": "Show the direction of other players in multiplayer", + "dataPack.locator_bar.name": "Locator Bar", "dataPack.minecart_improvements.description": "Improved movement for Minecarts", "dataPack.minecart_improvements.name": "Minecart Improvements", "dataPack.redstone_experiments.description": "Experimental Redstone changes", @@ -3216,6 +3261,8 @@ "debug.show_hitboxes.help": "F3 + B = Show hitboxes", "debug.show_hitboxes.off": "Hitboxes: hidden", "debug.show_hitboxes.on": "Hitboxes: shown", + "debug.version.header": "Client version info:", + "debug.version.help": "F3 + V = Client version info", "demo.day.1": "This demo will last five game days. Do your best!", "demo.day.2": "Day Two", "demo.day.3": "Day Three", @@ -3418,6 +3465,7 @@ "entity.minecraft.glow_squid": "Glow Squid", "entity.minecraft.goat": "Goat", "entity.minecraft.guardian": "Guardian", + "entity.minecraft.happy_ghast": "Happy Ghast", "entity.minecraft.hoglin": "Hoglin", "entity.minecraft.hopper_minecart": "Minecart with Hopper", "entity.minecraft.horse": "Horse", @@ -3649,6 +3697,8 @@ "gamerule.keepInventory": "Keep inventory after death", "gamerule.lavaSourceConversion": "Lava converts to source", "gamerule.lavaSourceConversion.description": "When flowing lava is surrounded on two sides by lava sources it converts into a source.", + "gamerule.locatorBar": "Enable player Locator Bar", + "gamerule.locatorBar.description": "When enabled, a bar is shown on the screen to indicate the direction of players.", "gamerule.logAdminCommands": "Broadcast admin commands", "gamerule.maxCommandChainLength": "Command chain size limit", "gamerule.maxCommandChainLength.description": "Applies to command block chains and functions.", @@ -3836,6 +3886,7 @@ "gui.done": "Done", "gui.down": "Down", "gui.entity_tooltip.type": "Type: %s", + "gui.experience.level": "%s", "gui.fileDropFailure.detail": "Rejected %s files", "gui.fileDropFailure.title": "Failed to add files", "gui.hours": "%s hour(s)", @@ -3897,6 +3948,8 @@ "gui.toTitle": "Back to Title Screen", "gui.toWorld": "Back to World List", "gui.up": "Up", + "gui.waitingForResponse.button.inactive": "Back (%ss)", + "gui.waitingForResponse.title": "Waiting for Server", "gui.yes": "Yes", "hanging_sign.edit": "Edit Hanging Sign Message", "instrument.minecraft.admire_goat_horn": "Admire", @@ -3949,6 +4002,7 @@ "item.minecraft.birch_chest_boat": "Birch Boat with Chest", "item.minecraft.black_bundle": "Black Bundle", "item.minecraft.black_dye": "Black Dye", + "item.minecraft.black_harness": "Black Harness", "item.minecraft.blade_pottery_shard": "Blade Pottery Shard", "item.minecraft.blade_pottery_sherd": "Blade Pottery Sherd", "item.minecraft.blaze_powder": "Blaze Powder", @@ -3957,6 +4011,7 @@ "item.minecraft.blue_bundle": "Blue Bundle", "item.minecraft.blue_dye": "Blue Dye", "item.minecraft.blue_egg": "Blue Egg", + "item.minecraft.blue_harness": "Blue Harness", "item.minecraft.bogged_spawn_egg": "Bogged Spawn Egg", "item.minecraft.bolt_armor_trim_smithing_template": "Smithing Template", "item.minecraft.bolt_armor_trim_smithing_template.new": "Bolt Armor Trim", @@ -3976,6 +4031,7 @@ "item.minecraft.brown_bundle": "Brown Bundle", "item.minecraft.brown_dye": "Brown Dye", "item.minecraft.brown_egg": "Brown Egg", + "item.minecraft.brown_harness": "Brown Harness", "item.minecraft.brush": "Brush", "item.minecraft.bucket": "Bucket", "item.minecraft.bundle": "Bundle", @@ -4034,6 +4090,7 @@ "item.minecraft.crossbow.projectile.single": "Projectile: %s", "item.minecraft.cyan_bundle": "Cyan Bundle", "item.minecraft.cyan_dye": "Cyan Dye", + "item.minecraft.cyan_harness": "Cyan Harness", "item.minecraft.danger_pottery_shard": "Danger Pottery Shard", "item.minecraft.danger_pottery_sherd": "Danger Pottery Sherd", "item.minecraft.dark_oak_boat": "Dark Oak Boat", @@ -4165,14 +4222,18 @@ "item.minecraft.golden_sword": "Golden Sword", "item.minecraft.gray_bundle": "Gray Bundle", "item.minecraft.gray_dye": "Gray Dye", + "item.minecraft.gray_harness": "Gray Harness", "item.minecraft.green_bundle": "Green Bundle", "item.minecraft.green_dye": "Green Dye", + "item.minecraft.green_harness": "Green Harness", "item.minecraft.guardian_spawn_egg": "Guardian Spawn Egg", "item.minecraft.gunpowder": "Gunpowder", "item.minecraft.guster_banner_pattern": "Banner Pattern", "item.minecraft.guster_banner_pattern.desc": "Guster", "item.minecraft.guster_banner_pattern.new": "Guster Banner Pattern", "item.minecraft.guster_pottery_sherd": "Guster Pottery Sherd", + "item.minecraft.happy_ghast_spawn_egg": "Happy Ghast Spawn Egg", + "item.minecraft.harness": "Harness", "item.minecraft.heart_of_the_sea": "Heart of the Sea", "item.minecraft.heart_pottery_shard": "Heart Pottery Shard", "item.minecraft.heart_pottery_sherd": "Heart Pottery Sherd", @@ -4217,10 +4278,13 @@ "item.minecraft.leather_leggings": "Leather Pants", "item.minecraft.light_blue_bundle": "Light Blue Bundle", "item.minecraft.light_blue_dye": "Light Blue Dye", + "item.minecraft.light_blue_harness": "Light Blue Harness", "item.minecraft.light_gray_bundle": "Light Gray Bundle", "item.minecraft.light_gray_dye": "Light Gray Dye", + "item.minecraft.light_gray_harness": "Light Gray Harness", "item.minecraft.lime_bundle": "Lime Bundle", "item.minecraft.lime_dye": "Lime Dye", + "item.minecraft.lime_harness": "Lime Harness", "item.minecraft.lingering_potion": "Lingering Potion", "item.minecraft.lingering_potion.effect.awkward": "Awkward Lingering Potion", "item.minecraft.lingering_potion.effect.empty": "Lingering Uncraftable Potion", @@ -4253,6 +4317,7 @@ "item.minecraft.mace": "Mace", "item.minecraft.magenta_bundle": "Magenta Bundle", "item.minecraft.magenta_dye": "Magenta Dye", + "item.minecraft.magenta_harness": "Magenta Harness", "item.minecraft.magma_cream": "Magma Cream", "item.minecraft.magma_cube_spawn_egg": "Magma Cube Spawn Egg", "item.minecraft.mangrove_boat": "Mangrove Boat", @@ -4306,6 +4371,8 @@ "item.minecraft.music_disc_stal.desc": "C418 - stal", "item.minecraft.music_disc_strad": "Music Disc", "item.minecraft.music_disc_strad.desc": "C418 - strad", + "item.minecraft.music_disc_tears": "Music Disc", + "item.minecraft.music_disc_tears.desc": "Amos Roddy - Tears", "item.minecraft.music_disc_wait": "Music Disc", "item.minecraft.music_disc_wait.desc": "C418 - wait", "item.minecraft.music_disc_ward": "Music Disc", @@ -4336,6 +4403,7 @@ "item.minecraft.ominous_trial_key": "Ominous Trial Key", "item.minecraft.orange_bundle": "Orange Bundle", "item.minecraft.orange_dye": "Orange Dye", + "item.minecraft.orange_harness": "Orange Harness", "item.minecraft.painting": "Painting", "item.minecraft.pale_oak_boat": "Pale Oak Boat", "item.minecraft.pale_oak_chest_boat": "Pale Oak Boat with Chest", @@ -4353,6 +4421,7 @@ "item.minecraft.pillager_spawn_egg": "Pillager Spawn Egg", "item.minecraft.pink_bundle": "Pink Bundle", "item.minecraft.pink_dye": "Pink Dye", + "item.minecraft.pink_harness": "Pink Harness", "item.minecraft.pitcher_plant": "Pitcher Plant", "item.minecraft.pitcher_pod": "Pitcher Pod", "item.minecraft.plenty_pottery_shard": "Plenty Pottery Shard", @@ -4405,6 +4474,7 @@ "item.minecraft.pumpkin_seeds": "Pumpkin Seeds", "item.minecraft.purple_bundle": "Purple Bundle", "item.minecraft.purple_dye": "Purple Dye", + "item.minecraft.purple_harness": "Purple Harness", "item.minecraft.quartz": "Nether Quartz", "item.minecraft.rabbit": "Raw Rabbit", "item.minecraft.rabbit_foot": "Rabbit's Foot", @@ -4420,6 +4490,7 @@ "item.minecraft.recovery_compass": "Recovery Compass", "item.minecraft.red_bundle": "Red Bundle", "item.minecraft.red_dye": "Red Dye", + "item.minecraft.red_harness": "Red Harness", "item.minecraft.redstone": "Redstone Dust", "item.minecraft.resin_brick": "Resin Brick", "item.minecraft.resin_clump": "Resin Clump", @@ -4601,6 +4672,7 @@ "item.minecraft.wheat_seeds": "Wheat Seeds", "item.minecraft.white_bundle": "White Bundle", "item.minecraft.white_dye": "White Dye", + "item.minecraft.white_harness": "White Harness", "item.minecraft.wild_armor_trim_smithing_template": "Smithing Template", "item.minecraft.wild_armor_trim_smithing_template.new": "Wild Armor Trim", "item.minecraft.wind_charge": "Wind Charge", @@ -4618,6 +4690,7 @@ "item.minecraft.written_book": "Written Book", "item.minecraft.yellow_bundle": "Yellow Bundle", "item.minecraft.yellow_dye": "Yellow Dye", + "item.minecraft.yellow_harness": "Yellow Harness", "item.minecraft.zoglin_spawn_egg": "Zoglin Spawn Egg", "item.minecraft.zombie_horse_spawn_egg": "Zombie Horse Spawn Egg", "item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg", @@ -4686,6 +4759,7 @@ "jukebox_song.minecraft.relic": "Aaron Cherof - Relic", "jukebox_song.minecraft.stal": "C418 - stal", "jukebox_song.minecraft.strad": "C418 - strad", + "jukebox_song.minecraft.tears": "Amos Roddy - Tears", "jukebox_song.minecraft.wait": "C418 - wait", "jukebox_song.minecraft.ward": "C418 - ward", "key.advancements": "Advancements", @@ -4807,6 +4881,7 @@ "key.mouse.right": "Right Button", "key.pickItem": "Pick Block", "key.playerlist": "List Players", + "key.quickActions": "Quick Actions", "key.right": "Strafe Right", "key.saveToolbarActivator": "Save Hotbar Activator", "key.screenshot": "Take Screenshot", @@ -4903,22 +4978,26 @@ "mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled", "mco.configure.world.backup": "World Backups", "mco.configure.world.buttons.activity": "Player activity", - "mco.configure.world.buttons.close": "Close Realm", + "mco.configure.world.buttons.close": "Temporarily Close Realm", "mco.configure.world.buttons.delete": "Delete", "mco.configure.world.buttons.done": "Done", "mco.configure.world.buttons.edit": "Settings", "mco.configure.world.buttons.invite": "Invite Player", "mco.configure.world.buttons.moreoptions": "More options", - "mco.configure.world.buttons.open": "Open Realm", + "mco.configure.world.buttons.newworld": "New World", + "mco.configure.world.buttons.open": "Reopen Realm", "mco.configure.world.buttons.options": "World Options", "mco.configure.world.buttons.players": "Players", + "mco.configure.world.buttons.region_preference": "Select Region...", "mco.configure.world.buttons.resetworld": "Reset World", + "mco.configure.world.buttons.save": "Save", "mco.configure.world.buttons.settings": "Settings", "mco.configure.world.buttons.subscription": "Subscription", "mco.configure.world.buttons.switchminigame": "Switch Minigame", - "mco.configure.world.close.question.line1": "Your Realm will become unavailable.", + "mco.configure.world.close.question.line1": "You can temporarily close your Realm, preventing play while you make adjustments. Open it back up when you're ready. \n\nThis does not cancel your Realms Subscription.", "mco.configure.world.close.question.line2": "Are you sure you want to continue?", - "mco.configure.world.closing": "Closing the Realm...", + "mco.configure.world.close.question.title": "Need to make changes without disruption?", + "mco.configure.world.closing": "Temporarily closing the Realm...", "mco.configure.world.commandBlocks": "Command Blocks", "mco.configure.world.delete.button": "Delete Realm", "mco.configure.world.delete.question.line1": "Your Realm will be permanently deleted", @@ -4938,6 +5017,7 @@ "mco.configure.world.invites.remove.tooltip": "Remove", "mco.configure.world.leave.question.line1": "If you leave this Realm you won't see it unless you are invited again", "mco.configure.world.leave.question.line2": "Are you sure you want to continue?", + "mco.configure.world.loading": "Loading Realm", "mco.configure.world.location": "Location", "mco.configure.world.minigame": "Current: %s", "mco.configure.world.name": "Realm Name", @@ -4946,6 +5026,8 @@ "mco.configure.world.players.inviting": "Inviting player...", "mco.configure.world.players.title": "Players", "mco.configure.world.pvp": "PVP", + "mco.configure.world.region_preference": "Region Preference", + "mco.configure.world.region_preference.title": "Region Preference Selection", "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", "mco.configure.world.reset.question.line2": "Are you sure you want to continue?", "mco.configure.world.resourcepack.question": "You need a custom resource pack to play on this Realm\n\nDo you want to download it and play?", @@ -4955,6 +5037,7 @@ "mco.configure.world.restore.download.question.line2": "Do you want to continue?", "mco.configure.world.restore.question.line1": "Your world will be restored to date '%s' (%s)", "mco.configure.world.restore.question.line2": "Are you sure you want to continue?", + "mco.configure.world.settings.expired": "You cannot edit settings of an expired Realm", "mco.configure.world.settings.title": "Settings", "mco.configure.world.slot": "World %s", "mco.configure.world.slot.empty": "Empty", @@ -4984,6 +5067,7 @@ "mco.configure.world.subscription.remaining.months": "%1$s month(s)", "mco.configure.world.subscription.remaining.months.days": "%1$s month(s), %2$s day(s)", "mco.configure.world.subscription.start": "Start Date", + "mco.configure.world.subscription.tab": "Subscription", "mco.configure.world.subscription.timeleft": "Time Left", "mco.configure.world.subscription.title": "Your Subscription", "mco.configure.world.subscription.unknown": "Unknown", @@ -4996,6 +5080,7 @@ "mco.connect.authorizing": "Logging in...", "mco.connect.connecting": "Connecting to the Realm...", "mco.connect.failed": "Failed to connect to the Realm", + "mco.connect.region": "Server region: %s", "mco.connect.success": "Done", "mco.create.world": "Create", "mco.create.world.error": "You must enter a name!", @@ -5034,6 +5119,7 @@ "mco.errorMessage.initialize.failed": "Failed to initialize Realm", "mco.errorMessage.noDetails": "No error details provided", "mco.errorMessage.realmsService": "An error occurred (%s):", + "mco.errorMessage.realmsService.configurationError": "An unexpected error occurred while editing world options", "mco.errorMessage.realmsService.connectivity": "Could not connect to Realms: %s", "mco.errorMessage.realmsService.realmsError": "Realms (%s):", "mco.errorMessage.realmsService.unknownCompatibility": "Could not check compatible version, got response: %s", @@ -5070,6 +5156,7 @@ "mco.notification.visitUrl.buttonText.default": "Open Link", "mco.notification.visitUrl.message.default": "Please visit the link below", "mco.onlinePlayers": "Online Players", + "mco.play.button.realm.closed": "Realm is closed", "mco.question": "Question", "mco.reset.world.adventure": "Adventures", "mco.reset.world.experience": "Experiences", @@ -5083,7 +5170,7 @@ "mco.reset.world.warning": "This will replace the current world of your Realm", "mco.selectServer.buy": "Buy a Realm!", "mco.selectServer.close": "Close", - "mco.selectServer.closed": "Closed Realm", + "mco.selectServer.closed": "Deactivated Realm", "mco.selectServer.closeserver": "Close Realm", "mco.selectServer.configure": "Configure", "mco.selectServer.configureRealm": "Configure Realm", @@ -5175,6 +5262,14 @@ "mco.version": "Version: %s", "mco.warning": "Warning!", "mco.worldSlot.minigame": "Minigame", + "menu.custom_options": "Custom Options...", + "menu.custom_options.title": "Custom Options", + "menu.custom_options.tooltip": "Note: Custom options are provided by third-party servers and/or content.\nHandle with care!", + "menu.custom_screen_info.button_narration": "This is a custom screen. Learn more.", + "menu.custom_screen_info.contents": "The contents of this screen are controlled by third-party servers and maps that are not owned, operated, or supervised by Mojang Studios or Microsoft.\n\nHandle with care! Always be careful when following links and never give away your personal information, including login details.\n\nIf this screen prevents you from playing, you can also disconnect from the current server by using the button below.", + "menu.custom_screen_info.disconnect": "Custom screen rejected", + "menu.custom_screen_info.title": "Note about custom screens", + "menu.custom_screen_info.tooltip": "This is a custom screen. Click here to learn more.", "menu.disconnect": "Disconnect", "menu.feedback": "Feedback...", "menu.feedback.title": "Feedback", @@ -5187,6 +5282,8 @@ "menu.playdemo": "Play Demo World", "menu.playerReporting": "Player Reporting", "menu.preparingSpawn": "Preparing spawn area: %s%%", + "menu.quick_actions": "Quick Actions...", + "menu.quick_actions.title": "Quick Actions", "menu.quit": "Quit Game", "menu.reportBugs": "Report Bugs", "menu.resetdemo": "Reset Demo World", @@ -5213,6 +5310,9 @@ "mirror.none": "|", "mount.onboard": "Press %1$s to Dismount", "multiplayer.applyingPack": "Applying resource pack", + "multiplayer.confirm_command.parse_errors": "You are trying to execute an unrecognized or invalid command.\nAre you sure?\nCommand: %s", + "multiplayer.confirm_command.permissions_required": "You are trying to execute a command that requires elevated permissions.\nThis might negatively affect your game.\nAre you sure?\nCommand: %s", + "multiplayer.confirm_command.title": "Confirm Command Execution", "multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!", "multiplayer.disconnect.bad_chat_index": "Detected missed or reordered chat message from server", "multiplayer.disconnect.banned": "You are banned from this server", @@ -5296,6 +5396,71 @@ "multiplayerWarning.check": "Do not show this screen again", "multiplayerWarning.header": "Caution: Third-Party Online Play", "multiplayerWarning.message": "Caution: Online play is offered by third-party servers that are not owned, operated, or supervised by Mojang Studios or Microsoft. During online play, you may be exposed to unmoderated chat messages or other types of user-generated content that may not be suitable for everyone.", + "music.game.a_familiar_room": "Aaron Cherof - A Familiar Room", + "music.game.an_ordinary_day": "Kumi Tanioka - An Ordinary Day", + "music.game.ancestry": "Lena Raine - Ancestry", + "music.game.below_and_above": "Amos Roddy - Below and Above", + "music.game.broken_clocks": "Amos Roddy - Broken Clocks", + "music.game.bromeliad": "Aaron Cherof - Bromeliad", + "music.game.clark": "C418 - Clark", + "music.game.comforting_memories": "Kumi Tanioka - Comforting Memories", + "music.game.creative.aria_math": "C418 - Aria Math", + "music.game.creative.biome_fest": "C418 - Biome Fest", + "music.game.creative.blind_spots": "C418 - Blind Spots", + "music.game.creative.dreiton": "C418 - Dreiton", + "music.game.creative.haunt_muskie": "C418 - Haunt Muskie", + "music.game.creative.taswell": "C418 - Taswell", + "music.game.crescent_dunes": "Aaron Cherof - Crescent Dunes", + "music.game.danny": "C418 - Danny", + "music.game.deeper": "Lena Raine - Deeper", + "music.game.dry_hands": "C418 - Dry Hands", + "music.game.echo_in_the_wind": "Aaron Cherof - Echo in the Wind", + "music.game.eld_unknown": "Lena Raine - Eld Unknown", + "music.game.end.alpha": "C418 - Alpha", + "music.game.end.boss": "C418 - Boss", + "music.game.end.the_end": "C418 - The End", + "music.game.endless": "Lena Raine - Endless", + "music.game.featherfall": "Aaron Cherof - Featherfall", + "music.game.fireflies": "Amos Roddy - Fireflies", + "music.game.floating_dream": "Kumi Tanioka - Floating Dream", + "music.game.haggstrom": "C418 - Haggstrom", + "music.game.infinite_amethyst": "Lena Raine - Infinite Amethyst", + "music.game.key": "C418 - Key", + "music.game.komorebi": "Kumi Tanioka - komorebi", + "music.game.left_to_bloom": "Lena Raine - Left to Bloom", + "music.game.lilypad": "Amos Roddy - Lilypad", + "music.game.living_mice": "C418 - Living Mice", + "music.game.mice_on_venus": "C418 - Mice on Venus", + "music.game.minecraft": "C418 - Minecraft", + "music.game.nether.ballad_of_the_cats": "C418 - Ballad of the Cats", + "music.game.nether.concrete_halls": "C418 - Concrete Halls", + "music.game.nether.crimson_forest.chrysopoeia": "Lena Raine - Chrysopoeia", + "music.game.nether.dead_voxel": "C418 - Dead Voxel", + "music.game.nether.nether_wastes.rubedo": "Lena Raine - Rubedo", + "music.game.nether.soulsand_valley.so_below": "Lena Raine - So Below", + "music.game.nether.warmth": "C418 - Warmth", + "music.game.one_more_day": "Lena Raine - One More Day", + "music.game.os_piano": "Amos Roddy - O's Piano", + "music.game.oxygene": "C418 - Oxyg\u00e8ne", + "music.game.pokopoko": "Kumi Tanioka - pokopoko", + "music.game.puzzlebox": "Aaron Cherof - Puzzlebox", + "music.game.stand_tall": "Lena Raine - Stand Tall", + "music.game.subwoofer_lullaby": "C418 - Subwoofer Lullaby", + "music.game.swamp.aerie": "Lena Raine - Aerie", + "music.game.swamp.firebugs": "Lena Raine - Firebugs", + "music.game.swamp.labyrinthine": "Lena Raine - Labyrinthine", + "music.game.sweden": "C418 - Sweden", + "music.game.watcher": "Aaron Cherof - Watcher", + "music.game.water.axolotl": "C418 - Axolotl", + "music.game.water.dragon_fish": "C418 - Dragon Fish", + "music.game.water.shuniji": "C418 - Shuniji", + "music.game.wending": "Lena Raine - Wending", + "music.game.wet_hands": "C418 - Wet Hands", + "music.game.yakusoku": "Kumi Tanioka - yakusoku", + "music.menu.beginning_2": "C418 - Beginning 2", + "music.menu.floating_trees": "C418 - Floating Trees", + "music.menu.moog_city_2": "C418 - Moog City 2", + "music.menu.mutation": "C418 - Mutation", "narration.button": "Button: %s", "narration.button.usage.focused": "Press Enter to activate", "narration.button.usage.hovered": "Left click to activate", @@ -5306,6 +5471,7 @@ "narration.cycle_button.usage.focused": "Press Enter to switch to %s", "narration.cycle_button.usage.hovered": "Left click to switch to %s", "narration.edit_box": "Edit box: %s", + "narration.item": "Item: %s", "narration.recipe": "Recipe for %s", "narration.recipe.usage": "Left click to select", "narration.recipe.usage.more": "Right click to show more recipes", @@ -5525,6 +5691,11 @@ "options.mouseWheelSensitivity": "Scroll Sensitivity", "options.multiplayer.title": "Multiplayer Settings...", "options.multiplier": "%sx", + "options.music_frequency": "Music Frequency", + "options.music_frequency.constant": "Constant", + "options.music_frequency.default": "Default", + "options.music_frequency.frequent": "Frequent", + "options.music_frequency.tooltip": "Changes how frequently music plays while in a game world.", "options.narrator": "Narrator", "options.narrator.all": "Narrates All", "options.narrator.chat": "Narrates Chat", @@ -5561,6 +5732,7 @@ "options.realmsNotifications.tooltip": "Fetches Realms news and invites in the title screen and displays their respective icon on the Realms button.", "options.reducedDebugInfo": "Reduced Debug Info", "options.renderClouds": "Clouds", + "options.renderCloudsDistance": "Cloud Distance", "options.renderDistance": "Render Distance", "options.resourcepack": "Resource Packs...", "options.rotateWithMinecart": "Rotate with Minecarts", @@ -5570,6 +5742,8 @@ "options.sensitivity": "Sensitivity", "options.sensitivity.max": "HYPERSPEED!!!", "options.sensitivity.min": "*yawn*", + "options.showNowPlayingToast": "Show Music Toast", + "options.showNowPlayingToast.tooltip": "Displays a toast whenever a song starts playing. The same toast is constantly displayed in the in-game pause menu while a song is playing.", "options.showSubtitles": "Show Subtitles", "options.simulationDistance": "Simulation Distance", "options.skinCustomisation": "Skin Customization...", @@ -5747,6 +5921,31 @@ "quickplay.error.realm_connect": "Could not connect to Realm", "quickplay.error.realm_permission": "Lacking permission to connect to this Realm", "quickplay.error.title": "Failed to Quick Play", + "realms.configuration.region_preference.automatic_owner": "Automatic (Realm owner ping)", + "realms.configuration.region_preference.automatic_player": "Automatic (first to join session)", + "realms.configuration.region.australia_east": "New South Wales, Australia", + "realms.configuration.region.australia_southeast": "Victoria, Australia", + "realms.configuration.region.brazil_south": "Brazil", + "realms.configuration.region.central_india": "India", + "realms.configuration.region.central_us": "Iowa, USA", + "realms.configuration.region.east_asia": "Hong Kong", + "realms.configuration.region.east_us": "Virginia, USA", + "realms.configuration.region.east_us_2": "North Carolina, USA", + "realms.configuration.region.france_central": "France", + "realms.configuration.region.japan_east": "Eastern Japan", + "realms.configuration.region.japan_west": "Western Japan", + "realms.configuration.region.korea_central": "South Korea", + "realms.configuration.region.north_central_us": "Illinois, USA", + "realms.configuration.region.north_europe": "Ireland", + "realms.configuration.region.south_central_us": "Texas, USA", + "realms.configuration.region.southeast_asia": "Singapore", + "realms.configuration.region.sweden_central": "Sweden", + "realms.configuration.region.uae_north": "United Arab Emirates (UAE)", + "realms.configuration.region.uk_south": "Southern England", + "realms.configuration.region.west_central_us": "Utah, USA", + "realms.configuration.region.west_europe": "Netherlands", + "realms.configuration.region.west_us": "California, USA", + "realms.configuration.region.west_us_2": "Washington, USA", "realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots", "recipe.notFound": "Unknown recipe: %s", "recipe.toast.description": "Check your recipe book", @@ -5944,12 +6143,13 @@ "snbt.parser.undescore_not_allowed": "Underscore characters are not allowed at the start or end of a number", "soundCategory.ambient": "Ambient/Environment", "soundCategory.block": "Blocks", - "soundCategory.hostile": "Hostile Creatures", + "soundCategory.hostile": "Hostile Mobs", "soundCategory.master": "Master Volume", "soundCategory.music": "Music", - "soundCategory.neutral": "Friendly Creatures", + "soundCategory.neutral": "Friendly Mobs", "soundCategory.player": "Players", "soundCategory.record": "Jukebox/Note Blocks", + "soundCategory.ui": "UI", "soundCategory.voice": "Voice/Speech", "soundCategory.weather": "Weather", "spectatorMenu.close": "Close Menu", @@ -5996,6 +6196,7 @@ "stat.minecraft.fill_cauldron": "Cauldrons Filled", "stat.minecraft.fish_caught": "Fish Caught", "stat.minecraft.fly_one_cm": "Distance Flown", + "stat.minecraft.happy_ghast_one_cm": "Distance by Happy Ghast", "stat.minecraft.horse_one_cm": "Distance by Horse", "stat.minecraft.inspect_dispenser": "Dispensers Searched", "stat.minecraft.inspect_dropper": "Droppers Searched", @@ -6153,6 +6354,11 @@ "subtitles.block.dispenser.dispense": "Dispensed item", "subtitles.block.dispenser.fail": "Dispenser failed", "subtitles.block.door.toggle": "Door creaks", + "subtitles.block.dried_ghast.ambient": "Sounds of dryness", + "subtitles.block.dried_ghast.ambient_water": "Dried Ghast rehydrates", + "subtitles.block.dried_ghast.place_in_water": "Dried Ghast soaks", + "subtitles.block.dried_ghast.transition": "Dried Ghast feels better", + "subtitles.block.dry_grass.ambient": "Windy sounds", "subtitles.block.enchantment_table.use": "Enchanting Table used", "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", "subtitles.block.end_portal.spawn": "End Portal opens", @@ -6215,6 +6421,8 @@ "subtitles.block.sniffer_egg.plop": "Sniffer plops", "subtitles.block.sponge.absorb": "Sponge sucks", "subtitles.block.sweet_berry_bush.pick_berries": "Berries pop", + "subtitles.block.trapdoor.close": "Trapdoor closes", + "subtitles.block.trapdoor.open": "Trapdoor opens", "subtitles.block.trapdoor.toggle": "Trapdoor creaks", "subtitles.block.trial_spawner.about_to_spawn_item": "Ominous item prepares", "subtitles.block.trial_spawner.ambient": "Trial Spawner crackles", @@ -6453,6 +6661,10 @@ "subtitles.entity.ghast.death": "Ghast dies", "subtitles.entity.ghast.hurt": "Ghast hurts", "subtitles.entity.ghast.shoot": "Ghast shoots", + "subtitles.entity.ghastling.ambient": "Ghastling coos", + "subtitles.entity.ghastling.death": "Ghastling dies", + "subtitles.entity.ghastling.hurt": "Ghastling hurts", + "subtitles.entity.ghastling.spawn": "Ghastling appears", "subtitles.entity.glow_item_frame.add_item": "Glow Item Frame fills", "subtitles.entity.glow_item_frame.break": "Glow Item Frame broken", "subtitles.entity.glow_item_frame.place": "Glow Item Frame placed", @@ -6479,6 +6691,13 @@ "subtitles.entity.guardian.death": "Guardian dies", "subtitles.entity.guardian.flop": "Guardian flops", "subtitles.entity.guardian.hurt": "Guardian hurts", + "subtitles.entity.happy_ghast.ambient": "Happy Ghast croons", + "subtitles.entity.happy_ghast.death": "Happy Ghast dies", + "subtitles.entity.happy_ghast.equip": "Harness equips", + "subtitles.entity.happy_ghast.harness_goggles_down": "Happy Ghast is ready", + "subtitles.entity.happy_ghast.harness_goggles_up": "Happy Ghast stops", + "subtitles.entity.happy_ghast.hurt": "Happy Ghast hurts", + "subtitles.entity.happy_ghast.unequip": "Harness unequips", "subtitles.entity.hoglin.ambient": "Hoglin growls", "subtitles.entity.hoglin.angry": "Hoglin growls angrily", "subtitles.entity.hoglin.attack": "Hoglin attacks", @@ -6918,13 +7137,20 @@ "subtitles.item.hoe.till": "Hoe tills", "subtitles.item.honey_bottle.drink": "Gulping", "subtitles.item.honeycomb.wax_on": "Wax on", + "subtitles.item.horse_armor.unequip": "Horse Armor snips away", "subtitles.item.ink_sac.use": "Ink Sac splotches", + "subtitles.item.lead.break": "Lead snaps", + "subtitles.item.lead.tied": "Lead tied", + "subtitles.item.lead.untied": "Lead untied", + "subtitles.item.llama_carpet.unequip": "Carpet snips away", "subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone", "subtitles.item.mace.smash_air": "Mace smashes", "subtitles.item.mace.smash_ground": "Mace smashes", "subtitles.item.nether_wart.plant": "Crop planted", "subtitles.item.ominous_bottle.dispose": "Bottle breaks", + "subtitles.item.saddle.unequip": "Saddle snips away", "subtitles.item.shears.shear": "Shears click", + "subtitles.item.shears.snip": "Shears snip", "subtitles.item.shield.block": "Shield blocks", "subtitles.item.shovel.flatten": "Shovel flattens", "subtitles.item.spyglass.stop_using": "Spyglass retracts", diff --git a/azalea-physics/src/collision/blocks.rs b/azalea-physics/src/collision/blocks.rs index ef849b90..486b93a0 100644 --- a/azalea-physics/src/collision/blocks.rs +++ b/azalea-physics/src/collision/blocks.rs @@ -4139,34 +4139,36 @@ static SHAPE652: LazyLock = static SHAPE653: LazyLock = LazyLock::new(|| collision::box_shape(0.0625, 0., 0.125, 0.9375, 1., 0.875)); static SHAPE654: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.9375, 0.875)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.625, 0.8125)); static SHAPE655: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.25, 0.875)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.9375, 0.875)); static SHAPE656: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.25, 0.3125, 1., 0.75, 1.)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.25, 0.875)); static SHAPE657: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.25, 0., 1., 0.75, 0.6875)); + LazyLock::new(|| collision::box_shape(0., 0.25, 0.3125, 1., 0.75, 1.)); static SHAPE658: LazyLock = - LazyLock::new(|| collision::box_shape(0.3125, 0.25, 0., 1., 0.75, 1.)); + LazyLock::new(|| collision::box_shape(0., 0.25, 0., 1., 0.75, 0.6875)); static SHAPE659: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.25, 0., 0.6875, 0.75, 1.)); + LazyLock::new(|| collision::box_shape(0.3125, 0.25, 0., 1., 0.75, 1.)); static SHAPE660: LazyLock = - LazyLock::new(|| collision::box_shape(0.375, 0., 0.375, 0.625, 0.375, 0.625)); + LazyLock::new(|| collision::box_shape(0., 0.25, 0., 0.6875, 0.75, 1.)); static SHAPE661: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.375, 0.8125)); + LazyLock::new(|| collision::box_shape(0.375, 0., 0.375, 0.625, 0.375, 0.625)); static SHAPE662: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.375, 0.875)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.375, 0.8125)); static SHAPE663: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.4375, 0.875)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.375, 0.875)); static SHAPE664: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.75, 0.5)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.4375, 0.875)); static SHAPE665: LazyLock = - LazyLock::new(|| collision::box_shape(0.15625, 0., 0.15625, 0.34375, 1., 0.34375)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.75, 0.5)); static SHAPE666: LazyLock = - LazyLock::new(|| collision::box_shape(0.0625, 0., 0.0625, 0.4375, 1., 0.4375)); + LazyLock::new(|| collision::box_shape(0.15625, 0., 0.15625, 0.34375, 1., 0.34375)); static SHAPE667: LazyLock = + LazyLock::new(|| collision::box_shape(0.0625, 0., 0.0625, 0.4375, 1., 0.4375)); +static SHAPE668: LazyLock = LazyLock::new(|| collision::box_shape(-0.0625, 0., -0.0625, 0.5625, 1., 0.5625)); -static SHAPE668: LazyLock = LazyLock::new(|| { +static SHAPE669: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.125, 1., 0.125); let s = Shapes::or(s, collision::box_shape(0., 0., 0.875, 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.875, 0., 0., 1., 1., 0.125)); @@ -4175,7 +4177,7 @@ static SHAPE668: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.125, 0.875, 0., 0.875, 1., 0.125)); Shapes::or(s, collision::box_shape(0.125, 0.875, 0.875, 0.875, 1., 1.)) }); -static SHAPE669: LazyLock = LazyLock::new(|| { +static SHAPE670: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.125, 0., 0.125, 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0., 0.125, 0.875, 0.125, 1., 1.)); @@ -4185,7 +4187,7 @@ static SHAPE669: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.125, 0.875, 0., 0.875, 1., 0.125)); Shapes::or(s, collision::box_shape(0.125, 0.875, 0.875, 0.875, 1., 1.)) }); -static SHAPE670: LazyLock = LazyLock::new(|| { +static SHAPE671: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.125, 0., 0.375, 0.25, 0.8125, 0.625); let s = Shapes::or( s, @@ -4209,7 +4211,7 @@ static SHAPE670: LazyLock = LazyLock::new(|| { collision::box_shape(0.75, 0.4375, 0.625, 0.875, 0.8125, 0.6875), ) }); -static SHAPE671: LazyLock = LazyLock::new(|| { +static SHAPE672: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.375, 0., 0.125, 0.625, 0.8125, 0.25); let s = Shapes::or( s, @@ -4233,7 +4235,7 @@ static SHAPE671: LazyLock = LazyLock::new(|| { collision::box_shape(0.625, 0.4375, 0.75, 0.6875, 0.8125, 0.875), ) }); -static SHAPE672: LazyLock = LazyLock::new(|| { +static SHAPE673: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.125, 0., 0.75, 0.875, 0.75); let s = Shapes::or( s, @@ -4252,7 +4254,7 @@ static SHAPE672: LazyLock = LazyLock::new(|| { collision::box_shape(0.75, 0.375, 0.5625, 0.875, 0.625, 1.), ) }); -static SHAPE673: LazyLock = LazyLock::new(|| { +static SHAPE674: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.125, 0.25, 0.75, 0.875, 1.); let s = Shapes::or( s, @@ -4271,7 +4273,7 @@ static SHAPE673: LazyLock = LazyLock::new(|| { collision::box_shape(0.75, 0.375, 0., 0.875, 0.625, 0.4375), ) }); -static SHAPE674: LazyLock = LazyLock::new(|| { +static SHAPE675: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0.125, 0.25, 0.75, 0.875, 0.75); let s = Shapes::or( s, @@ -4290,7 +4292,7 @@ static SHAPE674: LazyLock = LazyLock::new(|| { collision::box_shape(0.5625, 0.375, 0.75, 1., 0.625, 0.875), ) }); -static SHAPE675: LazyLock = LazyLock::new(|| { +static SHAPE676: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.125, 0.25, 1., 0.875, 0.75); let s = Shapes::or( s, @@ -4309,7 +4311,7 @@ static SHAPE675: LazyLock = LazyLock::new(|| { collision::box_shape(0., 0.375, 0.75, 0.4375, 0.625, 0.875), ) }); -static SHAPE676: LazyLock = LazyLock::new(|| { +static SHAPE677: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0., 0.125, 0.75, 0.75, 0.875); let s = Shapes::or( s, @@ -4328,7 +4330,7 @@ static SHAPE676: LazyLock = LazyLock::new(|| { collision::box_shape(0.75, 0.5625, 0.375, 0.875, 1., 0.625), ) }); -static SHAPE677: LazyLock = LazyLock::new(|| { +static SHAPE678: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.125, 0., 0.25, 0.875, 0.75, 0.75); let s = Shapes::or( s, @@ -4347,14 +4349,14 @@ static SHAPE677: LazyLock = LazyLock::new(|| { collision::box_shape(0.375, 0.5625, 0.75, 0.625, 1., 0.875), ) }); -static SHAPE678: LazyLock = LazyLock::new(|| { +static SHAPE679: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); Shapes::or( s, collision::box_shape(0.25, 0.125, 0.25, 0.75, 0.875, 0.75), ) }); -static SHAPE679: LazyLock = LazyLock::new(|| { +static SHAPE680: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or( s, @@ -4389,7 +4391,7 @@ static SHAPE679: LazyLock = LazyLock::new(|| { collision::box_shape(0.25, 0.875, 0.3333333125, 0.75, 1., 0.6041666875), ) }); -static SHAPE680: LazyLock = LazyLock::new(|| { +static SHAPE681: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or( s, @@ -4424,7 +4426,7 @@ static SHAPE680: LazyLock = LazyLock::new(|| { collision::box_shape(0.25, 0.875, 0.3958333125, 0.75, 1., 0.6666666875), ) }); -static SHAPE681: LazyLock = LazyLock::new(|| { +static SHAPE682: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or( s, @@ -4464,7 +4466,7 @@ static SHAPE681: LazyLock = LazyLock::new(|| { collision::box_shape(0.6041666875, 1., 0.25, 0.875, 1.125, 0.75), ) }); -static SHAPE682: LazyLock = LazyLock::new(|| { +static SHAPE683: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or( s, @@ -4499,11 +4501,11 @@ static SHAPE682: LazyLock = LazyLock::new(|| { collision::box_shape(0.3958333125, 0.875, 0.25, 0.6666666875, 1., 0.75), ) }); -static SHAPE683: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0.25, 1., 1., 0.75)); static SHAPE684: LazyLock = + LazyLock::new(|| collision::box_shape(0., 0., 0.25, 1., 1., 0.75)); +static SHAPE685: LazyLock = LazyLock::new(|| collision::box_shape(0.25, 0., 0., 0.75, 1., 1.)); -static SHAPE685: LazyLock = LazyLock::new(|| { +static SHAPE686: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4514,7 +4516,7 @@ static SHAPE685: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.8125, 0.4375, 0.5625, 1., 0.5625), ) }); -static SHAPE686: LazyLock = LazyLock::new(|| { +static SHAPE687: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4525,7 +4527,7 @@ static SHAPE686: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.8125, 0., 0.5625, 0.9375, 0.8125), ) }); -static SHAPE687: LazyLock = LazyLock::new(|| { +static SHAPE688: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4536,7 +4538,7 @@ static SHAPE687: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.8125, 0.1875, 0.5625, 0.9375, 1.), ) }); -static SHAPE688: LazyLock = LazyLock::new(|| { +static SHAPE689: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4547,7 +4549,7 @@ static SHAPE688: LazyLock = LazyLock::new(|| { collision::box_shape(0., 0.8125, 0.4375, 0.8125, 0.9375, 0.5625), ) }); -static SHAPE689: LazyLock = LazyLock::new(|| { +static SHAPE690: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4558,7 +4560,7 @@ static SHAPE689: LazyLock = LazyLock::new(|| { collision::box_shape(0.1875, 0.8125, 0.4375, 1., 0.9375, 0.5625), ) }); -static SHAPE690: LazyLock = LazyLock::new(|| { +static SHAPE691: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4569,7 +4571,7 @@ static SHAPE690: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.8125, 0., 0.5625, 0.9375, 1.), ) }); -static SHAPE691: LazyLock = LazyLock::new(|| { +static SHAPE692: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.25, 0.25, 0.25, 0.75, 0.375, 0.75); let s = Shapes::or( s, @@ -4580,201 +4582,201 @@ static SHAPE691: LazyLock = LazyLock::new(|| { collision::box_shape(0., 0.8125, 0.4375, 1., 0.9375, 0.5625), ) }); -static SHAPE692: LazyLock = LazyLock::new(|| { +static SHAPE693: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0.0625, 0.3125, 0.6875, 0.5, 0.6875); Shapes::or( s, collision::box_shape(0.375, 0.5, 0.375, 0.625, 0.625, 0.625), ) }); -static SHAPE693: LazyLock = LazyLock::new(|| { +static SHAPE694: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0., 0.3125, 0.6875, 0.4375, 0.6875); Shapes::or( s, collision::box_shape(0.375, 0.4375, 0.375, 0.625, 0.5625, 0.625), ) }); -static SHAPE694: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0., 0.25, 0.75, 0.5625, 0.75)); static SHAPE695: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.1875, 0.875)); + LazyLock::new(|| collision::box_shape(0.25, 0., 0.25, 0.75, 0.5625, 0.75)); static SHAPE696: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0.5625, 0.25, 0.75, 1., 0.75)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.875, 0.1875, 0.875)); static SHAPE697: LazyLock = + LazyLock::new(|| collision::box_shape(0.25, 0.5625, 0.25, 0.75, 1., 0.75)); +static SHAPE698: LazyLock = LazyLock::new(|| collision::box_shape(0.25, 0., 0.25, 0.75, 0.9375, 0.75)); -static SHAPE698: LazyLock = LazyLock::new(|| { +static SHAPE699: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.125, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.125, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.125, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.125, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.125, 0.125, 1., 1., 0.875)) }); -static SHAPE699: LazyLock = LazyLock::new(|| { +static SHAPE700: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.1875, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.1875, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.1875, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.1875, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.1875, 0.125, 1., 1., 0.875)) }); -static SHAPE700: LazyLock = LazyLock::new(|| { +static SHAPE701: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.3125, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.3125, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.3125, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.3125, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.3125, 0.125, 1., 1., 0.875)) }); -static SHAPE701: LazyLock = LazyLock::new(|| { +static SHAPE702: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.4375, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.4375, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.4375, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.4375, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.4375, 0.125, 1., 1., 0.875)) }); -static SHAPE702: LazyLock = LazyLock::new(|| { +static SHAPE703: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.5625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.5625, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.5625, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.5625, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.5625, 0.125, 1., 1., 0.875)) }); -static SHAPE703: LazyLock = LazyLock::new(|| { +static SHAPE704: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.6875, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.6875, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.6875, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.6875, 0.125, 1., 1., 0.875)) }); -static SHAPE704: LazyLock = LazyLock::new(|| { +static SHAPE705: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.8125, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.8125, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.8125, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.8125, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.8125, 0.125, 1., 1., 0.875)) }); -static SHAPE705: LazyLock = LazyLock::new(|| { +static SHAPE706: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.9375, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.9375, 0., 0.125, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.125, 0.9375, 0., 1., 1., 0.125)); let s = Shapes::or(s, collision::box_shape(0.125, 0.9375, 0.875, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.875, 0.9375, 0.125, 1., 1., 0.875)) }); -static SHAPE706: LazyLock = - LazyLock::new(|| collision::box_shape(0.3125, 0., 0.375, 0.6875, 0.375, 0.5625)); static SHAPE707: LazyLock = - LazyLock::new(|| collision::box_shape(0.3125, 0., 0.375, 0.625, 0.375, 0.6875)); + LazyLock::new(|| collision::box_shape(0.3125, 0., 0.375, 0.6875, 0.375, 0.5625)); static SHAPE708: LazyLock = + LazyLock::new(|| collision::box_shape(0.3125, 0., 0.375, 0.625, 0.375, 0.6875)); +static SHAPE709: LazyLock = LazyLock::new(|| collision::box_shape(0.3125, 0., 0.3125, 0.6875, 0.375, 0.625)); -static SHAPE709: LazyLock = LazyLock::new(|| { +static SHAPE710: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.0625, 0., 0.0625, 0.9375, 0.5, 0.9375); Shapes::or( s, collision::box_shape(0.4375, 0.5, 0.4375, 0.5625, 0.875, 0.5625), ) }); -static SHAPE710: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.5625, 0.8125, 0.8125, 1.)); static SHAPE711: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.4375, 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.5625, 0.8125, 0.8125, 1.)); static SHAPE712: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.4375)); + LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.4375, 0.8125, 0.8125)); static SHAPE713: LazyLock = - LazyLock::new(|| collision::box_shape(0.5625, 0.1875, 0.1875, 1., 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.4375)); static SHAPE714: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.4375, 0.8125)); + LazyLock::new(|| collision::box_shape(0.5625, 0.1875, 0.1875, 1., 0.8125, 0.8125)); static SHAPE715: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.5625, 0.1875, 0.8125, 1., 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.4375, 0.8125)); static SHAPE716: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.6875, 0.8125, 0.8125, 1.)); + LazyLock::new(|| collision::box_shape(0.1875, 0.5625, 0.1875, 0.8125, 1., 0.8125)); static SHAPE717: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.3125, 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.6875, 0.8125, 0.8125, 1.)); static SHAPE718: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.3125)); + LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.3125, 0.8125, 0.8125)); static SHAPE719: LazyLock = - LazyLock::new(|| collision::box_shape(0.6875, 0.1875, 0.1875, 1., 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.3125)); static SHAPE720: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.3125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.6875, 0.1875, 0.1875, 1., 0.8125, 0.8125)); static SHAPE721: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.6875, 0.1875, 0.8125, 1., 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.3125, 0.8125)); static SHAPE722: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.75, 0.8125, 0.8125, 1.)); + LazyLock::new(|| collision::box_shape(0.1875, 0.6875, 0.1875, 0.8125, 1., 0.8125)); static SHAPE723: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.25, 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0.75, 0.8125, 0.8125, 1.)); static SHAPE724: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.25)); + LazyLock::new(|| collision::box_shape(0., 0.1875, 0.1875, 0.25, 0.8125, 0.8125)); static SHAPE725: LazyLock = - LazyLock::new(|| collision::box_shape(0.75, 0.1875, 0.1875, 1., 0.8125, 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0.1875, 0., 0.8125, 0.8125, 0.25)); static SHAPE726: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.25, 0.8125)); + LazyLock::new(|| collision::box_shape(0.75, 0.1875, 0.1875, 1., 0.8125, 0.8125)); static SHAPE727: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.75, 0.1875, 0.8125, 1., 0.8125)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.8125, 0.25, 0.8125)); static SHAPE728: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0.25, 0.8125, 0.75, 0.75, 1.)); + LazyLock::new(|| collision::box_shape(0.1875, 0.75, 0.1875, 0.8125, 1., 0.8125)); static SHAPE729: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0.25, 0.25, 0.1875, 0.75, 0.75)); + LazyLock::new(|| collision::box_shape(0.25, 0.25, 0.8125, 0.75, 0.75, 1.)); static SHAPE730: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0.25, 0., 0.75, 0.75, 0.1875)); + LazyLock::new(|| collision::box_shape(0., 0.25, 0.25, 0.1875, 0.75, 0.75)); static SHAPE731: LazyLock = - LazyLock::new(|| collision::box_shape(0.8125, 0.25, 0.25, 1., 0.75, 0.75)); + LazyLock::new(|| collision::box_shape(0.25, 0.25, 0., 0.75, 0.75, 0.1875)); static SHAPE732: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0., 0.25, 0.75, 0.1875, 0.75)); + LazyLock::new(|| collision::box_shape(0.8125, 0.25, 0.25, 1., 0.75, 0.75)); static SHAPE733: LazyLock = - LazyLock::new(|| collision::box_shape(0.25, 0.8125, 0.25, 0.75, 1., 0.75)); + LazyLock::new(|| collision::box_shape(0.25, 0., 0.25, 0.75, 0.1875, 0.75)); static SHAPE734: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.5625, 1., 0.5625)); + LazyLock::new(|| collision::box_shape(0.25, 0.8125, 0.25, 0.75, 1., 0.75)); static SHAPE735: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.5625, 0.6875, 0.5625)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.5625, 1., 0.5625)); static SHAPE736: LazyLock = - LazyLock::new(|| collision::box_shape(0.1875, 0.3125, 0.1875, 0.5625, 1., 0.5625)); + LazyLock::new(|| collision::box_shape(0.1875, 0., 0.1875, 0.5625, 0.6875, 0.5625)); static SHAPE737: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.625, 1., 0.625)); + LazyLock::new(|| collision::box_shape(0.1875, 0.3125, 0.1875, 0.5625, 1., 0.5625)); static SHAPE738: LazyLock = - LazyLock::new(|| collision::box_shape(0.0625, 0., 0.0625, 0.6875, 1., 0.6875)); + LazyLock::new(|| collision::box_shape(0.125, 0., 0.125, 0.625, 1., 0.625)); static SHAPE739: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.75, 1., 0.75)); + LazyLock::new(|| collision::box_shape(0.0625, 0., 0.0625, 0.6875, 1., 0.6875)); static SHAPE740: LazyLock = + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.75, 1., 0.75)); +static SHAPE741: LazyLock = LazyLock::new(|| collision::box_shape(0.125, 0.8125, 0.125, 0.875, 1., 0.875)); -static SHAPE741: LazyLock = LazyLock::new(|| { +static SHAPE742: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.375, 0., 0.375, 0.625, 1., 0.625); let s = Shapes::or(s, collision::box_shape(0., 0.5, 0., 0.375, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.375, 0.5, 0., 1., 1., 0.375)); let s = Shapes::or(s, collision::box_shape(0.375, 0.5, 0.625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.625, 0.5, 0.375, 1., 1., 0.625)) }); -static SHAPE742: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.1875, 0.5)); static SHAPE743: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.1875, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.1875, 0.5)); static SHAPE744: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0.5, 1., 0.1875, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.1875, 1.)); static SHAPE745: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.1875, 1.)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0.5, 1., 0.1875, 1.)); static SHAPE746: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0.5, 0.5, 0.1875, 1.)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.1875, 1.)); static SHAPE747: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0.5, 1., 0.1875, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0.5, 0.5, 0.1875, 1.)); static SHAPE748: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.1875, 0.5)); + LazyLock::new(|| collision::box_shape(0., 0., 0.5, 1., 0.1875, 1.)); static SHAPE749: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.1875, 0.5)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.1875, 0.5)); static SHAPE750: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.0625, 0.5)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.1875, 0.5)); static SHAPE751: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.0625, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.0625, 0.5)); static SHAPE752: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0.5, 1., 0.0625, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.5, 0.0625, 1.)); static SHAPE753: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.0625, 1.)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0.5, 1., 0.0625, 1.)); static SHAPE754: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0.5, 0.5, 0.0625, 1.)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.0625, 1.)); static SHAPE755: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0.5, 1., 0.0625, 1.)); + LazyLock::new(|| collision::box_shape(0., 0., 0.5, 0.5, 0.0625, 1.)); static SHAPE756: LazyLock = - LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.0625, 0.5)); + LazyLock::new(|| collision::box_shape(0., 0., 0.5, 1., 0.0625, 1.)); static SHAPE757: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.0625, 0.5)); + LazyLock::new(|| collision::box_shape(0.5, 0., 0., 1., 0.0625, 0.5)); static SHAPE758: LazyLock = + LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.0625, 0.5)); +static SHAPE759: LazyLock = LazyLock::new(|| collision::box_shape(0., 0.6875, 0., 1., 0.9375, 1.)); -static SHAPE759: LazyLock = LazyLock::new(|| { +static SHAPE760: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0., 0.5625, 0.6875, 0.9375, 0.9375); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.3125, 0.9375, 1.)); let s = Shapes::or( @@ -4790,9 +4792,9 @@ static SHAPE759: LazyLock = LazyLock::new(|| { collision::box_shape(0.6875, 0.6875, 0.5625, 1., 0.9375, 0.9375), ) }); -static SHAPE760: LazyLock = +static SHAPE761: LazyLock = LazyLock::new(|| collision::box_shape(0., 0.6875, 0., 1., 0.8125, 1.)); -static SHAPE761: LazyLock = LazyLock::new(|| { +static SHAPE762: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0., 0.5625, 0.6875, 0.8125, 0.9375); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.3125, 0.8125, 1.)); let s = Shapes::or( @@ -4808,9 +4810,9 @@ static SHAPE761: LazyLock = LazyLock::new(|| { collision::box_shape(0.6875, 0.6875, 0.5625, 1., 0.8125, 0.9375), ) }); -static SHAPE762: LazyLock = +static SHAPE763: LazyLock = LazyLock::new(|| collision::box_shape(0.3125, 0., 0.5625, 0.6875, 0.8125, 0.9375)); -static SHAPE763: LazyLock = LazyLock::new(|| { +static SHAPE764: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0., 0.0625, 0.6875, 0.9375, 0.4375); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.3125, 0.9375, 1.)); let s = Shapes::or( @@ -4826,7 +4828,7 @@ static SHAPE763: LazyLock = LazyLock::new(|| { collision::box_shape(0.6875, 0.6875, 0.0625, 1., 0.9375, 0.4375), ) }); -static SHAPE764: LazyLock = LazyLock::new(|| { +static SHAPE765: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.3125, 0., 0.0625, 0.6875, 0.8125, 0.4375); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.3125, 0.8125, 1.)); let s = Shapes::or( @@ -4842,9 +4844,9 @@ static SHAPE764: LazyLock = LazyLock::new(|| { collision::box_shape(0.6875, 0.6875, 0.0625, 1., 0.8125, 0.4375), ) }); -static SHAPE765: LazyLock = +static SHAPE766: LazyLock = LazyLock::new(|| collision::box_shape(0.3125, 0., 0.0625, 0.6875, 0.8125, 0.4375)); -static SHAPE766: LazyLock = LazyLock::new(|| { +static SHAPE767: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.5625, 0., 0.3125, 0.9375, 0.9375, 0.6875); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.5625, 0.9375, 1.)); let s = Shapes::or( @@ -4860,7 +4862,7 @@ static SHAPE766: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.6875, 0.3125, 1., 0.9375, 0.6875), ) }); -static SHAPE767: LazyLock = LazyLock::new(|| { +static SHAPE768: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.5625, 0., 0.3125, 0.9375, 0.8125, 0.6875); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.5625, 0.8125, 1.)); let s = Shapes::or( @@ -4876,9 +4878,9 @@ static SHAPE767: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.6875, 0.3125, 1., 0.8125, 0.6875), ) }); -static SHAPE768: LazyLock = +static SHAPE769: LazyLock = LazyLock::new(|| collision::box_shape(0.5625, 0., 0.3125, 0.9375, 0.8125, 0.6875)); -static SHAPE769: LazyLock = LazyLock::new(|| { +static SHAPE770: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.0625, 0., 0.3125, 0.4375, 0.9375, 0.6875); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.0625, 0.9375, 1.)); let s = Shapes::or( @@ -4894,7 +4896,7 @@ static SHAPE769: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.6875, 0.3125, 1., 0.9375, 0.6875), ) }); -static SHAPE770: LazyLock = LazyLock::new(|| { +static SHAPE771: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0.0625, 0., 0.3125, 0.4375, 0.8125, 0.6875); let s = Shapes::or(s, collision::box_shape(0., 0.6875, 0., 0.0625, 0.8125, 1.)); let s = Shapes::or( @@ -4910,65 +4912,57 @@ static SHAPE770: LazyLock = LazyLock::new(|| { collision::box_shape(0.4375, 0.6875, 0.3125, 1., 0.8125, 0.6875), ) }); -static SHAPE771: LazyLock = - LazyLock::new(|| collision::box_shape(0.0625, 0., 0.3125, 0.4375, 0.8125, 0.6875)); static SHAPE772: LazyLock = - LazyLock::new(|| collision::box_shape(0.3125, 0., 0.5625, 0.6875, 1., 0.9375)); + LazyLock::new(|| collision::box_shape(0.0625, 0., 0.3125, 0.4375, 0.8125, 0.6875)); static SHAPE773: LazyLock = - LazyLock::new(|| collision::box_shape(0.3125, 0., 0.0625, 0.6875, 1., 0.4375)); + LazyLock::new(|| collision::box_shape(0.3125, 0., 0.5625, 0.6875, 1., 0.9375)); static SHAPE774: LazyLock = - LazyLock::new(|| collision::box_shape(0.5625, 0., 0.3125, 0.9375, 1., 0.6875)); + LazyLock::new(|| collision::box_shape(0.3125, 0., 0.0625, 0.6875, 1., 0.4375)); static SHAPE775: LazyLock = - LazyLock::new(|| collision::box_shape(0.0625, 0., 0.3125, 0.4375, 1., 0.6875)); + LazyLock::new(|| collision::box_shape(0.5625, 0., 0.3125, 0.9375, 1., 0.6875)); static SHAPE776: LazyLock = - LazyLock::new(|| collision::box_shape(0.125, 0.625, 0.125, 0.875, 1., 0.875)); + LazyLock::new(|| collision::box_shape(0.0625, 0., 0.3125, 0.4375, 1., 0.6875)); static SHAPE777: LazyLock = + LazyLock::new(|| collision::box_shape(0.125, 0.625, 0.125, 0.875, 1., 0.875)); +static SHAPE778: LazyLock = LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.09375, 1.)); -static SHAPE778: LazyLock = LazyLock::new(|| { +static SHAPE779: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)) }); -static SHAPE779: LazyLock = LazyLock::new(|| { +static SHAPE780: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)) }); -static SHAPE780: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ) -}); static SHAPE781: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), ) }); static SHAPE782: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ) +}); +static SHAPE783: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE783: LazyLock = LazyLock::new(|| { +static SHAPE784: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)) }); -static SHAPE784: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), - ) -}); static SHAPE785: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), @@ -4976,24 +4970,20 @@ static SHAPE785: LazyLock = LazyLock::new(|| { }); static SHAPE786: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); - Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)) + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), + ) }); static SHAPE787: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), - ); - Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ) + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); + Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)) }); static SHAPE788: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), @@ -5004,11 +4994,23 @@ static SHAPE788: LazyLock = LazyLock::new(|| { ) }); static SHAPE789: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), + ); + Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ) +}); +static SHAPE790: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)) }); -static SHAPE790: LazyLock = LazyLock::new(|| { +static SHAPE791: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( @@ -5018,7 +5020,7 @@ static SHAPE790: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE791: LazyLock = LazyLock::new(|| { +static SHAPE792: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or( @@ -5027,18 +5029,18 @@ static SHAPE791: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)) }); -static SHAPE792: LazyLock = LazyLock::new(|| { +static SHAPE793: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE793: LazyLock = LazyLock::new(|| { +static SHAPE794: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)) }); -static SHAPE794: LazyLock = LazyLock::new(|| { +static SHAPE795: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5048,7 +5050,7 @@ static SHAPE794: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE795: LazyLock = LazyLock::new(|| { +static SHAPE796: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5057,7 +5059,7 @@ static SHAPE795: LazyLock = LazyLock::new(|| { collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), ) }); -static SHAPE796: LazyLock = LazyLock::new(|| { +static SHAPE797: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5065,21 +5067,21 @@ static SHAPE796: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE797: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 1.)) -}); static SHAPE798: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 1.)) }); static SHAPE799: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 1.)) }); static SHAPE800: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 1.)) +}); +static SHAPE801: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); Shapes::or( @@ -5087,21 +5089,9 @@ static SHAPE800: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 0.9375), ) }); -static SHAPE801: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ); - Shapes::or( - s, - collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 0.9375), - ) -}); static SHAPE802: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), @@ -5113,13 +5103,25 @@ static SHAPE802: LazyLock = LazyLock::new(|| { }); static SHAPE803: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ); Shapes::or( s, collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 0.9375), ) }); static SHAPE804: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)); + Shapes::or( + s, + collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 0.9375), + ) +}); +static SHAPE805: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)); @@ -5129,7 +5131,7 @@ static SHAPE804: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE805: LazyLock = LazyLock::new(|| { +static SHAPE806: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)); @@ -5138,7 +5140,7 @@ static SHAPE805: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0., 1., 0.625, 0.9375), ) }); -static SHAPE806: LazyLock = LazyLock::new(|| { +static SHAPE807: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); Shapes::or( @@ -5146,21 +5148,9 @@ static SHAPE806: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 1.), ) }); -static SHAPE807: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), - ); - Shapes::or( - s, - collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 1.), - ) -}); static SHAPE808: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), @@ -5171,6 +5161,18 @@ static SHAPE808: LazyLock = LazyLock::new(|| { ) }); static SHAPE809: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), + ); + Shapes::or( + s, + collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 1.), + ) +}); +static SHAPE810: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); @@ -5179,25 +5181,9 @@ static SHAPE809: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE810: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), - ); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ); - Shapes::or( - s, - collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), - ) -}); static SHAPE811: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), @@ -5212,6 +5198,22 @@ static SHAPE811: LazyLock = LazyLock::new(|| { ) }); static SHAPE812: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), + ); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ); + Shapes::or( + s, + collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), + ) +}); +static SHAPE813: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)); @@ -5220,7 +5222,7 @@ static SHAPE812: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE813: LazyLock = LazyLock::new(|| { +static SHAPE814: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( @@ -5234,7 +5236,7 @@ static SHAPE813: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE814: LazyLock = LazyLock::new(|| { +static SHAPE815: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or( @@ -5247,7 +5249,7 @@ static SHAPE814: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE815: LazyLock = LazyLock::new(|| { +static SHAPE816: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 1., 0.0625)); Shapes::or( @@ -5255,7 +5257,7 @@ static SHAPE815: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 1.), ) }); -static SHAPE816: LazyLock = LazyLock::new(|| { +static SHAPE817: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5265,7 +5267,7 @@ static SHAPE816: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE817: LazyLock = LazyLock::new(|| { +static SHAPE818: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5274,7 +5276,7 @@ static SHAPE817: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 1.), ) }); -static SHAPE818: LazyLock = LazyLock::new(|| { +static SHAPE819: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); @@ -5283,7 +5285,7 @@ static SHAPE818: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE819: LazyLock = LazyLock::new(|| { +static SHAPE820: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5297,7 +5299,7 @@ static SHAPE819: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE820: LazyLock = LazyLock::new(|| { +static SHAPE821: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5310,7 +5312,7 @@ static SHAPE820: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE821: LazyLock = LazyLock::new(|| { +static SHAPE822: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)); @@ -5319,7 +5321,7 @@ static SHAPE821: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE822: LazyLock = LazyLock::new(|| { +static SHAPE823: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5331,7 +5333,7 @@ static SHAPE822: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE823: LazyLock = LazyLock::new(|| { +static SHAPE824: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5341,30 +5343,20 @@ static SHAPE823: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0.0625, 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE824: LazyLock = LazyLock::new(|| { +static SHAPE825: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 1., 1.)) }); -static SHAPE825: LazyLock = LazyLock::new(|| { +static SHAPE826: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE826: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ); - let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 1., 0.9375)); - Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) -}); static SHAPE827: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), @@ -5373,19 +5365,29 @@ static SHAPE827: LazyLock = LazyLock::new(|| { Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); static SHAPE828: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ); + let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 1., 0.9375)); + Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) +}); +static SHAPE829: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0., 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE829: LazyLock = LazyLock::new(|| { +static SHAPE830: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE830: LazyLock = LazyLock::new(|| { +static SHAPE831: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( @@ -5395,7 +5397,7 @@ static SHAPE830: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE831: LazyLock = LazyLock::new(|| { +static SHAPE832: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or( @@ -5405,7 +5407,7 @@ static SHAPE831: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE832: LazyLock = LazyLock::new(|| { +static SHAPE833: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); @@ -5416,27 +5418,9 @@ static SHAPE832: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE833: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), - ); - let s = Shapes::or( - s, - collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), - ); - let s = Shapes::or( - s, - collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 0.9375), - ); - let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); - Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) -}); static SHAPE834: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); - let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( s, collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), @@ -5453,6 +5437,24 @@ static SHAPE834: LazyLock = LazyLock::new(|| { Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); static SHAPE835: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); + let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0., 1., 0.625, 0.0625), + ); + let s = Shapes::or( + s, + collision::box_shape(0.0625, 0.0625, 0.9375, 1., 0.625, 1.), + ); + let s = Shapes::or( + s, + collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 0.9375), + ); + let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); + Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) +}); +static SHAPE836: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 1., 1.)); @@ -5462,7 +5464,7 @@ static SHAPE835: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE836: LazyLock = LazyLock::new(|| { +static SHAPE837: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or( @@ -5477,7 +5479,7 @@ static SHAPE836: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE837: LazyLock = LazyLock::new(|| { +static SHAPE838: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or( @@ -5491,14 +5493,14 @@ static SHAPE837: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE838: LazyLock = LazyLock::new(|| { +static SHAPE839: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0.0625, 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE839: LazyLock = LazyLock::new(|| { +static SHAPE840: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0.9375, 1., 0.625, 1.)); @@ -5508,7 +5510,7 @@ static SHAPE839: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE840: LazyLock = LazyLock::new(|| { +static SHAPE841: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5523,7 +5525,7 @@ static SHAPE840: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE841: LazyLock = LazyLock::new(|| { +static SHAPE842: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5537,7 +5539,7 @@ static SHAPE841: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE842: LazyLock = LazyLock::new(|| { +static SHAPE843: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.0625, 1.); let s = Shapes::or(s, collision::box_shape(0., 0.0625, 0., 0.0625, 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.0625, 0.0625, 0., 1., 1., 0.0625)); @@ -5549,143 +5551,143 @@ static SHAPE842: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE843: LazyLock = - LazyLock::new(|| collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.)); static SHAPE844: LazyLock = + LazyLock::new(|| collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.)); +static SHAPE845: LazyLock = LazyLock::new(|| collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)); -static SHAPE845: LazyLock = LazyLock::new(|| { +static SHAPE846: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) }); -static SHAPE846: LazyLock = LazyLock::new(|| { +static SHAPE847: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) }); -static SHAPE847: LazyLock = LazyLock::new(|| { +static SHAPE848: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE848: LazyLock = +static SHAPE849: LazyLock = LazyLock::new(|| collision::box_shape(0., 0., 0., 1., 0.625, 0.0625)); -static SHAPE849: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)) -}); static SHAPE850: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)) }); static SHAPE851: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)) +}); +static SHAPE852: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)) }); -static SHAPE852: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); - Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) -}); static SHAPE853: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) }); static SHAPE854: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); + Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) +}); +static SHAPE855: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 1., 1.)) }); -static SHAPE855: LazyLock = LazyLock::new(|| { +static SHAPE856: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE856: LazyLock = LazyLock::new(|| { +static SHAPE857: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)) }); -static SHAPE857: LazyLock = LazyLock::new(|| { +static SHAPE858: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE858: LazyLock = LazyLock::new(|| { +static SHAPE859: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 1., 0.0625); Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)) }); -static SHAPE859: LazyLock = LazyLock::new(|| { +static SHAPE860: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE860: LazyLock = LazyLock::new(|| { +static SHAPE861: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)) }); -static SHAPE861: LazyLock = LazyLock::new(|| { +static SHAPE862: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE862: LazyLock = +static SHAPE863: LazyLock = LazyLock::new(|| collision::box_shape(0.9375, 0., 0., 1., 0.625, 1.)); -static SHAPE863: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 1.)) -}); static SHAPE864: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 1.)) }); static SHAPE865: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 1.)) +}); +static SHAPE866: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) }); -static SHAPE866: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); - Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) -}); static SHAPE867: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) }); static SHAPE868: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0.9375, 1., 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) }); static SHAPE869: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0.9375, 1., 1., 1.); + Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) +}); +static SHAPE870: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE870: LazyLock = LazyLock::new(|| { +static SHAPE871: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 0.625, 0.9375)) }); -static SHAPE871: LazyLock = LazyLock::new(|| { +static SHAPE872: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)) }); -static SHAPE872: LazyLock = LazyLock::new(|| { +static SHAPE873: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)) }); -static SHAPE873: LazyLock = LazyLock::new(|| { +static SHAPE874: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)) }); -static SHAPE874: LazyLock = LazyLock::new(|| { +static SHAPE875: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)); Shapes::or( @@ -5693,17 +5695,8 @@ static SHAPE874: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE875: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); - Shapes::or( - s, - collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), - ) -}); static SHAPE876: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); Shapes::or( @@ -5712,6 +5705,15 @@ static SHAPE876: LazyLock = LazyLock::new(|| { ) }); static SHAPE877: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); + Shapes::or( + s, + collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), + ) +}); +static SHAPE878: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 1., 1.)); Shapes::or( @@ -5719,7 +5721,7 @@ static SHAPE877: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE878: LazyLock = LazyLock::new(|| { +static SHAPE879: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5729,7 +5731,7 @@ static SHAPE878: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE879: LazyLock = LazyLock::new(|| { +static SHAPE880: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5738,22 +5740,22 @@ static SHAPE879: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE880: LazyLock = LazyLock::new(|| { +static SHAPE881: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 1., 0.0625); Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)) }); -static SHAPE881: LazyLock = LazyLock::new(|| { +static SHAPE882: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE882: LazyLock = LazyLock::new(|| { +static SHAPE883: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 1.)) }); -static SHAPE883: LazyLock = LazyLock::new(|| { +static SHAPE884: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 1., 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)); Shapes::or( @@ -5761,7 +5763,7 @@ static SHAPE883: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE884: LazyLock = LazyLock::new(|| { +static SHAPE885: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); @@ -5771,7 +5773,7 @@ static SHAPE884: LazyLock = LazyLock::new(|| { ); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE885: LazyLock = LazyLock::new(|| { +static SHAPE886: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); @@ -5780,7 +5782,7 @@ static SHAPE885: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE886: LazyLock = LazyLock::new(|| { +static SHAPE887: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 1., 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 1., 1.)); Shapes::or( @@ -5788,7 +5790,7 @@ static SHAPE886: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE887: LazyLock = LazyLock::new(|| { +static SHAPE888: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5799,7 +5801,7 @@ static SHAPE887: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE888: LazyLock = LazyLock::new(|| { +static SHAPE889: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5808,67 +5810,59 @@ static SHAPE888: LazyLock = LazyLock::new(|| { collision::box_shape(0.9375, 0., 0.0625, 1., 0.625, 0.9375), ) }); -static SHAPE889: LazyLock = LazyLock::new(|| { +static SHAPE890: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 1.)) }); -static SHAPE890: LazyLock = LazyLock::new(|| { +static SHAPE891: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE891: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); - let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 0.9375)); - Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) -}); static SHAPE892: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); static SHAPE893: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); + let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 0.9375)); + Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) +}); +static SHAPE894: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0., 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE894: LazyLock = LazyLock::new(|| { +static SHAPE895: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE895: LazyLock = LazyLock::new(|| { +static SHAPE896: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE896: LazyLock = LazyLock::new(|| { +static SHAPE897: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE897: LazyLock = LazyLock::new(|| { +static SHAPE898: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE898: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); - let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); - let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); - let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); - Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) -}); static SHAPE899: LazyLock = LazyLock::new(|| { - let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); @@ -5876,12 +5870,20 @@ static SHAPE899: LazyLock = LazyLock::new(|| { Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); static SHAPE900: LazyLock = LazyLock::new(|| { + let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); + let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); + let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); + let s = Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)); + Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) +}); +static SHAPE901: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 0.625, 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE901: LazyLock = LazyLock::new(|| { +static SHAPE902: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5889,26 +5891,26 @@ static SHAPE901: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE902: LazyLock = LazyLock::new(|| { +static SHAPE903: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 0.625, 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0., 1., 1., 0.0625)) }); -static SHAPE903: LazyLock = LazyLock::new(|| { +static SHAPE904: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 1.)); Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)) }); -static SHAPE904: LazyLock = LazyLock::new(|| { +static SHAPE905: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 1., 1., 0.0625); let s = Shapes::or(s, collision::box_shape(0., 0., 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE905: LazyLock = LazyLock::new(|| { +static SHAPE906: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); @@ -5916,14 +5918,14 @@ static SHAPE905: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE906: LazyLock = LazyLock::new(|| { +static SHAPE907: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 1., 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 0.625, 1.)); let s = Shapes::or(s, collision::box_shape(0.9375, 0., 0.0625, 1., 1., 0.9375)); Shapes::or(s, collision::box_shape(0.9375, 0.625, 0.9375, 1., 1., 1.)) }); -static SHAPE907: LazyLock = LazyLock::new(|| { +static SHAPE908: LazyLock = LazyLock::new(|| { let s = collision::box_shape(0., 0., 0., 0.0625, 0.625, 1.); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0., 1., 1., 0.0625)); let s = Shapes::or(s, collision::box_shape(0.0625, 0., 0.9375, 1., 1., 1.)); @@ -5931,7 +5933,7 @@ static SHAPE907: LazyLock = LazyLock::new(|| { let s = Shapes::or(s, collision::box_shape(0., 0.625, 0., 0.0625, 1., 0.0625)); Shapes::or(s, collision::box_shape(0., 0.625, 0.9375, 0.0625, 1., 1.)) }); -static SHAPE908: LazyLock = +static SHAPE909: LazyLock = LazyLock::new(|| collision::box_shape(0.0625, 0.125, 0.0625, 0.9375, 1., 0.9375)); impl BlockWithShape for BlockState { @@ -5947,15 +5949,15 @@ impl BlockWithShape for BlockState { } fn is_collision_shape_empty(&self) -> bool { - matches!(self.id(), 0|29..=84|86..=117|1987..=2034|2047..=2056|2109..=2136|2401..=2918|3042..=4337|4342..=4349|4366..=4685|4758..=4777|4858..=5705|5802..=5827|5892..=5911|5916..=5950|5976|5978..=5993|6037..=6041|6043..=6044|7056..=7369|7372..=7373|7376..=7377|7380..=7381|7384..=7385|7388..=7389|7392..=7393|7396..=7397|7737|7740|8169..=8172|8190|8305..=8448|8709|8712|9033|9036|9380..=9635|9952..=9983|10129..=10152|11256..=11287|11636..=11967|12205..=12206|12209..=12210|12213..=12214|12217..=12218|12221..=12222|12225..=12226|12229..=12230|12233..=12234|12237..=12238|12241..=12242|12245..=12246|12249..=12250|12253..=12254|12257..=12258|12261..=12262|12265..=12266|12269..=12270|12273..=12274|12277..=12278|12281..=12282|12285..=12286|12289..=12290|12293..=12294|12297..=12298|12301..=12302|12305..=12306|12309..=12310|12313..=12314|12317..=12318|12321..=12322|12325..=12326|12329..=12330|12333..=12334|12337..=12338|12341..=12342|12345..=12346|12349..=12350|12353..=12354|12357..=12358|12361..=12362|12365..=12366|12369..=12370|12373..=12374|12377..=12378|12381..=12382|12385..=12386|12389..=12390|12393..=12394|12397..=12398|12401..=12402|12405..=12406|12409..=12410|12413..=12414|12417..=12418|12421..=12422|12425..=12426|12429..=12430|12433..=12434|12437..=12438|12441..=12442|12445..=12446|12449..=12450|12453..=12454|12457..=12458|12461..=12462|12465..=12466|12469..=12470|12473..=12474|12477..=12478|12481..=12482|12485..=12486|12489..=12490|13518..=13520|13522|13524|13526|13528|13530..=13535|13537|13572|13783..=13809|13836..=13955|13967|13981..=13984|15189|15192|15513|15516|15837|15840|16161|16164|16485|16488|16809|16812|17133|17136|17457|17460|17781|17784|18105|18108|18429|18432|18753|18756|19077|19080|19598..=19601|19615|19617..=19618|19632|19634..=19688|19703..=19706|19899..=19900|19903..=19904|19907..=19908|19911..=19912|19915..=19916|19919..=19920|19923..=19924|19927..=19928|19931..=19932|19935..=19936|19939..=19940|19943..=19944|19947..=19948|19951..=19952|19955..=19956|19959..=19960|20123..=20170|20299..=20378|20575|20578|20995|20998|21400..=21425|21432|21435|22202|22205|22613|22616|23025|23028|23346|23828..=23955|25797..=25851|25855..=25902|25910..=25911|25918..=25919|25926..=25927|25934..=25961|26060|26063|26471|26474|26882|26885|27293|27296|27632|27826..=27910|27913) + matches!(self.id(), 0|29..=84|86..=117|1987..=2034|2047..=2056|2109..=2136|2401..=2918|3042..=4337|4342..=4349|4366..=4685|4758..=4777|4858..=5705|5802..=5827|5892..=5911|5916..=5950|5976|5978..=5993|6037..=6041|6043..=6044|7056..=7369|7372..=7373|7376..=7377|7380..=7381|7384..=7385|7388..=7389|7392..=7393|7396..=7397|7737|7740|8169..=8172|8190|8305..=8448|8709|8712|9033|9036|9380..=9635|9952..=9983|10129..=10152|11256..=11287|11636..=11967|12205..=12206|12209..=12210|12213..=12214|12217..=12218|12221..=12222|12225..=12226|12229..=12230|12233..=12234|12237..=12238|12241..=12242|12245..=12246|12249..=12250|12253..=12254|12257..=12258|12261..=12262|12265..=12266|12269..=12270|12273..=12274|12277..=12278|12281..=12282|12285..=12286|12289..=12290|12293..=12294|12297..=12298|12301..=12302|12305..=12306|12309..=12310|12313..=12314|12317..=12318|12321..=12322|12325..=12326|12329..=12330|12333..=12334|12337..=12338|12341..=12342|12345..=12346|12349..=12350|12353..=12354|12357..=12358|12361..=12362|12365..=12366|12369..=12370|12373..=12374|12377..=12378|12381..=12382|12385..=12386|12389..=12390|12393..=12394|12397..=12398|12401..=12402|12405..=12406|12409..=12410|12413..=12414|12417..=12418|12421..=12422|12425..=12426|12429..=12430|12433..=12434|12437..=12438|12441..=12442|12445..=12446|12449..=12450|12453..=12454|12457..=12458|12461..=12462|12465..=12466|12469..=12470|12473..=12474|12477..=12478|12481..=12482|12485..=12486|12489..=12490|13518..=13520|13522|13524|13526|13528|13530..=13535|13537|13572|13783..=13809|13868..=13987|13999|14013..=14016|15221|15224|15545|15548|15869|15872|16193|16196|16517|16520|16841|16844|17165|17168|17489|17492|17813|17816|18137|18140|18461|18464|18785|18788|19109|19112|19630..=19633|19647|19649..=19650|19664|19666..=19720|19735..=19738|19931..=19932|19935..=19936|19939..=19940|19943..=19944|19947..=19948|19951..=19952|19955..=19956|19959..=19960|19963..=19964|19967..=19968|19971..=19972|19975..=19976|19979..=19980|19983..=19984|19987..=19988|19991..=19992|20155..=20202|20331..=20410|20607|20610|21027|21030|21432..=21457|21464|21467|22234|22237|22645|22648|23057|23060|23378|23860..=23987|25829..=25883|25887..=25934|25942..=25943|25950..=25951|25958..=25959|25966..=25993|26092|26095|26503|26506|26914|26917|27325|27328|27664|27858..=27942|27945) } fn is_collision_shape_full(&self) -> bool { - matches!(self.id(), 1..=28|85|118..=1730|2041..=2046|2063..=2068|2093..=2108|2137..=2400|2919..=2937|4338..=4341|4358..=4365|5912..=5915|5958..=5959|5977|5994..=5995|6028|6030..=6036|6042|6045..=6052|6124..=6139|6780..=6983|7054..=7055|7640..=7641|7643..=7644|7729..=7730|8055..=8056|8199|8201..=8202|8295..=8296|8449|8690..=8702|10032..=10033|10044..=10048|10153..=10180|11253..=11255|11352..=11354|11599..=11600|11605..=11606|11611..=11616|11633..=11635|11968..=11970|12055..=12056|12061..=12062|12067..=12068|12073..=12074|12079..=12080|12085..=12086|12091..=12092|12097..=12098|12103..=12104|12109..=12110|12115..=12116|12121..=12122|12127..=12128|12133..=12134|12139..=12140|12145..=12146|12151..=12152|12157..=12158|12163..=12164|12169..=12170|12175..=12176|12181..=12182|12187..=12188|12193..=12194|12199..=12204|13427..=13436|13517|13538..=13571|13573..=13782|13810|13826..=13835|13964|15109..=15110|15115..=15116|15121..=15122|15127..=15128|15133..=15134|15139..=15140|15145..=15146|15151..=15152|15157..=15158|15163..=15164|15169..=15170|15175..=15176|15181..=15182|19427..=19460|19489|19602..=19614|19616|19619..=19631|19633|19689..=19690|19695..=19696|19701..=19702|20379..=20399|20409..=20472|20474..=20482|20487..=20488|20897..=20902|20907..=20908|21313|21398..=21399|21750..=21752|22059..=22060|22109|22114..=22115|22520|22525..=22526|22931..=22932|22937..=22938|23343..=23345|23827|23956..=23957|23966..=23983|24308..=24309|24314..=24315|24320..=24321|24326..=24335|24660..=24661|24666..=24667|24672..=24673|24678..=24679|25704..=25751|25796|25903|25962|25964..=25967|26052..=26053|26378|26463..=26464|26789|26874..=26875|27200|27285..=27286|27611..=27620|27623..=27631|27633|27650..=27741|27744) + matches!(self.id(), 1..=28|85|118..=1730|2041..=2046|2063..=2068|2093..=2108|2137..=2400|2919..=2937|4338..=4341|4358..=4365|5912..=5915|5958..=5959|5977|5994..=5995|6028|6030..=6036|6042|6045..=6052|6124..=6139|6780..=6983|7054..=7055|7640..=7641|7643..=7644|7729..=7730|8055..=8056|8199|8201..=8202|8295..=8296|8449|8690..=8702|10032..=10033|10044..=10048|10153..=10180|11253..=11255|11352..=11354|11599..=11600|11605..=11606|11611..=11616|11633..=11635|11968..=11970|12055..=12056|12061..=12062|12067..=12068|12073..=12074|12079..=12080|12085..=12086|12091..=12092|12097..=12098|12103..=12104|12109..=12110|12115..=12116|12121..=12122|12127..=12128|12133..=12134|12139..=12140|12145..=12146|12151..=12152|12157..=12158|12163..=12164|12169..=12170|12175..=12176|12181..=12182|12187..=12188|12193..=12194|12199..=12204|13427..=13436|13517|13538..=13571|13573..=13782|13810|13858..=13867|13996|15141..=15142|15147..=15148|15153..=15154|15159..=15160|15165..=15166|15171..=15172|15177..=15178|15183..=15184|15189..=15190|15195..=15196|15201..=15202|15207..=15208|15213..=15214|19459..=19492|19521|19634..=19646|19648|19651..=19663|19665|19721..=19722|19727..=19728|19733..=19734|20411..=20431|20441..=20504|20506..=20514|20519..=20520|20929..=20934|20939..=20940|21345|21430..=21431|21782..=21784|22091..=22092|22141|22146..=22147|22552|22557..=22558|22963..=22964|22969..=22970|23375..=23377|23859|23988..=23989|23998..=24015|24340..=24341|24346..=24347|24352..=24353|24358..=24367|24692..=24693|24698..=24699|24704..=24705|24710..=24711|25736..=25783|25828|25935|25994|25996..=25999|26084..=26085|26410|26495..=26496|26821|26906..=26907|27232|27317..=27318|27643..=27652|27655..=27663|27665|27682..=27773|27776) } } -static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ +static COLLISION_SHAPES_MAP: [&LazyLock; 27946] = [ &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, @@ -7465,7 +7467,11 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE651, &SHAPE651, &SHAPE651, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, - &SHAPE652, &SHAPE653, &SHAPE653, &SHAPE653, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE652, &SHAPE653, &SHAPE653, &SHAPE653, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, @@ -7478,10 +7484,10 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE660, &SHAPE660, &SHAPE661, &SHAPE661, - &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE1, &SHAPE650, &SHAPE650, &SHAPE0, &SHAPE665, - &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE665, - &SHAPE665, &SHAPE665, &SHAPE665, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE76, + &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, + &SHAPE663, &SHAPE663, &SHAPE664, &SHAPE664, &SHAPE1, &SHAPE650, &SHAPE650, &SHAPE0, &SHAPE666, + &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, + &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, @@ -8140,23 +8146,23 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE441, &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE449, - &SHAPE451, &SHAPE451, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, - &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, - &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, - &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, - &SHAPE668, &SHAPE668, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE451, &SHAPE451, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, + &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, + &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, + &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, + &SHAPE669, &SHAPE669, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE670, &SHAPE670, &SHAPE671, - &SHAPE671, &SHAPE672, &SHAPE673, &SHAPE674, &SHAPE675, &SHAPE676, &SHAPE676, &SHAPE677, - &SHAPE677, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, - &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, &SHAPE678, - &SHAPE678, &SHAPE1, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE683, &SHAPE683, - &SHAPE683, &SHAPE683, &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE685, &SHAPE685, - &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, &SHAPE686, - &SHAPE687, &SHAPE687, &SHAPE688, &SHAPE688, &SHAPE689, &SHAPE689, &SHAPE690, &SHAPE690, - &SHAPE690, &SHAPE690, &SHAPE691, &SHAPE691, &SHAPE691, &SHAPE691, &SHAPE692, &SHAPE692, - &SHAPE693, &SHAPE693, &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, &SHAPE555, &SHAPE555, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE671, &SHAPE671, &SHAPE672, + &SHAPE672, &SHAPE673, &SHAPE674, &SHAPE675, &SHAPE676, &SHAPE677, &SHAPE677, &SHAPE678, + &SHAPE678, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, + &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE679, + &SHAPE679, &SHAPE1, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE684, &SHAPE684, + &SHAPE684, &SHAPE684, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, &SHAPE686, + &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE687, &SHAPE687, + &SHAPE688, &SHAPE688, &SHAPE689, &SHAPE689, &SHAPE690, &SHAPE690, &SHAPE691, &SHAPE691, + &SHAPE691, &SHAPE691, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, + &SHAPE694, &SHAPE694, &SHAPE693, &SHAPE693, &SHAPE694, &SHAPE694, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, @@ -8255,8 +8261,8 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &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, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, - &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE699, &SHAPE699, &SHAPE699, &SHAPE699, &SHAPE699, &SHAPE699, + &SHAPE699, &SHAPE699, &SHAPE699, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -8417,51 +8423,51 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE441, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE444, &SHAPE446, &SHAPE446, &SHAPE449, &SHAPE451, &SHAPE451, &SHAPE449, &SHAPE451, - &SHAPE451, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE1, &SHAPE1, &SHAPE710, &SHAPE710, - &SHAPE711, &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, - &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, &SHAPE1, &SHAPE340, + &SHAPE451, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE1, &SHAPE1, &SHAPE711, &SHAPE711, + &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &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, &SHAPE1, &SHAPE340, &SHAPE340, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, @@ -8894,23 +8900,23 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, - &SHAPE734, &SHAPE734, &SHAPE734, &SHAPE734, &SHAPE735, &SHAPE735, &SHAPE736, &SHAPE736, - &SHAPE737, &SHAPE737, &SHAPE737, &SHAPE737, &SHAPE738, &SHAPE738, &SHAPE738, &SHAPE738, - &SHAPE739, &SHAPE739, &SHAPE739, &SHAPE739, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE735, &SHAPE735, &SHAPE735, &SHAPE735, &SHAPE736, &SHAPE736, &SHAPE737, &SHAPE737, + &SHAPE738, &SHAPE738, &SHAPE738, &SHAPE738, &SHAPE739, &SHAPE739, &SHAPE739, &SHAPE739, + &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE1, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, - &SHAPE0, &SHAPE741, &SHAPE741, &SHAPE75, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE742, &SHAPE742, &SHAPE75, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &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, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE760, &SHAPE760, - &SHAPE0, &SHAPE0, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE760, &SHAPE760, &SHAPE0, - &SHAPE0, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE760, &SHAPE760, &SHAPE0, &SHAPE0, - &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE758, &SHAPE760, &SHAPE760, &SHAPE0, &SHAPE0, &SHAPE0, + &SHAPE0, &SHAPE0, &SHAPE1, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE761, &SHAPE761, + &SHAPE0, &SHAPE0, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE761, &SHAPE761, &SHAPE0, + &SHAPE0, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE761, &SHAPE761, &SHAPE0, &SHAPE0, + &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE761, &SHAPE761, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &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, &SHAPE189, &SHAPE1, &SHAPE1, &SHAPE1, @@ -9147,7 +9153,7 @@ static COLLISION_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE38, &SHAPE38, &SHAPE0, ]; -static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ +static OUTLINE_SHAPES_MAP: [&LazyLock; 27946] = [ &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, @@ -10757,26 +10763,30 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE1, &SHAPE1, &SHAPE651, &SHAPE651, &SHAPE651, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE652, &SHAPE653, &SHAPE653, - &SHAPE653, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE653, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, - &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE655, &SHAPE655, &SHAPE655, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, &SHAPE654, + &SHAPE654, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, - &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, - &SHAPE655, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE656, &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, - &SHAPE659, &SHAPE660, &SHAPE660, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, - &SHAPE663, &SHAPE1, &SHAPE650, &SHAPE650, &SHAPE664, &SHAPE666, &SHAPE666, &SHAPE666, - &SHAPE666, &SHAPE667, &SHAPE667, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE666, &SHAPE667, - &SHAPE667, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE76, &SHAPE76, &SHAPE77, + &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE655, &SHAPE656, &SHAPE656, &SHAPE656, + &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, + &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, &SHAPE656, + &SHAPE656, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE657, &SHAPE657, &SHAPE658, &SHAPE658, &SHAPE659, &SHAPE659, &SHAPE660, + &SHAPE660, &SHAPE661, &SHAPE661, &SHAPE662, &SHAPE662, &SHAPE663, &SHAPE663, &SHAPE664, + &SHAPE664, &SHAPE1, &SHAPE650, &SHAPE650, &SHAPE665, &SHAPE667, &SHAPE667, &SHAPE667, + &SHAPE667, &SHAPE668, &SHAPE668, &SHAPE667, &SHAPE667, &SHAPE667, &SHAPE667, &SHAPE668, + &SHAPE668, &SHAPE38, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE0, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, &SHAPE88, &SHAPE88, &SHAPE89, &SHAPE89, &SHAPE90, &SHAPE90, @@ -11435,23 +11445,23 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, + &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, + &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE670, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, &SHAPE669, - &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, - &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE668, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE670, &SHAPE670, &SHAPE671, &SHAPE671, &SHAPE672, - &SHAPE673, &SHAPE674, &SHAPE675, &SHAPE676, &SHAPE676, &SHAPE677, &SHAPE677, &SHAPE679, - &SHAPE679, &SHAPE679, &SHAPE679, &SHAPE680, &SHAPE680, &SHAPE680, &SHAPE680, &SHAPE681, - &SHAPE681, &SHAPE681, &SHAPE681, &SHAPE682, &SHAPE682, &SHAPE682, &SHAPE682, &SHAPE1, - &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE683, &SHAPE683, &SHAPE683, &SHAPE683, - &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, - &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, &SHAPE686, &SHAPE687, &SHAPE687, - &SHAPE688, &SHAPE688, &SHAPE689, &SHAPE689, &SHAPE690, &SHAPE690, &SHAPE690, &SHAPE690, - &SHAPE691, &SHAPE691, &SHAPE691, &SHAPE691, &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, - &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE671, &SHAPE671, &SHAPE672, &SHAPE672, &SHAPE673, + &SHAPE674, &SHAPE675, &SHAPE676, &SHAPE677, &SHAPE677, &SHAPE678, &SHAPE678, &SHAPE680, + &SHAPE680, &SHAPE680, &SHAPE680, &SHAPE681, &SHAPE681, &SHAPE681, &SHAPE681, &SHAPE682, + &SHAPE682, &SHAPE682, &SHAPE682, &SHAPE683, &SHAPE683, &SHAPE683, &SHAPE683, &SHAPE1, + &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE556, &SHAPE684, &SHAPE684, &SHAPE684, &SHAPE684, + &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE685, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, + &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE686, &SHAPE687, &SHAPE687, &SHAPE688, &SHAPE688, + &SHAPE689, &SHAPE689, &SHAPE690, &SHAPE690, &SHAPE691, &SHAPE691, &SHAPE691, &SHAPE691, + &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE692, &SHAPE693, &SHAPE693, &SHAPE694, &SHAPE694, + &SHAPE693, &SHAPE693, &SHAPE694, &SHAPE694, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, @@ -11461,15 +11471,15 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE555, &SHAPE562, &SHAPE23, &SHAPE23, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE694, &SHAPE1, &SHAPE20, &SHAPE695, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE694, - &SHAPE1, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, - &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, - &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE696, - &SHAPE696, &SHAPE696, &SHAPE696, &SHAPE23, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, + &SHAPE1, &SHAPE1, &SHAPE695, &SHAPE1, &SHAPE20, &SHAPE696, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE695, + &SHAPE1, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, - &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE191, &SHAPE20, &SHAPE1, + &SHAPE697, &SHAPE697, &SHAPE697, &SHAPE23, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, + &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, + &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, + &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE698, &SHAPE191, &SHAPE20, &SHAPE1, &SHAPE1, &SHAPE340, &SHAPE340, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE340, &SHAPE340, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE215, &SHAPE216, &SHAPE215, &SHAPE216, &SHAPE236, &SHAPE238, &SHAPE236, &SHAPE238, &SHAPE240, &SHAPE242, &SHAPE240, &SHAPE242, &SHAPE244, @@ -11555,8 +11565,8 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE196, &SHAPE196, &SHAPE197, &SHAPE197, &SHAPE198, &SHAPE198, &SHAPE199, &SHAPE199, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE698, &SHAPE699, &SHAPE700, - &SHAPE701, &SHAPE702, &SHAPE703, &SHAPE704, &SHAPE705, &SHAPE705, &SHAPE1, &SHAPE1, &SHAPE1, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE699, &SHAPE700, &SHAPE701, + &SHAPE702, &SHAPE703, &SHAPE704, &SHAPE705, &SHAPE706, &SHAPE706, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -11718,51 +11728,51 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE520, &SHAPE521, &SHAPE522, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE523, &SHAPE524, &SHAPE525, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE706, &SHAPE706, - &SHAPE706, &SHAPE706, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, - &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, - &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE709, &SHAPE1, &SHAPE1, &SHAPE710, &SHAPE710, &SHAPE711, - &SHAPE711, &SHAPE712, &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &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, &SHAPE1, &SHAPE340, &SHAPE340, &SHAPE13, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE301, &SHAPE707, &SHAPE707, + &SHAPE707, &SHAPE707, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE708, &SHAPE709, &SHAPE709, + &SHAPE709, &SHAPE709, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, + &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE710, &SHAPE1, &SHAPE1, &SHAPE711, &SHAPE711, &SHAPE712, + &SHAPE712, &SHAPE713, &SHAPE713, &SHAPE714, &SHAPE714, &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, &SHAPE1, &SHAPE340, &SHAPE340, &SHAPE13, &SHAPE13, &SHAPE1, &SHAPE1, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, &SHAPE87, &SHAPE87, @@ -12197,28 +12207,28 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE1, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE578, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE579, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, &SHAPE266, - &SHAPE266, &SHAPE734, &SHAPE734, &SHAPE734, &SHAPE734, &SHAPE735, &SHAPE735, &SHAPE736, - &SHAPE736, &SHAPE737, &SHAPE737, &SHAPE737, &SHAPE737, &SHAPE738, &SHAPE738, &SHAPE738, - &SHAPE738, &SHAPE739, &SHAPE739, &SHAPE739, &SHAPE739, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE23, + &SHAPE266, &SHAPE735, &SHAPE735, &SHAPE735, &SHAPE735, &SHAPE736, &SHAPE736, &SHAPE737, + &SHAPE737, &SHAPE738, &SHAPE738, &SHAPE738, &SHAPE738, &SHAPE739, &SHAPE739, &SHAPE739, + &SHAPE739, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE740, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, - &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE740, &SHAPE741, &SHAPE741, - &SHAPE75, &SHAPE742, &SHAPE743, &SHAPE275, &SHAPE275, &SHAPE744, &SHAPE745, &SHAPE275, - &SHAPE275, &SHAPE746, &SHAPE747, &SHAPE275, &SHAPE275, &SHAPE748, &SHAPE749, &SHAPE275, - &SHAPE275, &SHAPE742, &SHAPE743, &SHAPE275, &SHAPE275, &SHAPE744, &SHAPE745, &SHAPE275, - &SHAPE275, &SHAPE746, &SHAPE747, &SHAPE275, &SHAPE275, &SHAPE748, &SHAPE749, &SHAPE275, - &SHAPE275, &SHAPE750, &SHAPE751, &SHAPE75, &SHAPE75, &SHAPE752, &SHAPE753, &SHAPE75, &SHAPE75, - &SHAPE754, &SHAPE755, &SHAPE75, &SHAPE75, &SHAPE756, &SHAPE757, &SHAPE75, &SHAPE75, &SHAPE1, - &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE759, &SHAPE761, &SHAPE761, &SHAPE762, &SHAPE762, - &SHAPE763, &SHAPE763, &SHAPE763, &SHAPE763, &SHAPE764, &SHAPE764, &SHAPE765, &SHAPE765, - &SHAPE766, &SHAPE766, &SHAPE766, &SHAPE766, &SHAPE767, &SHAPE767, &SHAPE768, &SHAPE768, - &SHAPE769, &SHAPE769, &SHAPE769, &SHAPE769, &SHAPE770, &SHAPE770, &SHAPE771, &SHAPE771, - &SHAPE772, &SHAPE772, &SHAPE773, &SHAPE773, &SHAPE774, &SHAPE774, &SHAPE775, &SHAPE775, + &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE741, &SHAPE742, &SHAPE742, + &SHAPE75, &SHAPE743, &SHAPE744, &SHAPE275, &SHAPE275, &SHAPE745, &SHAPE746, &SHAPE275, + &SHAPE275, &SHAPE747, &SHAPE748, &SHAPE275, &SHAPE275, &SHAPE749, &SHAPE750, &SHAPE275, + &SHAPE275, &SHAPE743, &SHAPE744, &SHAPE275, &SHAPE275, &SHAPE745, &SHAPE746, &SHAPE275, + &SHAPE275, &SHAPE747, &SHAPE748, &SHAPE275, &SHAPE275, &SHAPE749, &SHAPE750, &SHAPE275, + &SHAPE275, &SHAPE751, &SHAPE752, &SHAPE75, &SHAPE75, &SHAPE753, &SHAPE754, &SHAPE75, &SHAPE75, + &SHAPE755, &SHAPE756, &SHAPE75, &SHAPE75, &SHAPE757, &SHAPE758, &SHAPE75, &SHAPE75, &SHAPE1, + &SHAPE760, &SHAPE760, &SHAPE760, &SHAPE760, &SHAPE762, &SHAPE762, &SHAPE763, &SHAPE763, + &SHAPE764, &SHAPE764, &SHAPE764, &SHAPE764, &SHAPE765, &SHAPE765, &SHAPE766, &SHAPE766, + &SHAPE767, &SHAPE767, &SHAPE767, &SHAPE767, &SHAPE768, &SHAPE768, &SHAPE769, &SHAPE769, + &SHAPE770, &SHAPE770, &SHAPE770, &SHAPE770, &SHAPE771, &SHAPE771, &SHAPE772, &SHAPE772, + &SHAPE773, &SHAPE773, &SHAPE774, &SHAPE774, &SHAPE775, &SHAPE775, &SHAPE776, &SHAPE776, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, - &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE776, &SHAPE776, + &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE20, &SHAPE777, &SHAPE777, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE76, &SHAPE76, &SHAPE77, &SHAPE77, &SHAPE78, &SHAPE78, &SHAPE79, &SHAPE79, &SHAPE80, &SHAPE80, &SHAPE81, &SHAPE81, &SHAPE82, &SHAPE82, &SHAPE83, &SHAPE83, &SHAPE84, &SHAPE84, &SHAPE85, &SHAPE85, &SHAPE86, &SHAPE86, @@ -12421,7 +12431,7 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE526, &SHAPE527, &SHAPE528, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE529, &SHAPE530, &SHAPE531, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE38, &SHAPE38, &SHAPE1, &SHAPE1, &SHAPE1, - &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE777, &SHAPE1, &SHAPE23, &SHAPE23, + &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE778, &SHAPE1, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE23, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, @@ -12433,25 +12443,25 @@ static OUTLINE_SHAPES_MAP: [&LazyLock; 27914] = [ &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE1, &SHAPE557, &SHAPE557, &SHAPE1, - &SHAPE75, &SHAPE778, &SHAPE336, &SHAPE779, &SHAPE780, &SHAPE781, &SHAPE333, &SHAPE782, - &SHAPE332, &SHAPE783, &SHAPE784, &SHAPE785, &SHAPE786, &SHAPE787, &SHAPE788, &SHAPE789, - &SHAPE790, &SHAPE791, &SHAPE329, &SHAPE792, &SHAPE328, &SHAPE793, &SHAPE794, &SHAPE795, - &SHAPE325, &SHAPE796, &SHAPE324, &SHAPE797, &SHAPE798, &SHAPE799, &SHAPE800, &SHAPE801, - &SHAPE802, &SHAPE803, &SHAPE804, &SHAPE805, &SHAPE806, &SHAPE807, &SHAPE808, &SHAPE809, - &SHAPE810, &SHAPE811, &SHAPE812, &SHAPE813, &SHAPE814, &SHAPE815, &SHAPE816, &SHAPE817, - &SHAPE818, &SHAPE819, &SHAPE820, &SHAPE821, &SHAPE822, &SHAPE823, &SHAPE321, &SHAPE824, - &SHAPE320, &SHAPE825, &SHAPE826, &SHAPE827, &SHAPE317, &SHAPE828, &SHAPE316, &SHAPE829, - &SHAPE830, &SHAPE831, &SHAPE832, &SHAPE833, &SHAPE834, &SHAPE835, &SHAPE836, &SHAPE837, - &SHAPE313, &SHAPE838, &SHAPE312, &SHAPE839, &SHAPE840, &SHAPE841, &SHAPE309, &SHAPE842, - &SHAPE308, &SHAPE1, &SHAPE843, &SHAPE74, &SHAPE844, &SHAPE845, &SHAPE846, &SHAPE71, &SHAPE847, - &SHAPE70, &SHAPE848, &SHAPE849, &SHAPE850, &SHAPE851, &SHAPE852, &SHAPE853, &SHAPE854, - &SHAPE855, &SHAPE856, &SHAPE67, &SHAPE857, &SHAPE66, &SHAPE858, &SHAPE859, &SHAPE860, &SHAPE63, - &SHAPE861, &SHAPE62, &SHAPE862, &SHAPE863, &SHAPE864, &SHAPE865, &SHAPE866, &SHAPE867, - &SHAPE868, &SHAPE869, &SHAPE870, &SHAPE871, &SHAPE872, &SHAPE873, &SHAPE874, &SHAPE875, - &SHAPE876, &SHAPE877, &SHAPE878, &SHAPE879, &SHAPE880, &SHAPE881, &SHAPE882, &SHAPE883, - &SHAPE884, &SHAPE885, &SHAPE886, &SHAPE887, &SHAPE888, &SHAPE59, &SHAPE889, &SHAPE58, - &SHAPE890, &SHAPE891, &SHAPE892, &SHAPE55, &SHAPE893, &SHAPE54, &SHAPE894, &SHAPE895, - &SHAPE896, &SHAPE897, &SHAPE898, &SHAPE899, &SHAPE900, &SHAPE901, &SHAPE902, &SHAPE51, - &SHAPE903, &SHAPE50, &SHAPE904, &SHAPE905, &SHAPE906, &SHAPE47, &SHAPE907, &SHAPE46, &SHAPE908, + &SHAPE75, &SHAPE779, &SHAPE336, &SHAPE780, &SHAPE781, &SHAPE782, &SHAPE333, &SHAPE783, + &SHAPE332, &SHAPE784, &SHAPE785, &SHAPE786, &SHAPE787, &SHAPE788, &SHAPE789, &SHAPE790, + &SHAPE791, &SHAPE792, &SHAPE329, &SHAPE793, &SHAPE328, &SHAPE794, &SHAPE795, &SHAPE796, + &SHAPE325, &SHAPE797, &SHAPE324, &SHAPE798, &SHAPE799, &SHAPE800, &SHAPE801, &SHAPE802, + &SHAPE803, &SHAPE804, &SHAPE805, &SHAPE806, &SHAPE807, &SHAPE808, &SHAPE809, &SHAPE810, + &SHAPE811, &SHAPE812, &SHAPE813, &SHAPE814, &SHAPE815, &SHAPE816, &SHAPE817, &SHAPE818, + &SHAPE819, &SHAPE820, &SHAPE821, &SHAPE822, &SHAPE823, &SHAPE824, &SHAPE321, &SHAPE825, + &SHAPE320, &SHAPE826, &SHAPE827, &SHAPE828, &SHAPE317, &SHAPE829, &SHAPE316, &SHAPE830, + &SHAPE831, &SHAPE832, &SHAPE833, &SHAPE834, &SHAPE835, &SHAPE836, &SHAPE837, &SHAPE838, + &SHAPE313, &SHAPE839, &SHAPE312, &SHAPE840, &SHAPE841, &SHAPE842, &SHAPE309, &SHAPE843, + &SHAPE308, &SHAPE1, &SHAPE844, &SHAPE74, &SHAPE845, &SHAPE846, &SHAPE847, &SHAPE71, &SHAPE848, + &SHAPE70, &SHAPE849, &SHAPE850, &SHAPE851, &SHAPE852, &SHAPE853, &SHAPE854, &SHAPE855, + &SHAPE856, &SHAPE857, &SHAPE67, &SHAPE858, &SHAPE66, &SHAPE859, &SHAPE860, &SHAPE861, &SHAPE63, + &SHAPE862, &SHAPE62, &SHAPE863, &SHAPE864, &SHAPE865, &SHAPE866, &SHAPE867, &SHAPE868, + &SHAPE869, &SHAPE870, &SHAPE871, &SHAPE872, &SHAPE873, &SHAPE874, &SHAPE875, &SHAPE876, + &SHAPE877, &SHAPE878, &SHAPE879, &SHAPE880, &SHAPE881, &SHAPE882, &SHAPE883, &SHAPE884, + &SHAPE885, &SHAPE886, &SHAPE887, &SHAPE888, &SHAPE889, &SHAPE59, &SHAPE890, &SHAPE58, + &SHAPE891, &SHAPE892, &SHAPE893, &SHAPE55, &SHAPE894, &SHAPE54, &SHAPE895, &SHAPE896, + &SHAPE897, &SHAPE898, &SHAPE899, &SHAPE900, &SHAPE901, &SHAPE902, &SHAPE903, &SHAPE51, + &SHAPE904, &SHAPE50, &SHAPE905, &SHAPE906, &SHAPE907, &SHAPE47, &SHAPE908, &SHAPE46, &SHAPE909, &SHAPE23, &SHAPE37, &SHAPE37, &SHAPE38, &SHAPE38, &SHAPE1, ]; diff --git a/azalea-protocol/src/packets/config/c_clear_dialog.rs b/azalea-protocol/src/packets/config/c_clear_dialog.rs new file mode 100644 index 00000000..7114cc28 --- /dev/null +++ b/azalea-protocol/src/packets/config/c_clear_dialog.rs @@ -0,0 +1,5 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundConfigPacket; + +#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)] +pub struct ClientboundClearDialog {} diff --git a/azalea-protocol/src/packets/config/c_show_dialog.rs b/azalea-protocol/src/packets/config/c_show_dialog.rs new file mode 100644 index 00000000..7933f960 --- /dev/null +++ b/azalea-protocol/src/packets/config/c_show_dialog.rs @@ -0,0 +1,9 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundConfigPacket; +use azalea_registry::Holder; +use simdnbt::owned::Nbt; + +#[derive(Clone, Debug, AzBuf, ClientboundConfigPacket)] +pub struct ClientboundShowDialog { + pub dialog: Holder, +} diff --git a/azalea-protocol/src/packets/config/mod.rs b/azalea-protocol/src/packets/config/mod.rs index e7aea8fd..58e00ad5 100644 --- a/azalea-protocol/src/packets/config/mod.rs +++ b/azalea-protocol/src/packets/config/mod.rs @@ -5,32 +5,35 @@ use azalea_protocol_macros::declare_state_packets; declare_state_packets!(ConfigPacket, Clientbound => [ - cookie_request, // 0x00 - custom_payload, // 0x01 - disconnect, // 0x02 - finish_configuration, // 0x03 - keep_alive, // 0x04 - ping, // 0x05 - reset_chat, // 0x06 - registry_data, // 0x07 - resource_pack_pop, // 0x08 - resource_pack_push, // 0x09 - store_cookie, // 0x0A - transfer, // 0x0B - update_enabled_features, // 0x0C - update_tags, // 0x0D - select_known_packs, // 0x0E - custom_report_details, // 0x0F - server_links, // 0x10 + cookie_request, + custom_payload, + disconnect, + finish_configuration, + keep_alive, + ping, + reset_chat, + registry_data, + resource_pack_pop, + resource_pack_push, + store_cookie, + transfer, + update_enabled_features, + update_tags, + select_known_packs, + custom_report_details, + server_links, + clear_dialog, + show_dialog, ], Serverbound => [ - client_information, // 0x00 - cookie_response, // 0x01 - custom_payload, // 0x02 - finish_configuration, // 0x03 - keep_alive, // 0x04 - pong, // 0x05 - resource_pack, // 0x06 - select_known_packs, // 0x07 + client_information, + cookie_response, + custom_payload, + finish_configuration, + keep_alive, + pong, + resource_pack, + select_known_packs, + custom_click_action, ] ); diff --git a/azalea-protocol/src/packets/config/s_custom_click_action.rs b/azalea-protocol/src/packets/config/s_custom_click_action.rs new file mode 100644 index 00000000..4c168884 --- /dev/null +++ b/azalea-protocol/src/packets/config/s_custom_click_action.rs @@ -0,0 +1,9 @@ +use azalea_buf::AzBuf; +use azalea_core::resource_location::ResourceLocation; +use azalea_protocol_macros::ServerboundConfigPacket; + +#[derive(Clone, Debug, AzBuf, ServerboundConfigPacket)] +pub struct ServerboundCustomClickAction { + pub id: ResourceLocation, + pub payload: Option, +} diff --git a/azalea-protocol/src/packets/game/c_clear_dialog.rs b/azalea-protocol/src/packets/game/c_clear_dialog.rs new file mode 100644 index 00000000..98aaf8cf --- /dev/null +++ b/azalea-protocol/src/packets/game/c_clear_dialog.rs @@ -0,0 +1,5 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundGamePacket; + +#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] +pub struct ClientboundClearDialog; diff --git a/azalea-protocol/src/packets/game/c_commands.rs b/azalea-protocol/src/packets/game/c_commands.rs index d2fa79a7..7eeff658 100644 --- a/azalea-protocol/src/packets/game/c_commands.rs +++ b/azalea-protocol/src/packets/game/c_commands.rs @@ -18,6 +18,7 @@ pub struct BrigadierNodeStub { pub children: Vec, pub redirect_node: Option, pub node_type: NodeType, + pub is_restricted: bool, } #[derive(Debug, Clone, Eq)] @@ -91,8 +92,8 @@ pub enum BrigadierString { GreedyPhrase = 2, } -// see ArgumentTypeInfo -#[derive(Debug, Clone, AzBuf, PartialEq)] +// see ArgumentTypeInfos.java +#[derive(Debug, Clone, PartialEq, AzBuf)] pub enum BrigadierParser { Bool, Float(BrigadierNumber), @@ -111,6 +112,7 @@ pub enum BrigadierParser { ItemStack, ItemPredicate, Color, + HexColor, FormattedText, Style, Message, @@ -148,6 +150,7 @@ pub enum BrigadierParser { LootTable, LootPredicate, LootModifier, + Dialog, Uuid, } @@ -183,9 +186,9 @@ impl AzaleaWrite for EntityParser { impl AzaleaRead for BrigadierNodeStub { fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result { let flags = FixedBitSet::<8>::azalea_read(buf)?; - if flags.index(5) || flags.index(6) || flags.index(7) { + if flags.index(6) || flags.index(7) { warn!( - "The flags from a Brigadier node are over 31. This is a bug, BrigadierParser probably needs updating.", + "The flags from a Brigadier node are over 63. This is a bug, BrigadierParser probably needs updating.", ); } @@ -193,6 +196,7 @@ impl AzaleaRead for BrigadierNodeStub { let is_executable = flags.index(2); let has_redirect = flags.index(3); let has_suggestions_type = flags.index(4); + let is_restricted = flags.index(5); let children = Vec::::azalea_read_var(buf)?; let redirect_node = if has_redirect { @@ -210,7 +214,7 @@ impl AzaleaRead for BrigadierNodeStub { } else { None }; - let node = BrigadierNodeStub { + Ok(BrigadierNodeStub { is_executable, children, redirect_node, @@ -219,25 +223,28 @@ impl AzaleaRead for BrigadierNodeStub { parser, suggestions_type, }, - }; - return Ok(node); + is_restricted, + }) } // literal node else if node_type == 1 { let name = String::azalea_read(buf)?; - return Ok(BrigadierNodeStub { + Ok(BrigadierNodeStub { is_executable, children, redirect_node, node_type: NodeType::Literal { name }, - }); + is_restricted, + }) + } else { + Ok(BrigadierNodeStub { + is_executable, + children, + redirect_node, + node_type: NodeType::Root, + is_restricted, + }) } - Ok(BrigadierNodeStub { - is_executable, - children, - redirect_node, - node_type: NodeType::Root, - }) } } @@ -336,6 +343,7 @@ mod tests { children: vec![1, 2], redirect_node: None, node_type: NodeType::Root, + is_restricted: false, }; let mut buf = Vec::new(); data.azalea_write(&mut buf).unwrap(); @@ -353,6 +361,7 @@ mod tests { node_type: NodeType::Literal { name: "String".to_string(), }, + is_restricted: false, }; let mut buf = Vec::new(); data.azalea_write(&mut buf).unwrap(); @@ -372,6 +381,7 @@ mod tests { parser: BrigadierParser::Vec3, suggestions_type: Some(ResourceLocation::new("minecraft:test_suggestion")), }, + is_restricted: false, }; let mut buf = Vec::new(); data.azalea_write(&mut buf).unwrap(); diff --git a/azalea-protocol/src/packets/game/c_show_dialog.rs b/azalea-protocol/src/packets/game/c_show_dialog.rs new file mode 100644 index 00000000..d059f843 --- /dev/null +++ b/azalea-protocol/src/packets/game/c_show_dialog.rs @@ -0,0 +1,9 @@ +use azalea_buf::AzBuf; +use azalea_protocol_macros::ClientboundGamePacket; +use azalea_registry::Holder; +use simdnbt::owned::Nbt; + +#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] +pub struct ClientboundShowDialog { + pub dialog: Holder, +} diff --git a/azalea-protocol/src/packets/game/c_waypoint.rs b/azalea-protocol/src/packets/game/c_waypoint.rs new file mode 100644 index 00000000..0724d019 --- /dev/null +++ b/azalea-protocol/src/packets/game/c_waypoint.rs @@ -0,0 +1,90 @@ +use std::io::{self, Cursor, Write}; + +use azalea_buf::{AzBuf, AzaleaRead, AzaleaWrite, BufReadError}; +use azalea_core::{color::RgbColor, position::Vec3i, resource_location::ResourceLocation}; +use azalea_protocol_macros::ClientboundGamePacket; +use uuid::Uuid; + +#[derive(Clone, Debug, AzBuf, ClientboundGamePacket)] +pub struct ClientboundWaypoint { + pub operation: WaypointOperation, + pub waypoint: TrackedWaypoint, +} + +#[derive(AzBuf, Copy, Clone, Debug)] +pub enum WaypointOperation { + Track, + Untrack, + Update, +} + +#[derive(AzBuf, Clone, Debug)] +pub struct TrackedWaypoint { + pub identifier: WaypointIdentifier, + pub icon: WaypointIcon, + pub data: WaypointData, +} + +#[derive(AzBuf, Clone, Debug)] +pub enum WaypointIdentifier { + String(String), + Uuid(Uuid), +} + +#[derive(Clone, Debug)] +pub struct WaypointIcon { + pub style: ResourceLocation, + pub color: Option, +} +impl AzaleaWrite for WaypointIcon { + fn azalea_write(&self, buf: &mut impl Write) -> Result<(), io::Error> { + self.style.azalea_write(buf)?; + let color = self.color.map(|c| CompactRgbColor { + r: c.red(), + g: c.green(), + b: c.blue(), + }); + color.azalea_write(buf)?; + Ok(()) + } +} +impl AzaleaRead for WaypointIcon { + fn azalea_read(buf: &mut Cursor<&[u8]>) -> Result { + let style = ResourceLocation::azalea_read(buf)?; + let color = Option::::azalea_read(buf)?; + let color = color.map(|c| RgbColor::new(c.r, c.g, c.b)); + + Ok(Self { style, color }) + } +} + +// usually RgbColor is encoded as 4 bytes, except here where it's 3 +#[derive(AzBuf)] +struct CompactRgbColor { + r: u8, + g: u8, + b: u8, +} + +#[derive(AzBuf, Clone, Debug)] +pub struct WaypointIconFade { + pub near_dist: i32, + pub far_dist: i32, + pub near_alpha: u8, + pub far_alpha: u8, +} + +#[derive(AzBuf, Clone, Debug)] +pub enum WaypointData { + Empty, + Vec3i(Vec3i), + Chunk { + #[var] + x: i32, + #[var] + z: i32, + }, + Azimuth { + angle: f32, + }, +} diff --git a/azalea-protocol/src/packets/game/mod.rs b/azalea-protocol/src/packets/game/mod.rs index eb73b9de..264892b0 100644 --- a/azalea-protocol/src/packets/game/mod.rs +++ b/azalea-protocol/src/packets/game/mod.rs @@ -5,202 +5,207 @@ use azalea_protocol_macros::declare_state_packets; declare_state_packets!(GamePacket, Clientbound => [ - bundle_delimiter, // 0x00 - add_entity, // 0x01 - animate, // 0x02 - award_stats, // 0x03 - block_changed_ack, // 0x04 - block_destruction, // 0x05 - block_entity_data, // 0x06 - block_event, // 0x07 - block_update, // 0x08 - boss_event, // 0x09 - change_difficulty, // 0x0A - chunk_batch_finished, // 0x0B - chunk_batch_start, // 0x0C - chunks_biomes, // 0x0D - clear_titles, // 0x0E - command_suggestions, // 0x0F - commands, // 0x10 - container_close, // 0x11 - container_set_content, // 0x12 - container_set_data, // 0x13 - container_set_slot, // 0x14 - cookie_request, // 0x15 - cooldown, // 0x16 - custom_chat_completions, // 0x17 - custom_payload, // 0x18 - damage_event, // 0x19 - debug_sample, // 0x1A - delete_chat, // 0x1B - disconnect, // 0x1C - disguised_chat, // 0x1D - entity_event, // 0x1E - entity_position_sync, // 0x1F - explode, // 0x20 - forget_level_chunk, // 0x21 - game_event, // 0x22 - horse_screen_open, // 0x23 - hurt_animation, // 0x24 - initialize_border, // 0x25 - keep_alive, // 0x26 - level_chunk_with_light, // 0x27 - level_event, // 0x28 - level_particles, // 0x29 - light_update, // 0x2A - login, // 0x2B - map_item_data, // 0x2C - merchant_offers, // 0x2D - move_entity_pos, // 0x2E - move_entity_pos_rot, // 0x2F - move_minecart_along_track, // 0x30 - move_entity_rot, // 0x31 - move_vehicle, // 0x32 - open_book, // 0x33 - open_screen, // 0x34 - open_sign_editor, // 0x35 - ping, // 0x36 - pong_response, // 0x37 - place_ghost_recipe, // 0x38 - player_abilities, // 0x39 - player_chat, // 0x3A - player_combat_end, // 0x3B - player_combat_enter, // 0x3C - player_combat_kill, // 0x3D - player_info_remove, // 0x3E - player_info_update, // 0x3F - player_look_at, // 0x40 - player_position, // 0x41 - player_rotation, // 0x42 - recipe_book_add, // 0x43 - recipe_book_remove, // 0x44 - recipe_book_settings, // 0x45 - remove_entities, // 0x46 - remove_mob_effect, // 0x47 - reset_score, // 0x48 - resource_pack_pop, // 0x49 - resource_pack_push, // 0x4A - respawn, // 0x4B - rotate_head, // 0x4C - section_blocks_update, // 0x4D - select_advancements_tab, // 0x4E - server_data, // 0x4F - set_action_bar_text, // 0x50 - set_border_center, // 0x51 - set_border_lerp_size, // 0x52 - set_border_size, // 0x53 - set_border_warning_delay, // 0x54 - set_border_warning_distance, // 0x55 - set_camera, // 0x56 - set_chunk_cache_center, // 0x57 - set_chunk_cache_radius, // 0x58 - set_cursor_item, // 0x59 - set_default_spawn_position, // 0x5A - set_display_objective, // 0x5B - set_entity_data, // 0x5C - set_entity_link, // 0x5D - set_entity_motion, // 0x5E - set_equipment, // 0x5F - set_experience, // 0x60 - set_health, // 0x61 - set_held_slot, // 0x62 - set_objective, // 0x63 - set_passengers, // 0x64 - set_player_inventory, // 0x65 - set_player_team, // 0x66 - set_score, // 0x67 - set_simulation_distance, // 0x68 - set_subtitle_text, // 0x69 - set_time, // 0x6A - set_title_text, // 0x6B - set_titles_animation, // 0x6C - sound_entity, // 0x6D - sound, // 0x6E - start_configuration, // 0x6F - stop_sound, // 0x70 - store_cookie, // 0x71 - system_chat, // 0x72 - tab_list, // 0x73 - tag_query, // 0x74 - take_item_entity, // 0x75 - teleport_entity, // 0x76 - test_instance_block_status, // 0x77 - ticking_state, // 0x78 - ticking_step, // 0x79 - transfer, // 0x7A - update_advancements, // 0x7B - update_attributes, // 0x7C - update_mob_effect, // 0x7D - update_recipes, // 0x7E - update_tags, // 0x7F - projectile_power, // 0x80 - custom_report_details, // 0x81 - server_links, // 0x82 + bundle_delimiter, + add_entity, + animate, + award_stats, + block_changed_ack, + block_destruction, + block_entity_data, + block_event, + block_update, + boss_event, + change_difficulty, + chunk_batch_finished, + chunk_batch_start, + chunks_biomes, + clear_titles, + command_suggestions, + commands, + container_close, + container_set_content, + container_set_data, + container_set_slot, + cookie_request, + cooldown, + custom_chat_completions, + custom_payload, + damage_event, + debug_sample, + delete_chat, + disconnect, + disguised_chat, + entity_event, + entity_position_sync, + explode, + forget_level_chunk, + game_event, + horse_screen_open, + hurt_animation, + initialize_border, + keep_alive, + level_chunk_with_light, + level_event, + level_particles, + light_update, + login, + map_item_data, + merchant_offers, + move_entity_pos, + move_entity_pos_rot, + move_minecart_along_track, + move_entity_rot, + move_vehicle, + open_book, + open_screen, + open_sign_editor, + ping, + pong_response, + place_ghost_recipe, + player_abilities, + player_chat, + player_combat_end, + player_combat_enter, + player_combat_kill, + player_info_remove, + player_info_update, + player_look_at, + player_position, + player_rotation, + recipe_book_add, + recipe_book_remove, + recipe_book_settings, + remove_entities, + remove_mob_effect, + reset_score, + resource_pack_pop, + resource_pack_push, + respawn, + rotate_head, + section_blocks_update, + select_advancements_tab, + server_data, + set_action_bar_text, + set_border_center, + set_border_lerp_size, + set_border_size, + set_border_warning_delay, + set_border_warning_distance, + set_camera, + set_chunk_cache_center, + set_chunk_cache_radius, + set_cursor_item, + set_default_spawn_position, + set_display_objective, + set_entity_data, + set_entity_link, + set_entity_motion, + set_equipment, + set_experience, + set_health, + set_held_slot, + set_objective, + set_passengers, + set_player_inventory, + set_player_team, + set_score, + set_simulation_distance, + set_subtitle_text, + set_time, + set_title_text, + set_titles_animation, + sound_entity, + sound, + start_configuration, + stop_sound, + store_cookie, + system_chat, + tab_list, + tag_query, + take_item_entity, + teleport_entity, + test_instance_block_status, + ticking_state, + ticking_step, + transfer, + update_advancements, + update_attributes, + update_mob_effect, + update_recipes, + update_tags, + projectile_power, + custom_report_details, + server_links, + waypoint, + clear_dialog, + show_dialog, ], Serverbound => [ - accept_teleportation, // 0x00 - block_entity_tag_query, // 0x01 - bundle_item_selected, // 0x02 - change_difficulty, // 0x03 - chat_ack, // 0x04 - chat_command, // 0x05 - chat_command_signed, // 0x06 - chat, // 0x07 - chat_session_update, // 0x08 - chunk_batch_received, // 0x09 - client_command, // 0x0A - client_tick_end, // 0x0B - client_information, // 0x0C - command_suggestion, // 0x0D - configuration_acknowledged, // 0x0E - container_button_click, // 0x0F - container_click, // 0x10 - container_close, // 0x11 - container_slot_state_changed, // 0x12 - cookie_response, // 0x13 - custom_payload, // 0x14 - debug_sample_subscription, // 0x15 - edit_book, // 0x16 - entity_tag_query, // 0x17 - interact, // 0x18 - jigsaw_generate, // 0x19 - keep_alive, // 0x1A - lock_difficulty, // 0x1B - move_player_pos, // 0x1C - move_player_pos_rot, // 0x1D - move_player_rot, // 0x1E - move_player_status_only, // 0x1F - move_vehicle, // 0x20 - paddle_boat, // 0x21 - pick_item_from_block, // 0x22 - pick_item_from_entity, // 0x23 - ping_request, // 0x24 - place_recipe, // 0x25 - player_abilities, // 0x26 - player_action, // 0x27 - player_command, // 0x28 - player_input, // 0x29 - player_loaded, // 0x2A - pong, // 0x2B - recipe_book_change_settings, // 0x2C - recipe_book_seen_recipe, // 0x2D - rename_item, // 0x2E - resource_pack, // 0x2F - seen_advancements, // 0x30 - select_trade, // 0x31 - set_beacon, // 0x32 - set_carried_item, // 0x33 - set_command_block, // 0x34 - set_command_minecart, // 0x35 - set_creative_mode_slot, // 0x36 - set_jigsaw_block, // 0x37 - set_structure_block, // 0x38 - set_test_block, // 0x39 - sign_update, // 0x3A - swing, // 0x3B - teleport_to_entity, // 0x3C - test_instance_block_action, // 0x3D - use_item_on, // 0x3E - use_item, // 0x3F + accept_teleportation, + block_entity_tag_query, + bundle_item_selected, + change_difficulty, + change_game_mode, + chat_ack, + chat_command, + chat_command_signed, + chat, + chat_session_update, + chunk_batch_received, + client_command, + client_tick_end, + client_information, + command_suggestion, + configuration_acknowledged, + container_button_click, + container_click, + container_close, + container_slot_state_changed, + cookie_response, + custom_payload, + debug_sample_subscription, + edit_book, + entity_tag_query, + interact, + jigsaw_generate, + keep_alive, + lock_difficulty, + move_player_pos, + move_player_pos_rot, + move_player_rot, + move_player_status_only, + move_vehicle, + paddle_boat, + pick_item_from_block, + pick_item_from_entity, + ping_request, + place_recipe, + player_abilities, + player_action, + player_command, + player_input, + player_loaded, + pong, + recipe_book_change_settings, + recipe_book_seen_recipe, + rename_item, + resource_pack, + seen_advancements, + select_trade, + set_beacon, + set_carried_item, + set_command_block, + set_command_minecart, + set_creative_mode_slot, + set_jigsaw_block, + set_structure_block, + set_test_block, + sign_update, + swing, + teleport_to_entity, + test_instance_block_action, + use_item_on, + use_item, + custom_click_action, ] ); diff --git a/azalea-protocol/src/packets/game/s_change_game_mode.rs b/azalea-protocol/src/packets/game/s_change_game_mode.rs new file mode 100644 index 00000000..2dfabd2d --- /dev/null +++ b/azalea-protocol/src/packets/game/s_change_game_mode.rs @@ -0,0 +1,8 @@ +use azalea_buf::AzBuf; +use azalea_core::game_type::GameMode; +use azalea_protocol_macros::ServerboundGamePacket; + +#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] +pub struct ServerboundChangeGameMode { + pub mode: GameMode, +} diff --git a/azalea-protocol/src/packets/game/s_custom_click_action.rs b/azalea-protocol/src/packets/game/s_custom_click_action.rs new file mode 100644 index 00000000..7215aaf6 --- /dev/null +++ b/azalea-protocol/src/packets/game/s_custom_click_action.rs @@ -0,0 +1,9 @@ +use azalea_buf::AzBuf; +use azalea_core::resource_location::ResourceLocation; +use azalea_protocol_macros::ServerboundGamePacket; + +#[derive(Clone, Debug, AzBuf, ServerboundGamePacket)] +pub struct ServerboundCustomClickAction { + pub id: ResourceLocation, + pub payload: Option, +} diff --git a/azalea-protocol/src/packets/game/s_player_command.rs b/azalea-protocol/src/packets/game/s_player_command.rs index f620b847..48ce5975 100644 --- a/azalea-protocol/src/packets/game/s_player_command.rs +++ b/azalea-protocol/src/packets/game/s_player_command.rs @@ -13,13 +13,11 @@ pub struct ServerboundPlayerCommand { #[derive(AzBuf, Clone, Copy, Debug)] pub enum Action { - PressShiftKey = 0, - ReleaseShiftKey = 1, - StopSleeping = 2, - StartSprinting = 3, - StopSprinting = 4, - StartRidingJump = 5, - StopRidingJump = 6, - OpenInventory = 7, - StartFallFlying = 8, + StopSleeping, + StartSprinting, + StopSprinting, + StartRidingJump, + StopRidingJump, + OpenInventory, + StartFallFlying, } diff --git a/azalea-protocol/src/packets/handshake/mod.rs b/azalea-protocol/src/packets/handshake/mod.rs index 8f14c8fb..8d23a13c 100644 --- a/azalea-protocol/src/packets/handshake/mod.rs +++ b/azalea-protocol/src/packets/handshake/mod.rs @@ -7,6 +7,6 @@ declare_state_packets!(HandshakePacket, Clientbound => [ ], Serverbound => [ - intention, // 0x00 + intention, ] ); diff --git a/azalea-protocol/src/packets/login/mod.rs b/azalea-protocol/src/packets/login/mod.rs index 39f1565b..2038cdcd 100644 --- a/azalea-protocol/src/packets/login/mod.rs +++ b/azalea-protocol/src/packets/login/mod.rs @@ -5,18 +5,18 @@ use azalea_protocol_macros::declare_state_packets; declare_state_packets!(LoginPacket, Clientbound => [ - login_disconnect, // 0x00 - hello, // 0x01 - login_finished, // 0x02 - login_compression, // 0x03 - custom_query, // 0x04 - cookie_request, // 0x05 + login_disconnect, + hello, + login_finished, + login_compression, + custom_query, + cookie_request, ], Serverbound => [ - hello, // 0x00 - key, // 0x01 - custom_query_answer, // 0x02 - login_acknowledged, // 0x03 - cookie_response, // 0x04 + hello, + key, + custom_query_answer, + login_acknowledged, + cookie_response, ] ); diff --git a/azalea-protocol/src/packets/mod.rs b/azalea-protocol/src/packets/mod.rs index 773ce591..09426b8d 100644 --- a/azalea-protocol/src/packets/mod.rs +++ b/azalea-protocol/src/packets/mod.rs @@ -11,8 +11,8 @@ use azalea_buf::{AzaleaReadVar, AzaleaWrite, AzaleaWriteVar, BufReadError}; use crate::read::ReadPacketError; -pub const PROTOCOL_VERSION: i32 = 770; -pub const VERSION_NAME: &str = "1.21.5"; +pub const PROTOCOL_VERSION: i32 = 771; +pub const VERSION_NAME: &str = "1.21.6"; #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub enum ConnectionProtocol { @@ -101,4 +101,4 @@ impl AzaleaWrite for ClientIntention { fn azalea_write(&self, buf: &mut impl Write) -> io::Result<()> { (*self as i32).azalea_write_var(buf) } -} \ No newline at end of file +} diff --git a/azalea-protocol/src/packets/status/mod.rs b/azalea-protocol/src/packets/status/mod.rs index 57ed9970..de7cc1ae 100644 --- a/azalea-protocol/src/packets/status/mod.rs +++ b/azalea-protocol/src/packets/status/mod.rs @@ -5,11 +5,11 @@ use azalea_protocol_macros::declare_state_packets; declare_state_packets!(StatusPacket, Clientbound => [ - status_response, // 0x00 - pong_response, // 0x01 + status_response, + pong_response, ], Serverbound => [ - status_request, // 0x00 - ping_request, // 0x01 + status_request, + ping_request, ] ); diff --git a/azalea-registry/src/data.rs b/azalea-registry/src/data.rs index 011835ed..a9f797b6 100644 --- a/azalea-registry/src/data.rs +++ b/azalea-registry/src/data.rs @@ -46,6 +46,9 @@ macro_rules! data_registry { data_registry! {Enchantment, "enchantment"} data_registry! {DimensionType, "dimension_type"} data_registry! {DamageKind, "damage_kind"} +data_registry! {Dialog, "dialog"} + +// entity variants data_registry! {WolfSoundVariant, "wolf_sound_variant"} data_registry! {CowVariant, "cow_variant"} data_registry! {ChickenVariant, "chicken_variant"} diff --git a/azalea-registry/src/lib.rs b/azalea-registry/src/lib.rs index 69ac72b0..8607426d 100644 --- a/azalea-registry/src/lib.rs +++ b/azalea-registry/src/lib.rs @@ -249,6 +249,7 @@ enum Attribute { BlockBreakSpeed => "minecraft:block_break_speed", BlockInteractionRange => "minecraft:block_interaction_range", BurningTime => "minecraft:burning_time", + CameraDistance => "minecraft:camera_distance", ExplosionKnockbackResistance => "minecraft:explosion_knockback_resistance", EntityInteractionRange => "minecraft:entity_interaction_range", FallDamageMultiplier => "minecraft:fall_damage_multiplier", @@ -273,6 +274,8 @@ enum Attribute { SweepingDamageRatio => "minecraft:sweeping_damage_ratio", TemptRange => "minecraft:tempt_range", WaterMovementEfficiency => "minecraft:water_movement_efficiency", + WaypointTransmitRange => "minecraft:waypoint_transmit_range", + WaypointReceiveRange => "minecraft:waypoint_receive_range", } } @@ -998,6 +1001,7 @@ enum Block { DriedKelpBlock => "minecraft:dried_kelp_block", TurtleEgg => "minecraft:turtle_egg", SnifferEgg => "minecraft:sniffer_egg", + DriedGhast => "minecraft:dried_ghast", DeadTubeCoralBlock => "minecraft:dead_tube_coral_block", DeadBrainCoralBlock => "minecraft:dead_brain_coral_block", DeadBubbleCoralBlock => "minecraft:dead_bubble_coral_block", @@ -1499,6 +1503,7 @@ enum CommandArgumentKind { ItemStack => "minecraft:item_stack", ItemPredicate => "minecraft:item_predicate", Color => "minecraft:color", + HexColor => "minecraft:hex_color", Component => "minecraft:component", Style => "minecraft:style", Message => "minecraft:message", @@ -1536,6 +1541,7 @@ enum CommandArgumentKind { LootTable => "minecraft:loot_table", LootPredicate => "minecraft:loot_predicate", LootModifier => "minecraft:loot_modifier", + Dialog => "minecraft:dialog", Uuid => "minecraft:uuid", } } @@ -1559,6 +1565,7 @@ enum CustomStat { MinecartOneCm => "minecraft:minecart_one_cm", BoatOneCm => "minecraft:boat_one_cm", PigOneCm => "minecraft:pig_one_cm", + HappyGhastOneCm => "minecraft:happy_ghast_one_cm", HorseOneCm => "minecraft:horse_one_cm", AviateOneCm => "minecraft:aviate_one_cm", SwimOneCm => "minecraft:swim_one_cm", @@ -1679,6 +1686,7 @@ enum EntityKind { Frog => "minecraft:frog", FurnaceMinecart => "minecraft:furnace_minecart", Ghast => "minecraft:ghast", + HappyGhast => "minecraft:happy_ghast", Giant => "minecraft:giant", GlowItemFrame => "minecraft:glow_item_frame", GlowSquid => "minecraft:glow_squid", @@ -2513,6 +2521,7 @@ enum Item { BlackConcretePowder => "minecraft:black_concrete_powder", TurtleEgg => "minecraft:turtle_egg", SnifferEgg => "minecraft:sniffer_egg", + DriedGhast => "minecraft:dried_ghast", DeadTubeCoralBlock => "minecraft:dead_tube_coral_block", DeadBrainCoralBlock => "minecraft:dead_brain_coral_block", DeadBubbleCoralBlock => "minecraft:dead_bubble_coral_block", @@ -2695,6 +2704,22 @@ enum Item { Rail => "minecraft:rail", ActivatorRail => "minecraft:activator_rail", Saddle => "minecraft:saddle", + WhiteHarness => "minecraft:white_harness", + OrangeHarness => "minecraft:orange_harness", + MagentaHarness => "minecraft:magenta_harness", + LightBlueHarness => "minecraft:light_blue_harness", + YellowHarness => "minecraft:yellow_harness", + LimeHarness => "minecraft:lime_harness", + PinkHarness => "minecraft:pink_harness", + GrayHarness => "minecraft:gray_harness", + LightGrayHarness => "minecraft:light_gray_harness", + CyanHarness => "minecraft:cyan_harness", + PurpleHarness => "minecraft:purple_harness", + BlueHarness => "minecraft:blue_harness", + BrownHarness => "minecraft:brown_harness", + GreenHarness => "minecraft:green_harness", + RedHarness => "minecraft:red_harness", + BlackHarness => "minecraft:black_harness", Minecart => "minecraft:minecart", ChestMinecart => "minecraft:chest_minecart", FurnaceMinecart => "minecraft:furnace_minecart", @@ -2988,6 +3013,7 @@ enum Item { FoxSpawnEgg => "minecraft:fox_spawn_egg", FrogSpawnEgg => "minecraft:frog_spawn_egg", GhastSpawnEgg => "minecraft:ghast_spawn_egg", + HappyGhastSpawnEgg => "minecraft:happy_ghast_spawn_egg", GlowSquidSpawnEgg => "minecraft:glow_squid_spawn_egg", GoatSpawnEgg => "minecraft:goat_spawn_egg", GuardianSpawnEgg => "minecraft:guardian_spawn_egg", @@ -3144,6 +3170,7 @@ enum Item { MusicDisc5 => "minecraft:music_disc_5", MusicDiscPigstep => "minecraft:music_disc_pigstep", MusicDiscPrecipice => "minecraft:music_disc_precipice", + MusicDiscTears => "minecraft:music_disc_tears", DiscFragment5 => "minecraft:disc_fragment_5", Trident => "minecraft:trident", NautilusShell => "minecraft:nautilus_shell", @@ -3696,6 +3723,7 @@ enum PointOfInterestKind { BeeNest => "minecraft:bee_nest", NetherPortal => "minecraft:nether_portal", Lodestone => "minecraft:lodestone", + TestInstance => "minecraft:test_instance", LightningRod => "minecraft:lightning_rod", } } @@ -3842,12 +3870,14 @@ enum SensorKind { PiglinBruteSpecificSensor => "minecraft:piglin_brute_specific_sensor", HoglinSpecificSensor => "minecraft:hoglin_specific_sensor", NearestAdult => "minecraft:nearest_adult", + NearestAdultAnyType => "minecraft:nearest_adult_any_type", AxolotlAttackables => "minecraft:axolotl_attackables", AxolotlTemptations => "minecraft:axolotl_temptations", GoatTemptations => "minecraft:goat_temptations", FrogTemptations => "minecraft:frog_temptations", CamelTemptations => "minecraft:camel_temptations", ArmadilloTemptations => "minecraft:armadillo_temptations", + HappyGhastTemptations => "minecraft:happy_ghast_temptations", FrogAttackables => "minecraft:frog_attackables", IsInWater => "minecraft:is_in_water", WardenEntitySensor => "minecraft:warden_entity_sensor", @@ -4314,11 +4344,20 @@ enum SoundEvent { EntityDonkeyEat => "minecraft:entity.donkey.eat", EntityDonkeyHurt => "minecraft:entity.donkey.hurt", EntityDonkeyJump => "minecraft:entity.donkey.jump", + BlockDriedGhastBreak => "minecraft:block.dried_ghast.break", + BlockDriedGhastStep => "minecraft:block.dried_ghast.step", + BlockDriedGhastFall => "minecraft:block.dried_ghast.fall", + BlockDriedGhastAmbient => "minecraft:block.dried_ghast.ambient", + BlockDriedGhastAmbientWater => "minecraft:block.dried_ghast.ambient_water", + BlockDriedGhastPlace => "minecraft:block.dried_ghast.place", + BlockDriedGhastPlaceInWater => "minecraft:block.dried_ghast.place_in_water", + BlockDriedGhastTransition => "minecraft:block.dried_ghast.transition", BlockDripstoneBlockBreak => "minecraft:block.dripstone_block.break", BlockDripstoneBlockStep => "minecraft:block.dripstone_block.step", BlockDripstoneBlockPlace => "minecraft:block.dripstone_block.place", BlockDripstoneBlockHit => "minecraft:block.dripstone_block.hit", BlockDripstoneBlockFall => "minecraft:block.dripstone_block.fall", + BlockDryGrassAmbient => "minecraft:block.dry_grass.ambient", BlockPointedDripstoneBreak => "minecraft:block.pointed_dripstone.break", BlockPointedDripstoneStep => "minecraft:block.pointed_dripstone.step", BlockPointedDripstonePlace => "minecraft:block.pointed_dripstone.place", @@ -4480,6 +4519,10 @@ enum SoundEvent { EntityGhastScream => "minecraft:entity.ghast.scream", EntityGhastShoot => "minecraft:entity.ghast.shoot", EntityGhastWarn => "minecraft:entity.ghast.warn", + EntityGhastlingAmbient => "minecraft:entity.ghastling.ambient", + EntityGhastlingDeath => "minecraft:entity.ghastling.death", + EntityGhastlingHurt => "minecraft:entity.ghastling.hurt", + EntityGhastlingSpawn => "minecraft:entity.ghastling.spawn", BlockGildedBlackstoneBreak => "minecraft:block.gilded_blackstone.break", BlockGildedBlackstoneFall => "minecraft:block.gilded_blackstone.fall", BlockGildedBlackstoneHit => "minecraft:block.gilded_blackstone.hit", @@ -4548,6 +4591,10 @@ enum SoundEvent { BlockHangingSignFall => "minecraft:block.hanging_sign.fall", BlockHangingSignHit => "minecraft:block.hanging_sign.hit", BlockHangingSignPlace => "minecraft:block.hanging_sign.place", + EntityHappyGhastAmbient => "minecraft:entity.happy_ghast.ambient", + EntityHappyGhastDeath => "minecraft:entity.happy_ghast.death", + EntityHappyGhastHurt => "minecraft:entity.happy_ghast.hurt", + EntityHappyGhastRiding => "minecraft:entity.happy_ghast.riding", BlockHeavyCoreBreak => "minecraft:block.heavy_core.break", BlockHeavyCoreFall => "minecraft:block.heavy_core.fall", BlockHeavyCoreHit => "minecraft:block.heavy_core.hit", @@ -4579,6 +4626,10 @@ enum SoundEvent { BlockTrialSpawnerOpenShutter => "minecraft:block.trial_spawner.open_shutter", BlockTrialSpawnerCloseShutter => "minecraft:block.trial_spawner.close_shutter", BlockTrialSpawnerEjectItem => "minecraft:block.trial_spawner.eject_item", + EntityHappyGhastEquip => "minecraft:entity.happy_ghast.equip", + EntityHappyGhastUnequip => "minecraft:entity.happy_ghast.unequip", + EntityHappyGhastHarnessGogglesUp => "minecraft:entity.happy_ghast.harness_goggles_up", + EntityHappyGhastHarnessGogglesDown => "minecraft:entity.happy_ghast.harness_goggles_down", ItemHoeTill => "minecraft:item.hoe.till", EntityHoglinAmbient => "minecraft:entity.hoglin.ambient", EntityHoglinAngry => "minecraft:entity.hoglin.angry", @@ -4607,6 +4658,7 @@ enum SoundEvent { EntityHorseAmbient => "minecraft:entity.horse.ambient", EntityHorseAngry => "minecraft:entity.horse.angry", EntityHorseArmor => "minecraft:entity.horse.armor", + ItemHorseArmorUnequip => "minecraft:item.horse_armor.unequip", EntityHorseBreathe => "minecraft:entity.horse.breathe", EntityHorseDeath => "minecraft:entity.horse.death", EntityHorseEat => "minecraft:entity.horse.eat", @@ -4678,8 +4730,9 @@ enum SoundEvent { BlockLeafLitterPlace => "minecraft:block.leaf_litter.place", BlockLeafLitterHit => "minecraft:block.leaf_litter.hit", BlockLeafLitterFall => "minecraft:block.leaf_litter.fall", - EntityLeashKnotBreak => "minecraft:entity.leash_knot.break", - EntityLeashKnotPlace => "minecraft:entity.leash_knot.place", + ItemLeadUntied => "minecraft:item.lead.untied", + ItemLeadTied => "minecraft:item.lead.tied", + ItemLeadBreak => "minecraft:item.lead.break", BlockLeverClick => "minecraft:block.lever.click", EntityLightningBoltImpact => "minecraft:entity.lightning_bolt.impact", EntityLightningBoltThunder => "minecraft:entity.lightning_bolt.thunder", @@ -4693,6 +4746,7 @@ enum SoundEvent { EntityLlamaSpit => "minecraft:entity.llama.spit", EntityLlamaStep => "minecraft:entity.llama.step", EntityLlamaSwag => "minecraft:entity.llama.swag", + ItemLlamaCarpetUnequip => "minecraft:item.llama_carpet.unequip", EntityMagmaCubeDeathSmall => "minecraft:entity.magma_cube.death_small", BlockLodestoneBreak => "minecraft:block.lodestone.break", BlockLodestoneStep => "minecraft:block.lodestone.step", @@ -4789,6 +4843,7 @@ enum SoundEvent { MusicDiscCreator => "minecraft:music_disc.creator", MusicDiscCreatorMusicBox => "minecraft:music_disc.creator_music_box", MusicDiscPrecipice => "minecraft:music_disc.precipice", + MusicDiscTears => "minecraft:music_disc.tears", MusicDragon => "minecraft:music.dragon", MusicEnd => "minecraft:music.end", MusicGame => "minecraft:music.game", @@ -5041,7 +5096,6 @@ enum SoundEvent { BlockPowderSnowHit => "minecraft:block.powder_snow.hit", BlockPowderSnowPlace => "minecraft:block.powder_snow.place", BlockPowderSnowStep => "minecraft:block.powder_snow.step", - EntityPufferFishAmbient => "minecraft:entity.puffer_fish.ambient", EntityPufferFishBlowOut => "minecraft:entity.puffer_fish.blow_out", EntityPufferFishBlowUp => "minecraft:entity.puffer_fish.blow_up", EntityPufferFishDeath => "minecraft:entity.puffer_fish.death", @@ -5093,7 +5147,6 @@ enum SoundEvent { BlockSandPlace => "minecraft:block.sand.place", BlockSandStep => "minecraft:block.sand.step", BlockSandIdle => "minecraft:block.sand.idle", - BlockSandWind => "minecraft:block.sand.wind", BlockScaffoldingBreak => "minecraft:block.scaffolding.break", BlockScaffoldingFall => "minecraft:block.scaffolding.fall", BlockScaffoldingHit => "minecraft:block.scaffolding.hit", @@ -5135,6 +5188,7 @@ enum SoundEvent { EntitySheepHurt => "minecraft:entity.sheep.hurt", EntitySheepShear => "minecraft:entity.sheep.shear", EntitySheepStep => "minecraft:entity.sheep.step", + ItemShearsSnip => "minecraft:item.shears.snip", ItemShieldBlock => "minecraft:item.shield.block", ItemShieldBreak => "minecraft:item.shield.break", BlockShroomlightBreak => "minecraft:block.shroomlight.break", @@ -5564,6 +5618,7 @@ enum SoundEvent { EventMobEffectBadOmen => "minecraft:event.mob_effect.bad_omen", EventMobEffectTrialOmen => "minecraft:event.mob_effect.trial_omen", EventMobEffectRaidOmen => "minecraft:event.mob_effect.raid_omen", + ItemSaddleUnequip => "minecraft:item.saddle.unequip", } } @@ -6106,6 +6161,7 @@ enum BlockKind { Door => "minecraft:door", DoublePlant => "minecraft:double_plant", DragonEgg => "minecraft:dragon_egg", + DriedGhast => "minecraft:dried_ghast", DropExperience => "minecraft:drop_experience", Dropper => "minecraft:dropper", EnchantmentTable => "minecraft:enchantment_table", @@ -6244,7 +6300,6 @@ enum BlockKind { TallGrass => "minecraft:tall_grass", TallSeagrass => "minecraft:tall_seagrass", Target => "minecraft:target", - Terracotta => "minecraft:terracotta", Test => "minecraft:test", TestInstance => "minecraft:test_instance", TintedGlass => "minecraft:tinted_glass", @@ -6346,6 +6401,7 @@ enum TriggerKind { ThrownItemPickedUpByEntity => "minecraft:thrown_item_picked_up_by_entity", ThrownItemPickedUpByPlayer => "minecraft:thrown_item_picked_up_by_player", PlayerInteractedWithEntity => "minecraft:player_interacted_with_entity", + PlayerShearedEquipment => "minecraft:player_sheared_equipment", StartedRiding => "minecraft:started_riding", LightningStrike => "minecraft:lightning_strike", UsingItem => "minecraft:using_item", @@ -6762,3 +6818,43 @@ enum SpawnConditionKind { Biome => "minecraft:biome", } } + +registry! { +enum DialogBodyKind { + Item => "minecraft:item", + PlainMessage => "minecraft:plain_message", +} +} + +registry! { +enum DialogKind { + Notice => "minecraft:notice", + ServerLinks => "minecraft:server_links", + DialogList => "minecraft:dialog_list", + MultiAction => "minecraft:multi_action", + Confirmation => "minecraft:confirmation", +} +} + +registry! { +enum InputControlKind { + Boolean => "minecraft:boolean", + NumberRange => "minecraft:number_range", + SingleOption => "minecraft:single_option", + Text => "minecraft:text", +} +} + +registry! { +enum DialogActionKind { + OpenUrl => "minecraft:open_url", + RunCommand => "minecraft:run_command", + SuggestCommand => "minecraft:suggest_command", + ShowDialog => "minecraft:show_dialog", + ChangePage => "minecraft:change_page", + CopyToClipboard => "minecraft:copy_to_clipboard", + Custom => "minecraft:custom", + DynamicRunCommand => "minecraft:dynamic/run_command", + DynamicCustom => "minecraft:dynamic/custom", +} +} diff --git a/azalea-registry/src/tags/blocks.rs b/azalea-registry/src/tags/blocks.rs index 1a9d4a6d..efc138a2 100644 --- a/azalea-registry/src/tags/blocks.rs +++ b/azalea-registry/src/tags/blocks.rs @@ -148,7 +148,6 @@ pub static AZALEA_GROWS_ON: LazyLock> = LazyLock::new(|| { Block::Sand, Block::RedSand, Block::SuspiciousSand, - Block::SuspiciousSand, Block::Terracotta, Block::WhiteTerracotta, Block::OrangeTerracotta, @@ -233,7 +232,6 @@ pub static BAMBOO_PLANTABLE_ON: LazyLock> = LazyLock::new(|| { Block::Sand, Block::RedSand, Block::SuspiciousSand, - Block::SuspiciousSand, Block::Dirt, Block::GrassBlock, Block::Podzol, @@ -432,7 +430,6 @@ pub static CAMEL_SAND_STEP_SOUND_BLOCKS: LazyLock> = LazyLock::ne Block::Sand, Block::RedSand, Block::SuspiciousSand, - Block::SuspiciousSand, Block::WhiteConcretePowder, Block::OrangeConcretePowder, Block::MagentaConcretePowder, @@ -451,14 +448,8 @@ pub static CAMEL_SAND_STEP_SOUND_BLOCKS: LazyLock> = LazyLock::ne Block::BlackConcretePowder, ]) }); -pub static CAMELS_SPAWNABLE_ON: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Block::Sand, - Block::RedSand, - Block::SuspiciousSand, - Block::SuspiciousSand, - ]) -}); +pub static CAMELS_SPAWNABLE_ON: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Block::Sand, Block::RedSand, Block::SuspiciousSand])); pub static CAMPFIRES: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Block::Campfire, Block::SoulCampfire])); pub static CANDLE_CAKES: LazyLock> = LazyLock::new(|| { @@ -848,7 +839,6 @@ pub static DRY_VEGETATION_MAY_PLACE_ON: LazyLock> = LazyLock::new Block::Sand, Block::RedSand, Block::SuspiciousSand, - Block::SuspiciousSand, Block::Terracotta, Block::WhiteTerracotta, Block::OrangeTerracotta, @@ -1185,6 +1175,16 @@ pub static GUARDED_BY_PIGLINS: LazyLock> = LazyLock::new(|| { Block::DeepslateGoldOre, ]) }); +pub static HAPPY_GHAST_AVOIDS: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::SweetBerryBush, + Block::Cactus, + Block::WitherRose, + Block::MagmaBlock, + Block::Fire, + Block::PointedDripstone, + ]) +}); pub static HOGLIN_REPELLENTS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::WarpedFungus, @@ -2768,7 +2768,6 @@ pub static OVERWORLD_CARVER_REPLACEABLES: LazyLock> = LazyLock::n Block::Sand, Block::RedSand, Block::SuspiciousSand, - Block::SuspiciousSand, Block::Terracotta, Block::WhiteTerracotta, Block::OrangeTerracotta, @@ -2902,29 +2901,6 @@ pub static PLANKS: LazyLock> = LazyLock::new(|| { Block::CherryPlanks, ]) }); -pub static PLAYS_AMBIENT_DESERT_BLOCK_SOUNDS: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Block::Sand, - Block::RedSand, - Block::Terracotta, - Block::WhiteTerracotta, - Block::OrangeTerracotta, - Block::MagentaTerracotta, - Block::LightBlueTerracotta, - Block::YellowTerracotta, - Block::LimeTerracotta, - Block::PinkTerracotta, - Block::GrayTerracotta, - Block::LightGrayTerracotta, - Block::CyanTerracotta, - Block::PurpleTerracotta, - Block::BlueTerracotta, - Block::BrownTerracotta, - Block::GreenTerracotta, - Block::RedTerracotta, - Block::BlackTerracotta, - ]) -}); pub static POLAR_BEARS_SPAWNABLE_ON_ALTERNATE: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Block::Ice])); pub static PORTALS: LazyLock> = LazyLock::new(|| { @@ -3129,14 +3105,8 @@ pub static REPLACEABLE_BY_TREES: LazyLock> = LazyLock::new(|| { Block::ClosedEyeblossom, ]) }); -pub static SAND: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Block::Sand, - Block::RedSand, - Block::SuspiciousSand, - Block::SuspiciousSand, - ]) -}); +pub static SAND: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Block::Sand, Block::RedSand, Block::SuspiciousSand])); pub static SAPLINGS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::OakSapling, @@ -3637,6 +3607,34 @@ pub static TRAPDOORS: LazyLock> = LazyLock::new(|| { Block::CherryTrapdoor, ]) }); +pub static TRIGGERS_AMBIENT_DESERT_DRY_VEGETATION_BLOCK_SOUNDS: LazyLock> = + LazyLock::new(|| { + HashSet::from_iter(vec![ + Block::Sand, + Block::RedSand, + Block::Terracotta, + Block::WhiteTerracotta, + Block::OrangeTerracotta, + Block::MagentaTerracotta, + Block::LightBlueTerracotta, + Block::YellowTerracotta, + Block::LimeTerracotta, + Block::PinkTerracotta, + Block::GrayTerracotta, + Block::LightGrayTerracotta, + Block::CyanTerracotta, + Block::PurpleTerracotta, + Block::BlueTerracotta, + Block::BrownTerracotta, + Block::GreenTerracotta, + Block::RedTerracotta, + Block::BlackTerracotta, + ]) + }); +pub static TRIGGERS_AMBIENT_DESERT_SAND_BLOCK_SOUNDS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Block::Sand, Block::RedSand])); +pub static TRIGGERS_AMBIENT_DRIED_GHAST_BLOCK_SOUNDS: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Block::SoulSand, Block::SoulSoil])); pub static UNDERWATER_BONEMEALS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Block::Seagrass, diff --git a/azalea-registry/src/tags/items.rs b/azalea-registry/src/tags/items.rs index 1fadab14..5abb7981 100644 --- a/azalea-registry/src/tags/items.rs +++ b/azalea-registry/src/tags/items.rs @@ -1079,6 +1079,49 @@ pub static HANGING_SIGNS: LazyLock> = LazyLock::new(|| { Item::BambooHangingSign, ]) }); +pub static HAPPY_GHAST_FOOD: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Snowball])); +pub static HAPPY_GHAST_TEMPT_ITEMS: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Item::Snowball, + Item::WhiteHarness, + Item::OrangeHarness, + Item::MagentaHarness, + Item::LightBlueHarness, + Item::YellowHarness, + Item::LimeHarness, + Item::PinkHarness, + Item::GrayHarness, + Item::LightGrayHarness, + Item::CyanHarness, + Item::PurpleHarness, + Item::BlueHarness, + Item::BrownHarness, + Item::GreenHarness, + Item::RedHarness, + Item::BlackHarness, + ]) +}); +pub static HARNESSES: LazyLock> = LazyLock::new(|| { + HashSet::from_iter(vec![ + Item::WhiteHarness, + Item::OrangeHarness, + Item::MagentaHarness, + Item::LightBlueHarness, + Item::YellowHarness, + Item::LimeHarness, + Item::PinkHarness, + Item::GrayHarness, + Item::LightGrayHarness, + Item::CyanHarness, + Item::PurpleHarness, + Item::BlueHarness, + Item::BrownHarness, + Item::GreenHarness, + Item::RedHarness, + Item::BlackHarness, + ]) +}); pub static HEAD_ARMOR: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::LeatherHelmet, @@ -1108,6 +1151,7 @@ pub static HORSE_FOOD: LazyLock> = LazyLock::new(|| { Item::Sugar, Item::HayBlock, Item::Apple, + Item::Carrot, Item::GoldenCarrot, Item::GoldenApple, Item::EnchantedGoldenApple, @@ -1463,14 +1507,8 @@ pub static REPAIRS_TURTLE_HELMET: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::TurtleScute])); pub static REPAIRS_WOLF_ARMOR: LazyLock> = LazyLock::new(|| HashSet::from_iter(vec![Item::ArmadilloScute])); -pub static SAND: LazyLock> = LazyLock::new(|| { - HashSet::from_iter(vec![ - Item::Sand, - Item::RedSand, - Item::SuspiciousSand, - Item::SuspiciousSand, - ]) -}); +pub static SAND: LazyLock> = + LazyLock::new(|| HashSet::from_iter(vec![Item::Sand, Item::RedSand, Item::SuspiciousSand])); pub static SAPLINGS: LazyLock> = LazyLock::new(|| { HashSet::from_iter(vec![ Item::OakSapling, diff --git a/azalea/benches/pathfinder.rs b/azalea/benches/pathfinder.rs index 48736cef..aff6c00c 100644 --- a/azalea/benches/pathfinder.rs +++ b/azalea/benches/pathfinder.rs @@ -47,7 +47,7 @@ fn generate_bedrock_world( azalea_registry::Block::Bedrock.into(), chunks.min_y, ); - if rng.gen_bool(0.5) { + if rng.random_bool(0.5) { chunk.set_block_state( &ChunkBlockPos::new(x, 2, z), azalea_registry::Block::Bedrock.into(), diff --git a/azalea/examples/testbot/killaura.rs b/azalea/examples/testbot/killaura.rs index 586d90b2..093495ea 100644 --- a/azalea/examples/testbot/killaura.rs +++ b/azalea/examples/testbot/killaura.rs @@ -2,7 +2,7 @@ use azalea::{ ecs::prelude::*, entity::{Dead, LocalEntity, Position, metadata::AbstractMonster}, prelude::*, - world::{InstanceName, MinecraftEntityId}, + world::InstanceName, }; use crate::State; @@ -21,12 +21,12 @@ pub fn tick(bot: Client, state: State) -> anyhow::Result<()> { { let mut ecs = bot.ecs.lock(); let mut query = ecs - .query_filtered::<(&MinecraftEntityId, &Position, &InstanceName), ( + .query_filtered::<(Entity, &Position, &InstanceName), ( With, Without, Without, )>(); - for (&entity_id, position, instance_name) in query.iter(&ecs) { + for (entity_id, position, instance_name) in query.iter(&ecs) { if instance_name != &bot_instance_name { continue; } diff --git a/azalea/src/pathfinder/tests.rs b/azalea/src/pathfinder/tests.rs index 782899e8..8458a982 100644 --- a/azalea/src/pathfinder/tests.rs +++ b/azalea/src/pathfinder/tests.rs @@ -1,4 +1,3 @@ - use std::{ collections::HashSet, sync::Arc, diff --git a/codegen/lib/code/packet.py b/codegen/lib/code/packet.py index 98f51ae9..fe0f9f9f 100644 --- a/codegen/lib/code/packet.py +++ b/codegen/lib/code/packet.py @@ -1,4 +1,4 @@ -from lib.utils import padded_hex, to_snake_case, to_camel_case, get_dir_location +from lib.utils import 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 @@ -75,14 +75,14 @@ def set_packets(packets_report): code.append(f"declare_state_packets!({to_camel_case(state)}Packet,") code.append(" Clientbound => [") for packet_id, packet_name in enumerate(clientbound_packets): - code.append(f" {packet_name}, // {padded_hex(packet_id)}") + code.append(f" {packet_name},") expected_packet_module_names.add( get_packet_module_name(packet_name, "clientbound") ) code.append(" ],") code.append(" Serverbound => [") for packet_id, packet_name in enumerate(serverbound_packets): - code.append(f" {packet_name}, // {padded_hex(packet_id)}") + code.append(f" {packet_name},") expected_packet_module_names.add( get_packet_module_name(packet_name, "serverbound") ) diff --git a/codegen/lib/download.py b/codegen/lib/download.py index 238336e2..a557b523 100644 --- a/codegen/lib/download.py +++ b/codegen/lib/download.py @@ -135,25 +135,37 @@ def get_mappings_for_version(version_id: str): return Mappings.parse(mappings_text) -def get_yarn_versions(): +def get_fabric_data(version_id: str): # https://meta.fabricmc.net/v2/versions/yarn - if not os.path.exists(get_dir_location("__cache__/yarn_versions.json")): - print("\033[92mDownloading yarn versions...\033[m") - yarn_versions_data = requests.get( - "https://meta.fabricmc.net/v2/versions/yarn" - ).json() - with open(get_dir_location("__cache__/yarn_versions.json"), "w") as f: + 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}" + yarn_versions_data = requests.get(url).json() + with open(path, "w") as f: json.dump(yarn_versions_data, f) else: - with open(get_dir_location("__cache__/yarn_versions.json"), "r") as f: + with open(path, "r") as f: yarn_versions_data = json.load(f) return yarn_versions_data -def get_yarn_data(version_id: str): - for version in get_yarn_versions(): - if version["gameVersion"] == version_id: - return version +def get_latest_fabric_api_version(): + path = get_dir_location("__cache__/fabric-api-maven-metadata.xml") + + if not os.path.exists(path): + print("\033[92mDownloading Fabric API metadata...\033[m") + url = "https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api/maven-metadata.xml" + maven_metadata_xml = requests.get(url).text + with open(path, "w") as f: + json.dump(maven_metadata_xml, f) + else: + with open(path, "r") as f: + maven_metadata_xml = json.load(f) + + tree = ET.ElementTree(ET.fromstring(maven_metadata_xml)) + return tree.find(".//latest").text def get_fabric_api_versions(): @@ -210,6 +222,7 @@ def clear_version_cache(): "yarn_versions.json", "fabric_api_versions.json", "fabric_loader_versions.json", + "fabric-api-maven-metadata.xml", ] for file in files: if os.path.exists(get_dir_location(f"__cache__/{file}")): diff --git a/codegen/lib/extract.py b/codegen/lib/extract.py index 97f37ccf..57ece9f2 100644 --- a/codegen/lib/extract.py +++ b/codegen/lib/extract.py @@ -1,11 +1,14 @@ # Extracting data from the Minecraft jars +import shutil from lib.download import ( + get_latest_fabric_api_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 zipfile import ZipFile @@ -131,13 +134,51 @@ def get_pumpkin_data(version_id: str, category: str): return json.load(f) pumpkin_dir = get_pumpkin_extractor() - os.makedirs(f"{pumpkin_dir}/run", exist_ok=True) - with open(f"{pumpkin_dir}/run/eula.txt", "w") as f: + + pumpkin_run_directory = f"{pumpkin_dir}/run" + + if os.path.exists(pumpkin_run_directory): + shutil.rmtree(pumpkin_run_directory) + os.makedirs(pumpkin_run_directory, exist_ok=True) + with open(f"{pumpkin_run_directory}/eula.txt", "w") as f: f.write("eula=true") + with open(f"{pumpkin_run_directory}/server.properties", "w") as f: + f.write("server-port=0") + + fabric_data = get_fabric_data(version_id)[0] + fabric_api_version = get_latest_fabric_api_version() + + gradle_properties = f"""# Done to increase the memory available to gradle. +org.gradle.jvmargs=-Xmx1G +org.gradle.parallel=true +# Fabric Properties +# check these on https://modmuss50.me/fabric.html +minecraft_version={version_id} +yarn_mappings={fabric_data["mappings"]["version"]} +loader_version={fabric_data["loader"]["version"]} +kotlin_loader_version=1.13.2+kotlin.2.1.20 +# Mod Properties +mod_version=1.0-SNAPSHOT +maven_group=de.snowii +archives_base_name=extractor +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(fabric_mod_json_path, "w") as f: + fabric_mod_json = fabric_mod_json.replace( + '"minecraft": "${minecraft_version}"', '"minecraft": "*"' + ) + f.write(fabric_mod_json) # run ./gradlew runServer until it logs "(pumpkin_extractor) Done" p = subprocess.Popen( - f"cd {pumpkin_dir} && ./gradlew runServer", + f"cd {pumpkin_dir} && ./gradlew clean && ./gradlew runServer", stderr=subprocess.PIPE, stdout=subprocess.PIPE, shell=True, @@ -149,7 +190,7 @@ def get_pumpkin_data(version_id: str, category: str): if "[Server thread/INFO] (pumpkin_extractor) Done" in data: print("Pumpkin extractor done") break - if data == b"": + if data == "": break p.terminate() diff --git a/codegen/migrate.py b/codegen/migrate.py index bfdf68ec..56874273 100644 --- a/codegen/migrate.py +++ b/codegen/migrate.py @@ -57,9 +57,10 @@ print('Generating registries...') import genregistries genregistries.generate(new_version_id) -print('Generating entity metadata...') +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_dimensions(burger_entities_data) print('Generating item components...') lib.code.item_components.generate(new_version_id)